@everfur/sdk 0.6.0 → 0.7.1

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 (156) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/dist/{Chat-CHqcgMyw.d.ts → Chat-CFi5cNUF.d.ts} +4 -4
  3. package/dist/{Chat-BoAvCWhI.d.cts → Chat-DQOsAumH.d.cts} +4 -4
  4. package/dist/{DepthViews-B0g83e_N.d.cts → DepthViews-C409ubw-.d.cts} +1 -1
  5. package/dist/{DepthViews-7Y8Ur058.d.ts → DepthViews-D81c95Ra.d.cts} +1 -1
  6. package/dist/{DepthViews-Dg2bIon_.d.ts → DepthViews-es8mIK0w.d.ts} +1 -1
  7. package/dist/{DepthViews-CT5mQld9.d.cts → DepthViews-uilL1NJZ.d.ts} +1 -1
  8. package/dist/IntakeMedia-BcjjUizr.d.ts +103 -0
  9. package/dist/IntakeMedia-CL_S2tZE.d.cts +103 -0
  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-C3HJNYQ7.d.cts → attachments-B2GjBgvF.d.cts} +2 -2
  15. package/dist/{attachments-rkox0ewd.d.cts → attachments-DI710no4.d.cts} +5 -5
  16. package/dist/{attachments-CfxsVg7W.d.ts → attachments-DNaSbmA3.d.ts} +2 -2
  17. package/dist/{attachments-CThFsH4b.d.ts → attachments-SF88N654.d.ts} +5 -5
  18. package/dist/{bookingCopy-Y3OGdoMT.d.ts → bookingCopy-D2N3RhsV.d.ts} +451 -50
  19. package/dist/{bookingCopy-Do3zMeXb.d.cts → bookingCopy-xlXxORCA.d.cts} +451 -50
  20. package/dist/{bookingTypes-DCs8mmBb.d.cts → bookingTypes-D4pD3tHs.d.cts} +13 -1
  21. package/dist/{bookingTypes-DCs8mmBb.d.ts → bookingTypes-D4pD3tHs.d.ts} +13 -1
  22. package/dist/{branding-DYWma2il.d.ts → branding-Bio5MM6g.d.cts} +3 -3
  23. package/dist/{branding-ChXm8gxI.d.cts → branding-ytH4jJq1.d.ts} +3 -3
  24. package/dist/{callCopy-CPe9mbwG.d.cts → callCopy-DHjem0R-.d.cts} +12 -1
  25. package/dist/{callCopy-CPe9mbwG.d.ts → callCopy-DHjem0R-.d.ts} +12 -1
  26. package/dist/{casesRepository-Jj6t60AY.d.cts → casesRepository-B-md8h1S.d.cts} +1 -1
  27. package/dist/{casesRepository-BbgXYPxa.d.ts → casesRepository-CC6951TK.d.ts} +1 -1
  28. package/dist/chat/index.cjs +1 -1
  29. package/dist/chat/index.d.cts +9 -9
  30. package/dist/chat/index.d.ts +9 -9
  31. package/dist/chat/index.js +1 -1
  32. package/dist/client/index.cjs +2 -2
  33. package/dist/client/index.d.cts +10 -10
  34. package/dist/client/index.d.ts +10 -10
  35. package/dist/client/index.js +2 -2
  36. package/dist/{config-Dfbj5mlx.d.ts → config-BM0sv5jx.d.ts} +1 -1
  37. package/dist/{config-BZX97FmW.d.cts → config-Daa1plhQ.d.cts} +1 -1
  38. package/dist/consent/index.cjs +1 -1
  39. package/dist/consent/index.d.cts +5 -5
  40. package/dist/consent/index.d.ts +5 -5
  41. package/dist/consent/index.js +1 -1
  42. package/dist/{context-Cbe0zYym.d.ts → context-CDV2pwGI.d.ts} +7 -7
  43. package/dist/{context-DJXnZ1Mx.d.cts → context-DQHtwcHN.d.cts} +7 -7
  44. package/dist/{copy-dKK5KoAQ.d.cts → copy-BEx5F71o.d.cts} +2 -2
  45. package/dist/{copy-DHekqSKE.d.ts → copy-Cl1l-qmY.d.ts} +2 -2
  46. package/dist/core/index.cjs +7 -7
  47. package/dist/core/index.d.cts +21 -21
  48. package/dist/core/index.d.ts +21 -21
  49. package/dist/core/index.js +7 -7
  50. package/dist/{depth-NmWSbvfi.d.cts → depth-CAAwiStc.d.cts} +132 -38
  51. package/dist/{depth-CrpRjWGB.d.ts → depth-DfNRVtrV.d.ts} +132 -38
  52. package/dist/{entitlementRepository-tVNazi8R.d.ts → entitlementRepository-CVWvND1P.d.ts} +3 -3
  53. package/dist/{entitlementRepository-iL-9vS1i.d.cts → entitlementRepository-DPvWjV-N.d.cts} +3 -3
  54. package/dist/{identity-B8rp0L9G.d.ts → identity-BhT7oJDS.d.ts} +1 -1
  55. package/dist/{identity-D7PO5s9m.d.cts → identity-DUlshgow.d.cts} +1 -1
  56. package/dist/index.cjs +6 -6
  57. package/dist/index.d.cts +17 -17
  58. package/dist/index.d.ts +17 -17
  59. package/dist/index.js +6 -6
  60. package/dist/notifications/index.d.cts +2 -2
  61. package/dist/notifications/index.d.ts +2 -2
  62. package/dist/{pets-BWx9BKea.d.cts → pets-Bneph9m1.d.cts} +1 -1
  63. package/dist/{pets-BQbXmICf.d.ts → pets-DjcLmRrW.d.ts} +1 -1
  64. package/dist/{petsRepository-SqIvEMiT.d.cts → petsRepository-BnVre3q7.d.cts} +1 -1
  65. package/dist/{petsRepository-0oBVydl6.d.ts → petsRepository-BwxmfX_s.d.ts} +1 -1
  66. package/dist/photo/index.cjs +1 -1
  67. package/dist/photo/index.js +1 -1
  68. package/dist/{ports-ChnzSy4E.d.cts → ports-BPKxFOSe.d.cts} +10 -9
  69. package/dist/{ports-iXPWd7Vt.d.ts → ports-Di9rdLO9.d.ts} +10 -9
  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 +19 -10
  76. package/dist/records/index.d.ts +19 -10
  77. package/dist/records/index.js +3 -3
  78. package/dist/{requestFunnel-CQzz2DIW.d.ts → requestFunnel-CiSX2pun.d.ts} +2 -2
  79. package/dist/{requestFunnel-DAwb7haa.d.cts → requestFunnel-DMR_1T3O.d.cts} +2 -2
  80. package/dist/{runtimeTypes-DB9-kigO.d.cts → runtimeTypes-2gJ5hYoE.d.cts} +5 -5
  81. package/dist/{runtimeTypes-BNOxfmfg.d.ts → runtimeTypes-CkMFCbHW.d.ts} +5 -5
  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 +1 -1
  87. package/dist/server/index.d.cts +3 -3
  88. package/dist/server/index.d.ts +3 -3
  89. package/dist/server/index.js +1 -1
  90. package/dist/televet/booking/index.cjs +4 -1
  91. package/dist/televet/booking/index.d.cts +116 -29
  92. package/dist/televet/booking/index.d.ts +116 -29
  93. package/dist/televet/booking/index.js +4 -1
  94. package/dist/televet/call/index.cjs +1 -1
  95. package/dist/televet/call/index.d.cts +1 -1
  96. package/dist/televet/call/index.d.ts +1 -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 +14 -12
  106. package/dist/testing/rn/index.d.ts +14 -12
  107. package/dist/testing/rn/index.js +1 -1
  108. package/dist/testing/web/index.d.cts +9 -9
  109. package/dist/testing/web/index.d.ts +9 -9
  110. package/dist/{timelineRows-Dll2IGFg.d.ts → timelineRows-D3171ksh.d.ts} +1 -1
  111. package/dist/{timelineRows-BuNhzDbH.d.cts → timelineRows-DDnz4gx2.d.cts} +1 -1
  112. package/dist/{tokens-ARWZtMOU.d.cts → tokens-BYtbKwFh.d.cts} +6 -3
  113. package/dist/{tokens-ARWZtMOU.d.ts → tokens-BYtbKwFh.d.ts} +6 -3
  114. package/dist/{typeStyle-YCS8dt19.d.cts → typeStyle-BqfwxZH4.d.cts} +2 -2
  115. package/dist/{typeStyle-8iEqQmP_.d.ts → typeStyle-DKz02DGU.d.ts} +2 -2
  116. package/dist/{uploadTransport-C1p8FuG8.d.cts → uploadTransport-BM_pnEWj.d.cts} +5 -0
  117. package/dist/{uploadTransport-bZIKBTyK.d.ts → uploadTransport-C6kGP1Kd.d.ts} +5 -0
  118. package/dist/{useRecordsDepth-CNEHZJtj.d.cts → useRecordsDepth-COJ0wSYK.d.cts} +1 -1
  119. package/dist/{useRecordsDepth-CuNdne6E.d.ts → useRecordsDepth-Z9FF5X4E.d.ts} +1 -1
  120. package/dist/video/index.cjs +1 -1
  121. package/dist/video/index.js +1 -1
  122. package/dist/{view-DFy8EDwf.d.ts → view-DoQEHXJR.d.ts} +47 -5
  123. package/dist/{view-BhqWlYrZ.d.cts → view-nRy6SitU.d.cts} +47 -5
  124. package/dist/web/consent/index.cjs +1 -1
  125. package/dist/web/consent/index.d.cts +5 -5
  126. package/dist/web/consent/index.d.ts +5 -5
  127. package/dist/web/consent/index.js +1 -1
  128. package/dist/web/index.cjs +7 -7
  129. package/dist/web/index.d.cts +23 -22
  130. package/dist/web/index.d.ts +23 -22
  131. package/dist/web/index.js +7 -7
  132. package/dist/web/notifications/index.d.cts +3 -3
  133. package/dist/web/notifications/index.d.ts +3 -3
  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 +28 -17
  140. package/dist/web/records/index.d.ts +28 -17
  141. package/dist/web/records/index.js +3 -3
  142. package/dist/web/televet/booking/index.cjs +4 -2
  143. package/dist/web/televet/booking/index.d.cts +227 -123
  144. package/dist/web/televet/booking/index.d.ts +227 -123
  145. package/dist/web/televet/booking/index.js +4 -2
  146. package/dist/web/televet/call/index.cjs +1 -1
  147. package/dist/web/televet/call/index.d.cts +1 -1
  148. package/dist/web/televet/call/index.d.ts +1 -1
  149. package/dist/web/televet/call/index.js +1 -1
  150. package/dist/web/televet/index.cjs +3 -3
  151. package/dist/web/televet/index.d.cts +12 -4
  152. package/dist/web/televet/index.d.ts +12 -4
  153. package/dist/web/televet/index.js +3 -3
  154. package/package.json +1 -1
  155. package/dist/BookedScreen-BJPbXLCG.d.ts +0 -54
  156. package/dist/BookedScreen-Cnld-jB_.d.cts +0 -54
@@ -1,6 +1,7 @@
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
+ import { T as TelevetCalendarWriter, a as TelevetMediaPicker, b as TelevetCalendarEvent } from '../../IntakeMedia-BcjjUizr.js';
4
+ export { c as TelevetIntakeMediaItem } from '../../IntakeMedia-BcjjUizr.js';
4
5
  import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-BsjoDO-n.js';
5
6
  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';
6
7
  import { E as EverfurError } from '../../EverfurError-DmELDpXp.js';
@@ -10,7 +11,7 @@ export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.js';
10
11
  import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
11
12
  export { a as VET_VISIT_INTENTS, i as isVetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
12
13
  export { E as EverfurResult } from '../../EverfurResult-SGvHKsCB.js';
13
- import '../../bookingTypes-DCs8mmBb.js';
14
+ import '../../bookingTypes-D4pD3tHs.js';
14
15
 
15
16
  /**
16
17
  * Register how this site presents a vet visit. Call it ONCE, in your app entry, only if you want to own the
@@ -41,9 +42,16 @@ interface EverfurTelevetHostProps {
41
42
  * member a `.ics` file, as the consumer web app does.
42
43
  */
43
44
  readonly onAddToCalendar?: TelevetCalendarWriter | undefined;
45
+ /**
46
+ * Picks photos or videos for the booking's intake step. Given, the intake step offers the attachment row and
47
+ * calls it with the remaining headroom; absent, the step has no attachment row. Reaches the intake step only
48
+ * from the host that renders, which is the first one mounted. The SDK opens no file dialog of its own: a
49
+ * typical picker is an `<input type="file">` whose files become object URLs.
50
+ */
51
+ readonly onPickMedia?: TelevetMediaPicker | undefined;
44
52
  }
45
53
  /** Renders the in-page vet visit Everfur provides, while one is open. Renders nothing otherwise. */
46
- declare function EverfurTelevetHost({ onAddToCalendar }: EverfurTelevetHostProps): ReactNode;
54
+ declare function EverfurTelevetHost({ onAddToCalendar, onPickMedia }: EverfurTelevetHostProps): ReactNode;
47
55
 
48
56
  /** A built calendar file: the `href` a download anchor takes, and the name it saves under. */
49
57
  interface TelevetCalendarFile {
@@ -128,4 +136,4 @@ interface VetVisitButtonProps {
128
136
  /** Opens the Everfur vet visit, in the partner's own page by default. Renders nothing unless it is granted. */
129
137
  declare function VetVisitButton(props: VetVisitButtonProps): ReactNode;
130
138
 
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 };
139
+ export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, type EverfurTelevetHostProps, PetRef, TelevetCalendarEvent, type TelevetCalendarFile, TelevetCalendarWriter, TelevetMediaPicker, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, downloadTelevetCalendarFile, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, televetCalendarFile, useVetVisit };
@@ -1,4 +1,4 @@
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 De(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(De,"useTelevetExperienceHost");var Wr=ze(()=>import('@everfur/sdk/web/televet/booking'));function q({onAddToCalendar:e}){let r=De(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 je=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=je(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:${je(e.endDate)}`,`SUMMARY:${Ne(t)}`,"END:VEVENT","END:VCALENDAR"].map(Gr).join(`\r
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 Fe(e){x().presenter=e;}n(Fe,"setTelevetPresenter");function Se(){return x().presenter!==null}n(Se,"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){Fe(e);}n(Ur,"registerEverfurTelevetFlow");function Br(){return Se()}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,onPickMedia:r}){let t=je(Wr);if(t===null)return null;let{EverfurTelevetDialog:o}=t.module;return jsx(o,{request:t.request,onClose:t.dismiss,...e?{onAddToCalendar:e}:{},...r?{onPickMedia:r}:{}},t.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
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 Dt(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(Dt,"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?Dt(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 jt(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(jt,"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 D(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(D,"callHost");var mr=false;function Q(e,r){return r!==void 0?(D(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,j)=>(w({status:C==="cancelled"?"idle":"error",error:j,errorReason:C==="cancelled"?null:C}),Object.freeze({opened:false,reason:C,error:j})),"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,j={...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(j).length===0?void 0:j,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",onDanger:"#FFFFFF",errorRed:"#CC1600",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",bubbleVet:"#FFC3BC",onBubbleVet:"#111111",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",onDanger:"#0E1F17",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",bubbleVet:"#FFC3BC",onBubbleVet:"#111111",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 Dr=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&&D(i,"unavailable",null);return}_.current=true,(v==null?c.open():c.openVisit(v,f??null)).then(E=>{E.opened?D(o,E.flowId??null):E.reason!=="cancelled"&&D(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:Dr,minWidth:Dr,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,border:0,cursor:"pointer",padding:`${t.sm}px ${t.xl}px`,borderRadius:o.pill,backgroundColor:r.primary,color:r.onPrimary,...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,jt as parseVetVisitReturn,qr as presentEverfurTelevetFlow,Ur as registerEverfurTelevetFlow,Le as televetCalendarFile,me as useVetVisit,K as vetVisitErrorReasonOf};
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,F=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=St(u,t),P=kt(A.signal,p.signal),z;try{z=await Xe({...F,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 S=z.error,m=ht(S,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:S.code,reason:m.reason,...S.httpStatus!==void 0?{httpStatus:S.httpStatus}:{},...S.requestId!==void 0?{requestId:S.requestId}:{}};if(!m.retry)return l(E({phase:"settled",...g})),T(S);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(S);I+=1;}}n(d,"send");async function b(f){return M(f,await Ft(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 Ft(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(Ft,"resolveDeviceAuth");function St(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(St,"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),F=useRef({runtime:t,userRef:o,scopeEpoch:i});F.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=F.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=F.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]),S=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:S}}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:"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:13,bodyTight:15,body:17,subtitle:20,heading:22,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 Fr={},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 Sr={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:"#FFFFFF",surfaceSubtle:"#F1F5F2",background:"#FFFFFF",borderRingCream:"#E4E4E4",chatGround:"#FFFFFF",composerFill:"#FFFFFF",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#000000",secondary:"#0E462E",muted:"#6B6B6B",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:"#C03410",onDanger:"#FFFFFF",errorRed:"#C03410",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(192,52,16,0.06)",badgeBgNeutral:"rgba(107,107,107,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",bubbleVet:"#FFC3BC",onBubbleVet:"#000000",skeleton:"#E9F1E9",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:Sr,slots:Fr}),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:"#9A9A9A",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",onDanger:"#0E1F17",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",bubbleVet:"#FFC3BC",onBubbleVet:"#000000",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:Sr,slots:Fr});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 F=c.status==="opening";return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:n(()=>{if(!(F||_.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":F,"aria-disabled":F,className:u,style:{...w,...F?{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.6.0",
3
+ "version": "0.7.1",
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": {
@@ -1,54 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { T as TelevetConsult } from './bookingTypes-DCs8mmBb.js';
3
-
4
- /** The calendar entry a booked visit asks the host to write. */
5
- interface TelevetCalendarEvent {
6
- /**
7
- * A stable key for THIS consult's entry.
8
- *
9
- * Keyed on the CONSULT so a re-press updates the same entry rather than writing a second event for one
10
- * visit, and so a later cancel or reschedule can address the SAME row. A host that ignores the key writes
11
- * duplicates the owner has to clean up by hand.
12
- */
13
- readonly key: string;
14
- readonly title: string;
15
- readonly startDate: Date;
16
- readonly endDate: Date;
17
- /** The reminder offset in minutes, negative for "before". The platform queues its own at the same offset. */
18
- readonly alarmOffsetMinutes: number;
19
- }
20
- /**
21
- * Writes the entry. Resolves true when it landed in a calendar; false when the host has no calendar to write to
22
- * or the entry could not be written; `'handed-off'` when the entry was handed to the member to add themselves (a
23
- * file download, as `downloadTelevetCalendarFile` does), which puts nothing in a calendar yet. On true the
24
- * confirmation says the visit was added; on `'handed-off'` it keeps Add to Calendar, enabled, so the member can
25
- * press it again, as the consumer web app's link can be.
26
- */
27
- type TelevetCalendarWriter = (event: TelevetCalendarEvent) => Promise<boolean | 'handed-off'>;
28
- /** The calendar key for a consult. One definition, so a cancel and a reschedule address the booked row. */
29
- declare function televetConsultCalendarKey(consultId: string): string;
30
- interface TelevetBookedScreenProps {
31
- readonly consult: TelevetConsult;
32
- readonly petName: string | null;
33
- readonly onDone: () => void;
34
- /** Absent, there is no Add to calendar control. */
35
- readonly onAddToCalendar?: TelevetCalendarWriter | undefined;
36
- /**
37
- * Has the host PROVEN it can host the call in place? Defaults to false.
38
- *
39
- * Fail closed: a host that has not said so is assumed not to have mounted the call surface, and the in-place
40
- * join promise is withheld rather than printed on a hope.
41
- */
42
- readonly canJoinInApp?: boolean;
43
- /**
44
- * How long the visit is, in minutes: the booked slot's served length (`televetSlotMinutes`), which is the
45
- * length the platform runs the visit for. The calendar entry ends this long after the start.
46
- *
47
- * Absent, or not a positive number, the entry falls back to `CONSULT_MINUTES`, the same fallback the review's
48
- * length row uses for a slot that does not say. The prebuilt flow always passes the slot's length.
49
- */
50
- readonly lengthMinutes?: number | undefined;
51
- }
52
- declare function TelevetBookedScreen({ consult, petName, onDone, onAddToCalendar, canJoinInApp, lengthMinutes, }: TelevetBookedScreenProps): ReactNode;
53
-
54
- export { type TelevetCalendarWriter as T, type TelevetCalendarEvent as a, TelevetBookedScreen as b, type TelevetBookedScreenProps as c, televetConsultCalendarKey as t };
@@ -1,54 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { T as TelevetConsult } from './bookingTypes-DCs8mmBb.cjs';
3
-
4
- /** The calendar entry a booked visit asks the host to write. */
5
- interface TelevetCalendarEvent {
6
- /**
7
- * A stable key for THIS consult's entry.
8
- *
9
- * Keyed on the CONSULT so a re-press updates the same entry rather than writing a second event for one
10
- * visit, and so a later cancel or reschedule can address the SAME row. A host that ignores the key writes
11
- * duplicates the owner has to clean up by hand.
12
- */
13
- readonly key: string;
14
- readonly title: string;
15
- readonly startDate: Date;
16
- readonly endDate: Date;
17
- /** The reminder offset in minutes, negative for "before". The platform queues its own at the same offset. */
18
- readonly alarmOffsetMinutes: number;
19
- }
20
- /**
21
- * Writes the entry. Resolves true when it landed in a calendar; false when the host has no calendar to write to
22
- * or the entry could not be written; `'handed-off'` when the entry was handed to the member to add themselves (a
23
- * file download, as `downloadTelevetCalendarFile` does), which puts nothing in a calendar yet. On true the
24
- * confirmation says the visit was added; on `'handed-off'` it keeps Add to Calendar, enabled, so the member can
25
- * press it again, as the consumer web app's link can be.
26
- */
27
- type TelevetCalendarWriter = (event: TelevetCalendarEvent) => Promise<boolean | 'handed-off'>;
28
- /** The calendar key for a consult. One definition, so a cancel and a reschedule address the booked row. */
29
- declare function televetConsultCalendarKey(consultId: string): string;
30
- interface TelevetBookedScreenProps {
31
- readonly consult: TelevetConsult;
32
- readonly petName: string | null;
33
- readonly onDone: () => void;
34
- /** Absent, there is no Add to calendar control. */
35
- readonly onAddToCalendar?: TelevetCalendarWriter | undefined;
36
- /**
37
- * Has the host PROVEN it can host the call in place? Defaults to false.
38
- *
39
- * Fail closed: a host that has not said so is assumed not to have mounted the call surface, and the in-place
40
- * join promise is withheld rather than printed on a hope.
41
- */
42
- readonly canJoinInApp?: boolean;
43
- /**
44
- * How long the visit is, in minutes: the booked slot's served length (`televetSlotMinutes`), which is the
45
- * length the platform runs the visit for. The calendar entry ends this long after the start.
46
- *
47
- * Absent, or not a positive number, the entry falls back to `CONSULT_MINUTES`, the same fallback the review's
48
- * length row uses for a slot that does not say. The prebuilt flow always passes the slot's length.
49
- */
50
- readonly lengthMinutes?: number | undefined;
51
- }
52
- declare function TelevetBookedScreen({ consult, petName, onDone, onAddToCalendar, canJoinInApp, lengthMinutes, }: TelevetBookedScreenProps): ReactNode;
53
-
54
- export { type TelevetCalendarWriter as T, type TelevetCalendarEvent as a, TelevetBookedScreen as b, type TelevetBookedScreenProps as c, televetConsultCalendarKey as t };