@everfur/sdk 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/CHANGELOG.md +251 -4
  2. package/README.md +9 -3
  3. package/dist/{Chat-DwAC2vhB.d.ts → Chat-BOX-03ho.d.ts} +17 -3
  4. package/dist/{Chat-DPUD6dnc.d.cts → Chat-TA-aTcVF.d.cts} +17 -3
  5. package/dist/{DepthViews-DP0R-DhB.d.cts → DepthViews-CgjX2AJ5.d.ts} +1 -1
  6. package/dist/{DepthViews-DbFhR4Du.d.cts → DepthViews-Cviea-ri.d.cts} +1 -1
  7. package/dist/{DepthViews-DNEM96Se.d.ts → DepthViews-D2dRqWRq.d.ts} +1 -1
  8. package/dist/{DepthViews-D_3hl4xk.d.ts → DepthViews-DSFyaSeL.d.cts} +1 -1
  9. package/dist/{ErrorPolicyPort-CwbfmxzJ.d.ts → ErrorPolicyPort-D22LUVrK.d.ts} +1 -1
  10. package/dist/{ErrorPolicyPort-CNf4uQZP.d.cts → ErrorPolicyPort-D6CybiqJ.d.cts} +1 -1
  11. package/dist/{EverfurResult-DN9pL2Ab.d.cts → EverfurError-DmELDpXp.d.cts} +1 -67
  12. package/dist/{EverfurResult-DN9pL2Ab.d.ts → EverfurError-DmELDpXp.d.ts} +1 -67
  13. package/dist/EverfurResult-SGvHKsCB.d.ts +69 -0
  14. package/dist/EverfurResult-ZtH-YV1h.d.cts +69 -0
  15. package/dist/animations/index.cjs +1 -1
  16. package/dist/animations/index.d.cts +6 -5
  17. package/dist/animations/index.d.ts +6 -5
  18. package/dist/animations/index.js +1 -1
  19. package/dist/{attachments-5NeobOCd.d.ts → attachments-C_vtFu2f.d.ts} +7 -5
  20. package/dist/{attachments-D8T5re7e.d.cts → attachments-DHvnITuE.d.cts} +7 -5
  21. package/dist/{attachments-Bw3iMQgu.d.ts → attachments-oD5U2fXI.d.ts} +3 -3
  22. package/dist/{attachments-CQgFrEQ7.d.cts → attachments-pIdGOQfm.d.cts} +3 -3
  23. package/dist/bookingCopy-CJir9mjb.d.ts +1135 -0
  24. package/dist/bookingCopy-DfuA13dh.d.cts +1135 -0
  25. package/dist/branding-Xb_wL8N1.d.cts +212 -0
  26. package/dist/branding-xpQ056sM.d.ts +212 -0
  27. package/dist/callCopy-rDH9JTFo.d.cts +45 -0
  28. package/dist/callCopy-rDH9JTFo.d.ts +45 -0
  29. package/dist/callRoom-7wrE3RP2.d.ts +62 -0
  30. package/dist/callRoom-B_EqaUzx.d.cts +62 -0
  31. package/dist/casesRepository-B-Eg8ZJ3.d.cts +63 -0
  32. package/dist/casesRepository-DHgIYKN9.d.ts +63 -0
  33. package/dist/chat/index.cjs +1 -1
  34. package/dist/chat/index.d.cts +12 -10
  35. package/dist/chat/index.d.ts +12 -10
  36. package/dist/chat/index.js +1 -1
  37. package/dist/client/index.cjs +5 -5
  38. package/dist/client/index.d.cts +15 -11
  39. package/dist/client/index.d.ts +15 -11
  40. package/dist/client/index.js +5 -5
  41. package/dist/{config-CzTZGlfF.d.cts → config-ClI7QxB0.d.ts} +4 -3
  42. package/dist/{config-DW60uRb9.d.ts → config-DAFbf721.d.cts} +4 -3
  43. package/dist/consent/index.cjs +1 -1
  44. package/dist/consent/index.d.cts +9 -8
  45. package/dist/consent/index.d.ts +9 -8
  46. package/dist/consent/index.js +1 -1
  47. package/dist/{context-XvTzq1tE.d.cts → context-B-dUM1Qf.d.cts} +9 -8
  48. package/dist/{context-DXhqHlPU.d.ts → context-CZbgF_OH.d.ts} +9 -8
  49. package/dist/{copy-Mjoo91aS.d.ts → copy-CeRH3NXy.d.ts} +5 -4
  50. package/dist/{copy-bKDNigLb.d.cts → copy-CneuYdrO.d.cts} +5 -4
  51. package/dist/core/index.cjs +9 -9
  52. package/dist/core/index.d.cts +123 -32
  53. package/dist/core/index.d.ts +123 -32
  54. package/dist/core/index.js +9 -9
  55. package/dist/{depth-CErXCU8J.d.cts → depth-B3NFKlF9.d.cts} +38 -6
  56. package/dist/{depth-DjDcJ6kH.d.ts → depth-DO3Ko_qs.d.ts} +38 -6
  57. package/dist/entitlementRepository-74kW5mK0.d.ts +43 -0
  58. package/dist/entitlementRepository-m6zLUmiB.d.cts +43 -0
  59. package/dist/{identity-DI4eVx9S.d.cts → identity-C7uxGwfT.d.cts} +3 -3
  60. package/dist/{identity-BMx2SUOM.d.ts → identity-CLAUq-K4.d.ts} +3 -3
  61. package/dist/index.cjs +6 -6
  62. package/dist/index.d.cts +20 -17
  63. package/dist/index.d.ts +20 -17
  64. package/dist/index.js +6 -6
  65. package/dist/{models-D2EUxPZY.d.cts → models-Bn2z0NNo.d.cts} +1 -1
  66. package/dist/{models-B-Uh2LTf.d.ts → models-DSqA5Ahs.d.ts} +1 -1
  67. package/dist/notifications/index.cjs +2 -2
  68. package/dist/notifications/index.d.cts +5 -4
  69. package/dist/notifications/index.d.ts +5 -4
  70. package/dist/notifications/index.js +2 -2
  71. package/dist/optionalModule-DbJmsq5f.d.cts +21 -0
  72. package/dist/optionalModule-DbJmsq5f.d.ts +21 -0
  73. package/dist/{pets-aB8q0JyX.d.cts → pets-BoB5B7kp.d.cts} +2 -2
  74. package/dist/{pets-CtQdRpWo.d.ts → pets-w4M9d-Dn.d.ts} +2 -2
  75. package/dist/{casesRepository-ClLv6qMl.d.ts → petsRepository-BjKJ8UsN.d.ts} +3 -49
  76. package/dist/{casesRepository-DHwtGRYY.d.cts → petsRepository-DZZoEG3r.d.cts} +3 -49
  77. package/dist/photo/index.cjs +1 -1
  78. package/dist/photo/index.d.cts +3 -2
  79. package/dist/photo/index.d.ts +3 -2
  80. package/dist/photo/index.js +1 -1
  81. package/dist/{ports-DMolTRzU.d.ts → ports-BO3bzTJg.d.ts} +14 -17
  82. package/dist/{ports-DEBzEhbp.d.cts → ports-C2EVK416.d.cts} +14 -17
  83. package/dist/records/depth/index.cjs +2 -2
  84. package/dist/records/depth/index.d.cts +11 -10
  85. package/dist/records/depth/index.d.ts +11 -10
  86. package/dist/records/depth/index.js +2 -2
  87. package/dist/records/index.cjs +3 -3
  88. package/dist/records/index.d.cts +25 -14
  89. package/dist/records/index.d.ts +25 -14
  90. package/dist/records/index.js +3 -3
  91. package/dist/{requestFunnel-CjW7uDuA.d.ts → requestFunnel-D7ipek3e.d.ts} +28 -4
  92. package/dist/{requestFunnel-L-BQfi0z.d.cts → requestFunnel-Djjwgoe9.d.cts} +28 -4
  93. package/dist/{runtime-BR9ysG0J.d.ts → runtimeTypes-CTL3yToK.d.ts} +10 -100
  94. package/dist/{runtime-B8s-_hv8.d.cts → runtimeTypes-D2C9uD85.d.cts} +10 -100
  95. package/dist/server/events/index.cjs +1 -1
  96. package/dist/server/events/index.d.cts +4 -3
  97. package/dist/server/events/index.d.ts +4 -3
  98. package/dist/server/events/index.js +1 -1
  99. package/dist/server/index.cjs +1 -1
  100. package/dist/server/index.d.cts +5 -4
  101. package/dist/server/index.d.ts +5 -4
  102. package/dist/server/index.js +1 -1
  103. package/dist/televet/booking/index.cjs +1 -0
  104. package/dist/televet/booking/index.d.cts +566 -0
  105. package/dist/televet/booking/index.d.ts +566 -0
  106. package/dist/televet/booking/index.js +1 -0
  107. package/dist/televet/call/index.cjs +1 -0
  108. package/dist/televet/call/index.d.cts +161 -0
  109. package/dist/televet/call/index.d.ts +161 -0
  110. package/dist/televet/call/index.js +1 -0
  111. package/dist/televet/index.cjs +1 -1
  112. package/dist/televet/index.d.cts +64 -12
  113. package/dist/televet/index.d.ts +64 -12
  114. package/dist/televet/index.js +1 -1
  115. package/dist/televetGlobal-CEk0_cW9.d.cts +34 -0
  116. package/dist/televetGlobal-Cs9Wbqsy.d.ts +34 -0
  117. package/dist/testing/index.cjs +4 -4
  118. package/dist/testing/index.d.cts +4 -3
  119. package/dist/testing/index.d.ts +4 -3
  120. package/dist/testing/index.js +4 -4
  121. package/dist/testing/rn/index.cjs +1 -1
  122. package/dist/testing/rn/index.d.cts +13 -10
  123. package/dist/testing/rn/index.d.ts +13 -10
  124. package/dist/testing/rn/index.js +1 -1
  125. package/dist/testing/web/index.cjs +1 -1
  126. package/dist/testing/web/index.d.cts +14 -12
  127. package/dist/testing/web/index.d.ts +14 -12
  128. package/dist/testing/web/index.js +1 -1
  129. package/dist/{timelineRows-DZed6dAM.d.ts → timelineRows-7yFNK_rU.d.ts} +1 -1
  130. package/dist/{timelineRows-CaohZzXS.d.cts → timelineRows-CzR1T2DR.d.cts} +1 -1
  131. package/dist/tokens-CIngRkvt.d.cts +362 -0
  132. package/dist/tokens-CIngRkvt.d.ts +362 -0
  133. package/dist/typeStyle-DHJzDaUo.d.cts +112 -0
  134. package/dist/typeStyle-YPS_MXeI.d.ts +112 -0
  135. package/dist/{useRecordsDepth-BHBzJ76R.d.cts → useRecordsDepth-Bnw36jPr.d.cts} +24 -5
  136. package/dist/{useRecordsDepth-BU-OhzH6.d.ts → useRecordsDepth-DFF7Faxx.d.ts} +24 -5
  137. package/dist/{useVetVisit-CjmMa896.d.ts → useVetVisit-BsjoDO-n.d.ts} +21 -6
  138. package/dist/{useVetVisit-Bc84hWUU.d.cts → useVetVisit-Ds8f1peV.d.cts} +21 -6
  139. package/dist/video/index.cjs +1 -1
  140. package/dist/video/index.d.cts +3 -2
  141. package/dist/video/index.d.ts +3 -2
  142. package/dist/video/index.js +1 -1
  143. package/dist/{view-DtSPYpKa.d.ts → view-BqcOYFTr.d.ts} +5 -4
  144. package/dist/{view-C3qPIXGX.d.cts → view-CaJs8WFH.d.cts} +5 -4
  145. package/dist/web/consent/index.cjs +1 -1
  146. package/dist/web/consent/index.d.cts +9 -8
  147. package/dist/web/consent/index.d.ts +9 -8
  148. package/dist/web/consent/index.js +1 -1
  149. package/dist/web/index.cjs +10 -10
  150. package/dist/web/index.d.cts +43 -19
  151. package/dist/web/index.d.ts +43 -19
  152. package/dist/web/index.js +10 -10
  153. package/dist/web/notifications/index.cjs +2 -2
  154. package/dist/web/notifications/index.d.cts +7 -6
  155. package/dist/web/notifications/index.d.ts +7 -6
  156. package/dist/web/notifications/index.js +2 -2
  157. package/dist/web/records/depth/index.cjs +2 -2
  158. package/dist/web/records/depth/index.d.cts +11 -10
  159. package/dist/web/records/depth/index.d.ts +11 -10
  160. package/dist/web/records/depth/index.js +2 -2
  161. package/dist/web/records/index.cjs +3 -3
  162. package/dist/web/records/index.d.cts +123 -14
  163. package/dist/web/records/index.d.ts +123 -14
  164. package/dist/web/records/index.js +3 -3
  165. package/dist/web/televet/booking/index.cjs +2 -0
  166. package/dist/web/televet/booking/index.d.cts +770 -0
  167. package/dist/web/televet/booking/index.d.ts +770 -0
  168. package/dist/web/televet/booking/index.js +2 -0
  169. package/dist/web/televet/call/index.cjs +1 -0
  170. package/dist/web/televet/call/index.d.cts +144 -0
  171. package/dist/web/televet/call/index.d.ts +144 -0
  172. package/dist/web/televet/call/index.js +1 -0
  173. package/dist/web/televet/index.cjs +1 -1
  174. package/dist/web/televet/index.d.cts +61 -9
  175. package/dist/web/televet/index.d.ts +61 -9
  176. package/dist/web/televet/index.js +1 -1
  177. package/package.json +74 -5
  178. package/televet/booking/package.json +8 -0
  179. package/televet/call/package.json +8 -0
  180. package/web/televet/booking/native-blocked.cjs +12 -0
  181. package/web/televet/booking/package.json +8 -0
  182. package/web/televet/call/native-blocked.cjs +12 -0
  183. package/web/televet/call/package.json +8 -0
  184. package/dist/entitlementRepository-DKdXFgTo.d.cts +0 -698
  185. package/dist/entitlementRepository-DSbzuyAW.d.ts +0 -698
  186. package/dist/typeStyle-0TydiZ1w.d.cts +0 -19
  187. package/dist/typeStyle-CWMsoe6b.d.ts +0 -19
@@ -1,17 +1,47 @@
1
- import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-Bc84hWUU.cjs';
2
- export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-Bc84hWUU.cjs';
1
+ import { E as EverfurTelevetFlowRequest, a as EverfurTelevetFlowPresenter } from '../../televetGlobal-CEk0_cW9.cjs';
3
2
  import { ReactNode, CSSProperties } from 'react';
4
- import { E as EverfurError } from '../../EverfurResult-DN9pL2Ab.cjs';
5
- export { a as EverfurErrorCategory, b as EverfurErrorCode, c as EverfurResult } from '../../EverfurResult-DN9pL2Ab.cjs';
3
+ import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-Ds8f1peV.cjs';
4
+ export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-Ds8f1peV.cjs';
5
+ import { E as EverfurError } from '../../EverfurError-DmELDpXp.cjs';
6
+ export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../../EverfurError-DmELDpXp.cjs';
6
7
  import { P as PetRef } from '../../ids-B2GAAifq.cjs';
7
8
  export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.cjs';
8
9
  import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.cjs';
9
10
  export { a as VET_VISIT_INTENTS, i as isVetVisitIntent } from '../../visitIntent-D7_yVp1I.cjs';
11
+ export { E as EverfurResult } from '../../EverfurResult-ZtH-YV1h.cjs';
12
+
13
+ /**
14
+ * Register how this site presents a vet visit. Call it ONCE, in your app entry, only if you want to own the
15
+ * destination:
16
+ *
17
+ * ```ts
18
+ * import { registerEverfurTelevetFlow } from '@everfur/sdk/web/televet';
19
+ * registerEverfurTelevetFlow((request) => router.push(request.visitRef ? '/vet/visit' : '/vet/book'));
20
+ * ```
21
+ *
22
+ * Without it every vet entry opens the in-page experience Everfur provides. Passing `null` unregisters it,
23
+ * which is what a test does between cases.
24
+ */
25
+ declare function registerEverfurTelevetFlow(next: EverfurTelevetFlowPresenter | null): void;
26
+ /** Is a presenter registered? */
27
+ declare function hasEverfurTelevetFlow(): boolean;
28
+ /**
29
+ * Hand a request to the registered presenter. Answers whether it PRESENTED: false when nothing is registered,
30
+ * when the presenter declined (returned false), and when it threw (reported to the console, never rendered).
31
+ */
32
+ declare function presentEverfurTelevetFlow(request: EverfurTelevetFlowRequest): boolean;
33
+
34
+ /** Renders the in-page vet visit Everfur provides, while one is open. Renders nothing otherwise. */
35
+ declare function EverfurTelevetHost(): ReactNode;
10
36
 
11
37
  /**
12
38
  * The vet visit hook for a web page. Render your own control and call `open()` directly from its click
13
39
  * handler; `available` is false (render nothing) unless Everfur grants vet visits to this signed-in user.
14
40
  * Requires a signed session: pass `user` with a `getToken` backed by your server's session mint.
41
+ *
42
+ * The visit opens IN YOUR PAGE: your registered presenter, else the in-page experience rendered by a mounted
43
+ * `EverfurTelevetHost` (mount one once if no `VetVisitButton` or `EverfurChat` is on the page). Pass
44
+ * `prefer: 'redirect'` for the hosted visit in a new tab instead.
15
45
  */
16
46
  declare function useVetVisit(opts?: UseVetVisitOptions): UseVetVisitState;
17
47
 
@@ -20,9 +50,12 @@ interface VetVisitButtonProps {
20
50
  readonly petRef?: PetRef | null | undefined;
21
51
  /** The button label. Defaults to Everfur's label. */
22
52
  readonly children?: ReactNode;
23
- /** Called after the visit tab is navigated to Everfur, with the return flow id when `returnTo` was given. */
53
+ /**
54
+ * `prefer="redirect"` only: called after the new tab is navigated to the hosted visit, with the return flow
55
+ * id when `returnTo` was given.
56
+ */
24
57
  readonly onOpened?: ((flowId: string | null) => void) | undefined;
25
- /** The KEY of a return destination your tenant registered with Everfur; `onOpened` then receives the flow id. */
58
+ /** `prefer="redirect"` only: the KEY of a return destination your tenant registered with Everfur. */
26
59
  readonly returnTo?: string | null | undefined;
27
60
  /** The user's US state. When set, the button renders only once Everfur confirms a visit is available there. */
28
61
  readonly usState?: string | null | undefined;
@@ -30,13 +63,32 @@ interface VetVisitButtonProps {
30
63
  readonly entry?: VetVisitEntry | null | undefined;
31
64
  /**
32
65
  * TV-01. A visit this member already has. The button then OPENS that visit rather than starting a booking:
33
- * put the `visitRef` a tapped push carries here. Without it the button books, exactly as before.
66
+ * put the `visitRef` a tapped push carries here. It opens in your page like a booking does, carried to your
67
+ * destination as `request.visitRef`; only `prefer="redirect"` sends it to the hosted visit.
34
68
  */
35
69
  readonly visitRef?: string | null | undefined;
36
70
  /** What to open for `visitRef`: `visit` (the default), `join`, `summary` or `messages`. */
37
71
  readonly intent?: VetVisitIntent | null | undefined;
38
72
  /** Called when the visit could not be opened. `error` is null for a browser-side failure (a blocked tab). */
39
73
  readonly onError?: ((reason: VetVisitErrorReason, error: EverfurError | null) => void) | undefined;
74
+ /**
75
+ * Your own destination for THIS button, called with the request (the pet, the state and, for an existing
76
+ * visit, `visitRef` and `intent`). It wins over the registry and over the SDK's own experience: a host that
77
+ * threaded a callback into one button said where that button goes. Omit it and the click opens your
78
+ * registered presenter, else the in-page experience Everfur provides.
79
+ */
80
+ readonly onStartInApp?: ((request: EverfurTelevetFlowRequest) => void) | undefined;
81
+ /**
82
+ * Which destination a click takes. Defaults to `'in-app'`.
83
+ *
84
+ * `'in-app'` keeps the member in your page: `onStartInApp`, else your registered presenter, else the
85
+ * in-page experience Everfur provides. Nothing is minted and nothing opens a tab.
86
+ *
87
+ * `'redirect'` is the explicit opt-in to the hosted Everfur visit in a new tab, opened in the click's own
88
+ * task. It ignores `onStartInApp` and the registry, which is what a partner wants for a surface they
89
+ * deliberately keep hosted.
90
+ */
91
+ readonly prefer?: 'in-app' | 'redirect' | undefined;
40
92
  /** Merged over the button's own style. */
41
93
  readonly style?: CSSProperties | undefined;
42
94
  /** A class the host may hang its own layout rules on; the SDK sets no classes of its own. */
@@ -44,7 +96,7 @@ interface VetVisitButtonProps {
44
96
  /** Host/test seam: inject a controller instead of building one from the provider's session. */
45
97
  readonly controller?: VetVisitController | undefined;
46
98
  }
47
- /** Opens the hosted Everfur vet visit in a new tab. Renders nothing unless vet visits are granted. */
99
+ /** Opens the Everfur vet visit, in the partner's own page by default. Renders nothing unless it is granted. */
48
100
  declare function VetVisitButton(props: VetVisitButtonProps): ReactNode;
49
101
 
50
- export { EverfurError, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, useVetVisit };
102
+ export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, useVetVisit };
@@ -1,17 +1,47 @@
1
- import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-CjmMa896.js';
2
- export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-CjmMa896.js';
1
+ import { E as EverfurTelevetFlowRequest, a as EverfurTelevetFlowPresenter } from '../../televetGlobal-Cs9Wbqsy.js';
3
2
  import { ReactNode, CSSProperties } from 'react';
4
- import { E as EverfurError } from '../../EverfurResult-DN9pL2Ab.js';
5
- export { a as EverfurErrorCategory, b as EverfurErrorCode, c as EverfurResult } from '../../EverfurResult-DN9pL2Ab.js';
3
+ import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-BsjoDO-n.js';
4
+ export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-BsjoDO-n.js';
5
+ import { E as EverfurError } from '../../EverfurError-DmELDpXp.js';
6
+ export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../../EverfurError-DmELDpXp.js';
6
7
  import { P as PetRef } from '../../ids-B2GAAifq.js';
7
8
  export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.js';
8
9
  import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
9
10
  export { a as VET_VISIT_INTENTS, i as isVetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
11
+ export { E as EverfurResult } from '../../EverfurResult-SGvHKsCB.js';
12
+
13
+ /**
14
+ * Register how this site presents a vet visit. Call it ONCE, in your app entry, only if you want to own the
15
+ * destination:
16
+ *
17
+ * ```ts
18
+ * import { registerEverfurTelevetFlow } from '@everfur/sdk/web/televet';
19
+ * registerEverfurTelevetFlow((request) => router.push(request.visitRef ? '/vet/visit' : '/vet/book'));
20
+ * ```
21
+ *
22
+ * Without it every vet entry opens the in-page experience Everfur provides. Passing `null` unregisters it,
23
+ * which is what a test does between cases.
24
+ */
25
+ declare function registerEverfurTelevetFlow(next: EverfurTelevetFlowPresenter | null): void;
26
+ /** Is a presenter registered? */
27
+ declare function hasEverfurTelevetFlow(): boolean;
28
+ /**
29
+ * Hand a request to the registered presenter. Answers whether it PRESENTED: false when nothing is registered,
30
+ * when the presenter declined (returned false), and when it threw (reported to the console, never rendered).
31
+ */
32
+ declare function presentEverfurTelevetFlow(request: EverfurTelevetFlowRequest): boolean;
33
+
34
+ /** Renders the in-page vet visit Everfur provides, while one is open. Renders nothing otherwise. */
35
+ declare function EverfurTelevetHost(): ReactNode;
10
36
 
11
37
  /**
12
38
  * The vet visit hook for a web page. Render your own control and call `open()` directly from its click
13
39
  * handler; `available` is false (render nothing) unless Everfur grants vet visits to this signed-in user.
14
40
  * Requires a signed session: pass `user` with a `getToken` backed by your server's session mint.
41
+ *
42
+ * The visit opens IN YOUR PAGE: your registered presenter, else the in-page experience rendered by a mounted
43
+ * `EverfurTelevetHost` (mount one once if no `VetVisitButton` or `EverfurChat` is on the page). Pass
44
+ * `prefer: 'redirect'` for the hosted visit in a new tab instead.
15
45
  */
16
46
  declare function useVetVisit(opts?: UseVetVisitOptions): UseVetVisitState;
17
47
 
@@ -20,9 +50,12 @@ interface VetVisitButtonProps {
20
50
  readonly petRef?: PetRef | null | undefined;
21
51
  /** The button label. Defaults to Everfur's label. */
22
52
  readonly children?: ReactNode;
23
- /** Called after the visit tab is navigated to Everfur, with the return flow id when `returnTo` was given. */
53
+ /**
54
+ * `prefer="redirect"` only: called after the new tab is navigated to the hosted visit, with the return flow
55
+ * id when `returnTo` was given.
56
+ */
24
57
  readonly onOpened?: ((flowId: string | null) => void) | undefined;
25
- /** The KEY of a return destination your tenant registered with Everfur; `onOpened` then receives the flow id. */
58
+ /** `prefer="redirect"` only: the KEY of a return destination your tenant registered with Everfur. */
26
59
  readonly returnTo?: string | null | undefined;
27
60
  /** The user's US state. When set, the button renders only once Everfur confirms a visit is available there. */
28
61
  readonly usState?: string | null | undefined;
@@ -30,13 +63,32 @@ interface VetVisitButtonProps {
30
63
  readonly entry?: VetVisitEntry | null | undefined;
31
64
  /**
32
65
  * TV-01. A visit this member already has. The button then OPENS that visit rather than starting a booking:
33
- * put the `visitRef` a tapped push carries here. Without it the button books, exactly as before.
66
+ * put the `visitRef` a tapped push carries here. It opens in your page like a booking does, carried to your
67
+ * destination as `request.visitRef`; only `prefer="redirect"` sends it to the hosted visit.
34
68
  */
35
69
  readonly visitRef?: string | null | undefined;
36
70
  /** What to open for `visitRef`: `visit` (the default), `join`, `summary` or `messages`. */
37
71
  readonly intent?: VetVisitIntent | null | undefined;
38
72
  /** Called when the visit could not be opened. `error` is null for a browser-side failure (a blocked tab). */
39
73
  readonly onError?: ((reason: VetVisitErrorReason, error: EverfurError | null) => void) | undefined;
74
+ /**
75
+ * Your own destination for THIS button, called with the request (the pet, the state and, for an existing
76
+ * visit, `visitRef` and `intent`). It wins over the registry and over the SDK's own experience: a host that
77
+ * threaded a callback into one button said where that button goes. Omit it and the click opens your
78
+ * registered presenter, else the in-page experience Everfur provides.
79
+ */
80
+ readonly onStartInApp?: ((request: EverfurTelevetFlowRequest) => void) | undefined;
81
+ /**
82
+ * Which destination a click takes. Defaults to `'in-app'`.
83
+ *
84
+ * `'in-app'` keeps the member in your page: `onStartInApp`, else your registered presenter, else the
85
+ * in-page experience Everfur provides. Nothing is minted and nothing opens a tab.
86
+ *
87
+ * `'redirect'` is the explicit opt-in to the hosted Everfur visit in a new tab, opened in the click's own
88
+ * task. It ignores `onStartInApp` and the registry, which is what a partner wants for a surface they
89
+ * deliberately keep hosted.
90
+ */
91
+ readonly prefer?: 'in-app' | 'redirect' | undefined;
40
92
  /** Merged over the button's own style. */
41
93
  readonly style?: CSSProperties | undefined;
42
94
  /** A class the host may hang its own layout rules on; the SDK sets no classes of its own. */
@@ -44,7 +96,7 @@ interface VetVisitButtonProps {
44
96
  /** Host/test seam: inject a controller instead of building one from the provider's session. */
45
97
  readonly controller?: VetVisitController | undefined;
46
98
  }
47
- /** Opens the hosted Everfur vet visit in a new tab. Renders nothing unless vet visits are granted. */
99
+ /** Opens the Everfur vet visit, in the partner's own page by default. Renders nothing unless it is granted. */
48
100
  declare function VetVisitButton(props: VetVisitButtonProps): ReactNode;
49
101
 
50
- export { EverfurError, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, useVetVisit };
102
+ export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, useVetVisit };
@@ -1 +1 @@
1
- import {createContext,useMemo,useRef,useContext,useSyncExternalStore,useState,useEffect,useCallback}from'react';import {jsx}from'react/jsx-runtime';var cr=Object.defineProperty;var n=(e,r)=>cr(e,"name",{value:r,configurable:true});var G=Object.freeze([Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"DAILY_QUOTA_EXCEEDED",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"FILE_TOO_LARGE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_IN_FLIGHT",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"INVALID_CONTENT_TYPE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"InternalFailureException",envelope:"http_envelope",httpStatus:500,retryable:true}),Object.freeze({wireCode:"MethodNotAllowedException",envelope:"http_envelope",httpStatus:405,retryable:false}),Object.freeze({wireCode:"NotImplementedException",envelope:"http_envelope",httpStatus:501,retryable:false}),Object.freeze({wireCode:"PaymentRequiredException",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ResourceNotFoundException",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"ServiceUnavailableException",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"TIER_UPGRADE_REQUIRED",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ThrottlingException",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"ValidationException",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"accessDenied",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"access_denied",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"device_cipher_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"email_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"event_cursor_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_payload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_not_available",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_unknown",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_required",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_reused",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"insufficientCapability",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"insufficient_scope",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"internal_error",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"invalidRequest",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_client",envelope:"oauth_error",httpStatus:401,retryable:false}),Object.freeze({wireCode:"invalid_client_metadata",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_grant",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_redirect_uri",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),Object.freeze({wireCode:"mcp_request_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"not_found",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"partner_visit_link_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"partner_visit_owner_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"partner_visit_pet_already_mapped",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"payload_too_large",envelope:"http_envelope",httpStatus:413,retryable:false}),Object.freeze({wireCode:"petRefInUse",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"pet_health_list_removals_unconfirmed",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_health_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_not_registered",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"provider_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"rateLimited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"record_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"record_subject_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"record_upload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"records_consent_required",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"sandbox_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"session_required",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"share_limit_reached",envelope:"http_envelope",httpStatus:429,retryable:false}),Object.freeze({wireCode:"slow_down",envelope:"oauth_error",httpStatus:429,retryable:true}),Object.freeze({wireCode:"species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"tenant_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"tenant_has_no_capabilities",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"tenant_resource_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"tenant_surface_not_enabled",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"timeout",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"token_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"unavailable",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);Object.freeze(G.map(e=>e.wireCode));var fr=Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),me=Object.freeze(G.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:fr[e.wireCode]}))),pr=new Map(me.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),yr=Object.freeze(["http_envelope",...[...new Set(me.map(e=>e.envelope))].filter(e=>e!=="http_envelope").sort()]);function D(e,r){if(typeof e!="string")return;let t=e.trim().toUpperCase();if(t.length!==0)for(let o of [r??"http_envelope",...yr]){let i=pr.get(o+t);if(i)return i}}n(D,"contractErrorFor");function mr(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}n(mr,"contractDocUrl");function ve(e){return null}n(ve,"publishedDocUrl");var vr=Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function be(e){return vr[e]}n(be,"categoryFor");function Ee(e){let r=D(e);if(r)return r.normalized;let t=(e??"").trim().toUpperCase(),o=t.replace(/[^A-Z0-9]/g,"");if(o==="AUTHREJECTED")return "authRejected";if(t.startsWith("AUTH"))return "authExpired";switch(o){case "DAILYQUOTAEXCEEDED":case "QUOTAEXCEEDED":return "quotaExceeded";case "RATELIMITED":case "TOOMANYREQUESTS":return "rateLimited";case "IDEMPOTENCYKEYCONFLICT":case "IDEMPOTENCYCONFLICT":return "idempotencyConflict";case "ACCESSDENIED":case "FORBIDDEN":return "accessDenied";case "NOTFOUND":case "CONVERSATIONNOTFOUND":return "conversationNotFound";case "PETNOTFOUND":return "petNotFound";case "TIMEOUT":case "STREAMTIMEOUT":return "streamTimeout";case "MEDIAUPLOADFAILED":case "UNRECOGNIZEDVIDEOFORMAT":case "FILETOOSMALL":return "mediaUploadFailed";case "MODERATIONBLOCKED":return "moderationBlocked";case "UPSTREAMLLMTIMEOUT":return "upstreamLlmTimeout";case "INTERNALERROR":case "INTERNALSERVERERROR":return "internalError";case "STREAMINCOMPLETE":case "CHATSTREAMINCOMPLETE":return "streamIncomplete";case "INVALIDANALYSISTYPE":case "INVALIDUPLOADPURPOSE":return "unknown";default:return "unknown"}}n(Ee,"fromWire");var br=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function $(e){return br.has(e)}n($,"isAutoRetryable");var Er=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function ge(e){return $(e)||Er.has(e)}n(ge,"isRetryableCode");var gr=500,Q=8e3,he=4;function _e(e,r=Math.random){let t=Math.max(0,e),o=Math.min(gr*2**t,Q);return Math.floor(r()*o)}n(_e,"backoffDelayMs");var hr=Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:"This feature isn't available on your account right now.",paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",unknown:"Something went wrong. Please try again."});function X(e){return hr[e]}n(X,"userFacingError");function Re(e,r,t){Object.defineProperty(e,r,{value:t,enumerable:false,writable:false,configurable:false});}n(Re,"defineHidden");var _r=/^[a-z][a-z0-9_]{0,63}$/;function x(e,r){let t=D(r?.wireCode,r?.wireEnvelope),o={code:e,category:be(e),retryable:r?.retryable??ge(e),displayMessage:X(e)};if(r?.httpStatus!==void 0&&(o.httpStatus=r.httpStatus),r?.requestId&&(o.requestId=r.requestId),typeof r?.reasonCode=="string"&&_r.test(r.reasonCode)&&(o.reasonCode=r.reasonCode),t);return r?.wireMessage&&Re(o,"wireMessage",r.wireMessage),r?.raw!==void 0&&r.raw!==null&&Re(o,"raw",r.raw),Object.freeze(o)}n(x,"makeEverfurError");function J(e,r){return Object.freeze(r===void 0?{ok:true,value:e}:{ok:true,value:e,warning:r})}n(J,"ok");function g(e){return Object.freeze({ok:false,error:e})}n(g,"err");var N=class N extends Error{constructor(r,t){super(t),this.name="EverfurConfigError",this.kind=r,Object.setPrototypeOf(this,N.prototype);}};n(N,"EverfurConfigError");var A=N;function Ce(e){return Object.freeze({kind:"error",terminal:true,code:e.code,retryable:e.retryable,wireMessage:e.wireMessage,synthesized:e.synthesized,lastEventId:e.lastEventId,serverRequestId:e.serverRequestId??null})}n(Ce,"errorFrame");function Tr(e){let r={};return e.mode==="personalized"?r.authorization=`Bearer ${e.token}`:r["x-everfur-partner-key"]=e.publishableKey,e.userRef&&(r["x-everfur-user-ref"]=e.userRef),e.sessionId&&(r["x-everfur-session-id"]=e.sessionId),r}n(Tr,"authHeaders");function P(e,r){return {...e,headers:{...wr(e.headers),...Tr(r)}}}n(P,"withAuthHeaders");function wr(e){if(!e)return {};let r={};for(let[t,o]of Object.entries(e)){let i=t.toLowerCase();i==="authorization"||i==="x-everfur-partner-key"||(r[t]=o);}return r}n(wr,"stripAuthHeaders");async function Te(e,r){if(r.mode==="anonymous")return r.transport.request(P(e,{mode:"anonymous",publishableKey:r.publishableKey,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));let t;try{t=await r.identity.currentToken();}catch{return g(Z())}let o=await r.transport.request(P(e,{mode:"personalized",token:t,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));if(o.ok||o.error.httpStatus!==401)return o;let i;try{i=await r.identity.currentToken({forceRefresh:!0});}catch{return g(Z())}let a=await r.transport.request(P(e,{mode:"personalized",token:i,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));return !a.ok&&a.error.httpStatus===401?g(Z(a.error.httpStatus)):a}n(Te,"authedSend");function Z(e){return x("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}n(Z,"authRejectedError");function we(e){return x("internalError",{retryable:true,wireMessage:Sr(e)})}n(we,"networkError");function Sr(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}n(Sr,"describeCause");var xr=3e4,kr=Q*2,Fr="idempotency-key",Or=new Set(["POST","PUT","PATCH","DELETE"]),Vr=Object.freeze({onEvent(){}}),Ir=Object.freeze({setTimeout:n((e,r)=>setTimeout(e,r),"setTimeout"),clearTimeout:n(e=>clearTimeout(e),"clearTimeout"),now:n(()=>Date.now(),"now")});function xe(e){let r=e.observer??Vr,t=e.timers??Ir,o=e.rng??Math.random,i=e.sleep??((p,d)=>Wr(p,t,d)),a=e.maxAttempts??he,u=e.unaryTimeoutMs??xr,l=e.newIdempotencyKey??Pr(),s=n(p=>{try{r.onEvent(p);}catch{}},"emit");async function f(p,d,y){let h=y?.maxAttempts,c=Math.max(1,h??a),C=y?.idempotent??Or.has(d.method)?l():null,R=Ar(d,C),V=0;for(;;){let k=n(w=>Object.freeze({call:p,method:d.method,path:d.path,attempt:V,...C?{idempotencyKey:C}:{},...w}),"stamp");s(k({phase:"attempt"}));let F=qr(u,t),j=Hr(F.signal,d.signal),O;try{O=await Te({...R,signal:j.signal},e.auth);}catch(w){O=g(we(w));}finally{j.dispose(),F.cancel();}if(O.ok)return s(k({phase:"settled",ok:true,reason:"ok"})),O;let m=O.error,E=jr(m,V,{maxAttempts:c,rng:o,now:t.now(),aborted:d.signal?.aborted===true,...h!==void 0?{perCallMaxAttempts:h}:{},...e.errorPolicy!==void 0?{policy:e.errorPolicy}:{}}),T={ok:false,code:m.code,reason:E.reason,...m.httpStatus!==void 0?{httpStatus:m.httpStatus}:{},...m.requestId!==void 0?{requestId:m.requestId}:{}};if(!E.retry)return s(k({phase:"settled",...T})),g(m);if(s(k({phase:"retry",...T,delayMs:E.delayMs})),await i(E.delayMs,d.signal),d.signal?.aborted===true)return s(k({phase:"settled",...T,reason:"aborted"})),g(m);V+=1;}}n(f,"send");async function v(p){return P(p,await Br(e.auth))}n(v,"authorize");async function*b(p,d,y){s(Object.freeze({call:p,phase:"stream.open",method:d.method,path:d.path,attempt:0}));try{yield*e.auth.transport.stream(d,y);}catch{yield Ce({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:null});}}return n(b,"stream"),Object.freeze({send:f,authorize:v,stream:b})}n(xe,"createRequestFunnel");function Ar(e,r){let t={};for(let[o,i]of Object.entries(e.headers??{}))o.toLowerCase()!==Fr&&(t[o]=i);return r!==null&&(t["Idempotency-Key"]=r),{...e,headers:t}}n(Ar,"assembleHeaders");function Pr(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}n(Pr,"defaultIdempotencyKeyFactory");var zr=10;function jr(e,r,t){if(t.aborted)return {retry:false,reason:"aborted"};let o=Dr(e);if(o==="quota")return {retry:false,reason:"daily-quota-exhausted"};if(o!=="burst"&&!$(e.code))return {retry:false,reason:"terminal-code"};let i=o==="burst"?"burst-throttle":"retryable-code";if(n(()=>{if(t.policy===void 0)return false;try{return !t.policy.shouldRetry(e.code,r)}catch{return false}},"policyVetoedRetry")())return {retry:false,reason:"terminal-code"};let u=n(()=>{if(t.policy===void 0)return null;let f;try{f=t.policy.maxAttempts(e.code);}catch{return null}return typeof f!="number"||!Number.isFinite(f)?null:Math.max(1,Math.min(zr,Math.floor(f)))},"policyCeiling"),l=t.perCallMaxAttempts??u()??t.maxAttempts;if(r+1>=l)return {retry:false,reason:"attempts-exhausted"};let s=Nr(e,t.now);return s!==null?s>kr?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:s}:{retry:true,reason:i,delayMs:_e(r,t.rng)}}n(jr,"decideRetry");function Dr(e){let r=e.code==="unknown"?Ee(Ur(e.raw)):e.code;return r==="quotaExceeded"?"quota":r==="rateLimited"||e.httpStatus===429?"burst":null}n(Dr,"throttleKind");function Nr(e,r){let t=Mr(e.raw);if(t===null)return null;let o=t-r;return o>0?o:0}n(Nr,"retryOverrideMs");function Mr(e){for(let r of ke(e)){let t=r.resets_at,o=Lr(t);if(o!==null)return o}return null}n(Mr,"findResetsAt");function ke(e){if(!Se(e))return [];let r=[e];for(let t of ["error","detail"]){let o=e[t];Se(o)&&r.push(o);}return r}n(ke,"candidateScopes");function Lr(e){if(typeof e=="number"&&Number.isFinite(e))return e<1e11?Math.round(e*1e3):Math.round(e);if(typeof e=="string"&&e.trim().length>0){let r=Date.parse(e);return Number.isFinite(r)?r:null}return null}n(Lr,"parseInstantMs");function Ur(e){for(let r of ke(e)){let t=r.code;if(typeof t=="string"&&t.length>0)return t}return null}n(Ur,"rawWireCode");function Se(e){return typeof e=="object"&&e!==null}n(Se,"isRecord");async function Br(e){return e.mode==="anonymous"?{mode:"anonymous",publishableKey:e.publishableKey,userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}:{mode:"personalized",token:await e.identity.currentToken(),userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}}n(Br,"resolveDeviceAuth");function qr(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(qr,"boundedSignal");function Hr(e,r){let t=n(()=>{},"noop");if(!r)return {signal:e,dispose:t};let o=new AbortController;if(e.aborted||r.aborted)return o.abort(),{signal:o.signal,dispose:t};let i=n(()=>o.abort(),"onAbort");return e.addEventListener("abort",i,{once:true}),r.addEventListener("abort",i,{once:true}),{signal:o.signal,dispose:n(()=>{e.removeEventListener("abort",i),r.removeEventListener("abort",i);},"dispose")}}n(Hr,"mergeSignals");function Wr(e,r,t){return e<=0||t?.aborted===true?Promise.resolve():new Promise(o=>{let i=r.setTimeout(()=>{t?.removeEventListener("abort",a),o();},e),a=n(()=>{r.clearTimeout(i),o();},"onAbort");t?.addEventListener("abort",a,{once:true});})}n(Wr,"delayAbortable");var M=Object.freeze(["visit","join","summary","messages"]);function L(e){return typeof e=="string"&&M.includes(e)}n(L,"isVetVisitIntent");var Yr="/widget/v1/televet/handoffs",Kr="/widget/v1/televet/availability",Gr="/widget/v1/televet/chat-entry",$r=/^[a-z0-9][a-z0-9_-]{0,39}$/,ze=/^[A-Za-z0-9_-]{22}$/,Fe="everfur_flow",Oe=32,Ve=128,Ie=64;function U(e){let r=e.httpStatus;switch(e.code){case "sessionRequired":return "sessionRequired";case "authExpired":case "authRejected":return "authRejected";case "sdkUpdateRequired":return "sdkUpdateRequired";case "validationFailed":return "invalidRequest";case "rateLimited":case "quotaExceeded":return "rateLimited";}return r===void 0?e.code==="internalError"?"network":"unknown":r===429?"rateLimited":r===404?"unavailable":r===403?"accessDenied":r===401?"authRejected":r===400||r===422?"invalidRequest":r>=500?"serverError":"unknown"}n(U,"vetVisitErrorReasonOf");function Ae(e){return g(x("validationFailed",{retryable:false,wireMessage:e}))}n(Ae,"invalid");function ee(e){return g(x("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}n(ee,"unusable");function Qr(e,r){let t={};e!==void 0&&(t.pet_ref=e);let o=r?.returnTo;if(o!=null){if(typeof o!="string"||!$r.test(o))return {ok:false,message:"returnTo must be a registered return destination key"};t.return_to=o;}let i=r?.entry;if(i!=null){if(i!=="chat"||e===void 0)return {ok:false,message:"entry 'chat' needs the pet the chat is about"};t.entry=i;}let a=r?.visitRef,u=r?.intent,l=a!=null;if(l){let s=typeof a=="string"?a.trim():"";if(s.length<1||[...s].length>Ie)return {ok:false,message:`visitRef must be 1..${Ie} characters`};t.visit_ref=s;}if(u!=null){if(!l)return {ok:false,message:"intent needs the visitRef it opens"};if(!L(u))return {ok:false,message:`intent must be one of ${M.join(", ")}`};t.intent=u;}return {ok:true,body:t}}n(Qr,"handoffBody");function Xr(e){if(typeof e!="object"||e===null)return null;let{visit_ref:r,intent:t}=e;return typeof r!="string"||r.length===0||!L(t)?null:Object.freeze({visitRef:r,intent:t})}n(Xr,"parseVisitEcho");function je(e){let r=e.funnel??xe({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),t=e.telemetry,o=n(i=>(Pe(t,"televet.visit.handoff_failed",{reason:U(i)}),g(i)),"failed");return {async createHandoff(i,a){let u;if(i!=null){let c=typeof i=="string"?[...i].length:0;if(c<1||c>Ve)return o(x("validationFailed",{retryable:false,wireMessage:`pet_ref must be 1..${Ve} characters`}));u=i;}let l=Qr(u,a);if(!l.ok){let c=Ae(l.message);return c.ok?c:o(c.error)}let s=l.body,f=await r.send("televet.visit.handoff",{method:"POST",path:Yr,body:s},{idempotent:false,maxAttempts:1});if(!f.ok)return o(f.error);let v=Zr(f.value),b=s.return_to!==void 0,p=b?f.value?.flow_id:void 0;if(b&&(typeof p!="string"||!ze.test(p))){let c=ee("the handoff response carried no usable return flow id");return c.ok?c:o(c.error)}let d=s.visit_ref!==void 0,y=d?Xr(f.value?.visit):null;if(d&&y===null){let c=ee("the handoff response did not confirm the visit it opens");return c.ok?c:o(c.error)}let h=v===null?null:Object.freeze({...v,...b?{flowId:p}:{},...y!==null?{visit:y}:{}});return h===null?o(x("internalError",{retryable:false,httpStatus:502,wireMessage:"the handoff response carried no usable visit url"})):(Pe(t,"televet.visit.handoff_created",{pet_scoped:s.pet_ref!==void 0}),J(h))},async checkAvailability(i){if(typeof i!="string"||i.length>Oe)return Ae(`state must be at most ${Oe} characters`);let a=await r.send("televet.visit.availability",{method:"POST",path:Kr,body:{state:i}},{idempotent:false,maxAttempts:1});if(!a.ok)return g(a.error);let u=a.value?.available;return typeof u!="boolean"?ee("the availability response carried no usable answer"):J(Object.freeze({available:u}))},async chatEntryOpen(){try{let i=await r.send("televet.visit.chat_entry",{method:"GET",path:Gr},{maxAttempts:1});return i.ok&&i.value?.open===!0}catch{return false}}}}n(je,"createVetVisitController");function Jr(e){if(typeof e!="string")return null;let r=e.indexOf("#"),t=r<0?e:e.slice(0,r),o=t.indexOf("?");if(o<0)return null;let i=t.slice(o+1).split("&").filter(a=>a.startsWith(`${Fe}=`)).map(a=>a.slice(Fe.length+1));return i.length!==1||!ze.test(i[0]??"")?null:Object.freeze({flowId:i[0]})}n(Jr,"parseVetVisitReturn");function Zr(e){if(typeof e!="object"||e===null)return null;let{url:r,expires_at:t}=e;return typeof r!="string"||typeof t!="string"||t.length===0||!nt(r)?null:Object.freeze({url:r,expiresAt:t})}n(Zr,"parseHandoff");var et=new Set(["localhost","127.0.0.1","[::1]"]),rt=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/,tt=/[\s\u0000-\u001f\u007f]/;function nt(e){if(tt.test(e))return false;let r=rt.exec(e);if(r===null)return false;let t=(r[1]??"").toLowerCase(),o=r[2]??"";if(o.length===0||o.includes("@"))return false;let i=o.replace(/:\d+$/,"").toLowerCase(),a=t==="https",u=t==="http"&&et.has(i);if(!a&&!u)return false;let l=e.indexOf("#");if(l<0)return false;let s=e.slice(l);return s.startsWith("#h=")&&s.length>3}n(nt,"isOpenableVisitUrl");function Pe(e,r,t){if(e)try{e.track(r,t);}catch{}}n(Pe,"safeTrack");var De=Symbol.for("@everfur/sdk#EverfurContext@v1"),Ne=globalThis,Me=Ne[De]??(Ne[De]=createContext(null));Me.displayName??="EverfurContext";function B(){let e=useContext(Me);if(e===null)throw new A("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}n(B,"useEverfurContext");var at=Object.freeze({chat:Object.freeze(["chat.message.create"]),records:Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:Object.freeze(["records.clinic.create"]),video:Object.freeze(["video.gait.execute"]),photo:Object.freeze(["photo.checkup.execute"]),animations:Object.freeze(["animations.state.read"]),televet:Object.freeze(["televet.visit.create"])});function st(e){return at[e]}n(st,"requires");function Le(e,r,t){let o=st(e),i=new Map;for(let l of r)i.set(l.resource,l);if(t?.isPending===true&&o.some(l=>!i.has(l)))return re({name:e,enabled:false,isPending:true,limits:{}});let a=lt(o,i);return o.filter(l=>i.get(l)?.granted!==true).length===0?re({name:e,enabled:true,isPending:false,limits:a}):re({name:e,enabled:false,isPending:false,limits:a,disabled:ut(o,i)})}n(Le,"decideCapability");function lt(e,r){let t={};for(let o of e){let i=r.get(o)?.limits;if(i)for(let[a,u]of Object.entries(i)){let l=t[a];t[a]=l===void 0?u:Math.min(l,u);}}return t}n(lt,"mergeLimits");function ut(e,r){for(let t of e){let o=r.get(t)?.disabled;if(o)return Object.freeze({reason:o.reason,level:o.level,recoverable:o.recoverable})}return Object.freeze({reason:X("accessDenied"),level:"user_entitlement",recoverable:false})}n(ut,"disabledFor");function re(e){let r={name:e.name,enabled:e.enabled,isPending:e.isPending,limits:Object.freeze({...e.limits})};return e.disabled!==void 0&&(r.disabled=e.disabled),Object.freeze(r)}n(re,"freezeDecision");function Ue(e){let{runtime:r}=B(),t=r.entitlements,o=useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return useMemo(()=>Le(e,o.decisions,{isPending:o.isPending}),[e,o])}n(Ue,"useCapability");var qe=Object.freeze({status:"idle",error:null,errorReason:null});function pt(e,r,t){let{usState:o,chat:i,scope:a}=t,u=r&&(o!==null||i),l=`${o??""}|${i?"chat":""}`,[s,f]=useState(null);if(useEffect(()=>{if(!u)return;let b=true,p=e.current;return f(null),n(async()=>{try{if(i&&!(p.chatEntryOpen&&await p.chatEntryOpen()))return !1;if(o===null)return !0;if(!p.checkAvailability)return !1;let y=await p.checkAvailability(o);return y.ok&&y.value.available}catch{return false}},"ask")().then(y=>{b&&f({key:l,open:y});}),()=>{b=false;}},[u,l,o,i,a,e]),!u)return null;let v=s!==null&&s.key===l;return {open:v&&s.open,pending:!v}}n(pt,"usePreflight");var yt=Object.freeze({status:"opening",error:null,errorReason:null});function We(e,r={}){let{runtime:t,userRef:o,scopeEpoch:i}=B(),a=Ue("televet"),u=a.enabled&&o!==null,l=r.usState??null,s=r.entry==="chat",f=r.petRef??null,v=useMemo(()=>{if(r.controller)return r.controller;let{services:m}=t.registry;return je({auth:m.authFor(o),telemetry:m.telemetry,...m.errorPolicy?{errorPolicy:m.errorPolicy}:{}})},[t,o,i,r.controller]),b=useRef(v);b.current=v;let p=useMemo(()=>({runtime:t,userRef:o,scopeEpoch:i}),[t,o,i]),d=pt(b,u,{usState:l,chat:s,scope:p}),y=u&&(d===null||d.open)&&(!s||f!==null),h=r.returnTo??null,[c,S]=useState(qe),C=useRef(null),R=useRef({runtime:t,userRef:o,scopeEpoch:i});R.current={runtime:t,userRef:o,scopeEpoch:i};let V=useRef(v);V.current=v;let k=useRef(y);k.current=y;let F=useCallback((m,E)=>{if(C.current)return C.current;let T=n((_,I)=>(S({status:_==="cancelled"?"idle":"error",error:I,errorReason:_==="cancelled"?null:_}),Object.freeze({opened:false,reason:_,error:I})),"fail");if(!k.current)return Promise.resolve(T("unavailable",null));let w=e.prepare();if(!w.ok)return Promise.resolve(T(w.reason,null));let W=R.current,de=V.current;S(yt);let Y=(async()=>{let _,I={...h!==null?{returnTo:h}:{},...s?{entry:"chat"}:{},...E!==null?{visitRef:E.visitRef}:{},...E!==null&&E.intent!==null&&E.intent!==void 0?{intent:E.intent}:{}},ce=Object.keys(I).length===0?void 0:I,fe=m===void 0?f:m;try{_=await(ce===void 0?de.createHandoff(fe):de.createHandoff(fe,ce));}catch{return e.abandon(w.value),T("unknown",null)}let K=R.current;if(K.runtime!==W.runtime||K.userRef!==W.userRef||K.scopeEpoch!==W.scopeEpoch)return e.abandon(w.value),T("cancelled",null);if(!_.ok)return e.abandon(w.value),T(U(_.error),_.error);let pe=await e.finish(w.value,_.value);return pe!==null?T(pe,null):(S(qe),Object.freeze(_.value.flowId===void 0?{opened:true}:{opened:true,flowId:_.value.flowId}))})().finally(()=>{C.current===Y&&(C.current=null);});return C.current=Y,Y},[e,f,h,s]),j=useCallback(m=>F(m,null),[F]),O=useCallback((m,E)=>F(void 0,{visitRef:m,intent:E??null}),[F]);return {available:y,isPending:a.isPending||(d?.pending??false),status:c.status,error:c.error,errorReason:c.errorReason,open:j,openVisit:O}}n(We,"useVetVisitWith");function Ye(e){try{e.closed||e.close();}catch{}}n(Ye,"closeQuietly");var mt=Object.freeze({prepare(){let e=null;try{e=typeof window>"u"?null:window.open("about:blank","_blank");}catch{e=null;}if(e===null)return {ok:false,reason:"popupBlocked"};try{e.opener=null;}catch{}return {ok:true,value:{tab:e}}},async finish({tab:e},r){if(e.closed)return "cancelled";try{return e.location.replace(r.url),null}catch{return Ye(e),"popupBlocked"}},abandon({tab:e}){Ye(e);}});function ne(e){return We(mt,e)}n(ne,"useVetVisit");function vt(e,r){if(e===void 0)return {};let t={};return e.backgroundColor!==void 0&&(t.backgroundColor=e.backgroundColor),e.borderColor!==void 0&&(t.borderColor=e.borderColor,t.borderWidth=r??1),e.borderRadius!==void 0&&(t.borderRadius=e.borderRadius),t}n(vt,"slotBox");function Ke(e){return e?.textColor===void 0?{}:{color:e.textColor}}n(Ke,"slotText");function Ge(e,r){let t=vt(e,r),o={};return t.backgroundColor!==void 0&&(o.backgroundColor=t.backgroundColor),t.borderColor!==void 0&&(o.border=`${t.borderWidth??1}px solid ${t.borderColor}`),t.borderRadius!==void 0&&(o.borderRadius=t.borderRadius),o}n(Ge,"slotBoxCss");function $e(e){let r=globalThis.console;try{r?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}n($e,"reportHostFailure");function bt(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}n(bt,"isThenable");function oe(e,...r){if(typeof e=="function")try{let t=e(...r);return bt(t)&&Promise.resolve(t).then(void 0,$e),t}catch(t){$e(t);return}}n(oe,"callHost");var Qe=Object.freeze({visitButton:"Talk to a vet"});function se(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let r of Object.keys(e))se(e[r]);}return e}n(se,"deepFreeze");var Et=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),Je={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},Ze={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},Xe={nano:8,small:9,micro:10,tiny:11,caption:12,bodyTight:13,body:14,subtitle:16,heading:18,verdict:24},gt={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},ht={regular:"400",medium:"500",bold:"700"},_t={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},Rt=0,q="System",H="monospace",Ct=["content","heading","control","compact","badge"];function Tt(e){let r={};for(let t of Ct)r[t]=e;return r}n(Tt,"authoredTierSizes");function er(){return {family:q,mono:H,fontUrl:null,families:{regular:q,medium:q,bold:q,mono:H,monoMedium:H,monoBold:H},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:Xe,tierSizes:Tt(Xe),lineHeight:gt,weight:ht,letterSpacing:_t,scale:1,maxScale:Rt,scaleCaps:Et}}n(er,"baseType");var rr={},ie=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function ae(e){return `cubic-bezier(${e.join(", ")})`}n(ae,"cssCubicBezier");var tr={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:ae(ie.standard),emphasized:ae(ie.emphasized),exit:ae(ie.exit)},reducedMotion:false},wt={brand:"#10462E",brandSoft:"rgba(16,70,46,0.10)",brandSofter:"rgba(16,70,46,0.15)",brandBorder:"rgba(16,70,46,0.18)",borderHairlineGreen:"rgba(16,70,46,0.25)",brandBorderStrong:"rgba(16,70,46,0.55)",brandInk:"#10462E",linkInk:"#10462E",surface:"#FFFFFF",surfaceCream:"#FDFBF8",surfaceSubtle:"#EFE9E3",background:"#FFFFFF",borderRingCream:"#D8D2C8",chatGround:"#FFFFFF",composerFill:"#FDFBF8",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#111111",secondary:"#0E462E",muted:"#6E6660",placeholder:"rgba(61,61,61,0.75)",onBrand:"#FFFFFF",metaCool:"#3D3D3D",timestamp:"rgba(61,61,61,0.75)"},primary:"#10462E",onPrimary:"#FFFFFF",accent:"#10462E",onAccent:"#FFFFFF",accentEdge:"#07C168",success:"#07C168",danger:"#B91C1C",errorRed:"#FF1B00",warningStrong:"#A45610",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.12)",badgeBgCaution:"rgba(217,130,29,0.14)",badgeBgCritical:"rgba(185,28,28,0.12)",badgeBgNeutral:"rgba(110,102,96,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",skeleton:"#EFE9E3",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)"},nr=se({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:wt,space:Je,radius:Ze,type:er(),motion:tr,slots:rr}),St={brand:"#6BD39A",brandSoft:"rgba(107,211,154,0.12)",brandSofter:"rgba(107,211,154,0.18)",brandBorder:"rgba(107,211,154,0.22)",borderHairlineGreen:"rgba(107,211,154,0.28)",brandBorderStrong:"rgba(107,211,154,0.55)",brandInk:"#6BD39A",linkInk:"#6BD39A",surface:"#1C1F23",surfaceCream:"#23272C",surfaceSubtle:"#23272C",background:"#15171A",borderRingCream:"#3A3F45",chatGround:"#1C1F23",composerFill:"#23272C",composerBorder:"rgba(107,211,154,0.75)",shadow:"#000000",text:{primary:"#F5F3F0",secondary:"#A9E4C4",muted:"#9A938C",placeholder:"rgba(255,255,255,0.55)",onBrand:"#0E1F17",metaCool:"#C9C9C9",timestamp:"rgba(245,243,240,0.7)"},primary:"#6BD39A",onPrimary:"#0E1F17",accent:"#6BD39A",onAccent:"#0E1F17",accentEdge:"#34D888",success:"#07C168",danger:"#F87171",errorRed:"#FF6B5B",warningStrong:"#F0A35E",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.18)",badgeBgCaution:"rgba(217,130,29,0.20)",badgeBgCritical:"rgba(185,28,28,0.22)",badgeBgNeutral:"rgba(255,255,255,0.10)",bubbleUser:"#6BD39A",bubbleAssistant:"#1C1F23",skeleton:"#23272C",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)"};se({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:St,space:Je,radius:Ze,type:er(),motion:tr,slots:rr});var or=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),ir=globalThis,le=ir[or]??(ir[or]=createContext(nr));le.displayName??="EverfurThemeContext";function ue(){return useContext(le)}n(ue,"useEverfurTheme");var ar=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});var sr='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',Ft="System";function Ot(e){let r=e.trim();return r.length===0||r===Ft?sr:`${lr(r)}, ${sr}`}n(Ot,"cssFontFamily");function Vt(e){let r=e.trim();return r.length===0||r==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${lr(r)}, ui-monospace, Menlo, Consolas, monospace`}n(Vt,"cssMonoFamily");function lr(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}n(lr,"quote");function ur(e,r){let t=e.type,o=t.families[r];return {fontFamily:r==="mono"||r==="monoMedium"||r==="monoBold"?Vt(o):Ot(o),fontWeight:t.namedFaces[r]?t.weight.regular:t.weight[ar[r]]}}n(ur,"faceCss");var dr=44,Pt=.6;function zt(e){let{petRef:r,children:t,onOpened:o,onError:i,style:a,className:u,controller:l,returnTo:s,usState:f,entry:v,visitRef:b,intent:p}=e,d=ne({...s!==void 0?{returnTo:s}:{},...f!==void 0?{usState:f}:{},...v!==void 0?{entry:v}:{},...r!==void 0?{petRef:r}:{},...l!==void 0?{controller:l}:{}}),y=ue(),h=useMemo(()=>jt(y),[y]),c=useRef(false);if(!d.available)return null;let S=d.status==="opening";return jsx("button",{type:"button",onClick:n(()=>{S||c.current||(c.current=true,(b==null?d.open():d.openVisit(b,p??null)).then(R=>{R.opened?oe(o,R.flowId??null):R.reason!=="cancelled"&&oe(i,R.reason,R.error);}).finally(()=>{c.current=false;}));},"onClick"),"aria-busy":S,"aria-disabled":S,className:u,style:{...h,...S?{opacity:Pt,cursor:"progress"}:null,...a},children:t??Qe.visitButton})}n(zt,"VetVisitButton");function jt(e){let{color:r,space:t,radius:o,type:i,slots:a}=e;return {boxSizing:"border-box",minHeight:dr,minWidth:dr,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,border:0,cursor:"pointer",padding:`${t.sm}px ${t.xl}px`,borderRadius:o.pill,backgroundColor:r.primary,color:r.onPrimary,...ur(e,"medium"),fontSize:i.size.body,...Ge(a.vetVisitButton),...Ke(a.vetVisitButton)}}n(jt,"buttonStyle");export{M as VET_VISIT_INTENTS,zt as VetVisitButton,L as isVetVisitIntent,Jr as parseVetVisitReturn,ne as useVetVisit,U as vetVisitErrorReasonOf};
1
+ import {createContext,useMemo,useRef,useState,useEffect,useSyncExternalStore,useContext,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var zr=Object.defineProperty;var n=(e,r)=>zr(e,"name",{value:r,configurable:true});var we=Symbol.for("@everfur/sdk/televet");function w(){let e=globalThis,r=e[we];if(r!==void 0)return r;let t={presenter:null,snapshot:Object.freeze({request:null,serial:0,activeHost:null}),hosts:[],nextHost:1,listeners:new Set,dailyRegistered:false};return e[we]=t,t}n(w,"televetGlobal");function U(e){let r=w();r.snapshot=Object.freeze({...r.snapshot,...e});for(let t of [...r.listeners])try{t();}catch{}}n(U,"publish");function xe(e){w().presenter=e;}n(xe,"setTelevetPresenter");function Se(){return w().presenter!==null}n(Se,"hasTelevetPresenter");function q(e){let r=w().presenter;if(r===null)return "absent";try{return r(e)===!1?"declined":"presented"}catch(t){return console.warn("[everfur] Your registerEverfurTelevetFlow presenter threw; the in-app visit opened instead.",t),"threw"}}n(q,"callTelevetPresenter");function Fe(e){let r=w();return r.listeners.add(e),()=>{r.listeners.delete(e);}}n(Fe,"subscribeTelevetExperience");function ne(){return w().snapshot}n(ne,"televetExperienceSnapshot");function jr(){return w().hosts.length>0}n(jr,"hasTelevetHost");function ke(e){if(!jr())return false;let r=Object.freeze({...e});return U({request:r,serial:w().snapshot.serial+1}),true}n(ke,"presentTelevetExperience");function oe(){w().snapshot.request!==null&&U({request:null});}n(oe,"dismissTelevetExperience");function Oe(){let e=w(),r=e.nextHost;return e.nextHost+=1,e.hosts=[...e.hosts,r],U({activeHost:e.hosts[0]??null}),r}n(Oe,"claimTelevetHost");function Ve(e){let r=w();r.hosts=r.hosts.filter(o=>o!==e);let t=r.hosts[0]??null;U(t===null?{activeHost:t,request:null}:{activeHost:t});}n(Ve,"releaseTelevetHost");function Dr(e){xe(e);}n(Dr,"registerEverfurTelevetFlow");function Mr(){return Se()}n(Mr,"hasEverfurTelevetFlow");function Nr(e){return q(e)==="presented"}n(Nr,"presentEverfurTelevetFlow");function Pe(e){let r=null;return ()=>{if(r!==null)return r;let t=e();return r=t,t.then(void 0,()=>{r===t&&(r=null);}),t}}n(Pe,"memoizeTelevetLoader");function ze(e){let[r,t]=useState(null);useEffect(()=>{let d=Oe();return t(d),()=>{Ve(d);}},[]);let o=useSyncExternalStore(Fe,ne,ne),a=r!==null&&o.activeHost===r?o.request:null,[u,s]=useState(null),l=a!==null&&u===null;return useEffect(()=>{if(!l)return;let d=true;return e().then(b=>{d&&s(()=>b);},b=>{d&&(console.warn("[everfur] The in-app vet visit could not load its screens.",b),oe());}),()=>{d=false;}},[l,e]),a===null||u===null?null:{module:u,request:a,serial:o.serial,dismiss:oe}}n(ze,"useTelevetExperienceHost");var Ur=Pe(()=>import('@everfur/sdk/web/televet/booking'));function B(){let e=ze(Ur);if(e===null)return null;let{EverfurTelevetDialog:r}=e.module;return jsx(r,{request:e.request,onClose:e.dismiss},e.serial)}n(B,"EverfurTelevetHost");var ie=Object.freeze([Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"DAILY_QUOTA_EXCEEDED",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"FILE_TOO_LARGE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_IN_FLIGHT",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"INVALID_CONTENT_TYPE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"InternalFailureException",envelope:"http_envelope",httpStatus:500,retryable:true}),Object.freeze({wireCode:"MethodNotAllowedException",envelope:"http_envelope",httpStatus:405,retryable:false}),Object.freeze({wireCode:"NotImplementedException",envelope:"http_envelope",httpStatus:501,retryable:false}),Object.freeze({wireCode:"PaymentRequiredException",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ResourceNotFoundException",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"ServiceUnavailableException",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"TIER_UPGRADE_REQUIRED",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ThrottlingException",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"ValidationException",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"accessDenied",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"access_denied",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"device_cipher_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"email_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"event_cursor_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_payload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_not_available",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_unknown",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_required",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_reused",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"insufficientCapability",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"insufficient_scope",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"internal_error",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"invalidRequest",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_client",envelope:"oauth_error",httpStatus:401,retryable:false}),Object.freeze({wireCode:"invalid_client_metadata",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_grant",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_redirect_uri",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),Object.freeze({wireCode:"mcp_request_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"not_found",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"partner_visit_link_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"partner_visit_owner_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"partner_visit_pet_already_mapped",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"payload_too_large",envelope:"http_envelope",httpStatus:413,retryable:false}),Object.freeze({wireCode:"petRefInUse",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"pet_health_list_removals_unconfirmed",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_health_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_not_registered",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"provider_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"rateLimited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"record_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"record_subject_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"record_upload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"records_consent_required",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"sandbox_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"session_required",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"share_limit_reached",envelope:"http_envelope",httpStatus:429,retryable:false}),Object.freeze({wireCode:"slow_down",envelope:"oauth_error",httpStatus:429,retryable:true}),Object.freeze({wireCode:"species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"tenant_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"tenant_has_no_capabilities",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"tenant_resource_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"tenant_surface_not_enabled",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"timeout",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"token_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"unavailable",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);Object.freeze(ie.map(e=>e.wireCode));var Br=Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),De=Object.freeze(ie.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:Br[e.wireCode]}))),Hr=new Map(De.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),Wr=Object.freeze(["http_envelope",...[...new Set(De.map(e=>e.envelope))].filter(e=>e!=="http_envelope").sort()]);function H(e,r){if(typeof e!="string")return;let t=e.trim().toUpperCase();if(t.length!==0)for(let o of [r??"http_envelope",...Wr]){let i=Hr.get(o+t);if(i)return i}}n(H,"contractErrorFor");function Yr(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}n(Yr,"contractDocUrl");function Me(e){return null}n(Me,"publishedDocUrl");var Kr=Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function Ne(e){return Kr[e]}n(Ne,"categoryFor");function Le(e){let r=H(e);if(r)return r.normalized;let t=(e??"").trim().toUpperCase(),o=t.replace(/[^A-Z0-9]/g,"");if(o==="AUTHREJECTED")return "authRejected";if(t.startsWith("AUTH"))return "authExpired";switch(o){case "DAILYQUOTAEXCEEDED":case "QUOTAEXCEEDED":return "quotaExceeded";case "RATELIMITED":case "TOOMANYREQUESTS":return "rateLimited";case "IDEMPOTENCYKEYCONFLICT":case "IDEMPOTENCYCONFLICT":return "idempotencyConflict";case "ACCESSDENIED":case "FORBIDDEN":return "accessDenied";case "NOTFOUND":case "CONVERSATIONNOTFOUND":return "conversationNotFound";case "PETNOTFOUND":return "petNotFound";case "TIMEOUT":case "STREAMTIMEOUT":return "streamTimeout";case "MEDIAUPLOADFAILED":case "UNRECOGNIZEDVIDEOFORMAT":case "FILETOOSMALL":return "mediaUploadFailed";case "MODERATIONBLOCKED":return "moderationBlocked";case "UPSTREAMLLMTIMEOUT":return "upstreamLlmTimeout";case "INTERNALERROR":case "INTERNALSERVERERROR":return "internalError";case "STREAMINCOMPLETE":case "CHATSTREAMINCOMPLETE":return "streamIncomplete";case "INVALIDANALYSISTYPE":case "INVALIDUPLOADPURPOSE":return "unknown";default:return "unknown"}}n(Le,"fromWire");var Gr=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function ae(e){return Gr.has(e)}n(ae,"isAutoRetryable");var $r=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function Ue(e){return ae(e)||$r.has(e)}n(Ue,"isRetryableCode");var Qr=500,se=8e3,qe=4;function Be(e,r=Math.random){let t=Math.max(0,e),o=Math.min(Qr*2**t,se);return Math.floor(r()*o)}n(Be,"backoffDelayMs");var Xr=Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:"This feature isn't available on your account right now.",paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",unknown:"Something went wrong. Please try again."});function le(e){return Xr[e]}n(le,"userFacingError");function He(e,r,t){Object.defineProperty(e,r,{value:t,enumerable:false,writable:false,configurable:false});}n(He,"defineHidden");var Zr=/^[a-z][a-z0-9_]{0,63}$/;function k(e,r){let t=H(r?.wireCode,r?.wireEnvelope),o={code:e,category:Ne(e),retryable:r?.retryable??Ue(e),displayMessage:le(e)};if(r?.httpStatus!==void 0&&(o.httpStatus=r.httpStatus),r?.requestId&&(o.requestId=r.requestId),typeof r?.reasonCode=="string"&&Zr.test(r.reasonCode)&&(o.reasonCode=r.reasonCode),t);return r?.wireMessage&&He(o,"wireMessage",r.wireMessage),r?.raw!==void 0&&r.raw!==null&&He(o,"raw",r.raw),Object.freeze(o)}n(k,"makeEverfurError");function ue(e,r){return Object.freeze(r===void 0?{ok:true,value:e}:{ok:true,value:e,warning:r})}n(ue,"ok");function T(e){return Object.freeze({ok:false,error:e})}n(T,"err");var W=class W extends Error{constructor(r,t){super(t),this.name="EverfurConfigError",this.kind=r,Object.setPrototypeOf(this,W.prototype);}};n(W,"EverfurConfigError");var M=W;function We(e){return Object.freeze({kind:"error",terminal:true,code:e.code,retryable:e.retryable,wireMessage:e.wireMessage,synthesized:e.synthesized,lastEventId:e.lastEventId,serverRequestId:e.serverRequestId??null})}n(We,"errorFrame");function rt(e){let r={};return e.mode==="personalized"?r.authorization=`Bearer ${e.token}`:r["x-everfur-partner-key"]=e.publishableKey,e.userRef&&(r["x-everfur-user-ref"]=e.userRef),e.sessionId&&(r["x-everfur-session-id"]=e.sessionId),r}n(rt,"authHeaders");function N(e,r){return {...e,headers:{...tt(e.headers),...rt(r)}}}n(N,"withAuthHeaders");function tt(e){if(!e)return {};let r={};for(let[t,o]of Object.entries(e)){let i=t.toLowerCase();i==="authorization"||i==="x-everfur-partner-key"||(r[t]=o);}return r}n(tt,"stripAuthHeaders");async function Ye(e,r){if(r.mode==="anonymous")return r.transport.request(N(e,{mode:"anonymous",publishableKey:r.publishableKey,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));let t;try{t=await r.identity.currentToken();}catch{return T(de())}let o=await r.transport.request(N(e,{mode:"personalized",token:t,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));if(o.ok||o.error.httpStatus!==401)return o;let i;try{i=await r.identity.currentToken({forceRefresh:!0});}catch{return T(de())}let a=await r.transport.request(N(e,{mode:"personalized",token:i,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));return !a.ok&&a.error.httpStatus===401?T(de(a.error.httpStatus)):a}n(Ye,"authedSend");function de(e){return k("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}n(de,"authRejectedError");function Ke(e){return k("internalError",{retryable:true,wireMessage:nt(e)})}n(Ke,"networkError");function nt(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}n(nt,"describeCause");var ot=3e4,it=se*2,at="idempotency-key",st=new Set(["POST","PUT","PATCH","DELETE"]),lt=Object.freeze({onEvent(){}}),ut=Object.freeze({setTimeout:n((e,r)=>setTimeout(e,r),"setTimeout"),clearTimeout:n(e=>clearTimeout(e),"clearTimeout"),now:n(()=>Date.now(),"now")});function dt(e){let r=e.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return r.length===0?null:`efs_${r}`.slice(0,128)}n(dt,"seededIdempotencyKey");function $e(e){let r=e.observer??lt,t=e.timers??ut,o=e.rng??Math.random,i=e.sleep??((f,p)=>Tt(f,t,p)),a=e.maxAttempts??qe,u=e.unaryTimeoutMs??ot,s=e.newIdempotencyKey??ft(),l=n(f=>{try{r.onEvent(f);}catch{}},"emit");async function d(f,p,y){let h=y?.maxAttempts,c=Math.max(1,h??a),O=y?.idempotent??st.has(p.method),x=y?.idempotencyKey===void 0?null:dt(y.idempotencyKey),_=O?x??s():null,S=ct(p,_),I=0;for(;;){let E=n(R=>Object.freeze({call:f,method:p.method,path:p.path,attempt:I,..._?{idempotencyKey:_}:{},...R}),"stamp");l(E({phase:"attempt"}));let A=_t(u,t),P=Rt(A.signal,p.signal),z;try{z=await Ye({...S,signal:P.signal},e.auth);}catch(R){z=T(Ke(R));}finally{P.dispose(),A.cancel();}if(z.ok)return l(E({phase:"settled",ok:true,reason:"ok"})),z;let F=z.error,m=yt(F,I,{maxAttempts:c,rng:o,now:t.now(),aborted:p.signal?.aborted===true,...h!==void 0?{perCallMaxAttempts:h}:{},...e.errorPolicy!==void 0?{policy:e.errorPolicy}:{}}),g={ok:false,code:F.code,reason:m.reason,...F.httpStatus!==void 0?{httpStatus:F.httpStatus}:{},...F.requestId!==void 0?{requestId:F.requestId}:{}};if(!m.retry)return l(E({phase:"settled",...g})),T(F);if(l(E({phase:"retry",...g,delayMs:m.delayMs})),await i(m.delayMs,p.signal),p.signal?.aborted===true)return l(E({phase:"settled",...g,reason:"aborted"})),T(F);I+=1;}}n(d,"send");async function b(f){return N(f,await ht(e.auth))}n(b,"authorize");async function*v(f,p,y){l(Object.freeze({call:f,phase:"stream.open",method:p.method,path:p.path,attempt:0}));try{yield*e.auth.transport.stream(p,y);}catch{yield We({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:null});}}return n(v,"stream"),Object.freeze({send:d,authorize:b,stream:v})}n($e,"createRequestFunnel");function ct(e,r){let t={};for(let[o,i]of Object.entries(e.headers??{}))o.toLowerCase()!==at&&(t[o]=i);return r!==null&&(t["Idempotency-Key"]=r),{...e,headers:t}}n(ct,"assembleHeaders");function ft(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}n(ft,"defaultIdempotencyKeyFactory");var pt=10;function yt(e,r,t){if(t.aborted)return {retry:false,reason:"aborted"};let o=mt(e);if(o==="quota")return {retry:false,reason:"daily-quota-exhausted"};if(o!=="burst"&&!ae(e.code))return {retry:false,reason:"terminal-code"};let i=o==="burst"?"burst-throttle":"retryable-code";if(n(()=>{if(t.policy===void 0)return false;try{return !t.policy.shouldRetry(e.code,r)}catch{return false}},"policyVetoedRetry")())return {retry:false,reason:"terminal-code"};let u=n(()=>{if(t.policy===void 0)return null;let d;try{d=t.policy.maxAttempts(e.code);}catch{return null}return typeof d!="number"||!Number.isFinite(d)?null:Math.max(1,Math.min(pt,Math.floor(d)))},"policyCeiling"),s=t.perCallMaxAttempts??u()??t.maxAttempts;if(r+1>=s)return {retry:false,reason:"attempts-exhausted"};let l=vt(e,t.now);return l!==null?l>it?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:l}:{retry:true,reason:i,delayMs:Be(r,t.rng)}}n(yt,"decideRetry");function mt(e){let r=e.code==="unknown"?Le(gt(e.raw)):e.code;return r==="quotaExceeded"?"quota":r==="rateLimited"||e.httpStatus===429?"burst":null}n(mt,"throttleKind");function vt(e,r){let t=bt(e.raw);if(t===null)return null;let o=t-r;return o>0?o:0}n(vt,"retryOverrideMs");function bt(e){for(let r of Qe(e)){let t=r.resets_at,o=Et(t);if(o!==null)return o}return null}n(bt,"findResetsAt");function Qe(e){if(!Ge(e))return [];let r=[e];for(let t of ["error","detail"]){let o=e[t];Ge(o)&&r.push(o);}return r}n(Qe,"candidateScopes");function Et(e){if(typeof e=="number"&&Number.isFinite(e))return e<1e11?Math.round(e*1e3):Math.round(e);if(typeof e=="string"&&e.trim().length>0){let r=Date.parse(e);return Number.isFinite(r)?r:null}return null}n(Et,"parseInstantMs");function gt(e){for(let r of Qe(e)){let t=r.code;if(typeof t=="string"&&t.length>0)return t}return null}n(gt,"rawWireCode");function Ge(e){return typeof e=="object"&&e!==null}n(Ge,"isRecord");async function ht(e){return e.mode==="anonymous"?{mode:"anonymous",publishableKey:e.publishableKey,userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}:{mode:"personalized",token:await e.identity.currentToken(),userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}}n(ht,"resolveDeviceAuth");function _t(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(_t,"boundedSignal");function Rt(e,r){let t=n(()=>{},"noop");if(!r)return {signal:e,dispose:t};let o=new AbortController;if(e.aborted||r.aborted)return o.abort(),{signal:o.signal,dispose:t};let i=n(()=>o.abort(),"onAbort");return e.addEventListener("abort",i,{once:true}),r.addEventListener("abort",i,{once:true}),{signal:o.signal,dispose:n(()=>{e.removeEventListener("abort",i),r.removeEventListener("abort",i);},"dispose")}}n(Rt,"mergeSignals");function Tt(e,r,t){return e<=0||t?.aborted===true?Promise.resolve():new Promise(o=>{let i=r.setTimeout(()=>{t?.removeEventListener("abort",a),o();},e),a=n(()=>{r.clearTimeout(i),o();},"onAbort");t?.addEventListener("abort",a,{once:true});})}n(Tt,"delayAbortable");var Y=Object.freeze(["visit","join","summary","messages"]);function K(e){return typeof e=="string"&&Y.includes(e)}n(K,"isVetVisitIntent");var Ct="/widget/v1/televet/handoffs",wt="/widget/v1/televet/availability",xt="/widget/v1/televet/chat-entry",St=/^[a-z0-9][a-z0-9_-]{0,39}$/,nr=/^[A-Za-z0-9_-]{22}$/,Xe="everfur_flow",Ze=32,Je=128,er=64;function G(e){let r=e.httpStatus;switch(e.code){case "sessionRequired":return "sessionRequired";case "authExpired":case "authRejected":return "authRejected";case "sdkUpdateRequired":return "sdkUpdateRequired";case "validationFailed":return "invalidRequest";case "rateLimited":case "quotaExceeded":return "rateLimited";}return r===void 0?e.code==="internalError"?"network":"unknown":r===429?"rateLimited":r===404?"unavailable":r===403?"accessDenied":r===401?"authRejected":r===400||r===422?"invalidRequest":r>=500?"serverError":"unknown"}n(G,"vetVisitErrorReasonOf");function rr(e){return T(k("validationFailed",{retryable:false,wireMessage:e}))}n(rr,"invalid");function ce(e){return T(k("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}n(ce,"unusable");function Ft(e,r){let t={};e!==void 0&&(t.pet_ref=e);let o=r?.returnTo;if(o!=null){if(typeof o!="string"||!St.test(o))return {ok:false,message:"returnTo must be a registered return destination key"};t.return_to=o;}let i=r?.entry;if(i!=null){if(i!=="chat"||e===void 0)return {ok:false,message:"entry 'chat' needs the pet the chat is about"};t.entry=i;}let a=r?.visitRef,u=r?.intent,s=a!=null;if(s){let l=typeof a=="string"?a.trim():"";if(l.length<1||[...l].length>er)return {ok:false,message:`visitRef must be 1..${er} characters`};t.visit_ref=l;}if(u!=null){if(!s)return {ok:false,message:"intent needs the visitRef it opens"};if(!K(u))return {ok:false,message:`intent must be one of ${Y.join(", ")}`};t.intent=u;}return {ok:true,body:t}}n(Ft,"handoffBody");function kt(e){if(typeof e!="object"||e===null)return null;let{visit_ref:r,intent:t}=e;return typeof r!="string"||r.length===0||!K(t)?null:Object.freeze({visitRef:r,intent:t})}n(kt,"parseVisitEcho");function or(e){let r=e.funnel??$e({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),t=e.telemetry,o=n(i=>(tr(t,"televet.visit.handoff_failed",{reason:G(i)}),T(i)),"failed");return {async createHandoff(i,a){let u;if(i!=null){let c=typeof i=="string"?[...i].length:0;if(c<1||c>Je)return o(k("validationFailed",{retryable:false,wireMessage:`pet_ref must be 1..${Je} characters`}));u=i;}let s=Ft(u,a);if(!s.ok){let c=rr(s.message);return c.ok?c:o(c.error)}let l=s.body,d=await r.send("televet.visit.handoff",{method:"POST",path:Ct,body:l},{idempotent:false,maxAttempts:1});if(!d.ok)return o(d.error);let b=Vt(d.value),v=l.return_to!==void 0,f=v?d.value?.flow_id:void 0;if(v&&(typeof f!="string"||!nr.test(f))){let c=ce("the handoff response carried no usable return flow id");return c.ok?c:o(c.error)}let p=l.visit_ref!==void 0,y=p?kt(d.value?.visit):null;if(p&&y===null){let c=ce("the handoff response did not confirm the visit it opens");return c.ok?c:o(c.error)}let h=b===null?null:Object.freeze({...b,...v?{flowId:f}:{},...y!==null?{visit:y}:{}});return h===null?o(k("internalError",{retryable:false,httpStatus:502,wireMessage:"the handoff response carried no usable visit url"})):(tr(t,"televet.visit.handoff_created",{pet_scoped:l.pet_ref!==void 0}),ue(h))},async checkAvailability(i){if(typeof i!="string"||i.length>Ze)return rr(`state must be at most ${Ze} characters`);let a=await r.send("televet.visit.availability",{method:"POST",path:wt,body:{state:i}},{idempotent:false,maxAttempts:1});if(!a.ok)return T(a.error);let u=a.value?.available;return typeof u!="boolean"?ce("the availability response carried no usable answer"):ue(Object.freeze({available:u}))},async chatEntryOpen(){try{let i=await r.send("televet.visit.chat_entry",{method:"GET",path:xt},{maxAttempts:1});return i.ok&&i.value?.open===!0}catch{return false}}}}n(or,"createVetVisitController");function Ot(e){if(typeof e!="string")return null;let r=e.indexOf("#"),t=r<0?e:e.slice(0,r),o=t.indexOf("?");if(o<0)return null;let i=t.slice(o+1).split("&").filter(a=>a.startsWith(`${Xe}=`)).map(a=>a.slice(Xe.length+1));return i.length!==1||!nr.test(i[0]??"")?null:Object.freeze({flowId:i[0]})}n(Ot,"parseVetVisitReturn");function Vt(e){if(typeof e!="object"||e===null)return null;let{url:r,expires_at:t}=e;return typeof r!="string"||typeof t!="string"||t.length===0||!zt(r)?null:Object.freeze({url:r,expiresAt:t})}n(Vt,"parseHandoff");var It=new Set(["localhost","127.0.0.1","[::1]"]),At=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/,Pt=/[\s\u0000-\u001f\u007f]/;function zt(e){if(Pt.test(e))return false;let r=At.exec(e);if(r===null)return false;let t=(r[1]??"").toLowerCase(),o=r[2]??"";if(o.length===0||o.includes("@"))return false;let i=o.replace(/:\d+$/,"").toLowerCase(),a=t==="https",u=t==="http"&&It.has(i);if(!a&&!u)return false;let s=e.indexOf("#");if(s<0)return false;let l=e.slice(s);return l.startsWith("#h=")&&l.length>3}n(zt,"isOpenableVisitUrl");function tr(e,r,t){if(e)try{e.track(r,t);}catch{}}n(tr,"safeTrack");var ir=Symbol.for("@everfur/sdk#EverfurContext@v1"),ar=globalThis,sr=ar[ir]??(ar[ir]=createContext(null));sr.displayName??="EverfurContext";function $(){let e=useContext(sr);if(e===null)throw new M("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}n($,"useEverfurContext");var Mt=Object.freeze({chat:Object.freeze(["chat.message.create"]),records:Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:Object.freeze(["records.clinic.create"]),video:Object.freeze(["video.gait.execute"]),photo:Object.freeze(["photo.checkup.execute"]),animations:Object.freeze(["animations.state.read"]),televet:Object.freeze(["televet.visit.create"])});function Nt(e){return Mt[e]}n(Nt,"requires");function lr(e,r,t){let o=Nt(e),i=new Map;for(let s of r)i.set(s.resource,s);if(t?.isPending===true&&o.some(s=>!i.has(s)))return fe({name:e,enabled:false,isPending:true,limits:{}});let a=Lt(o,i);return o.filter(s=>i.get(s)?.granted!==true).length===0?fe({name:e,enabled:true,isPending:false,limits:a}):fe({name:e,enabled:false,isPending:false,limits:a,disabled:Ut(o,i)})}n(lr,"decideCapability");function Lt(e,r){let t={};for(let o of e){let i=r.get(o)?.limits;if(i)for(let[a,u]of Object.entries(i)){let s=t[a];t[a]=s===void 0?u:Math.min(s,u);}}return t}n(Lt,"mergeLimits");function Ut(e,r){for(let t of e){let o=r.get(t)?.disabled;if(o)return Object.freeze({reason:o.reason,level:o.level,recoverable:o.recoverable})}return Object.freeze({reason:le("accessDenied"),level:"user_entitlement",recoverable:false})}n(Ut,"disabledFor");function fe(e){let r={name:e.name,enabled:e.enabled,isPending:e.isPending,limits:Object.freeze({...e.limits})};return e.disabled!==void 0&&(r.disabled=e.disabled),Object.freeze(r)}n(fe,"freezeDecision");function ur(e){let{runtime:r}=$(),t=r.entitlements,o=useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return useMemo(()=>lr(e,o.decisions,{isPending:o.isPending}),[e,o])}n(ur,"useCapability");function dr(e){let r=globalThis.console;try{r?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}n(dr,"reportHostFailure");function Ht(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}n(Ht,"isThenable");function j(e,...r){if(typeof e=="function")try{let t=e(...r);return Ht(t)&&Promise.resolve(t).then(void 0,dr),t}catch(t){dr(t);return}}n(j,"callHost");var cr=false;function Q(e,r){return r!==void 0?(j(r,e),"onStartInApp"):q(e)==="presented"?"presenter":ke(e)?"experience":(cr||(cr=true,console.warn("[everfur] A vet visit had nowhere to open: mount <EverfurTelevetHost /> in your EverfurProvider, or pass prefer: 'redirect'.")),null)}n(Q,"openVetVisitInApp");var pe=Object.freeze({status:"idle",error:null,errorReason:null});function Yt(e,r,t){let{usState:o,chat:i,scope:a}=t,u=r&&(o!==null||i),s=`${o??""}|${i?"chat":""}`,[l,d]=useState(null);if(useEffect(()=>{if(!u)return;let v=true,f=e.current;return d(null),n(async()=>{try{if(i&&!(f.chatEntryOpen&&await f.chatEntryOpen()))return !1;if(o===null)return !0;if(!f.checkAvailability)return !1;let y=await f.checkAvailability(o);return y.ok&&y.value.available}catch{return false}},"ask")().then(y=>{v&&d({key:s,open:y});}),()=>{v=false;}},[u,s,o,i,a,e]),!u)return null;let b=l!==null&&l.key===s;return {open:b&&l.open,pending:!b}}n(Yt,"usePreflight");var Kt=Object.freeze({status:"opening",error:null,errorReason:null});function yr(e,r={}){let{runtime:t,userRef:o,scopeEpoch:i}=$(),a=ur("televet"),u=a.enabled&&o!==null,s=r.usState??null,l=r.entry==="chat",d=r.petRef??null,b=r.prefer==="redirect",v=useMemo(()=>{if(r.controller)return r.controller;let{services:m}=t.registry;return or({auth:m.authFor(o),telemetry:m.telemetry,...m.errorPolicy?{errorPolicy:m.errorPolicy}:{}})},[t,o,i,r.controller]),f=useRef(v);f.current=v;let p=useMemo(()=>({runtime:t,userRef:o,scopeEpoch:i}),[t,o,i]),y=Yt(f,u,{usState:s,chat:l,scope:p}),h=u&&(y===null||y.open)&&(!l||d!==null),c=r.returnTo??null,[O,x]=useState(pe),_=useRef(null),S=useRef({runtime:t,userRef:o,scopeEpoch:i});S.current={runtime:t,userRef:o,scopeEpoch:i};let I=useRef(v);I.current=v;let E=useRef(h);E.current=h;let A=useCallback((m,g)=>{if(_.current)return _.current;let R=n((C,D)=>(x({status:C==="cancelled"?"idle":"error",error:D,errorReason:C==="cancelled"?null:C}),Object.freeze({opened:false,reason:C,error:D})),"fail");if(!E.current)return Promise.resolve(R("unavailable",null));let V=e.prepare();if(!V.ok)return Promise.resolve(R(V.reason,null));let ee=S.current,_e=I.current;x(Kt);let re=(async()=>{let C,D={...c!==null?{returnTo:c}:{},...l?{entry:"chat"}:{},...g!==null?{visitRef:g.visitRef}:{},...g!==null&&g.intent!==null&&g.intent!==void 0?{intent:g.intent}:{}},Re=Object.keys(D).length===0?void 0:D,Te=m===void 0?d:m;try{C=await(Re===void 0?_e.createHandoff(Te):_e.createHandoff(Te,Re));}catch{return e.abandon(V.value),R("unknown",null)}let te=S.current;if(te.runtime!==ee.runtime||te.userRef!==ee.userRef||te.scopeEpoch!==ee.scopeEpoch)return e.abandon(V.value),R("cancelled",null);if(!C.ok)return e.abandon(V.value),R(G(C.error),C.error);let Ce=await e.finish(V.value,C.value);return Ce!==null?R(Ce,null):(x(pe),Object.freeze(C.value.flowId===void 0?{opened:true}:{opened:true,flowId:C.value.flowId}))})().finally(()=>{_.current===re&&(_.current=null);});return _.current=re,re},[e,d,c,l]),P=useCallback((m,g)=>{if(!E.current)return x({status:"error",error:null,errorReason:"unavailable"}),Promise.resolve(Object.freeze({opened:false,reason:"unavailable",error:null}));let R=m===void 0?d:m,V={...R!==null?{petRef:R}:{},...s!==null?{usState:s}:{},...g!==null?{visitRef:g.visitRef,intent:g.intent}:{}};return Q(V)===null?(x({status:"error",error:null,errorReason:"unavailable"}),Promise.resolve(Object.freeze({opened:false,reason:"unavailable",error:null}))):(x(pe),Promise.resolve(Object.freeze({opened:true})))},[d,s]),z=useCallback(m=>b?A(m,null):P(m,null),[b,A,P]),F=useCallback((m,g)=>b?A(void 0,{visitRef:m,intent:g??null}):P(void 0,{visitRef:m,intent:g??null}),[b,A,P]);return {available:h,isPending:a.isPending||(y?.pending??false),status:O.status,error:O.error,errorReason:O.errorReason,open:z,openVisit:F}}n(yr,"useVetVisitWith");function mr(e){try{e.closed||e.close();}catch{}}n(mr,"closeQuietly");var Gt=Object.freeze({prepare(){let e=null;try{e=typeof window>"u"?null:window.open("about:blank","_blank");}catch{e=null;}if(e===null)return {ok:false,reason:"popupBlocked"};try{e.opener=null;}catch{}return {ok:true,value:{tab:e}}},async finish({tab:e},r){if(e.closed)return "cancelled";try{return e.location.replace(r.url),null}catch{return mr(e),"popupBlocked"}},abandon({tab:e}){mr(e);}});function ye(e){return yr(Gt,e)}n(ye,"useVetVisit");function $t(e,r){if(e===void 0)return {};let t={};return e.backgroundColor!==void 0&&(t.backgroundColor=e.backgroundColor),e.borderColor!==void 0&&(t.borderColor=e.borderColor,t.borderWidth=r??1),e.borderRadius!==void 0&&(t.borderRadius=e.borderRadius),t}n($t,"slotBox");function vr(e){return e?.textColor===void 0?{}:{color:e.textColor}}n(vr,"slotText");function br(e,r){let t=$t(e,r),o={};return t.backgroundColor!==void 0&&(o.backgroundColor=t.backgroundColor),t.borderColor!==void 0&&(o.border=`${t.borderWidth??1}px solid ${t.borderColor}`),t.borderRadius!==void 0&&(o.borderRadius=t.borderRadius),o}n(br,"slotBoxCss");var Er=Object.freeze({visitButton:"Talk to a vet"});function be(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let r of Object.keys(e))be(e[r]);}return e}n(be,"deepFreeze");var Qt=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),hr={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},_r={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},gr={nano:8,small:9,micro:10,tiny:11,caption:12,bodyTight:13,body:14,subtitle:16,heading:18,verdict:24},Xt={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},Zt={regular:"400",medium:"500",bold:"700"},Jt={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},en=0,Z="System",J="monospace",rn=["content","heading","control","compact","badge"];function tn(e){let r={};for(let t of rn)r[t]=e;return r}n(tn,"authoredTierSizes");function Rr(){return {family:Z,mono:J,fontUrl:null,families:{regular:Z,medium:Z,bold:Z,mono:J,monoMedium:J,monoBold:J},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:gr,tierSizes:tn(gr),lineHeight:Xt,weight:Zt,letterSpacing:Jt,scale:1,maxScale:en,scaleCaps:Qt}}n(Rr,"baseType");var Tr={},me=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function ve(e){return `cubic-bezier(${e.join(", ")})`}n(ve,"cssCubicBezier");var Cr={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:ve(me.standard),emphasized:ve(me.emphasized),exit:ve(me.exit)},reducedMotion:false},nn={brand:"#10462E",brandSoft:"rgba(16,70,46,0.10)",brandSofter:"rgba(16,70,46,0.15)",brandBorder:"rgba(16,70,46,0.18)",borderHairlineGreen:"rgba(16,70,46,0.25)",brandBorderStrong:"rgba(16,70,46,0.55)",brandInk:"#10462E",linkInk:"#10462E",surface:"#FFFFFF",surfaceCream:"#FDFBF8",surfaceSubtle:"#EFE9E3",background:"#FFFFFF",borderRingCream:"#D8D2C8",chatGround:"#FFFFFF",composerFill:"#FDFBF8",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#111111",secondary:"#0E462E",muted:"#6E6660",placeholder:"rgba(61,61,61,0.75)",onBrand:"#FFFFFF",metaCool:"#3D3D3D",timestamp:"rgba(61,61,61,0.75)"},primary:"#10462E",onPrimary:"#FFFFFF",accent:"#10462E",onAccent:"#FFFFFF",accentEdge:"#07C168",success:"#07C168",danger:"#B91C1C",errorRed:"#FF1B00",warningStrong:"#A45610",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.12)",badgeBgCaution:"rgba(217,130,29,0.14)",badgeBgCritical:"rgba(185,28,28,0.12)",badgeBgNeutral:"rgba(110,102,96,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",skeleton:"#EFE9E3",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)"},wr=be({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:nn,space:hr,radius:_r,type:Rr(),motion:Cr,slots:Tr}),on={brand:"#6BD39A",brandSoft:"rgba(107,211,154,0.12)",brandSofter:"rgba(107,211,154,0.18)",brandBorder:"rgba(107,211,154,0.22)",borderHairlineGreen:"rgba(107,211,154,0.28)",brandBorderStrong:"rgba(107,211,154,0.55)",brandInk:"#6BD39A",linkInk:"#6BD39A",surface:"#1C1F23",surfaceCream:"#23272C",surfaceSubtle:"#23272C",background:"#15171A",borderRingCream:"#3A3F45",chatGround:"#1C1F23",composerFill:"#23272C",composerBorder:"rgba(107,211,154,0.75)",shadow:"#000000",text:{primary:"#F5F3F0",secondary:"#A9E4C4",muted:"#9A938C",placeholder:"rgba(255,255,255,0.55)",onBrand:"#0E1F17",metaCool:"#C9C9C9",timestamp:"rgba(245,243,240,0.7)"},primary:"#6BD39A",onPrimary:"#0E1F17",accent:"#6BD39A",onAccent:"#0E1F17",accentEdge:"#34D888",success:"#07C168",danger:"#F87171",errorRed:"#FF6B5B",warningStrong:"#F0A35E",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.18)",badgeBgCaution:"rgba(217,130,29,0.20)",badgeBgCritical:"rgba(185,28,28,0.22)",badgeBgNeutral:"rgba(255,255,255,0.10)",bubbleUser:"#6BD39A",bubbleAssistant:"#1C1F23",skeleton:"#23272C",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)"};be({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:on,space:hr,radius:_r,type:Rr(),motion:Cr,slots:Tr});var xr=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),Sr=globalThis,Ee=Sr[xr]??(Sr[xr]=createContext(wr));Ee.displayName??="EverfurThemeContext";function ge(){return useContext(Ee)}n(ge,"useEverfurTheme");var Fr=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});var kr='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',ln="System";function un(e){let r=e.trim();return r.length===0||r===ln?kr:`${Or(r)}, ${kr}`}n(un,"cssFontFamily");function dn(e){let r=e.trim();return r.length===0||r==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${Or(r)}, ui-monospace, Menlo, Consolas, monospace`}n(dn,"cssMonoFamily");function Or(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}n(Or,"quote");function Vr(e,r){let t=e.type,o=t.families[r];return {fontFamily:r==="mono"||r==="monoMedium"||r==="monoBold"?dn(o):un(o),fontWeight:t.namedFaces[r]?t.weight.regular:t.weight[Fr[r]]}}n(Vr,"faceCss");var Ir=44,pn=.6;function yn(e){let{petRef:r,children:t,onOpened:o,onError:i,style:a,className:u,controller:s,returnTo:l,usState:d,entry:b,visitRef:v,intent:f,onStartInApp:p,prefer:y}=e,h=y==="redirect",c=ye({...l!==void 0?{returnTo:l}:{},...d!==void 0?{usState:d}:{},...b!==void 0?{entry:b}:{},...r!==void 0?{petRef:r}:{},...s!==void 0?{controller:s}:{},prefer:h?"redirect":"in-app"}),O=ge(),x=useMemo(()=>mn(O),[O]),_=useRef(false);if(!c.available)return jsxs(Fragment,{children:[null,jsx(B,{})]});let S=c.status==="opening";return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:n(()=>{if(!(S||_.current)){if(!h){let E={...r!==void 0?{petRef:r}:{},...d!==void 0?{usState:d}:{},...v!=null?{visitRef:v,intent:f??null}:{}};Q(E,p)===null&&j(i,"unavailable",null);return}_.current=true,(v==null?c.open():c.openVisit(v,f??null)).then(E=>{E.opened?j(o,E.flowId??null):E.reason!=="cancelled"&&j(i,E.reason,E.error);}).finally(()=>{_.current=false;});}},"onClick"),"aria-busy":S,"aria-disabled":S,className:u,style:{...x,...S?{opacity:pn,cursor:"progress"}:null,...a},children:t??Er.visitButton}),jsx(B,{})]})}n(yn,"VetVisitButton");function mn(e){let{color:r,space:t,radius:o,type:i,slots:a}=e;return {boxSizing:"border-box",minHeight:Ir,minWidth:Ir,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,border:0,cursor:"pointer",padding:`${t.sm}px ${t.xl}px`,borderRadius:o.pill,backgroundColor:r.primary,color:r.onPrimary,...Vr(e,"medium"),fontSize:i.size.body,...br(a.vetVisitButton),...vr(a.vetVisitButton)}}n(mn,"buttonStyle");export{B as EverfurTelevetHost,Y as VET_VISIT_INTENTS,yn as VetVisitButton,Mr as hasEverfurTelevetFlow,K as isVetVisitIntent,Ot as parseVetVisitReturn,Nr as presentEverfurTelevetFlow,Dr as registerEverfurTelevetFlow,ye as useVetVisit,G as vetVisitErrorReasonOf};