@everfur/sdk 0.5.0 → 0.5.2

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 (154) hide show
  1. package/CHANGELOG.md +375 -0
  2. package/dist/BookedScreen-BJPbXLCG.d.ts +54 -0
  3. package/dist/BookedScreen-Cnld-jB_.d.cts +54 -0
  4. package/dist/{Chat-TA-aTcVF.d.cts → Chat-B43wIXCv.d.cts} +3 -3
  5. package/dist/{Chat-BOX-03ho.d.ts → Chat-my5aJLz5.d.ts} +3 -3
  6. package/dist/{DepthViews-DSFyaSeL.d.cts → DepthViews-BBTv9VAs.d.cts} +1 -1
  7. package/dist/{DepthViews-Cviea-ri.d.cts → DepthViews-BLK0kgza.d.cts} +1 -1
  8. package/dist/{DepthViews-CgjX2AJ5.d.ts → DepthViews-CNqAyjne.d.ts} +1 -1
  9. package/dist/{DepthViews-D2dRqWRq.d.ts → DepthViews-G-7YRtOX.d.ts} +1 -1
  10. package/dist/animations/index.cjs +1 -1
  11. package/dist/animations/index.d.cts +3 -3
  12. package/dist/animations/index.d.ts +3 -3
  13. package/dist/animations/index.js +1 -1
  14. package/dist/{attachments-DHvnITuE.d.cts → attachments-CEmT52IA.d.cts} +5 -5
  15. package/dist/{attachments-oD5U2fXI.d.ts → attachments-CMNWE6YT.d.ts} +2 -2
  16. package/dist/{attachments-C_vtFu2f.d.ts → attachments-DU1djTNd.d.ts} +5 -5
  17. package/dist/{attachments-pIdGOQfm.d.cts → attachments-ZyjWsZdI.d.cts} +2 -2
  18. package/dist/{bookingCopy-CJir9mjb.d.ts → bookingCopy-BVhEt1bj.d.ts} +38 -200
  19. package/dist/{bookingCopy-DfuA13dh.d.cts → bookingCopy-ChZR5mtd.d.cts} +38 -200
  20. package/dist/bookingTypes-DCs8mmBb.d.cts +188 -0
  21. package/dist/bookingTypes-DCs8mmBb.d.ts +188 -0
  22. package/dist/{callCopy-rDH9JTFo.d.cts → callCopy-CPe9mbwG.d.cts} +7 -2
  23. package/dist/{callCopy-rDH9JTFo.d.ts → callCopy-CPe9mbwG.d.ts} +7 -2
  24. package/dist/{casesRepository-DHgIYKN9.d.ts → casesRepository-C5zrCcaE.d.ts} +1 -1
  25. package/dist/{casesRepository-B-Eg8ZJ3.d.cts → casesRepository-q2ak9AW0.d.cts} +1 -1
  26. package/dist/chat/index.cjs +1 -1
  27. package/dist/chat/index.d.cts +14 -10
  28. package/dist/chat/index.d.ts +14 -10
  29. package/dist/chat/index.js +1 -1
  30. package/dist/client/index.cjs +5 -5
  31. package/dist/client/index.d.cts +6 -6
  32. package/dist/client/index.d.ts +6 -6
  33. package/dist/client/index.js +5 -5
  34. package/dist/{config-ClI7QxB0.d.ts → config-DBpKJJbg.d.ts} +1 -1
  35. package/dist/{config-DAFbf721.d.cts → config-jocy3q66.d.cts} +1 -1
  36. package/dist/consent/index.cjs +1 -1
  37. package/dist/consent/index.d.cts +5 -5
  38. package/dist/consent/index.d.ts +5 -5
  39. package/dist/consent/index.js +1 -1
  40. package/dist/{context-B-dUM1Qf.d.cts → context-BfVBRgro.d.cts} +5 -5
  41. package/dist/{context-CZbgF_OH.d.ts → context-C3n9s4aG.d.ts} +5 -5
  42. package/dist/{copy-CneuYdrO.d.cts → copy-IysFx8yL.d.cts} +2 -2
  43. package/dist/{copy-CeRH3NXy.d.ts → copy-KP91zgtW.d.ts} +2 -2
  44. package/dist/core/index.cjs +7 -7
  45. package/dist/core/index.d.cts +12 -12
  46. package/dist/core/index.d.ts +12 -12
  47. package/dist/core/index.js +7 -7
  48. package/dist/{depth-DO3Ko_qs.d.ts → depth-BsMLLrQo.d.ts} +2 -2
  49. package/dist/{depth-B3NFKlF9.d.cts → depth-O9kiVUjs.d.cts} +2 -2
  50. package/dist/{entitlementRepository-74kW5mK0.d.ts → entitlementRepository-CHsY2kF3.d.ts} +2 -2
  51. package/dist/{entitlementRepository-m6zLUmiB.d.cts → entitlementRepository-DIG16pso.d.cts} +2 -2
  52. package/dist/{identity-C7uxGwfT.d.cts → identity-D7GKfOE7.d.cts} +1 -1
  53. package/dist/{identity-CLAUq-K4.d.ts → identity-k8nCQ_qM.d.ts} +1 -1
  54. package/dist/index.cjs +6 -6
  55. package/dist/index.d.cts +13 -13
  56. package/dist/index.d.ts +13 -13
  57. package/dist/index.js +6 -6
  58. package/dist/notifications/index.cjs +2 -2
  59. package/dist/notifications/index.d.cts +2 -2
  60. package/dist/notifications/index.d.ts +2 -2
  61. package/dist/notifications/index.js +2 -2
  62. package/dist/{pets-BoB5B7kp.d.cts → pets-Bod_DDiW.d.cts} +1 -1
  63. package/dist/{pets-w4M9d-Dn.d.ts → pets-C_QX8s5f.d.ts} +1 -1
  64. package/dist/{petsRepository-DZZoEG3r.d.cts → petsRepository-B3vr628I.d.cts} +1 -1
  65. package/dist/{petsRepository-BjKJ8UsN.d.ts → petsRepository-DdzgINfF.d.ts} +1 -1
  66. package/dist/photo/index.cjs +1 -1
  67. package/dist/photo/index.js +1 -1
  68. package/dist/{ports-C2EVK416.d.cts → ports-BSm48zIC.d.cts} +16 -5
  69. package/dist/{ports-BO3bzTJg.d.ts → ports-DHhxhn95.d.ts} +16 -5
  70. package/dist/records/depth/index.cjs +2 -2
  71. package/dist/records/depth/index.d.cts +7 -7
  72. package/dist/records/depth/index.d.ts +7 -7
  73. package/dist/records/depth/index.js +2 -2
  74. package/dist/records/index.cjs +3 -3
  75. package/dist/records/index.d.cts +10 -10
  76. package/dist/records/index.d.ts +10 -10
  77. package/dist/records/index.js +3 -3
  78. package/dist/{requestFunnel-D7ipek3e.d.ts → requestFunnel-CTG-wNc3.d.ts} +2 -2
  79. package/dist/{requestFunnel-Djjwgoe9.d.cts → requestFunnel-Dcjyh0j2.d.cts} +2 -2
  80. package/dist/{runtimeTypes-D2C9uD85.d.cts → runtimeTypes-4qptUulD.d.cts} +4 -4
  81. package/dist/{runtimeTypes-CTL3yToK.d.ts → runtimeTypes-CmpdQaE2.d.ts} +4 -4
  82. package/dist/server/events/index.cjs +1 -1
  83. package/dist/server/events/index.d.cts +2 -2
  84. package/dist/server/events/index.d.ts +2 -2
  85. package/dist/server/events/index.js +1 -1
  86. package/dist/server/index.cjs +2 -2
  87. package/dist/server/index.d.cts +3 -3
  88. package/dist/server/index.d.ts +3 -3
  89. package/dist/server/index.js +2 -2
  90. package/dist/televet/booking/index.cjs +1 -1
  91. package/dist/televet/booking/index.d.cts +31 -17
  92. package/dist/televet/booking/index.d.ts +31 -17
  93. package/dist/televet/booking/index.js +1 -1
  94. package/dist/televet/call/index.cjs +1 -1
  95. package/dist/televet/call/index.d.cts +13 -1
  96. package/dist/televet/call/index.d.ts +13 -1
  97. package/dist/televet/call/index.js +1 -1
  98. package/dist/televet/index.cjs +1 -1
  99. package/dist/televet/index.js +1 -1
  100. package/dist/testing/index.cjs +3 -3
  101. package/dist/testing/index.d.cts +1 -1
  102. package/dist/testing/index.d.ts +1 -1
  103. package/dist/testing/index.js +3 -3
  104. package/dist/testing/rn/index.cjs +1 -1
  105. package/dist/testing/rn/index.d.cts +7 -7
  106. package/dist/testing/rn/index.d.ts +7 -7
  107. package/dist/testing/rn/index.js +1 -1
  108. package/dist/testing/web/index.cjs +1 -1
  109. package/dist/testing/web/index.d.cts +7 -7
  110. package/dist/testing/web/index.d.ts +7 -7
  111. package/dist/testing/web/index.js +1 -1
  112. package/dist/{timelineRows-CzR1T2DR.d.cts → timelineRows-BkLhRUDt.d.cts} +1 -1
  113. package/dist/{timelineRows-7yFNK_rU.d.ts → timelineRows-Dp4ZSnAo.d.ts} +1 -1
  114. package/dist/{uploadTransport-DKJHs3Yj.d.cts → uploadTransport-C1p8FuG8.d.cts} +5 -1
  115. package/dist/{uploadTransport-D0M0T4hN.d.ts → uploadTransport-bZIKBTyK.d.ts} +5 -1
  116. package/dist/{useRecordsDepth-Bnw36jPr.d.cts → useRecordsDepth-DRNry1r9.d.cts} +1 -1
  117. package/dist/{useRecordsDepth-DFF7Faxx.d.ts → useRecordsDepth-DnDhTaUL.d.ts} +1 -1
  118. package/dist/video/index.cjs +1 -1
  119. package/dist/video/index.js +1 -1
  120. package/dist/{view-BqcOYFTr.d.ts → view-CwuOPIJc.d.ts} +7 -4
  121. package/dist/{view-CaJs8WFH.d.cts → view-D4VdPKCa.d.cts} +7 -4
  122. package/dist/web/consent/index.cjs +1 -1
  123. package/dist/web/consent/index.d.cts +5 -5
  124. package/dist/web/consent/index.d.ts +5 -5
  125. package/dist/web/consent/index.js +1 -1
  126. package/dist/web/index.cjs +10 -10
  127. package/dist/web/index.d.cts +14 -14
  128. package/dist/web/index.d.ts +14 -14
  129. package/dist/web/index.js +10 -10
  130. package/dist/web/notifications/index.cjs +2 -2
  131. package/dist/web/notifications/index.d.cts +3 -3
  132. package/dist/web/notifications/index.d.ts +3 -3
  133. package/dist/web/notifications/index.js +2 -2
  134. package/dist/web/records/depth/index.cjs +2 -2
  135. package/dist/web/records/depth/index.d.cts +7 -7
  136. package/dist/web/records/depth/index.d.ts +7 -7
  137. package/dist/web/records/depth/index.js +2 -2
  138. package/dist/web/records/index.cjs +3 -3
  139. package/dist/web/records/index.d.cts +9 -9
  140. package/dist/web/records/index.d.ts +9 -9
  141. package/dist/web/records/index.js +3 -3
  142. package/dist/web/televet/booking/index.cjs +2 -2
  143. package/dist/web/televet/booking/index.d.cts +41 -52
  144. package/dist/web/televet/booking/index.d.ts +41 -52
  145. package/dist/web/televet/booking/index.js +2 -2
  146. package/dist/web/televet/call/index.cjs +1 -1
  147. package/dist/web/televet/call/index.d.cts +12 -5
  148. package/dist/web/televet/call/index.d.ts +12 -5
  149. package/dist/web/televet/call/index.js +1 -1
  150. package/dist/web/televet/index.cjs +4 -1
  151. package/dist/web/televet/index.d.cts +31 -2
  152. package/dist/web/televet/index.d.ts +31 -2
  153. package/dist/web/televet/index.js +4 -1
  154. package/package.json +4 -3
@@ -1,5 +1,6 @@
1
1
  import { E as EverfurTelevetFlowRequest, a as EverfurTelevetFlowPresenter } from '../../televetGlobal-CEk0_cW9.cjs';
2
2
  import { ReactNode, CSSProperties } from 'react';
3
+ import { T as TelevetCalendarWriter, a as TelevetCalendarEvent } from '../../BookedScreen-Cnld-jB_.cjs';
3
4
  import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-Ds8f1peV.cjs';
4
5
  export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-Ds8f1peV.cjs';
5
6
  import { E as EverfurError } from '../../EverfurError-DmELDpXp.cjs';
@@ -9,6 +10,7 @@ export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.cjs';
9
10
  import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.cjs';
10
11
  export { a as VET_VISIT_INTENTS, i as isVetVisitIntent } from '../../visitIntent-D7_yVp1I.cjs';
11
12
  export { E as EverfurResult } from '../../EverfurResult-ZtH-YV1h.cjs';
13
+ import '../../bookingTypes-DCs8mmBb.cjs';
12
14
 
13
15
  /**
14
16
  * Register how this site presents a vet visit. Call it ONCE, in your app entry, only if you want to own the
@@ -31,8 +33,35 @@ declare function hasEverfurTelevetFlow(): boolean;
31
33
  */
32
34
  declare function presentEverfurTelevetFlow(request: EverfurTelevetFlowRequest): boolean;
33
35
 
36
+ interface EverfurTelevetHostProps {
37
+ /**
38
+ * Writes a booked visit into the member's calendar. Given, the booked confirmation offers Add to Calendar and
39
+ * calls it with the visit's entry; absent, the confirmation has no calendar control. Reaches the confirmation
40
+ * only from the host that renders, which is the first one mounted. `downloadTelevetCalendarFile` hands the
41
+ * member a `.ics` file, as the consumer web app does.
42
+ */
43
+ readonly onAddToCalendar?: TelevetCalendarWriter | undefined;
44
+ }
34
45
  /** Renders the in-page vet visit Everfur provides, while one is open. Renders nothing otherwise. */
35
- declare function EverfurTelevetHost(): ReactNode;
46
+ declare function EverfurTelevetHost({ onAddToCalendar }: EverfurTelevetHostProps): ReactNode;
47
+
48
+ /** A built calendar file: the `href` a download anchor takes, and the name it saves under. */
49
+ interface TelevetCalendarFile {
50
+ /** The entry as a `data:text/calendar` URL, for an anchor's `href`. */
51
+ readonly href: string;
52
+ /** The name to save it under, for the anchor's `download`: `everfur-visit-<consult id>.ics`. */
53
+ readonly filename: string;
54
+ }
55
+ /** The calendar file for one booked visit, or null when the entry would be wrong (see the header). */
56
+ declare function televetCalendarFile(event: TelevetCalendarEvent): TelevetCalendarFile | null;
57
+ /**
58
+ * A `TelevetCalendarWriter` that hands the member the visit as a `.ics` file, as the consumer web app does. Pass
59
+ * it to `EverfurTelevetHost`'s `onAddToCalendar`. Resolves `'handed-off'` once the download is started, because a
60
+ * started download is not yet an entry in a calendar (the member imports the file, and may cancel or be blocked),
61
+ * so the confirmation keeps Add to Calendar available to press again. Resolves false when the entry cannot be
62
+ * built or there is no page to start it from.
63
+ */
64
+ declare const downloadTelevetCalendarFile: TelevetCalendarWriter;
36
65
 
37
66
  /**
38
67
  * The vet visit hook for a web page. Render your own control and call `open()` directly from its click
@@ -99,4 +128,4 @@ interface VetVisitButtonProps {
99
128
  /** Opens the Everfur vet visit, in the partner's own page by default. Renders nothing unless it is granted. */
100
129
  declare function VetVisitButton(props: VetVisitButtonProps): ReactNode;
101
130
 
102
- export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, useVetVisit };
131
+ export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, type EverfurTelevetHostProps, PetRef, TelevetCalendarEvent, type TelevetCalendarFile, TelevetCalendarWriter, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, downloadTelevetCalendarFile, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, televetCalendarFile, useVetVisit };
@@ -1,5 +1,6 @@
1
1
  import { E as EverfurTelevetFlowRequest, a as EverfurTelevetFlowPresenter } from '../../televetGlobal-Cs9Wbqsy.js';
2
2
  import { ReactNode, CSSProperties } from 'react';
3
+ import { T as TelevetCalendarWriter, a as TelevetCalendarEvent } from '../../BookedScreen-BJPbXLCG.js';
3
4
  import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-BsjoDO-n.js';
4
5
  export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-BsjoDO-n.js';
5
6
  import { E as EverfurError } from '../../EverfurError-DmELDpXp.js';
@@ -9,6 +10,7 @@ export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.js';
9
10
  import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
10
11
  export { a as VET_VISIT_INTENTS, i as isVetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
11
12
  export { E as EverfurResult } from '../../EverfurResult-SGvHKsCB.js';
13
+ import '../../bookingTypes-DCs8mmBb.js';
12
14
 
13
15
  /**
14
16
  * Register how this site presents a vet visit. Call it ONCE, in your app entry, only if you want to own the
@@ -31,8 +33,35 @@ declare function hasEverfurTelevetFlow(): boolean;
31
33
  */
32
34
  declare function presentEverfurTelevetFlow(request: EverfurTelevetFlowRequest): boolean;
33
35
 
36
+ interface EverfurTelevetHostProps {
37
+ /**
38
+ * Writes a booked visit into the member's calendar. Given, the booked confirmation offers Add to Calendar and
39
+ * calls it with the visit's entry; absent, the confirmation has no calendar control. Reaches the confirmation
40
+ * only from the host that renders, which is the first one mounted. `downloadTelevetCalendarFile` hands the
41
+ * member a `.ics` file, as the consumer web app does.
42
+ */
43
+ readonly onAddToCalendar?: TelevetCalendarWriter | undefined;
44
+ }
34
45
  /** Renders the in-page vet visit Everfur provides, while one is open. Renders nothing otherwise. */
35
- declare function EverfurTelevetHost(): ReactNode;
46
+ declare function EverfurTelevetHost({ onAddToCalendar }: EverfurTelevetHostProps): ReactNode;
47
+
48
+ /** A built calendar file: the `href` a download anchor takes, and the name it saves under. */
49
+ interface TelevetCalendarFile {
50
+ /** The entry as a `data:text/calendar` URL, for an anchor's `href`. */
51
+ readonly href: string;
52
+ /** The name to save it under, for the anchor's `download`: `everfur-visit-<consult id>.ics`. */
53
+ readonly filename: string;
54
+ }
55
+ /** The calendar file for one booked visit, or null when the entry would be wrong (see the header). */
56
+ declare function televetCalendarFile(event: TelevetCalendarEvent): TelevetCalendarFile | null;
57
+ /**
58
+ * A `TelevetCalendarWriter` that hands the member the visit as a `.ics` file, as the consumer web app does. Pass
59
+ * it to `EverfurTelevetHost`'s `onAddToCalendar`. Resolves `'handed-off'` once the download is started, because a
60
+ * started download is not yet an entry in a calendar (the member imports the file, and may cancel or be blocked),
61
+ * so the confirmation keeps Add to Calendar available to press again. Resolves false when the entry cannot be
62
+ * built or there is no page to start it from.
63
+ */
64
+ declare const downloadTelevetCalendarFile: TelevetCalendarWriter;
36
65
 
37
66
  /**
38
67
  * The vet visit hook for a web page. Render your own control and call `open()` directly from its click
@@ -99,4 +128,4 @@ interface VetVisitButtonProps {
99
128
  /** Opens the Everfur vet visit, in the partner's own page by default. Renders nothing unless it is granted. */
100
129
  declare function VetVisitButton(props: VetVisitButtonProps): ReactNode;
101
130
 
102
- export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, useVetVisit };
131
+ export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, type EverfurTelevetHostProps, PetRef, TelevetCalendarEvent, type TelevetCalendarFile, TelevetCalendarWriter, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, downloadTelevetCalendarFile, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, televetCalendarFile, useVetVisit };
@@ -1 +1,4 @@
1
- import {createContext,useMemo,useRef,useState,useEffect,useSyncExternalStore,useContext,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var zr=Object.defineProperty;var n=(e,r)=>zr(e,"name",{value:r,configurable:true});var we=Symbol.for("@everfur/sdk/televet");function w(){let e=globalThis,r=e[we];if(r!==void 0)return r;let t={presenter:null,snapshot:Object.freeze({request:null,serial:0,activeHost:null}),hosts:[],nextHost:1,listeners:new Set,dailyRegistered:false};return e[we]=t,t}n(w,"televetGlobal");function U(e){let r=w();r.snapshot=Object.freeze({...r.snapshot,...e});for(let t of [...r.listeners])try{t();}catch{}}n(U,"publish");function xe(e){w().presenter=e;}n(xe,"setTelevetPresenter");function Se(){return w().presenter!==null}n(Se,"hasTelevetPresenter");function q(e){let r=w().presenter;if(r===null)return "absent";try{return r(e)===!1?"declined":"presented"}catch(t){return console.warn("[everfur] Your registerEverfurTelevetFlow presenter threw; the in-app visit opened instead.",t),"threw"}}n(q,"callTelevetPresenter");function Fe(e){let r=w();return r.listeners.add(e),()=>{r.listeners.delete(e);}}n(Fe,"subscribeTelevetExperience");function ne(){return w().snapshot}n(ne,"televetExperienceSnapshot");function jr(){return w().hosts.length>0}n(jr,"hasTelevetHost");function ke(e){if(!jr())return false;let r=Object.freeze({...e});return U({request:r,serial:w().snapshot.serial+1}),true}n(ke,"presentTelevetExperience");function oe(){w().snapshot.request!==null&&U({request:null});}n(oe,"dismissTelevetExperience");function Oe(){let e=w(),r=e.nextHost;return e.nextHost+=1,e.hosts=[...e.hosts,r],U({activeHost:e.hosts[0]??null}),r}n(Oe,"claimTelevetHost");function Ve(e){let r=w();r.hosts=r.hosts.filter(o=>o!==e);let t=r.hosts[0]??null;U(t===null?{activeHost:t,request:null}:{activeHost:t});}n(Ve,"releaseTelevetHost");function Dr(e){xe(e);}n(Dr,"registerEverfurTelevetFlow");function Mr(){return Se()}n(Mr,"hasEverfurTelevetFlow");function Nr(e){return q(e)==="presented"}n(Nr,"presentEverfurTelevetFlow");function Pe(e){let r=null;return ()=>{if(r!==null)return r;let t=e();return r=t,t.then(void 0,()=>{r===t&&(r=null);}),t}}n(Pe,"memoizeTelevetLoader");function ze(e){let[r,t]=useState(null);useEffect(()=>{let d=Oe();return t(d),()=>{Ve(d);}},[]);let o=useSyncExternalStore(Fe,ne,ne),a=r!==null&&o.activeHost===r?o.request:null,[u,s]=useState(null),l=a!==null&&u===null;return useEffect(()=>{if(!l)return;let d=true;return e().then(b=>{d&&s(()=>b);},b=>{d&&(console.warn("[everfur] The in-app vet visit could not load its screens.",b),oe());}),()=>{d=false;}},[l,e]),a===null||u===null?null:{module:u,request:a,serial:o.serial,dismiss:oe}}n(ze,"useTelevetExperienceHost");var Ur=Pe(()=>import('@everfur/sdk/web/televet/booking'));function B(){let e=ze(Ur);if(e===null)return null;let{EverfurTelevetDialog:r}=e.module;return jsx(r,{request:e.request,onClose:e.dismiss},e.serial)}n(B,"EverfurTelevetHost");var ie=Object.freeze([Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"DAILY_QUOTA_EXCEEDED",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"FILE_TOO_LARGE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_IN_FLIGHT",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"INVALID_CONTENT_TYPE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"InternalFailureException",envelope:"http_envelope",httpStatus:500,retryable:true}),Object.freeze({wireCode:"MethodNotAllowedException",envelope:"http_envelope",httpStatus:405,retryable:false}),Object.freeze({wireCode:"NotImplementedException",envelope:"http_envelope",httpStatus:501,retryable:false}),Object.freeze({wireCode:"PaymentRequiredException",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ResourceNotFoundException",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"ServiceUnavailableException",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"TIER_UPGRADE_REQUIRED",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ThrottlingException",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"ValidationException",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"accessDenied",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"access_denied",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"device_cipher_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"email_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"event_cursor_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_payload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_not_available",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_unknown",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_required",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_reused",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"insufficientCapability",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"insufficient_scope",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"internal_error",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"invalidRequest",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_client",envelope:"oauth_error",httpStatus:401,retryable:false}),Object.freeze({wireCode:"invalid_client_metadata",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_grant",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_redirect_uri",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),Object.freeze({wireCode:"mcp_request_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"not_found",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"partner_visit_link_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"partner_visit_owner_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"partner_visit_pet_already_mapped",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"payload_too_large",envelope:"http_envelope",httpStatus:413,retryable:false}),Object.freeze({wireCode:"petRefInUse",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"pet_health_list_removals_unconfirmed",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_health_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_not_registered",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"provider_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"rateLimited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"record_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"record_subject_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"record_upload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"records_consent_required",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"sandbox_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"session_required",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"share_limit_reached",envelope:"http_envelope",httpStatus:429,retryable:false}),Object.freeze({wireCode:"slow_down",envelope:"oauth_error",httpStatus:429,retryable:true}),Object.freeze({wireCode:"species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"tenant_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"tenant_has_no_capabilities",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"tenant_resource_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"tenant_surface_not_enabled",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"timeout",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"token_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"unavailable",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);Object.freeze(ie.map(e=>e.wireCode));var Br=Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),De=Object.freeze(ie.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:Br[e.wireCode]}))),Hr=new Map(De.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),Wr=Object.freeze(["http_envelope",...[...new Set(De.map(e=>e.envelope))].filter(e=>e!=="http_envelope").sort()]);function H(e,r){if(typeof e!="string")return;let t=e.trim().toUpperCase();if(t.length!==0)for(let o of [r??"http_envelope",...Wr]){let i=Hr.get(o+t);if(i)return i}}n(H,"contractErrorFor");function Yr(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}n(Yr,"contractDocUrl");function Me(e){return null}n(Me,"publishedDocUrl");var Kr=Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function Ne(e){return Kr[e]}n(Ne,"categoryFor");function Le(e){let r=H(e);if(r)return r.normalized;let t=(e??"").trim().toUpperCase(),o=t.replace(/[^A-Z0-9]/g,"");if(o==="AUTHREJECTED")return "authRejected";if(t.startsWith("AUTH"))return "authExpired";switch(o){case "DAILYQUOTAEXCEEDED":case "QUOTAEXCEEDED":return "quotaExceeded";case "RATELIMITED":case "TOOMANYREQUESTS":return "rateLimited";case "IDEMPOTENCYKEYCONFLICT":case "IDEMPOTENCYCONFLICT":return "idempotencyConflict";case "ACCESSDENIED":case "FORBIDDEN":return "accessDenied";case "NOTFOUND":case "CONVERSATIONNOTFOUND":return "conversationNotFound";case "PETNOTFOUND":return "petNotFound";case "TIMEOUT":case "STREAMTIMEOUT":return "streamTimeout";case "MEDIAUPLOADFAILED":case "UNRECOGNIZEDVIDEOFORMAT":case "FILETOOSMALL":return "mediaUploadFailed";case "MODERATIONBLOCKED":return "moderationBlocked";case "UPSTREAMLLMTIMEOUT":return "upstreamLlmTimeout";case "INTERNALERROR":case "INTERNALSERVERERROR":return "internalError";case "STREAMINCOMPLETE":case "CHATSTREAMINCOMPLETE":return "streamIncomplete";case "INVALIDANALYSISTYPE":case "INVALIDUPLOADPURPOSE":return "unknown";default:return "unknown"}}n(Le,"fromWire");var Gr=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function ae(e){return Gr.has(e)}n(ae,"isAutoRetryable");var $r=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function Ue(e){return ae(e)||$r.has(e)}n(Ue,"isRetryableCode");var Qr=500,se=8e3,qe=4;function Be(e,r=Math.random){let t=Math.max(0,e),o=Math.min(Qr*2**t,se);return Math.floor(r()*o)}n(Be,"backoffDelayMs");var Xr=Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:"This feature isn't available on your account right now.",paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",unknown:"Something went wrong. Please try again."});function le(e){return Xr[e]}n(le,"userFacingError");function He(e,r,t){Object.defineProperty(e,r,{value:t,enumerable:false,writable:false,configurable:false});}n(He,"defineHidden");var Zr=/^[a-z][a-z0-9_]{0,63}$/;function k(e,r){let t=H(r?.wireCode,r?.wireEnvelope),o={code:e,category:Ne(e),retryable:r?.retryable??Ue(e),displayMessage:le(e)};if(r?.httpStatus!==void 0&&(o.httpStatus=r.httpStatus),r?.requestId&&(o.requestId=r.requestId),typeof r?.reasonCode=="string"&&Zr.test(r.reasonCode)&&(o.reasonCode=r.reasonCode),t);return r?.wireMessage&&He(o,"wireMessage",r.wireMessage),r?.raw!==void 0&&r.raw!==null&&He(o,"raw",r.raw),Object.freeze(o)}n(k,"makeEverfurError");function ue(e,r){return Object.freeze(r===void 0?{ok:true,value:e}:{ok:true,value:e,warning:r})}n(ue,"ok");function T(e){return Object.freeze({ok:false,error:e})}n(T,"err");var W=class W extends Error{constructor(r,t){super(t),this.name="EverfurConfigError",this.kind=r,Object.setPrototypeOf(this,W.prototype);}};n(W,"EverfurConfigError");var M=W;function We(e){return Object.freeze({kind:"error",terminal:true,code:e.code,retryable:e.retryable,wireMessage:e.wireMessage,synthesized:e.synthesized,lastEventId:e.lastEventId,serverRequestId:e.serverRequestId??null})}n(We,"errorFrame");function rt(e){let r={};return e.mode==="personalized"?r.authorization=`Bearer ${e.token}`:r["x-everfur-partner-key"]=e.publishableKey,e.userRef&&(r["x-everfur-user-ref"]=e.userRef),e.sessionId&&(r["x-everfur-session-id"]=e.sessionId),r}n(rt,"authHeaders");function N(e,r){return {...e,headers:{...tt(e.headers),...rt(r)}}}n(N,"withAuthHeaders");function tt(e){if(!e)return {};let r={};for(let[t,o]of Object.entries(e)){let i=t.toLowerCase();i==="authorization"||i==="x-everfur-partner-key"||(r[t]=o);}return r}n(tt,"stripAuthHeaders");async function Ye(e,r){if(r.mode==="anonymous")return r.transport.request(N(e,{mode:"anonymous",publishableKey:r.publishableKey,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));let t;try{t=await r.identity.currentToken();}catch{return T(de())}let o=await r.transport.request(N(e,{mode:"personalized",token:t,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));if(o.ok||o.error.httpStatus!==401)return o;let i;try{i=await r.identity.currentToken({forceRefresh:!0});}catch{return T(de())}let a=await r.transport.request(N(e,{mode:"personalized",token:i,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));return !a.ok&&a.error.httpStatus===401?T(de(a.error.httpStatus)):a}n(Ye,"authedSend");function de(e){return k("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}n(de,"authRejectedError");function Ke(e){return k("internalError",{retryable:true,wireMessage:nt(e)})}n(Ke,"networkError");function nt(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}n(nt,"describeCause");var ot=3e4,it=se*2,at="idempotency-key",st=new Set(["POST","PUT","PATCH","DELETE"]),lt=Object.freeze({onEvent(){}}),ut=Object.freeze({setTimeout:n((e,r)=>setTimeout(e,r),"setTimeout"),clearTimeout:n(e=>clearTimeout(e),"clearTimeout"),now:n(()=>Date.now(),"now")});function dt(e){let r=e.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return r.length===0?null:`efs_${r}`.slice(0,128)}n(dt,"seededIdempotencyKey");function $e(e){let r=e.observer??lt,t=e.timers??ut,o=e.rng??Math.random,i=e.sleep??((f,p)=>Tt(f,t,p)),a=e.maxAttempts??qe,u=e.unaryTimeoutMs??ot,s=e.newIdempotencyKey??ft(),l=n(f=>{try{r.onEvent(f);}catch{}},"emit");async function d(f,p,y){let h=y?.maxAttempts,c=Math.max(1,h??a),O=y?.idempotent??st.has(p.method),x=y?.idempotencyKey===void 0?null:dt(y.idempotencyKey),_=O?x??s():null,S=ct(p,_),I=0;for(;;){let E=n(R=>Object.freeze({call:f,method:p.method,path:p.path,attempt:I,..._?{idempotencyKey:_}:{},...R}),"stamp");l(E({phase:"attempt"}));let A=_t(u,t),P=Rt(A.signal,p.signal),z;try{z=await Ye({...S,signal:P.signal},e.auth);}catch(R){z=T(Ke(R));}finally{P.dispose(),A.cancel();}if(z.ok)return l(E({phase:"settled",ok:true,reason:"ok"})),z;let F=z.error,m=yt(F,I,{maxAttempts:c,rng:o,now:t.now(),aborted:p.signal?.aborted===true,...h!==void 0?{perCallMaxAttempts:h}:{},...e.errorPolicy!==void 0?{policy:e.errorPolicy}:{}}),g={ok:false,code:F.code,reason:m.reason,...F.httpStatus!==void 0?{httpStatus:F.httpStatus}:{},...F.requestId!==void 0?{requestId:F.requestId}:{}};if(!m.retry)return l(E({phase:"settled",...g})),T(F);if(l(E({phase:"retry",...g,delayMs:m.delayMs})),await i(m.delayMs,p.signal),p.signal?.aborted===true)return l(E({phase:"settled",...g,reason:"aborted"})),T(F);I+=1;}}n(d,"send");async function b(f){return N(f,await ht(e.auth))}n(b,"authorize");async function*v(f,p,y){l(Object.freeze({call:f,phase:"stream.open",method:p.method,path:p.path,attempt:0}));try{yield*e.auth.transport.stream(p,y);}catch{yield We({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:null});}}return n(v,"stream"),Object.freeze({send:d,authorize:b,stream:v})}n($e,"createRequestFunnel");function ct(e,r){let t={};for(let[o,i]of Object.entries(e.headers??{}))o.toLowerCase()!==at&&(t[o]=i);return r!==null&&(t["Idempotency-Key"]=r),{...e,headers:t}}n(ct,"assembleHeaders");function ft(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}n(ft,"defaultIdempotencyKeyFactory");var pt=10;function yt(e,r,t){if(t.aborted)return {retry:false,reason:"aborted"};let o=mt(e);if(o==="quota")return {retry:false,reason:"daily-quota-exhausted"};if(o!=="burst"&&!ae(e.code))return {retry:false,reason:"terminal-code"};let i=o==="burst"?"burst-throttle":"retryable-code";if(n(()=>{if(t.policy===void 0)return false;try{return !t.policy.shouldRetry(e.code,r)}catch{return false}},"policyVetoedRetry")())return {retry:false,reason:"terminal-code"};let u=n(()=>{if(t.policy===void 0)return null;let d;try{d=t.policy.maxAttempts(e.code);}catch{return null}return typeof d!="number"||!Number.isFinite(d)?null:Math.max(1,Math.min(pt,Math.floor(d)))},"policyCeiling"),s=t.perCallMaxAttempts??u()??t.maxAttempts;if(r+1>=s)return {retry:false,reason:"attempts-exhausted"};let l=vt(e,t.now);return l!==null?l>it?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:l}:{retry:true,reason:i,delayMs:Be(r,t.rng)}}n(yt,"decideRetry");function mt(e){let r=e.code==="unknown"?Le(gt(e.raw)):e.code;return r==="quotaExceeded"?"quota":r==="rateLimited"||e.httpStatus===429?"burst":null}n(mt,"throttleKind");function vt(e,r){let t=bt(e.raw);if(t===null)return null;let o=t-r;return o>0?o:0}n(vt,"retryOverrideMs");function bt(e){for(let r of Qe(e)){let t=r.resets_at,o=Et(t);if(o!==null)return o}return null}n(bt,"findResetsAt");function Qe(e){if(!Ge(e))return [];let r=[e];for(let t of ["error","detail"]){let o=e[t];Ge(o)&&r.push(o);}return r}n(Qe,"candidateScopes");function Et(e){if(typeof e=="number"&&Number.isFinite(e))return e<1e11?Math.round(e*1e3):Math.round(e);if(typeof e=="string"&&e.trim().length>0){let r=Date.parse(e);return Number.isFinite(r)?r:null}return null}n(Et,"parseInstantMs");function gt(e){for(let r of Qe(e)){let t=r.code;if(typeof t=="string"&&t.length>0)return t}return null}n(gt,"rawWireCode");function Ge(e){return typeof e=="object"&&e!==null}n(Ge,"isRecord");async function ht(e){return e.mode==="anonymous"?{mode:"anonymous",publishableKey:e.publishableKey,userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}:{mode:"personalized",token:await e.identity.currentToken(),userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}}n(ht,"resolveDeviceAuth");function _t(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(_t,"boundedSignal");function Rt(e,r){let t=n(()=>{},"noop");if(!r)return {signal:e,dispose:t};let o=new AbortController;if(e.aborted||r.aborted)return o.abort(),{signal:o.signal,dispose:t};let i=n(()=>o.abort(),"onAbort");return e.addEventListener("abort",i,{once:true}),r.addEventListener("abort",i,{once:true}),{signal:o.signal,dispose:n(()=>{e.removeEventListener("abort",i),r.removeEventListener("abort",i);},"dispose")}}n(Rt,"mergeSignals");function Tt(e,r,t){return e<=0||t?.aborted===true?Promise.resolve():new Promise(o=>{let i=r.setTimeout(()=>{t?.removeEventListener("abort",a),o();},e),a=n(()=>{r.clearTimeout(i),o();},"onAbort");t?.addEventListener("abort",a,{once:true});})}n(Tt,"delayAbortable");var Y=Object.freeze(["visit","join","summary","messages"]);function K(e){return typeof e=="string"&&Y.includes(e)}n(K,"isVetVisitIntent");var Ct="/widget/v1/televet/handoffs",wt="/widget/v1/televet/availability",xt="/widget/v1/televet/chat-entry",St=/^[a-z0-9][a-z0-9_-]{0,39}$/,nr=/^[A-Za-z0-9_-]{22}$/,Xe="everfur_flow",Ze=32,Je=128,er=64;function G(e){let r=e.httpStatus;switch(e.code){case "sessionRequired":return "sessionRequired";case "authExpired":case "authRejected":return "authRejected";case "sdkUpdateRequired":return "sdkUpdateRequired";case "validationFailed":return "invalidRequest";case "rateLimited":case "quotaExceeded":return "rateLimited";}return r===void 0?e.code==="internalError"?"network":"unknown":r===429?"rateLimited":r===404?"unavailable":r===403?"accessDenied":r===401?"authRejected":r===400||r===422?"invalidRequest":r>=500?"serverError":"unknown"}n(G,"vetVisitErrorReasonOf");function rr(e){return T(k("validationFailed",{retryable:false,wireMessage:e}))}n(rr,"invalid");function ce(e){return T(k("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}n(ce,"unusable");function Ft(e,r){let t={};e!==void 0&&(t.pet_ref=e);let o=r?.returnTo;if(o!=null){if(typeof o!="string"||!St.test(o))return {ok:false,message:"returnTo must be a registered return destination key"};t.return_to=o;}let i=r?.entry;if(i!=null){if(i!=="chat"||e===void 0)return {ok:false,message:"entry 'chat' needs the pet the chat is about"};t.entry=i;}let a=r?.visitRef,u=r?.intent,s=a!=null;if(s){let l=typeof a=="string"?a.trim():"";if(l.length<1||[...l].length>er)return {ok:false,message:`visitRef must be 1..${er} characters`};t.visit_ref=l;}if(u!=null){if(!s)return {ok:false,message:"intent needs the visitRef it opens"};if(!K(u))return {ok:false,message:`intent must be one of ${Y.join(", ")}`};t.intent=u;}return {ok:true,body:t}}n(Ft,"handoffBody");function kt(e){if(typeof e!="object"||e===null)return null;let{visit_ref:r,intent:t}=e;return typeof r!="string"||r.length===0||!K(t)?null:Object.freeze({visitRef:r,intent:t})}n(kt,"parseVisitEcho");function or(e){let r=e.funnel??$e({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),t=e.telemetry,o=n(i=>(tr(t,"televet.visit.handoff_failed",{reason:G(i)}),T(i)),"failed");return {async createHandoff(i,a){let u;if(i!=null){let c=typeof i=="string"?[...i].length:0;if(c<1||c>Je)return o(k("validationFailed",{retryable:false,wireMessage:`pet_ref must be 1..${Je} characters`}));u=i;}let s=Ft(u,a);if(!s.ok){let c=rr(s.message);return c.ok?c:o(c.error)}let l=s.body,d=await r.send("televet.visit.handoff",{method:"POST",path:Ct,body:l},{idempotent:false,maxAttempts:1});if(!d.ok)return o(d.error);let b=Vt(d.value),v=l.return_to!==void 0,f=v?d.value?.flow_id:void 0;if(v&&(typeof f!="string"||!nr.test(f))){let c=ce("the handoff response carried no usable return flow id");return c.ok?c:o(c.error)}let p=l.visit_ref!==void 0,y=p?kt(d.value?.visit):null;if(p&&y===null){let c=ce("the handoff response did not confirm the visit it opens");return c.ok?c:o(c.error)}let h=b===null?null:Object.freeze({...b,...v?{flowId:f}:{},...y!==null?{visit:y}:{}});return h===null?o(k("internalError",{retryable:false,httpStatus:502,wireMessage:"the handoff response carried no usable visit url"})):(tr(t,"televet.visit.handoff_created",{pet_scoped:l.pet_ref!==void 0}),ue(h))},async checkAvailability(i){if(typeof i!="string"||i.length>Ze)return rr(`state must be at most ${Ze} characters`);let a=await r.send("televet.visit.availability",{method:"POST",path:wt,body:{state:i}},{idempotent:false,maxAttempts:1});if(!a.ok)return T(a.error);let u=a.value?.available;return typeof u!="boolean"?ce("the availability response carried no usable answer"):ue(Object.freeze({available:u}))},async chatEntryOpen(){try{let i=await r.send("televet.visit.chat_entry",{method:"GET",path:xt},{maxAttempts:1});return i.ok&&i.value?.open===!0}catch{return false}}}}n(or,"createVetVisitController");function Ot(e){if(typeof e!="string")return null;let r=e.indexOf("#"),t=r<0?e:e.slice(0,r),o=t.indexOf("?");if(o<0)return null;let i=t.slice(o+1).split("&").filter(a=>a.startsWith(`${Xe}=`)).map(a=>a.slice(Xe.length+1));return i.length!==1||!nr.test(i[0]??"")?null:Object.freeze({flowId:i[0]})}n(Ot,"parseVetVisitReturn");function Vt(e){if(typeof e!="object"||e===null)return null;let{url:r,expires_at:t}=e;return typeof r!="string"||typeof t!="string"||t.length===0||!zt(r)?null:Object.freeze({url:r,expiresAt:t})}n(Vt,"parseHandoff");var It=new Set(["localhost","127.0.0.1","[::1]"]),At=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/,Pt=/[\s\u0000-\u001f\u007f]/;function zt(e){if(Pt.test(e))return false;let r=At.exec(e);if(r===null)return false;let t=(r[1]??"").toLowerCase(),o=r[2]??"";if(o.length===0||o.includes("@"))return false;let i=o.replace(/:\d+$/,"").toLowerCase(),a=t==="https",u=t==="http"&&It.has(i);if(!a&&!u)return false;let s=e.indexOf("#");if(s<0)return false;let l=e.slice(s);return l.startsWith("#h=")&&l.length>3}n(zt,"isOpenableVisitUrl");function tr(e,r,t){if(e)try{e.track(r,t);}catch{}}n(tr,"safeTrack");var ir=Symbol.for("@everfur/sdk#EverfurContext@v1"),ar=globalThis,sr=ar[ir]??(ar[ir]=createContext(null));sr.displayName??="EverfurContext";function $(){let e=useContext(sr);if(e===null)throw new M("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}n($,"useEverfurContext");var Mt=Object.freeze({chat:Object.freeze(["chat.message.create"]),records:Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:Object.freeze(["records.clinic.create"]),video:Object.freeze(["video.gait.execute"]),photo:Object.freeze(["photo.checkup.execute"]),animations:Object.freeze(["animations.state.read"]),televet:Object.freeze(["televet.visit.create"])});function Nt(e){return Mt[e]}n(Nt,"requires");function lr(e,r,t){let o=Nt(e),i=new Map;for(let s of r)i.set(s.resource,s);if(t?.isPending===true&&o.some(s=>!i.has(s)))return fe({name:e,enabled:false,isPending:true,limits:{}});let a=Lt(o,i);return o.filter(s=>i.get(s)?.granted!==true).length===0?fe({name:e,enabled:true,isPending:false,limits:a}):fe({name:e,enabled:false,isPending:false,limits:a,disabled:Ut(o,i)})}n(lr,"decideCapability");function Lt(e,r){let t={};for(let o of e){let i=r.get(o)?.limits;if(i)for(let[a,u]of Object.entries(i)){let s=t[a];t[a]=s===void 0?u:Math.min(s,u);}}return t}n(Lt,"mergeLimits");function Ut(e,r){for(let t of e){let o=r.get(t)?.disabled;if(o)return Object.freeze({reason:o.reason,level:o.level,recoverable:o.recoverable})}return Object.freeze({reason:le("accessDenied"),level:"user_entitlement",recoverable:false})}n(Ut,"disabledFor");function fe(e){let r={name:e.name,enabled:e.enabled,isPending:e.isPending,limits:Object.freeze({...e.limits})};return e.disabled!==void 0&&(r.disabled=e.disabled),Object.freeze(r)}n(fe,"freezeDecision");function ur(e){let{runtime:r}=$(),t=r.entitlements,o=useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return useMemo(()=>lr(e,o.decisions,{isPending:o.isPending}),[e,o])}n(ur,"useCapability");function dr(e){let r=globalThis.console;try{r?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}n(dr,"reportHostFailure");function Ht(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}n(Ht,"isThenable");function j(e,...r){if(typeof e=="function")try{let t=e(...r);return Ht(t)&&Promise.resolve(t).then(void 0,dr),t}catch(t){dr(t);return}}n(j,"callHost");var cr=false;function Q(e,r){return r!==void 0?(j(r,e),"onStartInApp"):q(e)==="presented"?"presenter":ke(e)?"experience":(cr||(cr=true,console.warn("[everfur] A vet visit had nowhere to open: mount <EverfurTelevetHost /> in your EverfurProvider, or pass prefer: 'redirect'.")),null)}n(Q,"openVetVisitInApp");var pe=Object.freeze({status:"idle",error:null,errorReason:null});function Yt(e,r,t){let{usState:o,chat:i,scope:a}=t,u=r&&(o!==null||i),s=`${o??""}|${i?"chat":""}`,[l,d]=useState(null);if(useEffect(()=>{if(!u)return;let v=true,f=e.current;return d(null),n(async()=>{try{if(i&&!(f.chatEntryOpen&&await f.chatEntryOpen()))return !1;if(o===null)return !0;if(!f.checkAvailability)return !1;let y=await f.checkAvailability(o);return y.ok&&y.value.available}catch{return false}},"ask")().then(y=>{v&&d({key:s,open:y});}),()=>{v=false;}},[u,s,o,i,a,e]),!u)return null;let b=l!==null&&l.key===s;return {open:b&&l.open,pending:!b}}n(Yt,"usePreflight");var Kt=Object.freeze({status:"opening",error:null,errorReason:null});function yr(e,r={}){let{runtime:t,userRef:o,scopeEpoch:i}=$(),a=ur("televet"),u=a.enabled&&o!==null,s=r.usState??null,l=r.entry==="chat",d=r.petRef??null,b=r.prefer==="redirect",v=useMemo(()=>{if(r.controller)return r.controller;let{services:m}=t.registry;return or({auth:m.authFor(o),telemetry:m.telemetry,...m.errorPolicy?{errorPolicy:m.errorPolicy}:{}})},[t,o,i,r.controller]),f=useRef(v);f.current=v;let p=useMemo(()=>({runtime:t,userRef:o,scopeEpoch:i}),[t,o,i]),y=Yt(f,u,{usState:s,chat:l,scope:p}),h=u&&(y===null||y.open)&&(!l||d!==null),c=r.returnTo??null,[O,x]=useState(pe),_=useRef(null),S=useRef({runtime:t,userRef:o,scopeEpoch:i});S.current={runtime:t,userRef:o,scopeEpoch:i};let I=useRef(v);I.current=v;let E=useRef(h);E.current=h;let A=useCallback((m,g)=>{if(_.current)return _.current;let R=n((C,D)=>(x({status:C==="cancelled"?"idle":"error",error:D,errorReason:C==="cancelled"?null:C}),Object.freeze({opened:false,reason:C,error:D})),"fail");if(!E.current)return Promise.resolve(R("unavailable",null));let V=e.prepare();if(!V.ok)return Promise.resolve(R(V.reason,null));let ee=S.current,_e=I.current;x(Kt);let re=(async()=>{let C,D={...c!==null?{returnTo:c}:{},...l?{entry:"chat"}:{},...g!==null?{visitRef:g.visitRef}:{},...g!==null&&g.intent!==null&&g.intent!==void 0?{intent:g.intent}:{}},Re=Object.keys(D).length===0?void 0:D,Te=m===void 0?d:m;try{C=await(Re===void 0?_e.createHandoff(Te):_e.createHandoff(Te,Re));}catch{return e.abandon(V.value),R("unknown",null)}let te=S.current;if(te.runtime!==ee.runtime||te.userRef!==ee.userRef||te.scopeEpoch!==ee.scopeEpoch)return e.abandon(V.value),R("cancelled",null);if(!C.ok)return e.abandon(V.value),R(G(C.error),C.error);let Ce=await e.finish(V.value,C.value);return Ce!==null?R(Ce,null):(x(pe),Object.freeze(C.value.flowId===void 0?{opened:true}:{opened:true,flowId:C.value.flowId}))})().finally(()=>{_.current===re&&(_.current=null);});return _.current=re,re},[e,d,c,l]),P=useCallback((m,g)=>{if(!E.current)return x({status:"error",error:null,errorReason:"unavailable"}),Promise.resolve(Object.freeze({opened:false,reason:"unavailable",error:null}));let R=m===void 0?d:m,V={...R!==null?{petRef:R}:{},...s!==null?{usState:s}:{},...g!==null?{visitRef:g.visitRef,intent:g.intent}:{}};return Q(V)===null?(x({status:"error",error:null,errorReason:"unavailable"}),Promise.resolve(Object.freeze({opened:false,reason:"unavailable",error:null}))):(x(pe),Promise.resolve(Object.freeze({opened:true})))},[d,s]),z=useCallback(m=>b?A(m,null):P(m,null),[b,A,P]),F=useCallback((m,g)=>b?A(void 0,{visitRef:m,intent:g??null}):P(void 0,{visitRef:m,intent:g??null}),[b,A,P]);return {available:h,isPending:a.isPending||(y?.pending??false),status:O.status,error:O.error,errorReason:O.errorReason,open:z,openVisit:F}}n(yr,"useVetVisitWith");function mr(e){try{e.closed||e.close();}catch{}}n(mr,"closeQuietly");var Gt=Object.freeze({prepare(){let e=null;try{e=typeof window>"u"?null:window.open("about:blank","_blank");}catch{e=null;}if(e===null)return {ok:false,reason:"popupBlocked"};try{e.opener=null;}catch{}return {ok:true,value:{tab:e}}},async finish({tab:e},r){if(e.closed)return "cancelled";try{return e.location.replace(r.url),null}catch{return mr(e),"popupBlocked"}},abandon({tab:e}){mr(e);}});function ye(e){return yr(Gt,e)}n(ye,"useVetVisit");function $t(e,r){if(e===void 0)return {};let t={};return e.backgroundColor!==void 0&&(t.backgroundColor=e.backgroundColor),e.borderColor!==void 0&&(t.borderColor=e.borderColor,t.borderWidth=r??1),e.borderRadius!==void 0&&(t.borderRadius=e.borderRadius),t}n($t,"slotBox");function vr(e){return e?.textColor===void 0?{}:{color:e.textColor}}n(vr,"slotText");function br(e,r){let t=$t(e,r),o={};return t.backgroundColor!==void 0&&(o.backgroundColor=t.backgroundColor),t.borderColor!==void 0&&(o.border=`${t.borderWidth??1}px solid ${t.borderColor}`),t.borderRadius!==void 0&&(o.borderRadius=t.borderRadius),o}n(br,"slotBoxCss");var Er=Object.freeze({visitButton:"Talk to a vet"});function be(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let r of Object.keys(e))be(e[r]);}return e}n(be,"deepFreeze");var Qt=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),hr={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},_r={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},gr={nano:8,small:9,micro:10,tiny:11,caption:12,bodyTight:13,body:14,subtitle:16,heading:18,verdict:24},Xt={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},Zt={regular:"400",medium:"500",bold:"700"},Jt={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},en=0,Z="System",J="monospace",rn=["content","heading","control","compact","badge"];function tn(e){let r={};for(let t of rn)r[t]=e;return r}n(tn,"authoredTierSizes");function Rr(){return {family:Z,mono:J,fontUrl:null,families:{regular:Z,medium:Z,bold:Z,mono:J,monoMedium:J,monoBold:J},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:gr,tierSizes:tn(gr),lineHeight:Xt,weight:Zt,letterSpacing:Jt,scale:1,maxScale:en,scaleCaps:Qt}}n(Rr,"baseType");var Tr={},me=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function ve(e){return `cubic-bezier(${e.join(", ")})`}n(ve,"cssCubicBezier");var Cr={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:ve(me.standard),emphasized:ve(me.emphasized),exit:ve(me.exit)},reducedMotion:false},nn={brand:"#10462E",brandSoft:"rgba(16,70,46,0.10)",brandSofter:"rgba(16,70,46,0.15)",brandBorder:"rgba(16,70,46,0.18)",borderHairlineGreen:"rgba(16,70,46,0.25)",brandBorderStrong:"rgba(16,70,46,0.55)",brandInk:"#10462E",linkInk:"#10462E",surface:"#FFFFFF",surfaceCream:"#FDFBF8",surfaceSubtle:"#EFE9E3",background:"#FFFFFF",borderRingCream:"#D8D2C8",chatGround:"#FFFFFF",composerFill:"#FDFBF8",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#111111",secondary:"#0E462E",muted:"#6E6660",placeholder:"rgba(61,61,61,0.75)",onBrand:"#FFFFFF",metaCool:"#3D3D3D",timestamp:"rgba(61,61,61,0.75)"},primary:"#10462E",onPrimary:"#FFFFFF",accent:"#10462E",onAccent:"#FFFFFF",accentEdge:"#07C168",success:"#07C168",danger:"#B91C1C",errorRed:"#FF1B00",warningStrong:"#A45610",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.12)",badgeBgCaution:"rgba(217,130,29,0.14)",badgeBgCritical:"rgba(185,28,28,0.12)",badgeBgNeutral:"rgba(110,102,96,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",skeleton:"#EFE9E3",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)"},wr=be({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:nn,space:hr,radius:_r,type:Rr(),motion:Cr,slots:Tr}),on={brand:"#6BD39A",brandSoft:"rgba(107,211,154,0.12)",brandSofter:"rgba(107,211,154,0.18)",brandBorder:"rgba(107,211,154,0.22)",borderHairlineGreen:"rgba(107,211,154,0.28)",brandBorderStrong:"rgba(107,211,154,0.55)",brandInk:"#6BD39A",linkInk:"#6BD39A",surface:"#1C1F23",surfaceCream:"#23272C",surfaceSubtle:"#23272C",background:"#15171A",borderRingCream:"#3A3F45",chatGround:"#1C1F23",composerFill:"#23272C",composerBorder:"rgba(107,211,154,0.75)",shadow:"#000000",text:{primary:"#F5F3F0",secondary:"#A9E4C4",muted:"#9A938C",placeholder:"rgba(255,255,255,0.55)",onBrand:"#0E1F17",metaCool:"#C9C9C9",timestamp:"rgba(245,243,240,0.7)"},primary:"#6BD39A",onPrimary:"#0E1F17",accent:"#6BD39A",onAccent:"#0E1F17",accentEdge:"#34D888",success:"#07C168",danger:"#F87171",errorRed:"#FF6B5B",warningStrong:"#F0A35E",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.18)",badgeBgCaution:"rgba(217,130,29,0.20)",badgeBgCritical:"rgba(185,28,28,0.22)",badgeBgNeutral:"rgba(255,255,255,0.10)",bubbleUser:"#6BD39A",bubbleAssistant:"#1C1F23",skeleton:"#23272C",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)"};be({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:on,space:hr,radius:_r,type:Rr(),motion:Cr,slots:Tr});var xr=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),Sr=globalThis,Ee=Sr[xr]??(Sr[xr]=createContext(wr));Ee.displayName??="EverfurThemeContext";function ge(){return useContext(Ee)}n(ge,"useEverfurTheme");var Fr=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});var kr='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',ln="System";function un(e){let r=e.trim();return r.length===0||r===ln?kr:`${Or(r)}, ${kr}`}n(un,"cssFontFamily");function dn(e){let r=e.trim();return r.length===0||r==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${Or(r)}, ui-monospace, Menlo, Consolas, monospace`}n(dn,"cssMonoFamily");function Or(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}n(Or,"quote");function Vr(e,r){let t=e.type,o=t.families[r];return {fontFamily:r==="mono"||r==="monoMedium"||r==="monoBold"?dn(o):un(o),fontWeight:t.namedFaces[r]?t.weight.regular:t.weight[Fr[r]]}}n(Vr,"faceCss");var Ir=44,pn=.6;function yn(e){let{petRef:r,children:t,onOpened:o,onError:i,style:a,className:u,controller:s,returnTo:l,usState:d,entry:b,visitRef:v,intent:f,onStartInApp:p,prefer:y}=e,h=y==="redirect",c=ye({...l!==void 0?{returnTo:l}:{},...d!==void 0?{usState:d}:{},...b!==void 0?{entry:b}:{},...r!==void 0?{petRef:r}:{},...s!==void 0?{controller:s}:{},prefer:h?"redirect":"in-app"}),O=ge(),x=useMemo(()=>mn(O),[O]),_=useRef(false);if(!c.available)return jsxs(Fragment,{children:[null,jsx(B,{})]});let S=c.status==="opening";return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:n(()=>{if(!(S||_.current)){if(!h){let E={...r!==void 0?{petRef:r}:{},...d!==void 0?{usState:d}:{},...v!=null?{visitRef:v,intent:f??null}:{}};Q(E,p)===null&&j(i,"unavailable",null);return}_.current=true,(v==null?c.open():c.openVisit(v,f??null)).then(E=>{E.opened?j(o,E.flowId??null):E.reason!=="cancelled"&&j(i,E.reason,E.error);}).finally(()=>{_.current=false;});}},"onClick"),"aria-busy":S,"aria-disabled":S,className:u,style:{...x,...S?{opacity:pn,cursor:"progress"}:null,...a},children:t??Er.visitButton}),jsx(B,{})]})}n(yn,"VetVisitButton");function mn(e){let{color:r,space:t,radius:o,type:i,slots:a}=e;return {boxSizing:"border-box",minHeight:Ir,minWidth:Ir,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,border:0,cursor:"pointer",padding:`${t.sm}px ${t.xl}px`,borderRadius:o.pill,backgroundColor:r.primary,color:r.onPrimary,...Vr(e,"medium"),fontSize:i.size.body,...br(a.vetVisitButton),...vr(a.vetVisitButton)}}n(mn,"buttonStyle");export{B as EverfurTelevetHost,Y as VET_VISIT_INTENTS,yn as VetVisitButton,Mr as hasEverfurTelevetFlow,K as isVetVisitIntent,Ot as parseVetVisitReturn,Nr as presentEverfurTelevetFlow,Dr as registerEverfurTelevetFlow,ye as useVetVisit,G as vetVisitErrorReasonOf};
1
+ import {createContext,useMemo,useRef,useState,useEffect,useSyncExternalStore,useContext,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var Mr=Object.defineProperty;var n=(e,r)=>Mr(e,"name",{value:r,configurable:true});var we=Symbol.for("@everfur/sdk/televet");function x(){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(x,"televetGlobal");function U(e){let r=x();r.snapshot=Object.freeze({...r.snapshot,...e});for(let t of [...r.listeners])try{t();}catch{}}n(U,"publish");function Se(e){x().presenter=e;}n(Se,"setTelevetPresenter");function Fe(){return x().presenter!==null}n(Fe,"hasTelevetPresenter");function B(e){let r=x().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(B,"callTelevetPresenter");function ke(e){let r=x();return r.listeners.add(e),()=>{r.listeners.delete(e);}}n(ke,"subscribeTelevetExperience");function ne(){return x().snapshot}n(ne,"televetExperienceSnapshot");function Lr(){return x().hosts.length>0}n(Lr,"hasTelevetHost");function Oe(e){if(!Lr())return false;let r=Object.freeze({...e});return U({request:r,serial:x().snapshot.serial+1}),true}n(Oe,"presentTelevetExperience");function oe(){x().snapshot.request!==null&&U({request:null});}n(oe,"dismissTelevetExperience");function Ve(){let e=x(),r=e.nextHost;return e.nextHost+=1,e.hosts=[...e.hosts,r],U({activeHost:e.hosts[0]??null}),r}n(Ve,"claimTelevetHost");function Ie(e){let r=x();r.hosts=r.hosts.filter(o=>o!==e);let t=r.hosts[0]??null;U(t===null?{activeHost:t,request:null}:{activeHost:t});}n(Ie,"releaseTelevetHost");function Ur(e){Se(e);}n(Ur,"registerEverfurTelevetFlow");function Br(){return Fe()}n(Br,"hasEverfurTelevetFlow");function qr(e){return B(e)==="presented"}n(qr,"presentEverfurTelevetFlow");function ze(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(ze,"memoizeTelevetLoader");function je(e){let[r,t]=useState(null);useEffect(()=>{let d=Ve();return t(d),()=>{Ie(d);}},[]);let o=useSyncExternalStore(ke,ne,ne),a=r!==null&&o.activeHost===r?o.request:null,[u,s]=useState(null),l=a!==null&&u===null;return useEffect(()=>{if(!l)return;let d=true;return e().then(b=>{d&&s(()=>b);},b=>{d&&(console.warn("[everfur] The in-app vet visit could not load its screens.",b),oe());}),()=>{d=false;}},[l,e]),a===null||u===null?null:{module:u,request:a,serial:o.serial,dismiss:oe}}n(je,"useTelevetExperienceHost");var Wr=ze(()=>import('@everfur/sdk/web/televet/booking'));function q({onAddToCalendar:e}){let r=je(Wr);if(r===null)return null;let{EverfurTelevetDialog:t}=r.module;return jsx(t,{request:r.request,onClose:r.dismiss,...e?{onAddToCalendar:e}:{}},r.serial)}n(q,"EverfurTelevetHost");var De=n(e=>e.toISOString().replace(/\.\d+|[-:]/g,""),"utcStamp"),Ne=n(e=>e.replace(/\\/g,"\\\\").replace(/;/g,"\\;").replace(/,/g,"\\,").replace(/\r?\n/g,"\\n"),"text");function Gr(e){let r=new TextEncoder,t=[],o="",i=0,a=75;for(let u of e){let s=r.encode(u).length;i+s>a&&(t.push(o),o="",i=0,a=74),o+=u,i+=s;}return t.push(o),t.join(`\r
2
+ `)}n(Gr,"fold");var Me=n(e=>e instanceof Date&&!Number.isNaN(e.getTime()),"usable");function Le(e){let r=e.key.trim(),t=e.title.trim();if(!r||!t||!Me(e.startDate)||!Me(e.endDate)||e.endDate.getTime()<=e.startDate.getTime())return null;let o=De(e.startDate),i=["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//Everfur//Everfur SDK//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH","BEGIN:VEVENT",`UID:${Ne(r)}@everfur.com`,`DTSTAMP:${o}`,`DTSTART:${o}`,`DTEND:${De(e.endDate)}`,`SUMMARY:${Ne(t)}`,"END:VEVENT","END:VCALENDAR"].map(Gr).join(`\r
3
+ `),a=r.replace(/^televet-consult-/,"").replace(/[^A-Za-z0-9_-]/g,"").slice(0,40);return {href:`data:text/calendar;charset=utf-8,${encodeURIComponent(`${i}\r
4
+ `)}`,filename:a?`everfur-visit-${a}.ics`:"everfur-visit.ics"}}n(Le,"televetCalendarFile");var Kr=n(async e=>{let r=Le(e);if(r===null||typeof document>"u")return false;let t=document.createElement("a");return t.href=r.href,t.download=r.filename,t.style.display="none",document.body.appendChild(t),t.click(),t.remove(),"handed-off"},"downloadTelevetCalendarFile");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 $r=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"}),Be=Object.freeze(ie.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:$r[e.wireCode]}))),Qr=new Map(Be.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),Xr=Object.freeze(["http_envelope",...[...new Set(Be.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",...Xr]){let i=Qr.get(o+t);if(i)return i}}n(H,"contractErrorFor");function Jr(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}n(Jr,"contractDocUrl");function qe(e){return null}n(qe,"publishedDocUrl");var Zr=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 He(e){return Zr[e]}n(He,"categoryFor");function We(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":case "TELEVETRATELIMITED":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(We,"fromWire");var et=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function ae(e){return et.has(e)}n(ae,"isAutoRetryable");var rt=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function Ye(e){return ae(e)||rt.has(e)}n(Ye,"isRetryableCode");var tt=500,se=8e3,Ge=4;function Ke(e,r=Math.random){let t=Math.max(0,e),o=Math.min(tt*2**t,se);return Math.floor(r()*o)}n(Ke,"backoffDelayMs");var nt=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 nt[e]}n(le,"userFacingError");function $e(e,r,t){Object.defineProperty(e,r,{value:t,enumerable:false,writable:false,configurable:false});}n($e,"defineHidden");var ot=/^[a-z][a-z0-9_]{0,63}$/;function k(e,r){let t=H(r?.wireCode,r?.wireEnvelope),o={code:e,category:He(e),retryable:r?.retryable??Ye(e),displayMessage:le(e)};if(r?.httpStatus!==void 0&&(o.httpStatus=r.httpStatus),r?.requestId&&(o.requestId=r.requestId),typeof r?.reasonCode=="string"&&ot.test(r.reasonCode)&&(o.reasonCode=r.reasonCode),t);return r?.wireMessage&&$e(o,"wireMessage",r.wireMessage),r?.raw!==void 0&&r.raw!==null&&$e(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 N=W;function Qe(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(Qe,"errorFrame");function st(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(st,"authHeaders");function M(e,r){return {...e,headers:{...lt(e.headers),...st(r)}}}n(M,"withAuthHeaders");function lt(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(lt,"stripAuthHeaders");async function Xe(e,r){if(r.mode==="anonymous")return r.transport.request(M(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(M(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(M(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(Xe,"authedSend");function de(e){return k("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}n(de,"authRejectedError");function Je(e){return k("internalError",{retryable:true,wireMessage:ut(e)})}n(Je,"networkError");function ut(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}n(ut,"describeCause");var dt=3e4,ct=se*2,ft="idempotency-key",pt=new Set(["POST","PUT","PATCH","DELETE"]),yt=Object.freeze({onEvent(){}}),mt=Object.freeze({setTimeout:n((e,r)=>setTimeout(e,r),"setTimeout"),clearTimeout:n(e=>clearTimeout(e),"clearTimeout"),now:n(()=>Date.now(),"now")});function vt(e){let r=e.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return r.length===0?null:`efs_${r}`.slice(0,128)}n(vt,"seededIdempotencyKey");function er(e){let r=e.observer??yt,t=e.timers??mt,o=e.rng??Math.random,i=e.sleep??((f,p)=>Ot(f,t,p)),a=e.maxAttempts??Ge,u=e.unaryTimeoutMs??dt,s=e.newIdempotencyKey??Et(),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??pt.has(p.method),w=y?.idempotencyKey===void 0?null:vt(y.idempotencyKey),_=O?w??s():null,S=bt(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=Ft(u,t),P=kt(A.signal,p.signal),z;try{z=await Xe({...S,signal:P.signal},e.auth);}catch(R){z=T(Je(R));}finally{P.dispose(),A.cancel();}if(z.ok)return l(E({phase:"settled",ok:true,reason:"ok"})),z;let F=z.error,m=ht(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 M(f,await St(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 Qe({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(er,"createRequestFunnel");function bt(e,r){let t={};for(let[o,i]of Object.entries(e.headers??{}))o.toLowerCase()!==ft&&(t[o]=i);return r!==null&&(t["Idempotency-Key"]=r),{...e,headers:t}}n(bt,"assembleHeaders");function Et(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}n(Et,"defaultIdempotencyKeyFactory");var gt=10;function ht(e,r,t){if(t.aborted)return {retry:false,reason:"aborted"};let o=_t(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(gt,Math.floor(d)))},"policyCeiling"),s=t.perCallMaxAttempts??u()??t.maxAttempts;if(r+1>=s)return {retry:false,reason:"attempts-exhausted"};let l=Rt(e,t.now);return l!==null?l>ct?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:l}:{retry:true,reason:i,delayMs:Ke(r,t.rng)}}n(ht,"decideRetry");function _t(e){let r=e.code==="unknown"?We(wt(e.raw)):e.code;return r==="quotaExceeded"?"quota":r==="rateLimited"||e.httpStatus===429?"burst":null}n(_t,"throttleKind");function Rt(e,r){let t=Ct(e.raw);if(t!==null){let i=t-r;return i>0?i:0}let o=Tt(e.raw);return o===null?null:Math.round(o*1e3)}n(Rt,"retryOverrideMs");function Tt(e){for(let r of ce(e)){let t=r.retry_after_seconds;if(typeof t=="number"&&Number.isFinite(t)&&t>=0)return t}return null}n(Tt,"findRetryAfterSeconds");function Ct(e){for(let r of ce(e)){let t=r.resets_at,o=xt(t);if(o!==null)return o}return null}n(Ct,"findResetsAt");function ce(e){if(!Ze(e))return [];let r=[e];for(let t of ["error","detail"]){let o=e[t];Ze(o)&&r.push(o);}return r}n(ce,"candidateScopes");function xt(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(xt,"parseInstantMs");function wt(e){for(let r of ce(e)){let t=r.code;if(typeof t=="string"&&t.length>0)return t}return null}n(wt,"rawWireCode");function Ze(e){return typeof e=="object"&&e!==null}n(Ze,"isRecord");async function St(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(St,"resolveDeviceAuth");function Ft(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(Ft,"boundedSignal");function kt(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(kt,"mergeSignals");function Ot(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(Ot,"delayAbortable");var Y=Object.freeze(["visit","join","summary","messages"]);function G(e){return typeof e=="string"&&Y.includes(e)}n(G,"isVetVisitIntent");var Vt="/widget/v1/televet/handoffs",It="/widget/v1/televet/availability",At="/widget/v1/televet/chat-entry",Pt=/^[a-z0-9][a-z0-9_-]{0,39}$/,sr=/^[A-Za-z0-9_-]{22}$/,rr="everfur_flow",tr=32,nr=128,or=64;function K(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(K,"vetVisitErrorReasonOf");function ir(e){return T(k("validationFailed",{retryable:false,wireMessage:e}))}n(ir,"invalid");function fe(e){return T(k("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}n(fe,"unusable");function zt(e,r){let t={};e!==void 0&&(t.pet_ref=e);let o=r?.returnTo;if(o!=null){if(typeof o!="string"||!Pt.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>or)return {ok:false,message:`visitRef must be 1..${or} characters`};t.visit_ref=l;}if(u!=null){if(!s)return {ok:false,message:"intent needs the visitRef it opens"};if(!G(u))return {ok:false,message:`intent must be one of ${Y.join(", ")}`};t.intent=u;}return {ok:true,body:t}}n(zt,"handoffBody");function jt(e){if(typeof e!="object"||e===null)return null;let{visit_ref:r,intent:t}=e;return typeof r!="string"||r.length===0||!G(t)?null:Object.freeze({visitRef:r,intent:t})}n(jt,"parseVisitEcho");function lr(e){let r=e.funnel??er({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),t=e.telemetry,o=n(i=>(ar(t,"televet.visit.handoff_failed",{reason:K(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>nr)return o(k("validationFailed",{retryable:false,wireMessage:`pet_ref must be 1..${nr} characters`}));u=i;}let s=zt(u,a);if(!s.ok){let c=ir(s.message);return c.ok?c:o(c.error)}let l=s.body,d=await r.send("televet.visit.handoff",{method:"POST",path:Vt,body:l},{idempotent:false,maxAttempts:1});if(!d.ok)return o(d.error);let b=Nt(d.value),v=l.return_to!==void 0,f=v?d.value?.flow_id:void 0;if(v&&(typeof f!="string"||!sr.test(f))){let c=fe("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?jt(d.value?.visit):null;if(p&&y===null){let c=fe("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"})):(ar(t,"televet.visit.handoff_created",{pet_scoped:l.pet_ref!==void 0}),ue(h))},async checkAvailability(i){if(typeof i!="string"||i.length>tr)return ir(`state must be at most ${tr} characters`);let a=await r.send("televet.visit.availability",{method:"POST",path:It,body:{state:i}},{idempotent:false,maxAttempts:1});if(!a.ok)return T(a.error);let u=a.value?.available;return typeof u!="boolean"?fe("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:At},{maxAttempts:1});return i.ok&&i.value?.open===!0}catch{return false}}}}n(lr,"createVetVisitController");function Dt(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(`${rr}=`)).map(a=>a.slice(rr.length+1));return i.length!==1||!sr.test(i[0]??"")?null:Object.freeze({flowId:i[0]})}n(Dt,"parseVetVisitReturn");function Nt(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||!Bt(r)?null:Object.freeze({url:r,expiresAt:t})}n(Nt,"parseHandoff");var Mt=new Set(["localhost","127.0.0.1","[::1]"]),Lt=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/,Ut=/[\s\u0000-\u001f\u007f]/;function Bt(e){if(Ut.test(e))return false;let r=Lt.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"&&Mt.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(Bt,"isOpenableVisitUrl");function ar(e,r,t){if(e)try{e.track(r,t);}catch{}}n(ar,"safeTrack");var ur=Symbol.for("@everfur/sdk#EverfurContext@v1"),dr=globalThis,cr=dr[ur]??(dr[ur]=createContext(null));cr.displayName??="EverfurContext";function $(){let e=useContext(cr);if(e===null)throw new N("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}n($,"useEverfurContext");var Wt=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 Yt(e){return Wt[e]}n(Yt,"requires");function fr(e,r,t){let o=Yt(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 pe({name:e,enabled:false,isPending:true,limits:{}});let a=Gt(o,i);return o.filter(s=>i.get(s)?.granted!==true).length===0?pe({name:e,enabled:true,isPending:false,limits:a}):pe({name:e,enabled:false,isPending:false,limits:a,disabled:Kt(o,i)})}n(fr,"decideCapability");function Gt(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(Gt,"mergeLimits");function Kt(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(Kt,"disabledFor");function pe(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(pe,"freezeDecision");function pr(e){let{runtime:r}=$(),t=r.entitlements,o=useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return useMemo(()=>fr(e,o.decisions,{isPending:o.isPending}),[e,o])}n(pr,"useCapability");function yr(e){let r=globalThis.console;try{r?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}n(yr,"reportHostFailure");function Xt(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}n(Xt,"isThenable");function j(e,...r){if(typeof e=="function")try{let t=e(...r);return Xt(t)&&Promise.resolve(t).then(void 0,yr),t}catch(t){yr(t);return}}n(j,"callHost");var mr=false;function Q(e,r){return r!==void 0?(j(r,e),"onStartInApp"):B(e)==="presented"?"presenter":Oe(e)?"experience":(mr||(mr=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 ye=Object.freeze({status:"idle",error:null,errorReason:null});function Zt(e,r,t){let{usState:o,chat:i,scope:a}=t,u=r&&(o!==null||i),s=`${o??""}|${i?"chat":""}`,[l,d]=useState(null);if(useEffect(()=>{if(!u)return;let v=true,f=e.current;return d(null),n(async()=>{try{if(i&&!(f.chatEntryOpen&&await f.chatEntryOpen()))return !1;if(o===null)return !0;if(!f.checkAvailability)return !1;let y=await f.checkAvailability(o);return y.ok&&y.value.available}catch{return false}},"ask")().then(y=>{v&&d({key:s,open:y});}),()=>{v=false;}},[u,s,o,i,a,e]),!u)return null;let b=l!==null&&l.key===s;return {open:b&&l.open,pending:!b}}n(Zt,"usePreflight");var en=Object.freeze({status:"opening",error:null,errorReason:null});function Er(e,r={}){let{runtime:t,userRef:o,scopeEpoch:i}=$(),a=pr("televet"),u=a.enabled&&o!==null,s=r.usState??null,l=r.entry==="chat",d=r.petRef??null,b=r.prefer==="redirect",v=useMemo(()=>{if(r.controller)return r.controller;let{services:m}=t.registry;return lr({auth:m.authFor(o),telemetry:m.telemetry,...m.errorPolicy?{errorPolicy:m.errorPolicy}:{}})},[t,o,i,r.controller]),f=useRef(v);f.current=v;let p=useMemo(()=>({runtime:t,userRef:o,scopeEpoch:i}),[t,o,i]),y=Zt(f,u,{usState:s,chat:l,scope:p}),h=u&&(y===null||y.open)&&(!l||d!==null),c=r.returnTo??null,[O,w]=useState(ye),_=useRef(null),S=useRef({runtime:t,userRef:o,scopeEpoch:i});S.current={runtime:t,userRef:o,scopeEpoch:i};let I=useRef(v);I.current=v;let E=useRef(h);E.current=h;let A=useCallback((m,g)=>{if(_.current)return _.current;let R=n((C,D)=>(w({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,Re=I.current;w(en);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}:{}},Te=Object.keys(D).length===0?void 0:D,Ce=m===void 0?d:m;try{C=await(Te===void 0?Re.createHandoff(Ce):Re.createHandoff(Ce,Te));}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(K(C.error),C.error);let xe=await e.finish(V.value,C.value);return xe!==null?R(xe,null):(w(ye),Object.freeze(C.value.flowId===void 0?{opened:true}:{opened:true,flowId:C.value.flowId}))})().finally(()=>{_.current===re&&(_.current=null);});return _.current=re,re},[e,d,c,l]),P=useCallback((m,g)=>{if(!E.current)return w({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?(w({status:"error",error:null,errorReason:"unavailable"}),Promise.resolve(Object.freeze({opened:false,reason:"unavailable",error:null}))):(w(ye),Promise.resolve(Object.freeze({opened:true})))},[d,s]),z=useCallback(m=>b?A(m,null):P(m,null),[b,A,P]),F=useCallback((m,g)=>b?A(void 0,{visitRef:m,intent:g??null}):P(void 0,{visitRef:m,intent:g??null}),[b,A,P]);return {available:h,isPending:a.isPending||(y?.pending??false),status:O.status,error:O.error,errorReason:O.errorReason,open:z,openVisit:F}}n(Er,"useVetVisitWith");function gr(e){try{e.closed||e.close();}catch{}}n(gr,"closeQuietly");var rn=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 gr(e),"popupBlocked"}},abandon({tab:e}){gr(e);}});function me(e){return Er(rn,e)}n(me,"useVetVisit");function tn(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(tn,"slotBox");function hr(e){return e?.textColor===void 0?{}:{color:e.textColor}}n(hr,"slotText");function _r(e,r){let t=tn(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(_r,"slotBoxCss");var Rr=Object.freeze({visitButton:"Talk to a vet"});function Ee(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let r of Object.keys(e))Ee(e[r]);}return e}n(Ee,"deepFreeze");var nn=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),Cr={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},xr={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},Tr={nano:8,small:9,micro:10,tiny:11,caption:12,bodyTight:13,body:14,subtitle:16,heading:18,verdict:24},on={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},an={regular:"400",medium:"500",bold:"700"},sn={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},ln=0,J="System",Z="monospace",un=["content","heading","control","compact","badge"];function dn(e){let r={};for(let t of un)r[t]=e;return r}n(dn,"authoredTierSizes");function wr(){return {family:J,mono:Z,fontUrl:null,families:{regular:J,medium:J,bold:J,mono:Z,monoMedium:Z,monoBold:Z},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:Tr,tierSizes:dn(Tr),lineHeight:on,weight:an,letterSpacing:sn,scale:1,maxScale:ln,scaleCaps:nn}}n(wr,"baseType");var Sr={},ve=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function be(e){return `cubic-bezier(${e.join(", ")})`}n(be,"cssCubicBezier");var Fr={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:be(ve.standard),emphasized:be(ve.emphasized),exit:be(ve.exit)},reducedMotion:false},cn={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)"},kr=Ee({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:cn,space:Cr,radius:xr,type:wr(),motion:Fr,slots:Sr}),fn={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)"};Ee({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:fn,space:Cr,radius:xr,type:wr(),motion:Fr,slots:Sr});var Or=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),Vr=globalThis,ge=Vr[Or]??(Vr[Or]=createContext(kr));ge.displayName??="EverfurThemeContext";function he(){return useContext(ge)}n(he,"useEverfurTheme");var Ir=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});var Ar='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',mn="System";function vn(e){let r=e.trim();return r.length===0||r===mn?Ar:`${Pr(r)}, ${Ar}`}n(vn,"cssFontFamily");function bn(e){let r=e.trim();return r.length===0||r==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${Pr(r)}, ui-monospace, Menlo, Consolas, monospace`}n(bn,"cssMonoFamily");function Pr(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}n(Pr,"quote");function zr(e,r){let t=e.type,o=t.families[r];return {fontFamily:r==="mono"||r==="monoMedium"||r==="monoBold"?bn(o):vn(o),fontWeight:t.namedFaces[r]?t.weight.regular:t.weight[Ir[r]]}}n(zr,"faceCss");var jr=44,hn=.6;function _n(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=me({...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=he(),w=useMemo(()=>Rn(O),[O]),_=useRef(false);if(!c.available)return jsxs(Fragment,{children:[null,jsx(q,{})]});let S=c.status==="opening";return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:n(()=>{if(!(S||_.current)){if(!h){let E={...r!==void 0?{petRef:r}:{},...d!==void 0?{usState:d}:{},...v!=null?{visitRef:v,intent:f??null}:{}};Q(E,p)===null&&j(i,"unavailable",null);return}_.current=true,(v==null?c.open():c.openVisit(v,f??null)).then(E=>{E.opened?j(o,E.flowId??null):E.reason!=="cancelled"&&j(i,E.reason,E.error);}).finally(()=>{_.current=false;});}},"onClick"),"aria-busy":S,"aria-disabled":S,className:u,style:{...w,...S?{opacity:hn,cursor:"progress"}:null,...a},children:t??Rr.visitButton}),jsx(q,{})]})}n(_n,"VetVisitButton");function Rn(e){let{color:r,space:t,radius:o,type:i,slots:a}=e;return {boxSizing:"border-box",minHeight:jr,minWidth:jr,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,...zr(e,"medium"),fontSize:i.size.body,..._r(a.vetVisitButton),...hr(a.vetVisitButton)}}n(Rn,"buttonStyle");export{q as EverfurTelevetHost,Y as VET_VISIT_INTENTS,_n as VetVisitButton,Kr as downloadTelevetCalendarFile,Br as hasEverfurTelevetFlow,G as isVetVisitIntent,Dt as parseVetVisitReturn,qr as presentEverfurTelevetFlow,Ur as registerEverfurTelevetFlow,Le as televetCalendarFile,me as useVetVisit,K as vetVisitErrorReasonOf};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@everfur/sdk",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Embed Everfur veterinary chat, health records, and pet-state surfaces in your React Native app.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -511,7 +511,7 @@
511
511
  "@types/node": "^20.14.0",
512
512
  "@types/react": "^18.3.0",
513
513
  "@types/react-test-renderer": "^18.0.0",
514
- "@vitest/coverage-v8": "^2.0.0",
514
+ "@vitest/coverage-v8": "^3.2.7",
515
515
  "eslint": "^9.9.0",
516
516
  "eslint-plugin-boundaries": "^5.0.0",
517
517
  "fast-check": "^3.20.0",
@@ -525,10 +525,11 @@
525
525
  "tsup": "^8.2.0",
526
526
  "typescript": "^5.5.0",
527
527
  "typescript-eslint": "^8.0.0",
528
- "vitest": "^2.0.0",
528
+ "vitest": "^3.2.7",
529
529
  "yaml": "^2.9.0"
530
530
  },
531
531
  "overrides": {
532
+ "handlebars": "^4.7.9",
532
533
  "react": "$react",
533
534
  "react-test-renderer": "$react-test-renderer"
534
535
  },