@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
@@ -0,0 +1,144 @@
1
+ import { ReactNode, CSSProperties } from 'react';
2
+ import { T as TelemetryPort } from '../../../TelemetryPort-BDNr00hu.cjs';
3
+ export { V as VetCallPhase, i as isSafeRoomUrl, a as isUsableRoomCredential } from '../../../callRoom-B_EqaUzx.cjs';
4
+ export { V as VET_CALL_CONSULT_MINUTES, a as VET_CALL_COPY } from '../../../callCopy-rDH9JTFo.cjs';
5
+ import '../../../EverfurError-DmELDpXp.cjs';
6
+
7
+ /** The Daily events the call surface subscribes to. */
8
+ type VetCallEvent = 'joined-meeting' | 'participant-joined' | 'participant-updated' | 'participant-left' | 'left-meeting' | 'error';
9
+ type VetCallHandler = (payload?: unknown) => void;
10
+ /** One participant in the room, narrowed to what the call surface reads. */
11
+ interface VetCallParticipant {
12
+ readonly local?: boolean;
13
+ }
14
+ /**
15
+ * The Daily Prebuilt frame, narrowed to the six members the call surface calls. Narrow on purpose: the SDK
16
+ * never asks for host powers. `is_owner` is the CLINICIAN's and the server decides it when it mints the
17
+ * token; it starts recording and grants admit/eject, and nothing here requests either.
18
+ */
19
+ interface VetCallFrame {
20
+ join(options: {
21
+ readonly url: string;
22
+ readonly token: string;
23
+ readonly userName?: string | undefined;
24
+ }): Promise<unknown>;
25
+ leave(): Promise<unknown>;
26
+ destroy(): Promise<unknown>;
27
+ participants(): Record<string, VetCallParticipant>;
28
+ on(event: VetCallEvent, handler: VetCallHandler): unknown;
29
+ off(event: VetCallEvent, handler: VetCallHandler): unknown;
30
+ }
31
+ /** The shape of `@daily-co/daily-js` this package uses, and nothing else. */
32
+ interface EverfurDailyModule {
33
+ createFrame(container: HTMLElement, options?: Record<string, unknown>): VetCallFrame;
34
+ }
35
+ /**
36
+ * The thunk a partner registers. Typically `() => import('@daily-co/daily-js')`. A synchronous return is
37
+ * accepted too, for a partner that already holds the module.
38
+ */
39
+ type EverfurDailyLoader = () => unknown;
40
+ /** The settled outcome of a guarded load. Mirrors `OptionalModule` from the core ports, and never throws. */
41
+ type EverfurDailyLoad = {
42
+ readonly available: true;
43
+ readonly module: EverfurDailyModule;
44
+ } | {
45
+ readonly available: false;
46
+ readonly module: null;
47
+ readonly reason: string;
48
+ };
49
+ /**
50
+ * DEVELOPER-FACING, never rendered to a member. It is handed to `onUnavailable` and written to
51
+ * `console.warn` once, so a partner who mounts the call surface without the peer reads what to do instead of
52
+ * watching a blank box. End-user copy is never authored in this repository.
53
+ */
54
+ declare const EVERFUR_DAILY_SETUP: string;
55
+ /** A present-but-wrong-shape module (a version whose surface drifted) is treated as unavailable, not trusted. */
56
+ declare function isEverfurDailyModule(candidate: unknown): candidate is EverfurDailyModule;
57
+ /**
58
+ * Register the Daily module for the in-page vet call. Call it ONCE, in your app entry, before any Everfur
59
+ * call surface mounts:
60
+ *
61
+ * ```ts
62
+ * import { registerEverfurDaily } from '@everfur/sdk/web/televet/call';
63
+ * registerEverfurDaily(() => import('@daily-co/daily-js'));
64
+ * ```
65
+ *
66
+ * Passing `null` unregisters it, which is what a test does between cases. Registering clears the memo, so a
67
+ * later registration always wins over an earlier failed load.
68
+ */
69
+ declare function registerEverfurDaily(next: EverfurDailyLoader | null): void;
70
+ /**
71
+ * The guarded load: a missing loader, a throwing or rejecting loader and a wrong-shape module all settle to
72
+ * `{ available: false }`. NEVER throws, never rejects, and never returns a partially usable module.
73
+ *
74
+ * Memoized on the PROMISE, not on its result, so two call surfaces mounting in the same tick share one
75
+ * network fetch of the chunk rather than racing two.
76
+ */
77
+ declare function loadEverfurDaily(): Promise<EverfurDailyLoad>;
78
+
79
+ /** Why the call surface refused to render. Both values are DEVELOPER-facing, never shown to a member. */
80
+ type VetCallUnavailableReason = 'dailyMissing' | 'roomUnusable';
81
+ interface EverfurVetCallProps {
82
+ /** The `room_url` the server minted for this consult. Must be https; anything else is refused. */
83
+ readonly roomUrl: string;
84
+ /** The short-lived, per-participant join token. NEVER rendered, NEVER logged, NEVER a telemetry prop. */
85
+ readonly token: string;
86
+ /** Called once the member has left, so the host can navigate away. Fires exactly once per mounted call. */
87
+ readonly onLeave: () => void;
88
+ /** Shown in the lobby while the clinician has not joined. Null in production today; never invented. */
89
+ readonly clinicianName?: string | null | undefined;
90
+ /** The pet's display name for the lobby's prep line; absent, the pet-free form is used. */
91
+ readonly petName?: string | null | undefined;
92
+ /** Rendered as the participant name inside the call. Absent, Daily uses its own default. */
93
+ readonly displayName?: string | undefined;
94
+ /**
95
+ * Host/test seam: the Daily module, instead of the one `registerEverfurDaily` registered. A partner with
96
+ * its own module resolution passes it here and calls no register function at all.
97
+ */
98
+ readonly daily?: EverfurDailyModule | undefined;
99
+ /** Your analytics sink for the two call events. Defaults to a no-op; never receives a credential. */
100
+ readonly telemetry?: TelemetryPort | undefined;
101
+ /**
102
+ * Called instead of rendering when the call cannot run, with a developer-facing explanation.
103
+ * `dailyMissing` means `@daily-co/daily-js` is not registered or is not Daily; `roomUnusable` means the
104
+ * credential failed its floor (not an https room, or an empty token).
105
+ */
106
+ readonly onUnavailable?: ((reason: VetCallUnavailableReason, detail: string) => void) | undefined;
107
+ /**
108
+ * What to draw when the call cannot run. THE SDK DRAWS NOTHING BY DEFAULT, and that is deliberate: there is
109
+ * no owner-approved member-facing sentence for "this page was built without the video module", and this
110
+ * package does not author user-facing copy. The consumer app's own answer to a missing module is to fall
111
+ * back to the browser, so the intended wiring here is the same:
112
+ *
113
+ * ```tsx
114
+ * <EverfurVetCall ... renderUnavailable={() => <VetVisitButton visitRef={visitRef} intent="join" />} />
115
+ * ```
116
+ */
117
+ readonly renderUnavailable?: ((reason: VetCallUnavailableReason, detail: string) => ReactNode) | undefined;
118
+ readonly style?: CSSProperties | undefined;
119
+ /** A class the host may hang its own layout rules on; the SDK sets no classes of its own. */
120
+ readonly className?: string | undefined;
121
+ }
122
+ /**
123
+ * The member's vet call, in the partner's page.
124
+ *
125
+ * Mount it with a room and a token and it joins; unmount it and the camera and the microphone are released.
126
+ */
127
+ declare function EverfurVetCall(props: EverfurVetCallProps): ReactNode;
128
+
129
+ interface EverfurVetCallLobbyProps {
130
+ /** The clinician's display name, when the host has one. Null renders the generalised sentence. */
131
+ readonly clinicianName?: string | null | undefined;
132
+ /** The pet's display name, when the host has one. Null renders the generalised prep line. */
133
+ readonly petName?: string | null | undefined;
134
+ /** The consult length the duration line states. Defaults to Everfur's own consult length. */
135
+ readonly consultMinutes?: number | undefined;
136
+ /** The way out of the wait. */
137
+ readonly onLeave: () => void;
138
+ readonly style?: CSSProperties | undefined;
139
+ readonly className?: string | undefined;
140
+ }
141
+ /** The wait, with a way out. */
142
+ declare function EverfurVetCallLobby(props: EverfurVetCallLobbyProps): ReactNode;
143
+
144
+ export { EVERFUR_DAILY_SETUP, type EverfurDailyLoad, type EverfurDailyLoader, type EverfurDailyModule, EverfurVetCall, EverfurVetCallLobby, type EverfurVetCallLobbyProps, type EverfurVetCallProps, TelemetryPort, type VetCallEvent, type VetCallFrame, type VetCallHandler, type VetCallParticipant, type VetCallUnavailableReason, isEverfurDailyModule, loadEverfurDaily, registerEverfurDaily };
@@ -0,0 +1,144 @@
1
+ import { ReactNode, CSSProperties } from 'react';
2
+ import { T as TelemetryPort } from '../../../TelemetryPort-BDNr00hu.js';
3
+ export { V as VetCallPhase, i as isSafeRoomUrl, a as isUsableRoomCredential } from '../../../callRoom-7wrE3RP2.js';
4
+ export { V as VET_CALL_CONSULT_MINUTES, a as VET_CALL_COPY } from '../../../callCopy-rDH9JTFo.js';
5
+ import '../../../EverfurError-DmELDpXp.js';
6
+
7
+ /** The Daily events the call surface subscribes to. */
8
+ type VetCallEvent = 'joined-meeting' | 'participant-joined' | 'participant-updated' | 'participant-left' | 'left-meeting' | 'error';
9
+ type VetCallHandler = (payload?: unknown) => void;
10
+ /** One participant in the room, narrowed to what the call surface reads. */
11
+ interface VetCallParticipant {
12
+ readonly local?: boolean;
13
+ }
14
+ /**
15
+ * The Daily Prebuilt frame, narrowed to the six members the call surface calls. Narrow on purpose: the SDK
16
+ * never asks for host powers. `is_owner` is the CLINICIAN's and the server decides it when it mints the
17
+ * token; it starts recording and grants admit/eject, and nothing here requests either.
18
+ */
19
+ interface VetCallFrame {
20
+ join(options: {
21
+ readonly url: string;
22
+ readonly token: string;
23
+ readonly userName?: string | undefined;
24
+ }): Promise<unknown>;
25
+ leave(): Promise<unknown>;
26
+ destroy(): Promise<unknown>;
27
+ participants(): Record<string, VetCallParticipant>;
28
+ on(event: VetCallEvent, handler: VetCallHandler): unknown;
29
+ off(event: VetCallEvent, handler: VetCallHandler): unknown;
30
+ }
31
+ /** The shape of `@daily-co/daily-js` this package uses, and nothing else. */
32
+ interface EverfurDailyModule {
33
+ createFrame(container: HTMLElement, options?: Record<string, unknown>): VetCallFrame;
34
+ }
35
+ /**
36
+ * The thunk a partner registers. Typically `() => import('@daily-co/daily-js')`. A synchronous return is
37
+ * accepted too, for a partner that already holds the module.
38
+ */
39
+ type EverfurDailyLoader = () => unknown;
40
+ /** The settled outcome of a guarded load. Mirrors `OptionalModule` from the core ports, and never throws. */
41
+ type EverfurDailyLoad = {
42
+ readonly available: true;
43
+ readonly module: EverfurDailyModule;
44
+ } | {
45
+ readonly available: false;
46
+ readonly module: null;
47
+ readonly reason: string;
48
+ };
49
+ /**
50
+ * DEVELOPER-FACING, never rendered to a member. It is handed to `onUnavailable` and written to
51
+ * `console.warn` once, so a partner who mounts the call surface without the peer reads what to do instead of
52
+ * watching a blank box. End-user copy is never authored in this repository.
53
+ */
54
+ declare const EVERFUR_DAILY_SETUP: string;
55
+ /** A present-but-wrong-shape module (a version whose surface drifted) is treated as unavailable, not trusted. */
56
+ declare function isEverfurDailyModule(candidate: unknown): candidate is EverfurDailyModule;
57
+ /**
58
+ * Register the Daily module for the in-page vet call. Call it ONCE, in your app entry, before any Everfur
59
+ * call surface mounts:
60
+ *
61
+ * ```ts
62
+ * import { registerEverfurDaily } from '@everfur/sdk/web/televet/call';
63
+ * registerEverfurDaily(() => import('@daily-co/daily-js'));
64
+ * ```
65
+ *
66
+ * Passing `null` unregisters it, which is what a test does between cases. Registering clears the memo, so a
67
+ * later registration always wins over an earlier failed load.
68
+ */
69
+ declare function registerEverfurDaily(next: EverfurDailyLoader | null): void;
70
+ /**
71
+ * The guarded load: a missing loader, a throwing or rejecting loader and a wrong-shape module all settle to
72
+ * `{ available: false }`. NEVER throws, never rejects, and never returns a partially usable module.
73
+ *
74
+ * Memoized on the PROMISE, not on its result, so two call surfaces mounting in the same tick share one
75
+ * network fetch of the chunk rather than racing two.
76
+ */
77
+ declare function loadEverfurDaily(): Promise<EverfurDailyLoad>;
78
+
79
+ /** Why the call surface refused to render. Both values are DEVELOPER-facing, never shown to a member. */
80
+ type VetCallUnavailableReason = 'dailyMissing' | 'roomUnusable';
81
+ interface EverfurVetCallProps {
82
+ /** The `room_url` the server minted for this consult. Must be https; anything else is refused. */
83
+ readonly roomUrl: string;
84
+ /** The short-lived, per-participant join token. NEVER rendered, NEVER logged, NEVER a telemetry prop. */
85
+ readonly token: string;
86
+ /** Called once the member has left, so the host can navigate away. Fires exactly once per mounted call. */
87
+ readonly onLeave: () => void;
88
+ /** Shown in the lobby while the clinician has not joined. Null in production today; never invented. */
89
+ readonly clinicianName?: string | null | undefined;
90
+ /** The pet's display name for the lobby's prep line; absent, the pet-free form is used. */
91
+ readonly petName?: string | null | undefined;
92
+ /** Rendered as the participant name inside the call. Absent, Daily uses its own default. */
93
+ readonly displayName?: string | undefined;
94
+ /**
95
+ * Host/test seam: the Daily module, instead of the one `registerEverfurDaily` registered. A partner with
96
+ * its own module resolution passes it here and calls no register function at all.
97
+ */
98
+ readonly daily?: EverfurDailyModule | undefined;
99
+ /** Your analytics sink for the two call events. Defaults to a no-op; never receives a credential. */
100
+ readonly telemetry?: TelemetryPort | undefined;
101
+ /**
102
+ * Called instead of rendering when the call cannot run, with a developer-facing explanation.
103
+ * `dailyMissing` means `@daily-co/daily-js` is not registered or is not Daily; `roomUnusable` means the
104
+ * credential failed its floor (not an https room, or an empty token).
105
+ */
106
+ readonly onUnavailable?: ((reason: VetCallUnavailableReason, detail: string) => void) | undefined;
107
+ /**
108
+ * What to draw when the call cannot run. THE SDK DRAWS NOTHING BY DEFAULT, and that is deliberate: there is
109
+ * no owner-approved member-facing sentence for "this page was built without the video module", and this
110
+ * package does not author user-facing copy. The consumer app's own answer to a missing module is to fall
111
+ * back to the browser, so the intended wiring here is the same:
112
+ *
113
+ * ```tsx
114
+ * <EverfurVetCall ... renderUnavailable={() => <VetVisitButton visitRef={visitRef} intent="join" />} />
115
+ * ```
116
+ */
117
+ readonly renderUnavailable?: ((reason: VetCallUnavailableReason, detail: string) => ReactNode) | undefined;
118
+ readonly style?: CSSProperties | undefined;
119
+ /** A class the host may hang its own layout rules on; the SDK sets no classes of its own. */
120
+ readonly className?: string | undefined;
121
+ }
122
+ /**
123
+ * The member's vet call, in the partner's page.
124
+ *
125
+ * Mount it with a room and a token and it joins; unmount it and the camera and the microphone are released.
126
+ */
127
+ declare function EverfurVetCall(props: EverfurVetCallProps): ReactNode;
128
+
129
+ interface EverfurVetCallLobbyProps {
130
+ /** The clinician's display name, when the host has one. Null renders the generalised sentence. */
131
+ readonly clinicianName?: string | null | undefined;
132
+ /** The pet's display name, when the host has one. Null renders the generalised prep line. */
133
+ readonly petName?: string | null | undefined;
134
+ /** The consult length the duration line states. Defaults to Everfur's own consult length. */
135
+ readonly consultMinutes?: number | undefined;
136
+ /** The way out of the wait. */
137
+ readonly onLeave: () => void;
138
+ readonly style?: CSSProperties | undefined;
139
+ readonly className?: string | undefined;
140
+ }
141
+ /** The wait, with a way out. */
142
+ declare function EverfurVetCallLobby(props: EverfurVetCallLobbyProps): ReactNode;
143
+
144
+ export { EVERFUR_DAILY_SETUP, type EverfurDailyLoad, type EverfurDailyLoader, type EverfurDailyModule, EverfurVetCall, EverfurVetCallLobby, type EverfurVetCallLobbyProps, type EverfurVetCallProps, TelemetryPort, type VetCallEvent, type VetCallFrame, type VetCallHandler, type VetCallParticipant, type VetCallUnavailableReason, isEverfurDailyModule, loadEverfurDaily, registerEverfurDaily };
@@ -0,0 +1 @@
1
+ import {createContext,useMemo,useId,useState,useRef,useCallback,useEffect,useContext}from'react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var Ge=Object.defineProperty;var n=(e,r)=>Ge(e,"name",{value:r,configurable:true});var ye=Object.freeze({track(){},trackExpectedFailure(){}});function pe(e){try{return new URL(e.trim()).protocol==="https:"}catch{return false}}n(pe,"isSafeRoomUrl");function W(e,r){return pe(e)&&r.trim().length>0}n(W,"isUsableRoomCredential");function me(e){let r=globalThis.console;try{r?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}n(me,"reportHostFailure");function $e(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}n($e,"isThenable");function S(e,...r){if(typeof e=="function")try{let t=e(...r);return $e(t)&&Promise.resolve(t).then(void 0,me),t}catch(t){me(t);return}}n(S,"callHost");var ge=new WeakMap;function Ye(e){if(typeof e!="function")return;let r=ge.get(e);if(r!==void 0)return r;let t=n((...o)=>{S(e,...o);},"guarded");return ge.set(e,t),t}n(Ye,"guardHost");function be(e,r){let t=null;for(let o of r){let a=e[o];typeof a=="function"&&(t??={...e},t[o]=Ye(a));}return t??e}n(be,"guardHostProps");var G=10,d=Object.freeze({muteCta:"Mute",unmuteCta:"Unmute",cameraOffCta:"Camera off",cameraOnCta:"Camera on",leaveCta:"Leave",switchCameraCta:"Switch camera",speakerOffCta:"Speaker off",speakerOnCta:"Speaker on",lobbyTitleNoName:"Your vet is joining",lobbySubtitle:"Usually under a minute",lobbyPrepLabel:"WHILE YOU WAIT",lobbyPrepNoPet:"Have your pet nearby and somewhere well lit.",lobbyTitle:n(e=>{let r=e?.trim()??"";return r.length>0?`${r} is joining`:d.lobbyTitleNoName},"lobbyTitle"),lobbyPrep:n(e=>{let r=e?.trim()??"";return r.length>0?`Have ${r} nearby and somewhere well lit.`:d.lobbyPrepNoPet},"lobbyPrep"),lobbyDuration:n(e=>`${e} MINUTE VISIT`,"lobbyDuration"),joinFailedReason:"That did not open. Try again.",recordingNoticeTitle:"This consultation is recorded.",recordingNoticeCta:"Continue to the call",recordingNoticeDecline:"Not now",selfCameraOffLabel:"Your camera is off"});function q(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let r of Object.keys(e))q(e[r]);}return e}n(q,"deepFreeze");var qe=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),Ee={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},he={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},ve={nano:8,small:9,micro:10,tiny:11,caption:12,bodyTight:13,body:14,subtitle:16,heading:18,verdict:24},Ke={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},Je={regular:"400",medium:"500",bold:"700"},Xe={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},Ze=0,V="System",N="monospace",Qe=["content","heading","control","compact","badge"];function er(e){let r={};for(let t of Qe)r[t]=e;return r}n(er,"authoredTierSizes");function Te(){return {family:V,mono:N,fontUrl:null,families:{regular:V,medium:V,bold:V,mono:N,monoMedium:N,monoBold:N},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:ve,tierSizes:er(ve),lineHeight:Ke,weight:Je,letterSpacing:Xe,scale:1,maxScale:Ze,scaleCaps:qe}}n(Te,"baseType");var Ce={},$=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function Y(e){return `cubic-bezier(${e.join(", ")})`}n(Y,"cssCubicBezier");var xe={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:Y($.standard),emphasized:Y($.emphasized),exit:Y($.exit)},reducedMotion:false},rr={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)"},ke=q({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:rr,space:Ee,radius:he,type:Te(),motion:xe,slots:Ce}),nr={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)"};q({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:nr,space:Ee,radius:he,type:Te(),motion:xe,slots:Ce});var Fe=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),Re=globalThis,K=Re[Fe]??(Re[Fe]=createContext(ke));K.displayName??="EverfurThemeContext";function w(){return useContext(K)}n(w,"useEverfurTheme");var Se=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});var we='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',ar="System";function lr(e){let r=e.trim();return r.length===0||r===ar?we:`${Pe(r)}, ${we}`}n(lr,"cssFontFamily");function ir(e){let r=e.trim();return r.length===0||r==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${Pe(r)}, ui-monospace, Menlo, Consolas, monospace`}n(ir,"cssMonoFamily");function Pe(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}n(Pe,"quote");function m(e,r){let t=e.type,o=t.families[r];return {fontFamily:r==="mono"||r==="monoMedium"||r==="monoBold"?ir(o):lr(o),fontWeight:t.namedFaces[r]?t.weight.regular:t.weight[Se[r]]}}n(m,"faceCss");var Le=Symbol.for("@everfur/sdk/televet");function sr(){let e=globalThis,r=e[Le];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[Le]=t,t}n(sr,"televetGlobal");function Ae(e){sr().dailyRegistered=e;}n(Ae,"markEverfurDailyRegistered");var X=`[everfur] The in-page vet call needs @daily-co/daily-js, which this app has not registered. Install it and call registerEverfurDaily(() => import('@daily-co/daily-js')) once in your app entry, before any Everfur call surface mounts. Until then the in-page visit tells the member the call cannot be joined; <VetVisitButton prefer="redirect" /> is the explicit way to the hosted visit in a new tab instead.`,Z="@daily-co/daily-js",dr=`optional peer '${Z}' has no registered loader`,ur=`optional peer '${Z}' is present but failed its shape check`;function Q(e){return typeof e=="object"&&e!==null}n(Q,"isRecordLike");function cr(e){let r=e;for(let t=0;t<3;t+=1){if(_e(r))return r;if(!Q(r)||!("default"in r))return null;r=r.default;}return null}n(cr,"normalizeDailyModule");function _e(e){return !Q(e)&&typeof e!="function"?false:typeof e.createFrame=="function"}n(_e,"isEverfurDailyModule");var De=null,M=null;function J(e){return Object.freeze({available:false,module:null,reason:e})}n(J,"unavailable");function fr(e){De=e,M=null,Ae(e!==null);}n(fr,"registerEverfurDaily");function ee(){if(M!==null)return M;let e=De;if(e===null)return Promise.resolve(J(dr));let r=(async()=>{let t;try{t=await e();}catch(a){return J(`optional peer '${Z}' is not installed: ${yr(a)}`)}let o=cr(t);return o===null?J(ur):Object.freeze({available:true,module:o})})();return M=r,r}n(ee,"loadEverfurDaily");function yr(e){return e instanceof Error?e.message:typeof e=="string"?e:"unknown load error"}n(yr,"describe");function Be(e){if(!Q(e)||!("errorMsg"in e))return null;let r=e.errorMsg;return typeof r=="string"&&r.length>0?r:null}n(Be,"dailyErrorMessage");function Ve(e){return e?Object.keys(e).filter(r=>r!=="local").length:0}n(Ve,"remoteParticipantCount");var br=44,Ne=3,vr=420,Er=.35,hr=1,Tr=.6;function Cr({theme:e}){let r=e.motion.reducedMotion,[t,o]=useState(0);return useEffect(()=>{if(r)return;let a=setInterval(()=>o(l=>(l+1)%Ne),vr);return ()=>clearInterval(a)},[r]),jsx("div",{"aria-hidden":"true","data-testid":"everfur-vet-call-lobby-dots",style:{display:"flex",gap:e.space.xs,justifyContent:"center"},children:Array.from({length:Ne},(a,l)=>jsx("span",{style:{width:6,height:6,borderRadius:e.radius.pill,backgroundColor:e.color.text.onBrand,opacity:r?Tr:l===t?hr:Er,transition:r?"none":`opacity ${e.motion.duration.fast}ms ${e.motion.easing.standard}`}},l))})}n(Cr,"WaitingDots");function re(e){let{clinicianName:r,petName:t,consultMinutes:o=10,onLeave:a,style:l,className:u}=e,h=w(),i=useMemo(()=>xr(h),[h]),A=d.lobbyTitle(r),_=d.lobbyPrep(t);return jsxs("section",{className:u,"data-testid":"everfur-vet-call-lobby",style:{...i.root,...l},children:[jsx("div",{style:i.topRow,children:jsx("button",{type:"button",onClick:a,"data-testid":"everfur-vet-call-lobby-leave",style:i.leave,children:d.leaveCta})}),jsxs("div",{style:i.center,children:[jsxs("div",{"aria-hidden":"true","data-testid":"everfur-vet-call-lobby-avatar",style:i.avatar,children:[jsx("span",{style:i.avatarHead}),jsx("span",{style:i.avatarBody})]}),jsxs("div",{"aria-live":"polite",style:i.titleBlock,children:[jsx("p",{"data-testid":"everfur-vet-call-lobby-title",style:i.title,children:A}),jsx("p",{style:i.subtitle,children:d.lobbySubtitle})]}),jsx(Cr,{theme:h})]}),jsxs("div",{"data-testid":"everfur-vet-call-lobby-prep",style:i.prepCard,children:[jsx("p",{style:i.prepLabel,children:d.lobbyPrepLabel}),jsx("p",{style:i.prepBody,children:_})]}),jsx("p",{"data-testid":"everfur-vet-call-lobby-duration",style:i.duration,children:d.lobbyDuration(o)})]})}n(re,"EverfurVetCallLobby");function xr(e){let{color:r,space:t,radius:o,type:a}=e,l=r.text.onBrand,u=132;return {root:{boxSizing:"border-box",display:"flex",flexDirection:"column",gap:t.lg,padding:t.lg,borderRadius:o.lg,backgroundColor:r.brand,color:l},topRow:{display:"flex",alignItems:"center"},leave:{minHeight:br,padding:`0 ${t.md}px`,margin:0,border:0,background:"transparent",color:l,cursor:"pointer",...m(e,"medium"),fontSize:a.size.body},center:{display:"flex",flexDirection:"column",alignItems:"center",gap:t.md},avatar:{position:"relative",width:u,height:u,borderRadius:o.pill,overflow:"hidden",backgroundColor:r.brandSoft,display:"flex",alignItems:"center",justifyContent:"center"},avatarHead:{position:"absolute",top:u*.24,width:u*.28,height:u*.28,borderRadius:o.pill,backgroundColor:l,opacity:.55},avatarBody:{position:"absolute",top:u*.58,width:u*.52,height:u*.34,borderTopLeftRadius:u*.26,borderTopRightRadius:u*.26,backgroundColor:l,opacity:.55},titleBlock:{textAlign:"center"},title:{margin:0,...m(e,"bold"),fontSize:a.size.heading,color:l},subtitle:{margin:`${e.space.xs}px 0 0`,fontSize:a.size.bodyTight,color:l,opacity:.75},prepCard:{display:"flex",flexDirection:"column",gap:t.xs,padding:t.md,borderRadius:o.md,backgroundColor:r.brandSoft},prepLabel:{margin:0,...m(e,"medium"),fontSize:a.size.micro,letterSpacing:a.letterSpacing.eyebrow,color:l,opacity:.75},prepBody:{margin:0,fontSize:a.size.bodyTight,color:l},duration:{margin:0,textAlign:"center",...m(e,"medium"),fontSize:a.size.micro,letterSpacing:a.letterSpacing.eyebrow,color:l,opacity:.75}}}n(xr,"makeLobbyStyles");var Oe=44,Rr="16 / 9",Sr="16px",wr=["participant-joined","participant-updated","participant-left"];function Pr(e){let{roomUrl:r,token:t,onLeave:o,clinicianName:a,petName:l,displayName:u,daily:h,telemetry:i,onUnavailable:A,renderUnavailable:_,style:ne,className:te}=be(e,["onLeave","onUnavailable"]),oe=w(),c=useMemo(()=>Ar(oe),[oe]),ae=`${useId()}-recording-notice`,[D,k]=useState("joining"),[je,le]=useState(0),[H,ie]=useState(null),[B,z]=useState(null),[I,se]=useState(false),de=useRef(null),F=useRef(null),ue=useRef(false),T=useRef({onLeave:o,onUnavailable:A,daily:h,telemetry:i});T.current={onLeave:o,onUnavailable:A,daily:h,telemetry:i};let C=useCallback(()=>{ue.current||(ue.current=true,S(T.current.onLeave));},[]);useEffect(()=>{let s=false;z(null),se(false);let f=n((b,j)=>{s||(ie({reason:b,detail:j}),S(T.current.onUnavailable,b,j));},"refuse");if(!W(r,t)){f("roomUnusable","the call needs an https room URL and a non-empty join token");return}let R=T.current.daily;return R!==void 0?(z(()=>R),()=>{s=true;}):(ee().then(b=>{if(!s){if(!b.available){Lr(X),f("dailyMissing",b.reason);return}z(()=>b.module);}}),()=>{s=true;})},[r,t]),useEffect(()=>{if(B===null||!I)return;let s=false,f=null,R=[],b=n((E,v)=>{s||(ie({reason:E,detail:v}),S(T.current.onUnavailable,E,v));},"refuse");return n(async()=>{let E=de.current;if(!E)return;let v=T.current.telemetry??ye;try{f=B.createFrame(E,{showLeaveButton:!0,showFullscreenButton:!1,iframeStyle:{width:"100%",height:"100%",border:"0",borderRadius:Sr}});}catch(p){b("dailyMissing",`createFrame failed: ${ze(p)}`);return}F.current=f;let x=n((p,fe)=>{R.push({event:p,handler:fe}),f?.on(p,fe);},"attach"),We=n(()=>{s||f===null||le(He(f));},"syncParticipants");for(let p of wr)x(p,We);x("joined-meeting",()=>{s||f===null||(k("joined"),le(He(f)));}),x("left-meeting",()=>{s||(k("left"),C());}),x("error",p=>{s||(k("error"),v.trackExpectedFailure("televet.call.join_failed",{provider:"daily",detail:Be(p)??"unknown"}));});try{if(await f.join({url:r,token:t,userName:u}),s)return;v.track("televet.call.joined",{provider:"daily"});}catch(p){if(s)return;k("error"),v.trackExpectedFailure("televet.call.join_failed",{provider:"daily",detail:ze(p)});}},"start")(),()=>{s=true;for(let{event:v,handler:x}of R)try{f?.off(v,x);}catch{}let E=F.current;F.current=null,E?.destroy().catch(()=>{});}},[B,I,r,t,u,C]);let ce=useCallback(()=>{let s=F.current;if(F.current=null,k("left"),!s){C();return}(async()=>{try{await s.leave();}catch{}try{await s.destroy();}catch{}C();})();},[C]);return H!==null?_?jsx(Fragment,{children:_(H.reason,H.detail)}):null:B===null?null:I?jsxs("div",{className:te,"data-testid":"everfur-vet-call",style:{...c.root,...ne},children:[D==="left"?null:jsx("div",{ref:de,"data-testid":"everfur-vet-call-frame",style:{...c.frame,...D==="error"?c.frameHidden:null}}),D==="joined"&&je===0?jsx(re,{clinicianName:a,petName:l,onLeave:ce}):null,D==="error"?jsxs("div",{role:"alert","data-testid":"everfur-vet-call-failed",style:c.failed,children:[jsx("p",{style:c.failedText,children:d.joinFailedReason}),jsx("button",{type:"button",onClick:ce,"data-testid":"everfur-vet-call-failed-leave",style:c.failedLeave,children:d.leaveCta})]}):null]}):jsx("div",{className:te,"data-testid":"everfur-vet-call",style:{...c.root,...ne},children:jsxs("div",{role:"alertdialog","aria-labelledby":ae,"data-testid":"everfur-vet-call-recording-notice",style:c.notice,children:[jsx("p",{id:ae,style:c.noticeTitle,children:d.recordingNoticeTitle}),jsxs("div",{style:c.noticeActions,children:[jsx("button",{type:"button",onClick:()=>se(true),"data-testid":"everfur-vet-call-recording-continue",style:c.noticeContinue,children:d.recordingNoticeCta}),jsx("button",{type:"button",onClick:C,"data-testid":"everfur-vet-call-recording-decline",style:c.failedLeave,children:d.recordingNoticeDecline})]})]})})}n(Pr,"EverfurVetCall");function He(e){try{return Ve(e.participants())}catch{return 0}}n(He,"countRemotes");function ze(e){return e instanceof Error?e.message:typeof e=="string"?e:"unknown error"}n(ze,"describe");var Ie=false;function Lr(e){if(Ie)return;Ie=true;let r=globalThis.console;try{r?.warn?.(e);}catch{}}n(Lr,"warnOnce");function Ar(e){let{color:r,space:t,radius:o,type:a}=e;return {root:{boxSizing:"border-box",display:"flex",flexDirection:"column",gap:t.md,width:"100%"},frame:{position:"relative",width:"100%",aspectRatio:Rr,overflow:"hidden",borderRadius:o.lg,backgroundColor:r.brandInk},frameHidden:{display:"none"},failed:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:t.md,padding:t.lg,borderRadius:o.md,border:`1px solid ${r.brandBorder}`,backgroundColor:r.surfaceCream,color:r.text.primary},failedText:{margin:0,fontSize:a.size.bodyTight,color:r.text.primary},notice:{display:"flex",flexDirection:"column",gap:t.md,padding:t.lg,borderRadius:o.md,border:`1px solid ${r.brandBorder}`,backgroundColor:r.surface,color:r.text.primary},noticeTitle:{margin:0,...m(e,"medium"),fontSize:a.size.subtitle,color:r.text.primary},noticeActions:{display:"flex",flexWrap:"wrap",gap:t.md},noticeContinue:{minHeight:Oe,padding:`0 ${t.lg}px`,borderRadius:o.pill,border:0,backgroundColor:r.primary,color:r.onPrimary,cursor:"pointer",...m(e,"medium"),fontSize:a.size.body},failedLeave:{minHeight:Oe,padding:`0 ${t.lg}px`,borderRadius:o.pill,border:`1.5px solid ${r.brand}`,backgroundColor:"transparent",color:r.brand,cursor:"pointer",...m(e,"medium"),fontSize:a.size.body}}}n(Ar,"makeCallStyles");export{X as EVERFUR_DAILY_SETUP,Pr as EverfurVetCall,re as EverfurVetCallLobby,G as VET_CALL_CONSULT_MINUTES,d as VET_CALL_COPY,_e as isEverfurDailyModule,pe as isSafeRoomUrl,W as isUsableRoomCredential,ee as loadEverfurDaily,fr as registerEverfurDaily};
@@ -1 +1 @@
1
- 'use strict';var react=require('react'),jsxRuntime=require('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]=react.createContext(null));Me.displayName??="EverfurContext";function B(){let e=react.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=react.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return react.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]=react.useState(null);if(react.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=react.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=react.useRef(v);b.current=v;let p=react.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]=react.useState(qe),C=react.useRef(null),R=react.useRef({runtime:t,userRef:o,scopeEpoch:i});R.current={runtime:t,userRef:o,scopeEpoch:i};let V=react.useRef(v);V.current=v;let k=react.useRef(y);k.current=y;let F=react.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=react.useCallback(m=>F(m,null),[F]),O=react.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]=react.createContext(nr));le.displayName??="EverfurThemeContext";function ue(){return react.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=react.useMemo(()=>jt(y),[y]),c=react.useRef(false);if(!d.available)return null;let S=d.status==="opening";return jsxRuntime.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");exports.VET_VISIT_INTENTS=M;exports.VetVisitButton=zt;exports.isVetVisitIntent=L;exports.parseVetVisitReturn=Jr;exports.useVetVisit=ne;exports.vetVisitErrorReasonOf=U;
1
+ 'use strict';var react=require('react'),jsxRuntime=require('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]=react.useState(null);react.useEffect(()=>{let d=Oe();return t(d),()=>{Ve(d);}},[]);let o=react.useSyncExternalStore(Fe,ne,ne),a=r!==null&&o.activeHost===r?o.request:null,[u,s]=react.useState(null),l=a!==null&&u===null;return react.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 jsxRuntime.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]=react.createContext(null));sr.displayName??="EverfurContext";function $(){let e=react.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=react.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return react.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]=react.useState(null);if(react.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=react.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=react.useRef(v);f.current=v;let p=react.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]=react.useState(pe),_=react.useRef(null),S=react.useRef({runtime:t,userRef:o,scopeEpoch:i});S.current={runtime:t,userRef:o,scopeEpoch:i};let I=react.useRef(v);I.current=v;let E=react.useRef(h);E.current=h;let A=react.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=react.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=react.useCallback(m=>b?A(m,null):P(m,null),[b,A,P]),F=react.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]=react.createContext(wr));Ee.displayName??="EverfurThemeContext";function ge(){return react.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=react.useMemo(()=>mn(O),[O]),_=react.useRef(false);if(!c.available)return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[null,jsxRuntime.jsx(B,{})]});let S=c.status==="opening";return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.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}),jsxRuntime.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");exports.EverfurTelevetHost=B;exports.VET_VISIT_INTENTS=Y;exports.VetVisitButton=yn;exports.hasEverfurTelevetFlow=Mr;exports.isVetVisitIntent=K;exports.parseVetVisitReturn=Ot;exports.presentEverfurTelevetFlow=Nr;exports.registerEverfurTelevetFlow=Dr;exports.useVetVisit=ye;exports.vetVisitErrorReasonOf=G;