@everfur/sdk 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/README.md +2 -1
  3. package/dist/{Chat-BOG0SXKV.d.cts → Chat.d-DUNTfzqC.d.ts} +170 -8
  4. package/dist/{Chat-CIolBgjJ.d.ts → Chat.d-Dts8u_1a.d.cts} +170 -8
  5. package/dist/{DepthViews-BR6VQ3Ta.d.cts → DepthViews.d-BIp599lz.d.cts} +1 -1
  6. package/dist/{DepthViews-280t3BcQ.d.ts → DepthViews.d-BMU2jFPw.d.cts} +1 -1
  7. package/dist/{DepthViews-DlBuFsgN.d.ts → DepthViews.d-Ce2Zhnrb.d.ts} +1 -1
  8. package/dist/{DepthViews-BTbF_DJY.d.cts → DepthViews.d-CubkMPbU.d.ts} +1 -1
  9. package/dist/{ErrorPolicyPort-10s3HJCt.d.cts → ErrorPolicyPort.d-68yrE3BE.d.ts} +1 -1
  10. package/dist/{ErrorPolicyPort-C3nNSS_j.d.ts → ErrorPolicyPort.d-DirW9hgO.d.cts} +1 -1
  11. package/dist/{EverfurError-DeBqRpQV.d.cts → EverfurError.d-8NHtlgzA.d.cts} +11 -1
  12. package/dist/{EverfurError-DeBqRpQV.d.ts → EverfurError.d-8NHtlgzA.d.ts} +11 -1
  13. package/dist/{EverfurResult-ClPTS0P2.d.ts → EverfurResult.d-BFH-3s6E.d.cts} +1 -1
  14. package/dist/{EverfurResult-COlXj1wq.d.cts → EverfurResult.d-D_-254ZY.d.ts} +1 -1
  15. package/dist/{IntakeMedia-BH0fYDT2.d.cts → IntakeMedia.d-4a89XrP7.d.ts} +1 -1
  16. package/dist/{IntakeMedia-B-_vA9ZB.d.cts → IntakeMedia.d-DGxrhgIW.d.ts} +1 -1
  17. package/dist/{IntakeMedia-CIoTXAWs.d.ts → IntakeMedia.d-DUPR4lVM.d.cts} +1 -1
  18. package/dist/{IntakeMedia-Bavl7E4Z.d.ts → IntakeMedia.d-JJCUvQu7.d.cts} +1 -1
  19. package/dist/LifecyclePort.d-Cr1p33a7.d.cts +23 -0
  20. package/dist/LifecyclePort.d-Cr1p33a7.d.ts +23 -0
  21. package/dist/{PhotoController-vzY5bfY_.d.ts → PhotoController.d-BzCJOE7e.d.cts} +2 -2
  22. package/dist/{PhotoController-3l7MT9jA.d.cts → PhotoController.d-D0XiUUOl.d.ts} +2 -2
  23. package/dist/animations/index.cjs +5 -1
  24. package/dist/animations/index.d.cts +24 -24
  25. package/dist/animations/index.d.ts +24 -24
  26. package/dist/animations/index.js +5 -1
  27. package/dist/{attachments-CGxvnYu4.d.ts → attachments.d-Bp2qbHxn.d.cts} +22 -26
  28. package/dist/{attachments-CWNj1ZkM.d.ts → attachments.d-D1yhJjcZ.d.ts} +4 -4
  29. package/dist/{attachments-waXcJWCp.d.cts → attachments.d-DisnvB9R.d.cts} +4 -4
  30. package/dist/{attachments-B6h4cJU-.d.cts → attachments.d-Djy9z_0Z.d.ts} +22 -26
  31. package/dist/{bookingCopy-CjPKeg75.d.ts → bookingCopy.d-BJF6gd1A.d.ts} +24 -9
  32. package/dist/{bookingCopy-8aEU6ZmR.d.cts → bookingCopy.d-BlBmhAJc.d.cts} +24 -9
  33. package/dist/{branding-DJf4h12Q.d.ts → branding.d-DI8S400y.d.cts} +9 -2
  34. package/dist/{branding-BCfwLj0h.d.cts → branding.d-OIGLbQeM.d.ts} +9 -2
  35. package/dist/{callRoom-BhIdadyV.d.cts → callRoom.d-B1DoYdJe.d.cts} +1 -1
  36. package/dist/{callRoom-B92eH_ij.d.ts → callRoom.d-Dqm1rUqT.d.ts} +1 -1
  37. package/dist/{casesRepository-CGdhvzTu.d.cts → casesRepository.d-CT2LTicS.d.cts} +3 -3
  38. package/dist/{casesRepository-ZG9Sg0e4.d.ts → casesRepository.d-UsWOz9bv.d.ts} +3 -3
  39. package/dist/chat/index.cjs +132 -57
  40. package/dist/chat/index.d.cts +18 -16
  41. package/dist/chat/index.d.ts +18 -16
  42. package/dist/chat/index.js +133 -58
  43. package/dist/client/index.cjs +15 -10
  44. package/dist/client/index.d.cts +19 -18
  45. package/dist/client/index.d.ts +19 -18
  46. package/dist/client/index.js +15 -10
  47. package/dist/{config-B0p6Lygh.d.cts → config.d-BR3DT9ho.d.cts} +3 -3
  48. package/dist/{config-DmFAZJOx.d.ts → config.d-Dy6igYlH.d.ts} +3 -3
  49. package/dist/consent/index.cjs +5 -1
  50. package/dist/consent/index.d.cts +10 -10
  51. package/dist/consent/index.d.ts +10 -10
  52. package/dist/consent/index.js +5 -1
  53. package/dist/{context-BNreNLtL.d.ts → context.d-Cwks0p3C.d.cts} +15 -15
  54. package/dist/{context-BgS2a57J.d.cts → context.d-QcCgguzA.d.ts} +15 -15
  55. package/dist/{copy-DLJriGQS.d.ts → copy.d-CiMn2IIt.d.ts} +6 -6
  56. package/dist/{copy-lWp-Lkv5.d.cts → copy.d-DLJTyRfT.d.cts} +6 -6
  57. package/dist/core/index.cjs +17 -13
  58. package/dist/core/index.d.cts +33 -29
  59. package/dist/core/index.d.ts +33 -29
  60. package/dist/core/index.js +17 -13
  61. package/dist/{depth-BYb3RXoA.d.cts → depth.d-CjPGVPDL.d.cts} +9 -115
  62. package/dist/{depth-COz-sSG5.d.ts → depth.d-OSALbYM7.d.ts} +9 -115
  63. package/dist/{entitlementRepository-D-Lse67w.d.cts → entitlementRepository.d-CVQa1DA1.d.cts} +10 -5
  64. package/dist/{entitlementRepository-CrTOP_-o.d.ts → entitlementRepository.d-Cf3LbTwD.d.ts} +10 -5
  65. package/dist/features.d-fNsGcg0R.d.cts +108 -0
  66. package/dist/features.d-fNsGcg0R.d.ts +108 -0
  67. package/dist/focus.d-DMg2ngHI.d.ts +1178 -0
  68. package/dist/focus.d-az9cqUz3.d.cts +1178 -0
  69. package/dist/health-plan/index.cjs +370 -0
  70. package/dist/health-plan/index.d.cts +251 -0
  71. package/dist/health-plan/index.d.ts +251 -0
  72. package/dist/health-plan/index.js +370 -0
  73. package/dist/idempotency.d-D461_DPD.d.cts +910 -0
  74. package/dist/idempotency.d-WpXx9zQo.d.ts +910 -0
  75. package/dist/{identity-Cw07BKZp.d.ts → identity.d-60LeJt_s.d.cts} +3 -3
  76. package/dist/{identity-DFVGYn1o.d.cts → identity.d-DzTijonw.d.ts} +3 -3
  77. package/dist/index.cjs +141 -66
  78. package/dist/index.d.cts +31 -29
  79. package/dist/index.d.ts +31 -29
  80. package/dist/index.js +142 -67
  81. package/dist/{models-A4A5S7AG.d.cts → models.d-BagXhafD.d.ts} +8 -3
  82. package/dist/{models-CnXY5LuO.d.ts → models.d-BnLm3VAA.d.cts} +8 -3
  83. package/dist/notifications/index.cjs +5 -1
  84. package/dist/notifications/index.d.cts +9 -9
  85. package/dist/notifications/index.d.ts +9 -9
  86. package/dist/notifications/index.js +5 -1
  87. package/dist/optInView.d-CEyHR6PK.d.cts +325 -0
  88. package/dist/optInView.d-acKpV8V2.d.ts +325 -0
  89. package/dist/parse.d-C8CXyS58.d.ts +210 -0
  90. package/dist/parse.d-tEzufgJX.d.cts +210 -0
  91. package/dist/{pets-BYALZTSu.d.ts → pets.d-C_53_fzo.d.ts} +3 -3
  92. package/dist/{pets-CcyPQS-H.d.cts → pets.d-NbJvP_kh.d.cts} +3 -3
  93. package/dist/{petsRepository-B_Q1gFkE.d.cts → petsRepository.d-BuGHymNx.d.ts} +4 -4
  94. package/dist/{petsRepository-518QkPxH.d.ts → petsRepository.d-lp1BHRqM.d.cts} +4 -4
  95. package/dist/photo/index.cjs +6 -2
  96. package/dist/photo/index.d.cts +9 -9
  97. package/dist/photo/index.d.ts +9 -9
  98. package/dist/photo/index.js +6 -2
  99. package/dist/{ports-BN6RHF9W.d.ts → ports.d-BX4f4UsB.d.cts} +14 -1
  100. package/dist/{ports-BN6RHF9W.d.cts → ports.d-BX4f4UsB.d.ts} +14 -1
  101. package/dist/{ports-RuNJmBA-.d.cts → ports.d-CEROoqnA.d.cts} +16 -10
  102. package/dist/{ports-DmQeMArX.d.ts → ports.d-COIyN624.d.ts} +16 -10
  103. package/dist/presentation.d-DMbdad7G.d.cts +90 -0
  104. package/dist/presentation.d-DMbdad7G.d.ts +90 -0
  105. package/dist/records/depth/index.cjs +11 -7
  106. package/dist/records/depth/index.d.cts +14 -12
  107. package/dist/records/depth/index.d.ts +14 -12
  108. package/dist/records/depth/index.js +11 -7
  109. package/dist/records/index.cjs +225 -62
  110. package/dist/records/index.d.cts +159 -20
  111. package/dist/records/index.d.ts +159 -20
  112. package/dist/records/index.js +225 -62
  113. package/dist/recordsAsk.d-C5CGSi3j.d.cts +14 -0
  114. package/dist/recordsAsk.d-C5CGSi3j.d.ts +14 -0
  115. package/dist/{requestFunnel-B9fdXMi5.d.ts → requestFunnel.d-CXUMPw1K.d.ts} +5 -5
  116. package/dist/{requestFunnel-BBjNNwc9.d.cts → requestFunnel.d-DWQQpjFR.d.cts} +5 -5
  117. package/dist/{resolve-D4Ywz5OS.d.ts → resolve.d-jI8FmBj3.d.cts} +3 -3
  118. package/dist/{resolve-D4Ywz5OS.d.cts → resolve.d-jI8FmBj3.d.ts} +3 -3
  119. package/dist/{runtimeTypes-CstDBX8w.d.cts → runtimeTypes.d-4yFNNuYR.d.ts} +20 -13
  120. package/dist/{runtimeTypes-N_K4BVZB.d.ts → runtimeTypes.d-D6N_fhxx.d.cts} +20 -13
  121. package/dist/server/events/index.cjs +7 -3
  122. package/dist/server/events/index.d.cts +51 -9
  123. package/dist/server/events/index.d.ts +51 -9
  124. package/dist/server/events/index.js +7 -3
  125. package/dist/server/index.cjs +12 -6
  126. package/dist/server/index.d.cts +152 -8
  127. package/dist/server/index.d.ts +152 -8
  128. package/dist/server/index.js +12 -6
  129. package/dist/sheetCopy.d-CAhLOxjc.d.cts +4 -0
  130. package/dist/sheetCopy.d-CAhLOxjc.d.ts +4 -0
  131. package/dist/sheetSeam.d-Cviqk89n.d.ts +45 -0
  132. package/dist/sheetSeam.d-DCS3LW8g.d.cts +45 -0
  133. package/dist/shop/index.cjs +262 -0
  134. package/dist/shop/index.d.cts +193 -0
  135. package/dist/shop/index.d.ts +193 -0
  136. package/dist/shop/index.js +262 -0
  137. package/dist/televet/booking/index.cjs +16 -12
  138. package/dist/televet/booking/index.d.cts +36 -22
  139. package/dist/televet/booking/index.d.ts +36 -22
  140. package/dist/televet/booking/index.js +16 -12
  141. package/dist/televet/call/index.d.cts +5 -5
  142. package/dist/televet/call/index.d.ts +5 -5
  143. package/dist/televet/index.cjs +7 -3
  144. package/dist/televet/index.d.cts +12 -12
  145. package/dist/televet/index.d.ts +12 -12
  146. package/dist/televet/index.js +7 -3
  147. package/dist/{televetGlobal-C5dTUACe.d.cts → televetGlobal.d-CC-DrqkQ.d.ts} +7 -2
  148. package/dist/{televetGlobal-CnjrfhT4.d.ts → televetGlobal.d-CKwDCbmN.d.cts} +7 -2
  149. package/dist/testing/index.cjs +7 -3
  150. package/dist/testing/index.d.cts +3 -3
  151. package/dist/testing/index.d.ts +3 -3
  152. package/dist/testing/index.js +7 -3
  153. package/dist/testing/rn/index.cjs +5 -1
  154. package/dist/testing/rn/index.d.cts +23 -22
  155. package/dist/testing/rn/index.d.ts +23 -22
  156. package/dist/testing/rn/index.js +5 -1
  157. package/dist/testing/web/index.cjs +5 -1
  158. package/dist/testing/web/index.d.cts +23 -22
  159. package/dist/testing/web/index.d.ts +23 -22
  160. package/dist/testing/web/index.js +5 -1
  161. package/dist/texting/index.cjs +158 -0
  162. package/dist/texting/index.d.cts +36 -0
  163. package/dist/texting/index.d.ts +36 -0
  164. package/dist/texting/index.js +158 -0
  165. package/dist/threadOptions.d-B1pTMmDF.d.cts +260 -0
  166. package/dist/threadOptions.d-B1pTMmDF.d.ts +260 -0
  167. package/dist/{timelineRows-7yjHyh8i.d.ts → timelineRows.d-BNxgzYRW.d.cts} +1 -1
  168. package/dist/{timelineRows-WvnL-Lds.d.cts → timelineRows.d-CU5GvvLk.d.ts} +1 -1
  169. package/dist/{tokens-DLj8OnLH.d.cts → tokens.d-DarDaV39.d.cts} +10 -2
  170. package/dist/{tokens-DLj8OnLH.d.ts → tokens.d-DarDaV39.d.ts} +10 -2
  171. package/dist/{typeStyle-BxVyF71R.d.ts → typeStyle.d-Bl8pzbBy.d.cts} +2 -2
  172. package/dist/{typeStyle-DJedEu14.d.cts → typeStyle.d-C1HBRAI3.d.ts} +2 -2
  173. package/dist/{uploadTransport-BM_pnEWj.d.cts → uploadTransport.d-CWL7CdWP.d.cts} +1 -1
  174. package/dist/{uploadTransport-C6kGP1Kd.d.ts → uploadTransport.d-EGoUl7gX.d.ts} +1 -1
  175. package/dist/usePresentation.d-D6qsFzBz.d.cts +9 -0
  176. package/dist/usePresentation.d-DuGQe_Do.d.ts +9 -0
  177. package/dist/useRecords.d-Cb-36SF5.d.cts +121 -0
  178. package/dist/useRecords.d-aQTzQZoV.d.ts +121 -0
  179. package/dist/{useRecordsDepth-Bp6L4M5P.d.ts → useRecordsDepth.d-DFcCfiXm.d.ts} +8 -20
  180. package/dist/{useRecordsDepth-DPdAK_81.d.cts → useRecordsDepth.d-sAq2Qkhr.d.cts} +8 -20
  181. package/dist/{useVetVisit-DmWa7lt1.d.ts → useVetVisit.d-BtdwhmgD.d.cts} +15 -4
  182. package/dist/{useVetVisit-PtBjNwZr.d.cts → useVetVisit.d-DoYQimyt.d.ts} +15 -4
  183. package/dist/video/index.cjs +6 -2
  184. package/dist/video/index.d.cts +7 -7
  185. package/dist/video/index.d.ts +7 -7
  186. package/dist/video/index.js +6 -2
  187. package/dist/{view-C6go2uUt.d.ts → view.d-C-SNpDJX.d.ts} +10 -122
  188. package/dist/{view-CiF_HVFQ.d.cts → view.d-Dps5C8-s.d.cts} +10 -122
  189. package/dist/web/consent/index.cjs +5 -1
  190. package/dist/web/consent/index.d.cts +10 -10
  191. package/dist/web/consent/index.d.ts +10 -10
  192. package/dist/web/consent/index.js +5 -1
  193. package/dist/web/health-plan/index.cjs +414 -0
  194. package/dist/web/health-plan/index.d.cts +335 -0
  195. package/dist/web/health-plan/index.d.ts +335 -0
  196. package/dist/web/health-plan/index.js +414 -0
  197. package/dist/web/index.cjs +150 -82
  198. package/dist/web/index.d.cts +152 -38
  199. package/dist/web/index.d.ts +152 -38
  200. package/dist/web/index.js +150 -82
  201. package/dist/web/notifications/index.cjs +16 -3
  202. package/dist/web/notifications/index.d.cts +39 -209
  203. package/dist/web/notifications/index.d.ts +39 -209
  204. package/dist/web/notifications/index.js +16 -3
  205. package/dist/web/records/depth/index.cjs +11 -7
  206. package/dist/web/records/depth/index.d.cts +14 -12
  207. package/dist/web/records/depth/index.d.ts +14 -12
  208. package/dist/web/records/depth/index.js +11 -7
  209. package/dist/web/records/index.cjs +95 -68
  210. package/dist/web/records/index.d.cts +66 -21
  211. package/dist/web/records/index.d.ts +66 -21
  212. package/dist/web/records/index.js +95 -68
  213. package/dist/web/records/upload/index.d.cts +2 -2
  214. package/dist/web/records/upload/index.d.ts +2 -2
  215. package/dist/web/records-sheet/index.cjs +278 -0
  216. package/dist/web/records-sheet/index.d.cts +102 -0
  217. package/dist/web/records-sheet/index.d.ts +102 -0
  218. package/dist/web/records-sheet/index.js +278 -0
  219. package/dist/web/shop/index.cjs +301 -0
  220. package/dist/web/shop/index.d.cts +42 -0
  221. package/dist/web/shop/index.d.ts +42 -0
  222. package/dist/web/shop/index.js +301 -0
  223. package/dist/web/televet/booking/index.cjs +16 -12
  224. package/dist/web/televet/booking/index.d.cts +37 -23
  225. package/dist/web/televet/booking/index.d.ts +37 -23
  226. package/dist/web/televet/booking/index.js +16 -12
  227. package/dist/web/televet/call/index.d.cts +4 -4
  228. package/dist/web/televet/call/index.d.ts +4 -4
  229. package/dist/web/televet/index.cjs +7 -3
  230. package/dist/web/televet/index.d.cts +12 -12
  231. package/dist/web/televet/index.d.ts +12 -12
  232. package/dist/web/televet/index.js +7 -3
  233. package/dist/web/texting/index.cjs +157 -0
  234. package/dist/web/texting/index.d.cts +36 -0
  235. package/dist/web/texting/index.d.ts +36 -0
  236. package/dist/web/texting/index.js +157 -0
  237. package/health-plan/package.json +8 -0
  238. package/package.json +106 -4
  239. package/shop/package.json +8 -0
  240. package/texting/package.json +8 -0
  241. package/web/health-plan/native-blocked.cjs +12 -0
  242. package/web/health-plan/package.json +8 -0
  243. package/web/records-sheet/native-blocked.cjs +12 -0
  244. package/web/records-sheet/package.json +8 -0
  245. package/web/shop/native-blocked.cjs +12 -0
  246. package/web/shop/package.json +8 -0
  247. package/web/texting/native-blocked.cjs +12 -0
  248. package/web/texting/package.json +8 -0
  249. /package/dist/{CameraPort-Cv31Pz7g.d.cts → CameraPort.d-Cv31Pz7g.d.cts} +0 -0
  250. /package/dist/{CameraPort-Cv31Pz7g.d.ts → CameraPort.d-Cv31Pz7g.d.ts} +0 -0
  251. /package/dist/{TelemetryPort-BDNr00hu.d.cts → TelemetryPort.d-BDNr00hu.d.cts} +0 -0
  252. /package/dist/{TelemetryPort-BDNr00hu.d.ts → TelemetryPort.d-BDNr00hu.d.ts} +0 -0
  253. /package/dist/{cacheEpoch-DknKn3S0.d.cts → cacheEpoch.d-DknKn3S0.d.cts} +0 -0
  254. /package/dist/{cacheEpoch-DknKn3S0.d.ts → cacheEpoch.d-DknKn3S0.d.ts} +0 -0
  255. /package/dist/{callCopy-Bw6oZT54.d.cts → callCopy.d-Bw6oZT54.d.cts} +0 -0
  256. /package/dist/{callCopy-Bw6oZT54.d.ts → callCopy.d-Bw6oZT54.d.ts} +0 -0
  257. /package/dist/{ids-B2GAAifq.d.cts → ids.d-B2GAAifq.d.cts} +0 -0
  258. /package/dist/{ids-B2GAAifq.d.ts → ids.d-B2GAAifq.d.ts} +0 -0
  259. /package/dist/{optionalModule-DbJmsq5f.d.cts → optionalModule.d-DbJmsq5f.d.cts} +0 -0
  260. /package/dist/{optionalModule-DbJmsq5f.d.ts → optionalModule.d-DbJmsq5f.d.ts} +0 -0
  261. /package/dist/{profile-CSs1wlXT.d.cts → profile.d-CSs1wlXT.d.cts} +0 -0
  262. /package/dist/{profile-CSs1wlXT.d.ts → profile.d-CSs1wlXT.d.ts} +0 -0
  263. /package/dist/{projection-CeIUsbSk.d.cts → projection.d-CeIUsbSk.d.cts} +0 -0
  264. /package/dist/{projection-CeIUsbSk.d.ts → projection.d-CeIUsbSk.d.ts} +0 -0
  265. /package/dist/{species-BXAIMh7I.d.cts → species.d-BXAIMh7I.d.cts} +0 -0
  266. /package/dist/{species-BXAIMh7I.d.ts → species.d-BXAIMh7I.d.ts} +0 -0
  267. /package/dist/{visitIntent-D7_yVp1I.d.cts → visitIntent.d-D7_yVp1I.d.cts} +0 -0
  268. /package/dist/{visitIntent-D7_yVp1I.d.ts → visitIntent.d-D7_yVp1I.d.ts} +0 -0
@@ -1,5 +1,7 @@
1
1
  import{createContext,forwardRef,createElement,useMemo,useState,useRef,useEffect,useCallback,useReducer,useContext,useSyncExternalStore,Component}from"react";import{TextInput as TextInput$1,StyleSheet,View,Pressable,Linking,Animated,Alert,BackHandler,Image,ActivityIndicator,ScrollView,Platform,KeyboardAvoidingView,Modal,StatusBar,Text as Text$1,Dimensions}from"react-native";import{z}from"zod";import{jsx,jsxs,Fragment}from"react/jsx-runtime";import*as callModule from"@everfur/sdk/televet/call";import{useSafeAreaInsets}from"react-native-safe-area-context";function assertNever(x){throw new Error(`assertNever: unhandled discriminated-union member ${JSON.stringify(x)}`)}function errorFrame(fields){/* @__PURE__ */
2
- return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fields.retryable,wireMessage:fields.wireMessage,synthesized:fields.synthesized,lastEventId:fields.lastEventId,serverRequestId:null})}function reportHostFailure(error){let globalConsole=globalThis.console;try{globalConsole?.error?.("[everfur] A host callback threw; the SDK ignored it.",error)}catch{}}function isThenable(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&typeof value.then=="function"}function callHost(fn,...args){if(typeof fn=="function")try{let result=fn(...args);return isThenable(result)&&Promise.resolve(result).then(void 0,reportHostFailure),result}catch(error){reportHostFailure(error);return}}var GUARDED=/* @__PURE__ */new WeakMap;function guardHost(fn){if(typeof fn!="function")return;let cached=GUARDED.get(fn);if(cached!==void 0)return cached;let guarded=(...args)=>{callHost(fn,...args)};return GUARDED.set(fn,guarded),guarded}function guardHostProps(props,names){let guarded=null;for(let name of names){let fn=props[name];typeof fn=="function"&&(guarded??={...props},guarded[name]=guardHost(fn))}return guarded??props}function callHostAsync(fn,...args){let started;try{started=fn(...args)}catch(error){return reportHostFailure(error),Promise.resolve({ok:false,error:error})}return Promise.resolve(started).then(value=>({ok:true,value:value}),error=>({ok:false,error:error}))}function createTelevetBackChannel(){let handlers=[];return{register(handler){return handlers=[...handlers,handler],()=>{handlers=handlers.filter(h=>h!==handler)}},dispatch(){for(let handler of[...handlers].reverse())try{if(handler())return!0}catch{}return false}}}var TelevetBackChannelContext=createContext(null);function useTelevetBackChannel(handler,enabled=true){let channel=useContext(TelevetBackChannelContext),current=useRef(handler);current.current=handler,useEffect(()=>{if(!(channel===null||!enabled))return channel.register(()=>current.current())},[channel,enabled])}var EMERGENCY_ER_LINE="Go to the nearest emergency vet now.";var DRAFT=s=>s,PLACEHOLDER_MARKERS=["[PLACEHOLDER","[PLAN NAME]","[LINK]","[Last]","TODO","TBD"];function isPlaceholderCopy(value){return PLACEHOLDER_MARKERS.some(m=>value.toUpperCase().includes(m.toUpperCase()))}function fill(template,slots){let out=template;for(let[key,value]of Object.entries(slots))out=out.split(`{${key}}`).join(value);return out}var TELEVET_BOOKING_COPY=/* @__PURE__ */Object.freeze({stateBlockedTitle:DRAFT("Not available in this state yet"),noCliniciansTitle:DRAFT("No vets available right now"),noCliniciansBody:DRAFT("Nobody is free in your area at the moment. This changes through the day."),noCliniciansRetryCta:DRAFT("Check again"),noCliniciansRegionBody:DRAFT("Video visits have to be with a vet licensed in your state, and we don’t have one there yet."),yourVetTitle:DRAFT("Your vet"),licensedPillTemplate:DRAFT("Licensed in {state}"),reviewsLabel:DRAFT("reviews"),rescheduleFromTemplate:DRAFT("Moving your visit on {when}"),rescheduleFailed:DRAFT("That did not move. Your original time is unchanged."),rescheduleStepLabel:DRAFT("Reschedule"),rescheduleTitleTemplate:DRAFT("Pick a new time for {pet}"),rescheduleNowLabel:DRAFT("Now"),rescheduleMoveTemplate:DRAFT("Move to {when}"),rescheduleMoving:DRAFT("Moving…"),rescheduleKeepLabel:DRAFT("Keep the visit as it is"),keepExistingCta:DRAFT("Keep my current time"),bookingPausedTitle:DRAFT("Booking is not available right now."),slotsErrorTitle:DRAFT("Could not load times"),noSlotsTitle:DRAFT("No times available"),nextOpeningTemplate:DRAFT("Next opening across our vets: {when}"),seeOtherVetsCta:DRAFT("See other vets"),retryCta:DRAFT("Try again"),holdExpired:DRAFT("That time is no longer held. Pick another."),slotTaken:DRAFT("That time was just taken. Pick another."),reasonPlaceholder:DRAFT("What is going on with your pet?"),reasonTooLong:DRAFT("That is too long. Please shorten it."),shareRecordsOff:DRAFT("Share health records with this vet"),confirmNotEntitled:DRAFT("A Pro membership is needed to book a video visit."),confirmFailed:DRAFT("That did not book. Try again."),checkAvailabilityCta:DRAFT("Check availability"),stateInterest:/* @__PURE__ */Object.freeze({cta:DRAFT("Add me to the list"),submitting:DRAFT("Adding you to the list…"),joinedTitle:DRAFT("You are on the list"),joinedBody:DRAFT("We will let you know when this changes."),failed:DRAFT("That did not save. Try again.")}),media:/* @__PURE__ */Object.freeze({droppedTemplate:DRAFT("{n} attachment did not upload."),droppedPluralTemplate:DRAFT("{n} attachments did not upload."),refusedSizeTemplate:DRAFT("{n} attachment was too large to send."),refusedSizePluralTemplate:DRAFT("{n} attachments were too large to send."),refusedTypeTemplate:DRAFT("{n} attachment is a file type that cannot be sent."),refusedTypePluralTemplate:DRAFT("{n} attachments are file types that cannot be sent."),refusedUnreadableTemplate:DRAFT("{n} attachment could not be read."),refusedUnreadablePluralTemplate:DRAFT("{n} attachments could not be read.")}),navTitle:DRAFT("Book a visit"),petFallback:"your pet",whereTitleTemplate:DRAFT("Where will {pet} be during the visit?"),whereLeadTemplate:DRAFT("Pick where {pronoun} be for the call, not where you live. It decides what the vet can do."),wherePronounFallback:"they’ll",whereFormLabelTemplate:DRAFT("Where {pet} will be"),whereLegend:DRAFT("State"),wherePrescribeMetaTemplate:DRAFT("Video visit, and prescriptions if {pet} needs them"),whereWellnessMeta:DRAFT("Wellness visit: advice and a care plan, no prescriptions yet"),whereAnotherState:DRAFT("Another state"),whereWhichState:DRAFT("Which state?"),whereLicensedTemplate:DRAFT("{vet} is licensed in {state}, so a prescription can be part of {pet}’s plan."),whereAskEveryTime:DRAFT("We ask every time: state rules require it."),issuesTitleTemplate:DRAFT("What’s going on with {pet}?"),issuesHint:DRAFT("Pick as many as you like."),issuesFormLabel:DRAFT("What’s going on"),issuesLegend:DRAFT("Main issues"),issuesPickOne:DRAFT("Pick at least one. Not sure? Choose Something else."),otherIssue:DRAFT("Something else"),describeHeadingTemplate:DRAFT("Tell {vet} what you’re seeing"),describeFieldLabel:DRAFT("What you’re seeing"),emergencyCheck:/* @__PURE__ */Object.freeze({titleTemplate:DRAFT("Is {pet} doing any of these right now?"),lead:DRAFT("A scheduled video visit isn’t the right place for an emergency."),signs:/* @__PURE__ */Object.freeze([DRAFT("Trouble breathing, or blue, grey or very pale gums"),DRAFT("Collapsed, or can’t stand up"),DRAFT("A seizure"),DRAFT("Ate something toxic, like grapes, chocolate, xylitol or medicine"),DRAFT("A swollen, hard belly, or retching with nothing coming up"),DRAFT("Bleeding that won’t stop"),DRAFT("Straining to pee with nothing coming out")]),formLabel:DRAFT("Emergency check"),legend:DRAFT("Any of these now?"),noneCta:DRAFT("No, none of these"),someCta:DRAFT("Yes, at least one")}),timeHeading:DRAFT("Pick a time"),timeMorning:DRAFT("Morning"),timeAfternoon:DRAFT("Afternoon"),timeEvening:DRAFT("Evening"),timeLegendTemplate:DRAFT("Time on {day}"),dayLegend:DRAFT("Day"),reviewHeading:DRAFT("Does this look right?"),summaryWhere:DRAFT("Where"),changeCta:DRAFT("Change"),whereAttestTemplate:DRAFT("{pet} and I will be in {state} during the visit."),attestBoth:DRAFT("Check both boxes to book the visit."),bookedStepLabel:DRAFT("Booked"),bookedTitleTemplate:DRAFT("You’re booked with {vet}"),bookedLeadTemplate:DRAFT("{when}, for {pet}."),footnote:DRAFT("Video visits are with a licensed veterinarian. Prescriptions where allowed, starting with California. In an emergency, go to the nearest emergency animal hospital."),rescheduleNavTitle:DRAFT("Change your visit"),close:DRAFT("Close"),continueCta:DRAFT("Continue"),petSelectTitle:DRAFT("Who is this visit for?"),addPetCta:DRAFT("Add a pet"),addAnotherPetCta:DRAFT("Add another pet"),locationUnknownTitle:DRAFT("We need your location to find a vet"),locationUnknownBody:DRAFT("Turn on location for Everfur, then try again."),locationUnknownCta:DRAFT("Allow location"),locationBlockedTitle:DRAFT("Location is turned off"),locationBlockedBody:DRAFT("Everfur needs your location to match you with a vet in your area."),locationBlockedCta:DRAFT("Open Settings"),locationUnavailableTitle:DRAFT("We could not read your location"),locationUnavailableBody:DRAFT("Try again in a moment."),stateAttestTemplate:DRAFT("I confirm my pet and I are in {state} right now."),describeHeading:DRAFT("Tell the vet what you are seeing"),describeHelpLong:DRAFT("When it started, what’s changed, what you’ve tried. Anything helps."),addPhotoCta:DRAFT("Add photos or videos"),addPhotoMeta:DRAFT("Optional. A close-up in good light helps."),removePhotoLabel:DRAFT("Remove photo"),summaryPet:DRAFT("Pet"),summaryVet:DRAFT("Vet"),summaryWhen:DRAFT("When"),summaryLength:DRAFT("Length"),summaryReason:DRAFT("About"),summaryLengthTemplate:DRAFT("{n} minutes"),confirmCta:DRAFT("Book the visit"),confirmBusy:DRAFT("Booking…"),bookedTitle:DRAFT("You are booked."),addToCalendarCta:DRAFT("Add to calendar"),doneCta:DRAFT("Done"),booked:/* @__PURE__ */Object.freeze({remindPromise:DRAFT("We will notify you 30 minutes before."),summaryPromise:DRAFT("{pet}'s summary goes to the vet ahead of the call."),recordsPromiseTemplate:DRAFT("{pet}’s records and your notes go to {vet} ahead of the call."),recordsPhotoPromiseTemplate:DRAFT("{pet}’s records, your notes and the photo go to {vet} ahead of the call."),stepsLabel:DRAFT("What happens next"),joinPromise:DRAFT("Join right here in the app. No links to hunt for."),backToPet:DRAFT("Back to {pet}"),calendarAdded:DRAFT("Added to your calendar"),calendarFailedBody:DRAFT("That did not save to your calendar.")}),chrome:/* @__PURE__ */Object.freeze({closeHint:DRAFT("Closes without saving"),discardTitle:DRAFT("Leave without booking?"),discardBody:DRAFT("Your answers will not be saved."),discardConfirmCta:DRAFT("Leave"),discardKeepCta:DRAFT("Keep going"),noPetsTitle:DRAFT("No pets on this account"),loadFailedTitle:DRAFT("Could not load"),retryCta:DRAFT("Try again")}),emergency:/* @__PURE__ */Object.freeze({bannerTitle:DRAFT("This can’t wait for a scheduled visit."),keepBookingCta:DRAFT("I’ve handled this, continue booking"),lede:DRAFT("What you’re describing is the kind of thing vets want to see in person, now. Call one of these first."),ledeWithoutExits:DRAFT("What you’re describing is the kind of thing vets want to see in person, now."),exitPrimaryVetTitle:DRAFT("Call {petName}’s regular vet"),exitFindErTitle:DRAFT("Find an emergency vet near you"),exitGoToErTitle:EMERGENCY_ER_LINE,startCallHint:DRAFT("Starts a phone call"),poisonControl:DRAFT("ASPCA Animal Poison Control"),poisonControlDetail:DRAFT("(888) 426-4435 · a fee may apply"),poisonControlTel:"tel:+18884264435"}),visit:/* @__PURE__ */Object.freeze({title:DRAFT("Your visit")}),loading:/* @__PURE__ */Object.freeze({pets:"Loading pets. Nothing to read yet.",clinicians:"Loading vets. Nothing to read yet.",slots:"Loading times. Nothing to read yet.",consult:"Loading your visit. Nothing to read yet.",progressTemplate:"Step {step} of {total}"})});function televetBookingCopyValues(node=TELEVET_BOOKING_COPY){return typeof node=="string"?[node]:typeof node!="object"||node===null?[]:Object.values(node).flatMap(v=>televetBookingCopyValues(v))}function isTelevetBookingCopyReady(){return televetBookingCopyValues().every(value=>value.trim().length>0&&!isPlaceholderCopy(value))}var CONTRACT_RETRYABILITY=/* @__PURE__ */Object.freeze([
2
+ return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fields.retryable,wireMessage:fields.wireMessage,synthesized:fields.synthesized,lastEventId:fields.lastEventId,serverRequestId:null})}var CONSULT_STATUSES=["scheduled","in_progress","awaiting_summary","completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"],TERMINAL_CONSULT_STATUSES=/* @__PURE__ */new Set(["completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"]),LIVE_CONSULT_STATUSES=/* @__PURE__ */new Set(["scheduled","in_progress","awaiting_summary"]);function isLiveConsult(consult){return LIVE_CONSULT_STATUSES.has(consult.status)}var CONSULT_KINDS=["wellness","prescription"],SLOT_MINUTES_MAX=60;function televetSlotMinutes(slot){let starts=Date.parse(slot.startsAt),ends=Date.parse(slot.endsAt);if(Number.isNaN(starts)||Number.isNaN(ends))return null;let minutes=Math.round((ends-starts)/6e4);return minutes>0?Math.min(minutes,SLOT_MINUTES_MAX):null}var CANCELLATION_POLICY_VERSION_MAX=64,REASON_TEXT_MAX=2e3,MEDIA_REFS_MAX=10;function isWellFormedStateCode(state){return typeof state=="string"&&/^[A-Za-z]{2}$/.test(state.trim())}function row(value){return typeof value=="object"&&value!==null?value:null}function str(value){return typeof value=="string"&&value.length>0?value:null}function trimmedOrNull(value){return typeof value=="string"&&value.trim().length>0?value.trim():null}function bool(value,fallback){return typeof value=="boolean"?value:fallback}function num(value){return typeof value=="number"&&Number.isFinite(value)?value:null}function closed(set,value){return typeof value=="string"&&set.includes(value)?value:"unknown"}function parseList(wire,parseRow){if(!Array.isArray(wire))/* @__PURE__ */return Object.freeze([]);let out=[];for(let item of wire){let parsed=parseRow(item);parsed!==null&&out.push(parsed)}/* @__PURE__ */
3
+ return Object.freeze(out)}function parseStatePolicy(wire,askedFor){let r=row(wire);return r===null?null:/* @__PURE__ */Object.freeze({state:str(r.state)??askedFor,wellnessAvailable:bool(r.wellness_available,false),prescriptionsAvailable:bool(r.prescriptions_available,false),cancellationPolicyText:trimmedOrNull(r.cancellation_policy_text)})}function parseCancellationPolicy(wire){let r=row(wire);if(r===null)return null;let summary=trimmedOrNull(r.summary),version=trimmedOrNull(r.version);return summary===null||version===null?null:/* @__PURE__ */Object.freeze({summary:summary,version:version})}function parseClinician(wire){let r=row(wire);if(r===null)return null;let clinicianId=str(r.clinician_id),displayName=str(r.display_name);return clinicianId===null||displayName===null?null:/* @__PURE__ */Object.freeze({clinicianId:clinicianId,displayName:displayName,credentials:trimmedOrNull(r.credentials_text),rating:num(r.rating),ratingCount:num(r.rating_count),bio:trimmedOrNull(r.bio),photoRef:str(r.photo_ref),licensedStates:parseList(r.licensed_states,item=>{let l=row(item),state=l===null?null:str(l.state);return state===null?null:/* @__PURE__ */Object.freeze({state:state,canPrescribe:bool(l?.can_prescribe,false)})})})}function parseSlot(wire){let r=row(wire);if(r===null)return null;let slotId=str(r.slot_id),startsAt=str(r.starts_at);return slotId===null||startsAt===null?null:/* @__PURE__ */Object.freeze({slotId:slotId,startsAt:startsAt,endsAt:str(r.ends_at)??startsAt})}function parseTriageVerdict(wire){let r=row(wire);if(r===null)return null;let isEmergency=r.is_emergency===true,fallback=r.fallback===true;return isEmergency||fallback?/* @__PURE__ */Object.freeze({isEmergency:isEmergency,fallback:fallback}):r.is_emergency===false&&r.fallback===false?/* @__PURE__ */Object.freeze({isEmergency:false,fallback:false}):null}function parseSlotHold(wire){let r=row(wire);if(r===null)return null;let slotId=str(r.slot_id),expiresAt=str(r.hold_expires_at);return slotId===null||expiresAt===null?null:/* @__PURE__ */Object.freeze({slotId:slotId,expiresAt:expiresAt})}function parseConsult(wire){let r=row(wire);if(r===null)return null;let consultId=str(r.consult_id),scheduledAt=str(r.scheduled_at);return consultId===null||scheduledAt===null?null:/* @__PURE__ */Object.freeze({consultId:consultId,petId:str(r.pet_id)??"",clinicianId:str(r.clinician_id)??"",clinicianName:trimmedOrNull(r.display_name),reasonText:trimmedOrNull(r.reason_text),mediaRefs:parseList(r.media_refs,item=>str(item)),status:closed(CONSULT_STATUSES,r.status),kind:closed(CONSULT_KINDS,r.kind),scheduledAt:scheduledAt,emergencyFlagged:bool(r.emergency_flagged,false),hasRoom:str(r.meeting_url)!==null})}function parseBookingEntitlement(wire){let r=row(wire);/* @__PURE__ */
4
+ return Object.freeze({active:bool(r?.active,false)})}var CANCEL_REASON_MAX=240;function parseCancelReceipt(wire){let r=row(wire);if(r===null)return null;let feeCents=num(r.fee_cents);return feeCents===null||feeCents<0?null:/* @__PURE__ */Object.freeze({feeCents:feeCents,currency:str(r.currency)??"usd",feeRecorded:bool(r.fee_recorded,feeCents>0),summary:trimmedOrNull(r.summary)})}var TELEVET_JOIN_OPENS_MINUTES_BEFORE=15,TELEVET_JOIN_CLOSES_MINUTES_AFTER=250,JOINABLE=/* @__PURE__ */new Set(["scheduled","in_progress"]);function startsAtMs(consult){let parsed=Date.parse(consult.scheduledAt);return Number.isNaN(parsed)?null:parsed}function televetJoinOpensAtMs(consult){let start=startsAtMs(consult);return start===null?null:start-TELEVET_JOIN_OPENS_MINUTES_BEFORE*6e4}function televetJoinReadiness(consult,nowMs){if(consult===null)return{ready:false,reason:"not_open_yet"};if(TERMINAL_CONSULT_STATUSES.has(consult.status))return{ready:false,reason:"consult_over"};if(consult.status==="in_progress")return{ready:true};let start=startsAtMs(consult);return start===null?{ready:false,reason:"not_open_yet"}:nowMs<start-TELEVET_JOIN_OPENS_MINUTES_BEFORE*6e4?{ready:false,reason:"not_open_yet"}:nowMs>start+TELEVET_JOIN_CLOSES_MINUTES_AFTER*6e4?{ready:false,reason:"consult_over"}:{ready:true}}function televetJoinDecision(consult,nowMs){if(!JOINABLE.has(consult.status))return{joinable:false,reason:`status_${consult.status}`};if(!consult.hasRoom)return{joinable:false,reason:"room_not_ready"};let start=startsAtMs(consult);return start===null||nowMs<start-TELEVET_JOIN_OPENS_MINUTES_BEFORE*6e4?{joinable:false,reason:"too_early"}:nowMs>start+TELEVET_JOIN_CLOSES_MINUTES_AFTER*6e4?{joinable:false,reason:"too_late"}:{joinable:true}}function splitTelevetVisits(consults,nowMs){let upcoming=[],past=[];for(let consult of consults){let start=startsAtMs(consult);(JOINABLE.has(consult.status)&&start!==null&&start+TELEVET_JOIN_CLOSES_MINUTES_AFTER*6e4>nowMs?upcoming:past).push(consult)}return upcoming.sort((a,b)=>(startsAtMs(a)??0)-(startsAtMs(b)??0)),past.sort((a,b)=>(startsAtMs(b)??0)-(startsAtMs(a)??0)),/* @__PURE__ */Object.freeze({upcoming:/* @__PURE__ */Object.freeze(upcoming),past:/* @__PURE__ */Object.freeze(past)})}function canManageTelevetVisit(status){return status==="scheduled"}function reportHostFailure(error){let globalConsole=globalThis.console;try{globalConsole?.error?.("[everfur] A host callback threw; the SDK ignored it.",error)}catch{}}function isThenable(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&typeof value.then=="function"}function callHost(fn,...args){if(typeof fn=="function")try{let result=fn(...args);return isThenable(result)&&Promise.resolve(result).then(void 0,reportHostFailure),result}catch(error){reportHostFailure(error);return}}var GUARDED=/* @__PURE__ */new WeakMap;function guardHost(fn){if(typeof fn!="function")return;let cached=GUARDED.get(fn);if(cached!==void 0)return cached;let guarded=(...args)=>{callHost(fn,...args)};return GUARDED.set(fn,guarded),guarded}function guardHostProps(props,names){let guarded=null;for(let name of names){let fn=props[name];typeof fn=="function"&&(guarded??={...props},guarded[name]=guardHost(fn))}return guarded??props}function callHostAsync(fn,...args){let started;try{started=fn(...args)}catch(error){return reportHostFailure(error),Promise.resolve({ok:false,error:error})}return Promise.resolve(started).then(value=>({ok:true,value:value}),error=>({ok:false,error:error}))}function createTelevetBackChannel(){let handlers=[];return{register(handler){return handlers=[...handlers,handler],()=>{handlers=handlers.filter(h=>h!==handler)}},dispatch(){for(let handler of[...handlers].reverse())try{if(handler())return!0}catch{}return false}}}var TelevetBackChannelContext=createContext(null);function useTelevetBackChannel(handler,enabled=true){let channel=useContext(TelevetBackChannelContext),current=useRef(handler);current.current=handler,useEffect(()=>{if(!(channel===null||!enabled))return channel.register(()=>current.current())},[channel,enabled])}var EMERGENCY_ER_LINE="Go to the nearest emergency vet now.";var DRAFT=s=>s,PLACEHOLDER_MARKERS=["[PLACEHOLDER","[PLAN NAME]","[LINK]","[Last]","TODO","TBD"];function isPlaceholderCopy(value){return PLACEHOLDER_MARKERS.some(m=>value.toUpperCase().includes(m.toUpperCase()))}function fill(template,slots){let out=template;for(let[key,value]of Object.entries(slots))out=out.split(`{${key}}`).join(value);return out}var TELEVET_BOOKING_COPY=/* @__PURE__ */Object.freeze({stateBlockedTitle:DRAFT("Not available in this state yet"),noCliniciansTitle:DRAFT("No vets available right now"),noCliniciansBody:DRAFT("Nobody is free in your area at the moment. This changes through the day."),noCliniciansRetryCta:DRAFT("Check again"),noCliniciansRegionBody:DRAFT("Video visits have to be with a vet licensed in your state, and we don’t have one there yet."),yourVetTitle:DRAFT("Your vet"),licensedPillTemplate:DRAFT("Licensed in {state}"),reviewsLabel:DRAFT("reviews"),rescheduleFromTemplate:DRAFT("Moving your visit on {when}"),rescheduleFailed:DRAFT("That did not move. Your original time is unchanged."),rescheduleStepLabel:DRAFT("Reschedule"),rescheduleTitleTemplate:DRAFT("Pick a new time for {pet}"),rescheduleNowLabel:DRAFT("Now"),rescheduleMoveTemplate:DRAFT("Move to {when}"),rescheduleMoving:DRAFT("Moving…"),rescheduleKeepLabel:DRAFT("Keep the visit as it is"),keepExistingCta:DRAFT("Keep my current time"),bookingPausedTitle:DRAFT("Booking is not available right now."),slotsErrorTitle:DRAFT("Could not load times"),noSlotsTitle:DRAFT("No times available"),nextOpeningTemplate:DRAFT("Next opening across our vets: {when}"),seeOtherVetsCta:DRAFT("See other vets"),retryCta:DRAFT("Try again"),holdExpired:DRAFT("That time is no longer held. Pick another."),slotTaken:DRAFT("That time was just taken. Pick another."),reasonPlaceholder:DRAFT("What is going on with your pet?"),reasonTooLong:DRAFT("That is too long. Please shorten it."),shareRecordsOff:DRAFT("Share health records with this vet"),confirmNotEntitled:DRAFT("A Pro membership is needed to book a video visit."),confirmFailed:DRAFT("That did not book. Try again."),checkAvailabilityCta:DRAFT("Check availability"),stateInterest:/* @__PURE__ */Object.freeze({cta:DRAFT("Add me to the list"),submitting:DRAFT("Adding you to the list…"),joinedTitle:DRAFT("You are on the list"),joinedBody:DRAFT("We will let you know when this changes."),failed:DRAFT("That did not save. Try again.")}),media:/* @__PURE__ */Object.freeze({droppedTemplate:DRAFT("{n} attachment did not upload."),droppedPluralTemplate:DRAFT("{n} attachments did not upload."),refusedSizeTemplate:DRAFT("{n} attachment was too large to send."),refusedSizePluralTemplate:DRAFT("{n} attachments were too large to send."),refusedTypeTemplate:DRAFT("{n} attachment is a file type that cannot be sent."),refusedTypePluralTemplate:DRAFT("{n} attachments are file types that cannot be sent."),refusedUnreadableTemplate:DRAFT("{n} attachment could not be read."),refusedUnreadablePluralTemplate:DRAFT("{n} attachments could not be read.")}),navTitle:DRAFT("Book a visit"),petFallback:"your pet",whereTitleTemplate:DRAFT("Where will {pet} be during the visit?"),whereLeadTemplate:DRAFT("Pick where {pronoun} be for the call, not where you live. It decides what the vet can do."),wherePronounFallback:"they’ll",whereFormLabelTemplate:DRAFT("Where {pet} will be"),whereLegend:DRAFT("State"),wherePrescribeMetaTemplate:DRAFT("Video visit, and prescriptions if {pet} needs them"),whereWellnessMeta:DRAFT("Wellness visit: advice and a care plan, no prescriptions yet"),whereAnotherState:DRAFT("Another state"),whereWhichState:DRAFT("Which state?"),whereLicensedTemplate:DRAFT("{vet} is licensed in {state}, so a prescription can be part of {pet}’s plan."),whereAskEveryTime:DRAFT("We ask every time: state rules require it."),issuesTitleTemplate:DRAFT("What’s going on with {pet}?"),issuesHint:DRAFT("Pick as many as you like."),issuesFormLabel:DRAFT("What’s going on"),issuesLegend:DRAFT("Main issues"),issuesPickOne:DRAFT("Pick at least one. Not sure? Choose Something else."),otherIssue:DRAFT("Something else"),describeHeadingTemplate:DRAFT("Tell {vet} what you’re seeing"),describeFieldLabel:DRAFT("What you’re seeing"),emergencyCheck:/* @__PURE__ */Object.freeze({titleTemplate:DRAFT("Is {pet} doing any of these right now?"),lead:DRAFT("A scheduled video visit isn’t the right place for an emergency."),signs:/* @__PURE__ */Object.freeze([DRAFT("Trouble breathing, or blue, grey or very pale gums"),DRAFT("Collapsed, or can’t stand up"),DRAFT("A seizure"),DRAFT("Ate something toxic, like grapes, chocolate, xylitol or medicine"),DRAFT("A swollen, hard belly, or retching with nothing coming up"),DRAFT("Bleeding that won’t stop"),DRAFT("Straining to pee with nothing coming out")]),formLabel:DRAFT("Emergency check"),legend:DRAFT("Any of these now?"),noneCta:DRAFT("No, none of these"),someCta:DRAFT("Yes, at least one")}),timeHeading:DRAFT("Pick a time"),timeMorning:DRAFT("Morning"),timeAfternoon:DRAFT("Afternoon"),timeEvening:DRAFT("Evening"),timeLegendTemplate:DRAFT("Time on {day}"),dayLegend:DRAFT("Day"),reviewHeading:DRAFT("Does this look right?"),summaryWhere:DRAFT("Where"),changeCta:DRAFT("Change"),whereAttestTemplate:DRAFT("{pet} and I will be in {state} during the visit."),attestBoth:DRAFT("Check both boxes to book the visit."),bookedStepLabel:DRAFT("Booked"),bookedTitleTemplate:DRAFT("You’re booked with {vet}"),bookedLeadTemplate:DRAFT("{when}, for {pet}."),footnote:DRAFT("Video visits are with a licensed veterinarian. Prescriptions where allowed, starting with California. In an emergency, go to the nearest emergency animal hospital."),rescheduleNavTitle:DRAFT("Change your visit"),close:DRAFT("Close"),continueCta:DRAFT("Continue"),petSelectTitle:DRAFT("Who is this visit for?"),addPetCta:DRAFT("Add a pet"),addAnotherPetCta:DRAFT("Add another pet"),locationUnknownTitle:DRAFT("We need your location to find a vet"),locationUnknownBody:DRAFT("Turn on location for Everfur, then try again."),locationUnknownCta:DRAFT("Allow location"),locationBlockedTitle:DRAFT("Location is turned off"),locationBlockedBody:DRAFT("Everfur needs your location to match you with a vet in your area."),locationBlockedCta:DRAFT("Open Settings"),locationUnavailableTitle:DRAFT("We could not read your location"),locationUnavailableBody:DRAFT("Try again in a moment."),stateAttestTemplate:DRAFT("I confirm my pet and I are in {state} right now."),describeHeading:DRAFT("Tell the vet what you are seeing"),describeHelpLong:DRAFT("When it started, what’s changed, what you’ve tried. Anything helps."),addPhotoCta:DRAFT("Add photos or videos"),addPhotoMeta:DRAFT("Optional. A close-up in good light helps."),removePhotoLabel:DRAFT("Remove photo"),summaryPet:DRAFT("Pet"),summaryVet:DRAFT("Vet"),summaryWhen:DRAFT("When"),summaryLength:DRAFT("Length"),summaryReason:DRAFT("About"),summaryLengthTemplate:DRAFT("{n} minutes"),confirmCta:DRAFT("Book the visit"),confirmBusy:DRAFT("Booking…"),bookedTitle:DRAFT("You are booked."),addToCalendarCta:DRAFT("Add to calendar"),doneCta:DRAFT("Done"),booked:/* @__PURE__ */Object.freeze({remindPromise:DRAFT("We will notify you 30 minutes before."),summaryPromise:DRAFT("{pet}'s summary goes to the vet ahead of the call."),recordsPromiseTemplate:DRAFT("{pet}’s records and your notes go to {vet} ahead of the call."),recordsPhotoPromiseTemplate:DRAFT("{pet}’s records, your notes and the photo go to {vet} ahead of the call."),stepsLabel:DRAFT("What happens next"),joinPromise:DRAFT("Join right here in the app. No links to hunt for."),backToPet:DRAFT("Back to {pet}"),calendarAdded:DRAFT("Added to your calendar"),calendarFailedBody:DRAFT("That did not save to your calendar.")}),chrome:/* @__PURE__ */Object.freeze({closeHint:DRAFT("Closes without saving"),discardTitle:DRAFT("Leave without booking?"),discardBody:DRAFT("Your answers will not be saved."),discardConfirmCta:DRAFT("Leave"),discardKeepCta:DRAFT("Keep going"),noPetsTitle:DRAFT("No pets on this account"),loadFailedTitle:DRAFT("Could not load"),retryCta:DRAFT("Try again")}),emergency:/* @__PURE__ */Object.freeze({bannerTitle:DRAFT("This can’t wait for a scheduled visit."),keepBookingCta:DRAFT("I’ve handled this, continue booking"),lede:DRAFT("What you’re describing is the kind of thing vets want to see in person, now. Call one of these first."),ledeWithoutExits:DRAFT("What you’re describing is the kind of thing vets want to see in person, now."),exitPrimaryVetTitle:DRAFT("Call {petName}’s regular vet"),exitFindErTitle:DRAFT("Find an emergency vet near you"),exitGoToErTitle:EMERGENCY_ER_LINE,startCallHint:DRAFT("Starts a phone call"),poisonControl:DRAFT("ASPCA Animal Poison Control"),poisonControlDetail:DRAFT("(888) 426-4435 · a fee may apply"),poisonControlTel:"tel:+18884264435"}),visit:/* @__PURE__ */Object.freeze({title:DRAFT("Your visit")}),loading:/* @__PURE__ */Object.freeze({pets:"Loading pets. Nothing to read yet.",clinicians:"Loading vets. Nothing to read yet.",slots:"Loading times. Nothing to read yet.",consult:"Loading your visit. Nothing to read yet.",progressTemplate:"Step {step} of {total}"})});function televetBookingCopyValues(node=TELEVET_BOOKING_COPY){return typeof node=="string"?[node]:typeof node!="object"||node===null?[]:Object.values(node).flatMap(v=>televetBookingCopyValues(v))}function isTelevetBookingCopyReady(){return televetBookingCopyValues().every(value=>value.trim().length>0&&!isPlaceholderCopy(value))}var CONTRACT_RETRYABILITY=/* @__PURE__ */Object.freeze([
3
5
  /* @__PURE__ */Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),
4
6
  /* @__PURE__ */Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),
5
7
  /* @__PURE__ */Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),
@@ -22,6 +24,8 @@ return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fiel
22
24
  /* @__PURE__ */Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),
23
25
  /* @__PURE__ */Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),
24
26
  /* @__PURE__ */Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),
27
+ /* @__PURE__ */Object.freeze({wireCode:"catalog_empty_refused",envelope:"http_envelope",httpStatus:409,retryable:false}),
28
+ /* @__PURE__ */Object.freeze({wireCode:"catalog_shrink_refused",envelope:"http_envelope",httpStatus:409,retryable:false}),
25
29
  /* @__PURE__ */Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
26
30
  /* @__PURE__ */Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),
27
31
  /* @__PURE__ */Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),
@@ -46,6 +50,7 @@ return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fiel
46
50
  /* @__PURE__ */Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),
47
51
  /* @__PURE__ */Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),
48
52
  /* @__PURE__ */Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),
53
+ /* @__PURE__ */Object.freeze({wireCode:"linked_account_read_only",envelope:"http_envelope",httpStatus:409,retryable:false}),
49
54
  /* @__PURE__ */Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),
50
55
  /* @__PURE__ */Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),
51
56
  /* @__PURE__ */Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),
@@ -82,13 +87,14 @@ return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fiel
82
87
  /* @__PURE__ */Object.freeze({wireCode:"unrestrictedKeyRequired",envelope:"http_envelope",httpStatus:403,retryable:false}),
83
88
  /* @__PURE__ */Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),
84
89
  /* @__PURE__ */Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),
90
+ /* @__PURE__ */Object.freeze({wireCode:"user_ref_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
85
91
  /* @__PURE__ */Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),
86
92
  /* @__PURE__ */Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),
87
93
  /* @__PURE__ */Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),
88
94
  /* @__PURE__ */Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
89
95
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),
90
96
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
91
- /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row2=>row2.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */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",session_revoked:"authExpired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",unrestrictedKeyRequired:"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"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row2=BY_KEY.get(candidate+key);if(row2)return row2}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",runtimeDisposed:"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 categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){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"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"RUNTIMEDISPOSED":return"runtimeDisposed";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"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */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:ACCESS_DENIED_COPY,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:VALIDATION_FAILED_COPY,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.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."}),SESSION_REVOKED_COPY="This session has ended. Please sign in again.";function displayFor(code,wireCode){return(code==="authRejected"||code==="authExpired")&&typeof wireCode=="string"&&wireCode.trim().toLowerCase()==="session_revoked"?SESSION_REVOKED_COPY:userFacingError(code)}function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row2=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),error={code:code,category:categoryFor(code),retryable:opts?.retryable??isRetryableCode(code),displayMessage:displayFor(code,opts?.wireCode)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row2);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}function ok(value,warning){/* @__PURE__ */
97
+ /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row2=>row2.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */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",session_revoked:"authExpired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",unrestrictedKeyRequired:"accessDenied",user_ref_invalid:"validationFailed",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",linked_account_read_only:"conflict",catalog_empty_refused:"conflict",catalog_shrink_refused:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row2=BY_KEY.get(candidate+key);if(row2)return row2}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",runtimeDisposed:"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 categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){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"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"RUNTIMEDISPOSED":return"runtimeDisposed";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"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */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:ACCESS_DENIED_COPY,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:VALIDATION_FAILED_COPY,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.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."}),SESSION_REVOKED_COPY="This session has ended. Please sign in again.",LINKED_ACCOUNT_READ_ONLY="linked_account_read_only";function displayFor(code,wireCode,reasonCode){return code==="conflict"&&reasonCode===LINKED_ACCOUNT_READ_ONLY?ACCESS_DENIED_COPY:(code==="authRejected"||code==="authExpired")&&typeof wireCode=="string"&&wireCode.trim().toLowerCase()==="session_revoked"?SESSION_REVOKED_COPY:userFacingError(code)}function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row2=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),linkedReadOnly=code==="conflict"&&opts?.reasonCode===LINKED_ACCOUNT_READ_ONLY,error={code:code,category:categoryFor(code),retryable:opts?.retryable??(linkedReadOnly?false:isRetryableCode(code)),displayMessage:displayFor(code,opts?.wireCode,linkedReadOnly?LINKED_ACCOUNT_READ_ONLY:null)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row2);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}function ok(value,warning){/* @__PURE__ */
92
98
  return Object.freeze({ok:true,value:value})}function err(error){/* @__PURE__ */
93
99
  return Object.freeze({ok:false,error:error})}var EverfurConfigError=class _EverfurConfigError extends Error{constructor(kind,message){super(message),this.name="EverfurConfigError",this.kind=kind,Object.setPrototypeOf(this,_EverfurConfigError.prototype)}};function mintFailedError(cause,refusal){let message=cause instanceof Error?cause.message:typeof cause=="string"?cause:null;return makeEverfurError("authRejected",{retryable:false,...refusal?.wireCode?{wireCode:refusal.wireCode}:{},...refusal?.requestId?{requestId:refusal.requestId}:{},...message?{wireMessage:message}:{},...cause!=null?{raw:cause}:{}})}function authHeaders(auth){let headers={};return auth.mode==="personalized"?headers.authorization=`Bearer ${auth.token}`:headers["x-everfur-partner-key"]=auth.publishableKey,auth.userRef&&(headers["x-everfur-user-ref"]=auth.userRef),auth.sessionId&&(headers["x-everfur-session-id"]=auth.sessionId),headers}function withAuthHeaders(req,auth){return{...req,headers:{...stripAuthHeaders(req.headers),...authHeaders(auth)}}}function stripAuthHeaders(headers){if(!headers)return{};let out={};for(let[key,value]of Object.entries(headers)){let lower=key.toLowerCase();lower==="authorization"||lower==="x-everfur-partner-key"||(out[key]=value)}return out}async function authedSend(req,ctx){if(ctx.mode==="anonymous")return ctx.transport.request(withAuthHeaders(req,{mode:"anonymous",publishableKey:ctx.publishableKey,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));let token;try{token=await ctx.identity.currentToken()}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause))}let first=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:token,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));if(first.ok||first.error.httpStatus!==401)return first;let refreshed;try{refreshed=await ctx.identity.currentToken({forceRefresh:!0})}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause,{wireCode:wireCodeOf(first.error.raw),requestId:first.error.requestId}))}let retry=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:refreshed,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));return!retry.ok&&retry.error.httpStatus===401?(ctx.identity.reportRejected?.(),err(refusedAfterRemintError(retry.error))):retry}function refusedAfterRemintError(refusal){let raw=refusal.raw,wireCode=wireCodeOf(raw);return makeEverfurError("authRejected",{retryable:false,...refusal.httpStatus!==void 0?{httpStatus:refusal.httpStatus}:{},...refusal.requestId?{requestId:refusal.requestId}:{},...wireCode?{wireCode:wireCode}:{},...refusal.reasonCode?{reasonCode:refusal.reasonCode}:{},...refusal.wireMessage?{wireMessage:refusal.wireMessage}:{},...raw!=null?{raw:raw}:{}})}function wireCodeOf(body){if(typeof body!="object"||body===null)return null;let b=body,code=(typeof b.error=="object"&&b.error!==null?b.error.code:void 0)??b.code;return typeof code=="string"&&code.length>0?code:null}function networkError(cause){return makeEverfurError("internalError",{retryable:true,wireMessage:describeCause(cause)})}function describeCause(cause){return cause instanceof Error?cause.message:typeof cause=="string"?cause:"network request failed"}var FUNNEL_UNARY_TIMEOUT_MS=3e4,RETRY_OVERRIDE_MAX_MS=BACKOFF_CAP_MS*2,IDEMPOTENCY_HEADER="idempotency-key",MUTATING_METHODS=/* @__PURE__ */new Set(["POST","PUT","PATCH","DELETE"]),NOOP_OBSERVER=/* @__PURE__ */Object.freeze({onEvent(){}}),defaultFunnelTimers=/* @__PURE__ */Object.freeze({setTimeout:(handler,ms)=>setTimeout(handler,ms),clearTimeout:handle=>clearTimeout(handle),now:()=>Date.now()});function seededIdempotencyKey(seed){let safe=seed.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return safe.length===0?null:`efs_${safe}`.slice(0,128)}function createRequestFunnel(deps){let observer=deps.observer??NOOP_OBSERVER,timers=deps.timers??defaultFunnelTimers,rng=deps.rng??Math.random,sleep=deps.sleep??((ms,signal)=>delayAbortable(ms,timers,signal)),ceiling=deps.maxAttempts??MAX_RETRY_ATTEMPTS,timeoutMs=deps.unaryTimeoutMs??FUNNEL_UNARY_TIMEOUT_MS,mintKey=deps.newIdempotencyKey??defaultIdempotencyKeyFactory(),emit=event=>{try{observer.onEvent(event)}catch{}};async function send(call,req,opts){let perCallMaxAttempts=opts?.maxAttempts,maxAttempts=Math.max(1,perCallMaxAttempts??ceiling),idempotent=opts?.idempotent??MUTATING_METHODS.has(req.method),seeded=opts?.idempotencyKey===void 0?null:seededIdempotencyKey(opts.idempotencyKey),idempotencyKey=idempotent?seeded??mintKey():null,base=assembleHeaders(req,idempotencyKey),attempt=0;for(;;){let stamp2=extra=>/* @__PURE__ */Object.freeze({call:call,method:req.method,path:req.path,attempt:attempt,...idempotencyKey?{idempotencyKey:idempotencyKey}:{},...extra});emit(stamp2({phase:"attempt"}));let deadline=boundedSignal(timeoutMs,timers),merged=mergeSignals(deadline.signal,req.signal),settled;try{settled=await authedSend({...base,signal:merged.signal},deps.auth)}catch(cause){settled=err(networkError(cause))}finally{merged.dispose(),deadline.cancel()}if(settled.ok)return emit(stamp2({phase:"settled",ok:true,reason:"ok"})),settled;let error=settled.error,decision=decideRetry(error,attempt,{maxAttempts:maxAttempts,rng:rng,now:timers.now(),aborted:req.signal?.aborted===true,...perCallMaxAttempts!==void 0?{perCallMaxAttempts:perCallMaxAttempts}:{},...deps.errorPolicy!==void 0?{policy:deps.errorPolicy}:{}}),settledEvent={ok:false,code:error.code,reason:decision.reason,...error.httpStatus!==void 0?{httpStatus:error.httpStatus}:{},...error.requestId!==void 0?{requestId:error.requestId}:{}};if(!decision.retry)return emit(stamp2({phase:"settled",...settledEvent})),err(error);if(emit(stamp2({phase:"retry",...settledEvent,delayMs:decision.delayMs})),await sleep(decision.delayMs,req.signal),req.signal?.aborted===true)return emit(stamp2({phase:"settled",...settledEvent,reason:"aborted"})),err(error);attempt+=1}}async function authorize(req){return withAuthHeaders(req,await resolveDeviceAuth(deps.auth))}async function*stream(call,req,signal){emit(
94
100
  /* @__PURE__ */Object.freeze({call:call,phase:"stream.open",method:req.method,path:req.path,attempt:0}));try{yield*deps.auth.transport.stream(req,signal)}catch{yield errorFrame({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null})}}/* @__PURE__ */
@@ -106,15 +112,13 @@ return Object.freeze({kind:"clinician_unavailable"});case"televet_membership_con
106
112
  return Object.freeze({kind:"not_entitled"});case"televet_registry_unavailable":/* @__PURE__ */
107
113
  return Object.freeze({kind:"failed"})}/* @__PURE__ */
108
114
  return Object.freeze({kind:"failed"})}function isSafeRoomUrl(url){try{return new URL(url.trim()).protocol==="https:"}catch{return false}}function isUsableRoomCredential(roomUrl,token){return isSafeRoomUrl(roomUrl)&&token.trim().length>0}function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function wholeNumber(value,min){return typeof value=="number"&&Number.isInteger(value)&&value>=min?value:null}function parseCallLimits(wire){if(!isRecord2(wire))return null;let consultMinutes=wholeNumber(wire.consult_minutes,1),autoEndMinutes=wholeNumber(wire.auto_end_minutes,0),warnBeforeSeconds=wholeNumber(wire.warn_before_seconds,0);return consultMinutes===null||autoEndMinutes===null||warnBeforeSeconds===null?null:/* @__PURE__ */Object.freeze({consultMinutes:consultMinutes,autoEndMinutes:autoEndMinutes,warnBeforeSeconds:warnBeforeSeconds})}function parseVetCallCredential(wire){if(!isRecord2(wire))return null;let room=wire.room_url??wire.url,token=wire.token;if(typeof room!="string"||typeof token!="string"||!isUsableRoomCredential(room,token))return null;let notice=wire.recording_notice;/* @__PURE__ */
109
- return Object.freeze({roomUrl:room.trim(),token:token,recordingNotice:typeof notice=="boolean"?notice:true,callLimits:parseCallLimits(wire.call_limits)})}function vetCallJoinReason(error){let reason=reasonOf(error.raw);return reason!==null&&reason.length>0?reason:null}function reasonOf(raw){if(!isRecord2(raw))return null;let nested=raw.detail??raw.error,reason=(isRecord2(nested)?nested:raw).reason;return typeof reason=="string"?reason:null}function vetCallJoinRefusal(error){if(error.httpStatus===404)return"unavailable";let reason=reasonOf(error.raw);return reason==="too_early"||reason==="too_late"||reason==="room_not_ready"?reason:reason!==null&&reason.startsWith("status_")?"not_joinable":"unknown"}var CONSULT_STATUSES=["scheduled","in_progress","awaiting_summary","completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"],TERMINAL_CONSULT_STATUSES=/* @__PURE__ */new Set(["completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"]),LIVE_CONSULT_STATUSES=/* @__PURE__ */new Set(["scheduled","in_progress","awaiting_summary"]);function isLiveConsult(consult){return LIVE_CONSULT_STATUSES.has(consult.status)}var CONSULT_KINDS=["wellness","prescription"],SLOT_MINUTES_MAX=60;function televetSlotMinutes(slot){let starts=Date.parse(slot.startsAt),ends=Date.parse(slot.endsAt);if(Number.isNaN(starts)||Number.isNaN(ends))return null;let minutes=Math.round((ends-starts)/6e4);return minutes>0?Math.min(minutes,SLOT_MINUTES_MAX):null}var CANCELLATION_POLICY_VERSION_MAX=64,REASON_TEXT_MAX=2e3,MEDIA_REFS_MAX=10;function isWellFormedStateCode(state){return typeof state=="string"&&/^[A-Za-z]{2}$/.test(state.trim())}function row(value){return typeof value=="object"&&value!==null?value:null}function str(value){return typeof value=="string"&&value.length>0?value:null}function trimmedOrNull(value){return typeof value=="string"&&value.trim().length>0?value.trim():null}function bool(value,fallback){return typeof value=="boolean"?value:fallback}function num(value){return typeof value=="number"&&Number.isFinite(value)?value:null}function closed(set,value){return typeof value=="string"&&set.includes(value)?value:"unknown"}function parseList(wire,parseRow){if(!Array.isArray(wire))/* @__PURE__ */return Object.freeze([]);let out=[];for(let item of wire){let parsed=parseRow(item);parsed!==null&&out.push(parsed)}/* @__PURE__ */
110
- return Object.freeze(out)}function parseStatePolicy(wire,askedFor){let r=row(wire);return r===null?null:/* @__PURE__ */Object.freeze({state:str(r.state)??askedFor,wellnessAvailable:bool(r.wellness_available,false),prescriptionsAvailable:bool(r.prescriptions_available,false),cancellationPolicyText:trimmedOrNull(r.cancellation_policy_text)})}function parseCancellationPolicy(wire){let r=row(wire);if(r===null)return null;let summary=trimmedOrNull(r.summary),version=trimmedOrNull(r.version);return summary===null||version===null?null:/* @__PURE__ */Object.freeze({summary:summary,version:version})}function parseClinician(wire){let r=row(wire);if(r===null)return null;let clinicianId=str(r.clinician_id),displayName=str(r.display_name);return clinicianId===null||displayName===null?null:/* @__PURE__ */Object.freeze({clinicianId:clinicianId,displayName:displayName,credentials:trimmedOrNull(r.credentials_text),rating:num(r.rating),ratingCount:num(r.rating_count),bio:trimmedOrNull(r.bio),photoRef:str(r.photo_ref),licensedStates:parseList(r.licensed_states,item=>{let l=row(item),state=l===null?null:str(l.state);return state===null?null:/* @__PURE__ */Object.freeze({state:state,canPrescribe:bool(l?.can_prescribe,false)})})})}function parseSlot(wire){let r=row(wire);if(r===null)return null;let slotId=str(r.slot_id),startsAt=str(r.starts_at);return slotId===null||startsAt===null?null:/* @__PURE__ */Object.freeze({slotId:slotId,startsAt:startsAt,endsAt:str(r.ends_at)??startsAt})}function parseTriageVerdict(wire){let r=row(wire);if(r===null)return null;let isEmergency=r.is_emergency===true,fallback=r.fallback===true;return isEmergency||fallback?/* @__PURE__ */Object.freeze({isEmergency:isEmergency,fallback:fallback}):r.is_emergency===false&&r.fallback===false?/* @__PURE__ */Object.freeze({isEmergency:false,fallback:false}):null}function parseSlotHold(wire){let r=row(wire);if(r===null)return null;let slotId=str(r.slot_id),expiresAt=str(r.hold_expires_at);return slotId===null||expiresAt===null?null:/* @__PURE__ */Object.freeze({slotId:slotId,expiresAt:expiresAt})}function parseConsult(wire){let r=row(wire);if(r===null)return null;let consultId=str(r.consult_id),scheduledAt=str(r.scheduled_at);return consultId===null||scheduledAt===null?null:/* @__PURE__ */Object.freeze({consultId:consultId,petId:str(r.pet_id)??"",clinicianId:str(r.clinician_id)??"",clinicianName:trimmedOrNull(r.display_name),reasonText:trimmedOrNull(r.reason_text),mediaRefs:parseList(r.media_refs,item=>str(item)),status:closed(CONSULT_STATUSES,r.status),kind:closed(CONSULT_KINDS,r.kind),scheduledAt:scheduledAt,emergencyFlagged:bool(r.emergency_flagged,false),hasRoom:str(r.meeting_url)!==null})}function parseBookingEntitlement(wire){let r=row(wire);/* @__PURE__ */
111
- return Object.freeze({active:bool(r?.active,false)})}var CANCEL_REASON_MAX=240;function parseCancelReceipt(wire){let r=row(wire);if(r===null)return null;let feeCents=num(r.fee_cents);return feeCents===null||feeCents<0?null:/* @__PURE__ */Object.freeze({feeCents:feeCents,currency:str(r.currency)??"usd",feeRecorded:bool(r.fee_recorded,feeCents>0),summary:trimmedOrNull(r.summary)})}var BASE="/widget/v1/televet",TELEVET_MESSAGE_THREADS_PATH=`${BASE}/messages/threads`;function televetThreadMessagesCall(petRef){return`${TELEVET_MESSAGE_THREADS_PATH}/${encodeURIComponent(petRef)}/messages`}function televetThreadReadCall(petRef){return`${TELEVET_MESSAGE_THREADS_PATH}/${encodeURIComponent(petRef)}/read`}function televetVisitSummaryCall(consultId){return`${BASE}/consults/${encodeURIComponent(consultId)}/summary`}var VET_MESSAGE_CONTENT_MAX=4e3,VET_MESSAGE_PAGE_DEFAULT=50,VET_MESSAGE_PAGE_MAX=100,stamp=/* @__PURE__ */z.string().min(1).refine(value=>!Number.isNaN(Date.parse(value))),optionalText=/* @__PURE__ */z.string().nullish(),messageSchema=/* @__PURE__ */z.object({message_id:/* @__PURE__ */z.string().min(1),pet_ref:/* @__PURE__ */z.string().min(1),role:/* @__PURE__ */z.enum(["owner","vet","system"]),content:/* @__PURE__ */z.string(),created_at:stamp,sender:/* @__PURE__ */z.object({display_name:optionalText,specialty:optionalText}).nullish(),sender_display_name:optionalText,attachment_count:/* @__PURE__ */z.number().int().nonnegative().nullish()}),threadSchema=/* @__PURE__ */z.object({pet_ref:/* @__PURE__ */z.string().min(1),last_message_at:stamp,unread_count:/* @__PURE__ */z.number().int().nonnegative().nullish(),owner_can_start:/* @__PURE__ */z.boolean().nullish(),last_message:/* @__PURE__ */messageSchema.nullish()}),medicationSchema=/* @__PURE__ */z.object({drug:/* @__PURE__ */z.string().nullish(),strength:optionalText,form:optionalText,sig:optionalText,quantity:/* @__PURE__ */z.union([/* @__PURE__ */z.string(),/* @__PURE__ */z.number()]).nullish(),refills:/* @__PURE__ */z.number().int().nonnegative().nullish()}).passthrough(),summarySchema=/* @__PURE__ */z.object({consult_id:/* @__PURE__ */z.string().min(1),findings_text:/* @__PURE__ */z.string().nullish(),next_steps_text:/* @__PURE__ */z.string().nullish(),medications:/* @__PURE__ */z.array(/* @__PURE__ */z.unknown()).nullish(),product_refs:/* @__PURE__ */z.array(/* @__PURE__ */z.string()).nullish(),action_items:/* @__PURE__ */z.array(/* @__PURE__ */z.string()).nullish(),approved_at:stamp,approved_by_display_name:optionalText,credentials_text:optionalText});function nonBlank(value){let trimmed=value?.trim()??"";return trimmed.length>0?trimmed:null}function toMessage(wire){let vet=wire.role==="vet";/* @__PURE__ */
115
+ return Object.freeze({roomUrl:room.trim(),token:token,recordingNotice:typeof notice=="boolean"?notice:true,callLimits:parseCallLimits(wire.call_limits)})}function vetCallJoinReason(error){let reason=reasonOf(error.raw);return reason!==null&&reason.length>0?reason:null}function reasonOf(raw){if(!isRecord2(raw))return null;let nested=raw.detail??raw.error,reason=(isRecord2(nested)?nested:raw).reason;return typeof reason=="string"?reason:null}function vetCallJoinRefusal(error){if(error.httpStatus===404)return"unavailable";let reason=reasonOf(error.raw);return reason==="too_early"||reason==="too_late"||reason==="room_not_ready"?reason:reason!==null&&reason.startsWith("status_")?"not_joinable":"unknown"}var BASE="/widget/v1/televet",TELEVET_MESSAGE_THREADS_PATH=`${BASE}/messages/threads`;function televetThreadMessagesCall(petRef){return`${TELEVET_MESSAGE_THREADS_PATH}/${encodeURIComponent(petRef)}/messages`}function televetThreadReadCall(petRef){return`${TELEVET_MESSAGE_THREADS_PATH}/${encodeURIComponent(petRef)}/read`}function televetVisitSummaryCall(consultId){return`${BASE}/consults/${encodeURIComponent(consultId)}/summary`}var VET_MESSAGE_CONTENT_MAX=4e3,VET_MESSAGE_PAGE_DEFAULT=50,VET_MESSAGE_PAGE_MAX=100,stamp=/* @__PURE__ */z.string().min(1).refine(value=>!Number.isNaN(Date.parse(value))),optionalText=/* @__PURE__ */z.string().nullish(),messageSchema=/* @__PURE__ */z.object({message_id:/* @__PURE__ */z.string().min(1),pet_ref:/* @__PURE__ */z.string().min(1),role:/* @__PURE__ */z.enum(["owner","vet","system"]),content:/* @__PURE__ */z.string(),created_at:stamp,sender:/* @__PURE__ */z.object({display_name:optionalText,specialty:optionalText}).nullish(),sender_display_name:optionalText,attachment_count:/* @__PURE__ */z.number().int().nonnegative().nullish()}),threadSchema=/* @__PURE__ */z.object({pet_ref:/* @__PURE__ */z.string().min(1),last_message_at:stamp,unread_count:/* @__PURE__ */z.number().int().nonnegative().nullish(),owner_can_start:/* @__PURE__ */z.boolean().nullish(),last_message:/* @__PURE__ */messageSchema.nullish()}),medicationSchema=/* @__PURE__ */z.object({drug:/* @__PURE__ */z.string().nullish(),strength:optionalText,form:optionalText,sig:optionalText,quantity:/* @__PURE__ */z.union([/* @__PURE__ */z.string(),/* @__PURE__ */z.number()]).nullish(),refills:/* @__PURE__ */z.number().int().nonnegative().nullish()}).passthrough(),summarySchema=/* @__PURE__ */z.object({consult_id:/* @__PURE__ */z.string().min(1),findings_text:/* @__PURE__ */z.string().nullish(),next_steps_text:/* @__PURE__ */z.string().nullish(),medications:/* @__PURE__ */z.array(/* @__PURE__ */z.unknown()).nullish(),product_refs:/* @__PURE__ */z.array(/* @__PURE__ */z.string()).nullish(),action_items:/* @__PURE__ */z.array(/* @__PURE__ */z.string()).nullish(),approved_at:stamp,approved_by_display_name:optionalText,credentials_text:optionalText});function nonBlank(value){let trimmed=value?.trim()??"";return trimmed.length>0?trimmed:null}function toMessage(wire){let vet=wire.role==="vet";/* @__PURE__ */
112
116
  return Object.freeze({messageId:wire.message_id,petRef:wire.pet_ref,role:wire.role,content:wire.content,createdAt:wire.created_at,senderName:vet?nonBlank(wire.sender?.display_name)??nonBlank(wire.sender_display_name):null,senderSpecialty:vet?nonBlank(wire.sender?.specialty):null,attachmentCount:wire.attachment_count??0})}function mapVetMessage(wire){let parsed=messageSchema.safeParse(wire);return parsed.success?toMessage(parsed.data):null}function mapVetMessages(wire){let parsed=z.array(messageSchema).safeParse(wire);return parsed.success?/* @__PURE__ */Object.freeze(parsed.data.map(toMessage)):null}function mapVetThreads(wire){let parsed=z.array(threadSchema).safeParse(wire);return parsed.success?/* @__PURE__ */Object.freeze(parsed.data.map(row2=>/* @__PURE__ */Object.freeze({petRef:row2.pet_ref,lastMessageAt:row2.last_message_at,unreadCount:row2.unread_count??0,ownerCanStart:row2.owner_can_start??true,lastMessage:row2.last_message?toMessage(row2.last_message):null}))):null}function toMedication(wire){let parsed=medicationSchema.safeParse(wire);if(!parsed.success)return null;let drug=nonBlank(parsed.data.drug);if(drug===null)return null;let quantity=parsed.data.quantity;/* @__PURE__ */
113
117
  return Object.freeze({drug:drug,strength:nonBlank(parsed.data.strength),form:nonBlank(parsed.data.form),sig:nonBlank(parsed.data.sig),quantity:quantity==null?null:nonBlank(String(quantity)),refills:parsed.data.refills??null})}function mapVisitSummary(wire){let parsed=summarySchema.safeParse(wire);if(!parsed.success)return null;let s=parsed.data;/* @__PURE__ */
114
- return Object.freeze({consultId:s.consult_id,findingsText:s.findings_text??"",nextStepsText:s.next_steps_text??"",medications:/* @__PURE__ */Object.freeze((s.medications??[]).map(toMedication).filter(m=>m!==null)),productRefs:/* @__PURE__ */Object.freeze([...s.product_refs??[]]),actionItems:/* @__PURE__ */Object.freeze((s.action_items??[]).filter(item=>item.trim().length>0)),approvedAt:s.approved_at,approvedByName:nonBlank(s.approved_by_display_name),credentialsText:nonBlank(s.credentials_text)})}function isVetMessagesDark(error){return error.httpStatus===404}function isVetThreadVetFirst(error){return error.httpStatus===409}function invalid(wireMessage){return err(makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage}))}function unusable(wireMessage){return err(makeEverfurError("internalError",{retryable:false,httpStatus:502,wireMessage:wireMessage}))}function clampLimit(limit){return limit===void 0||!Number.isFinite(limit)?VET_MESSAGE_PAGE_DEFAULT:Math.min(VET_MESSAGE_PAGE_MAX,Math.max(1,Math.trunc(limit)))}function isStamp(value){return value.trim().length>0&&!Number.isNaN(Date.parse(value))}function safeTrack(telemetry,event,props){try{telemetry?.track(event,props)}catch{}}function createTelevetMessagesMethods(funnel,telemetry){return{async listVetThreads(signal){let res=await funnel.send("televet.messages.threads",{method:"GET",path:TELEVET_MESSAGE_THREADS_PATH,...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVetThreads(res.value);return parsed===null?unusable("the vet thread list was unreadable"):ok(parsed)},async listVetMessages(petRef,page={},signal){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");let before=page.before?.trim();if(before!==void 0&&before.length>0&&!isStamp(before))return invalid("before must be an ISO date-time");let res=await funnel.send("televet.messages.thread",{method:"GET",path:televetThreadMessagesCall(ref),query:{...before?{before:before}:{},limit:clampLimit(page.limit)},...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVetMessages(res.value);return parsed===null?unusable("the vet thread page was unreadable"):ok(parsed)},async sendVetMessage(petRef,content){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");if(content.trim().length===0)return invalid("content must not be blank");if(content.length>VET_MESSAGE_CONTENT_MAX)return invalid(`content must be at most ${VET_MESSAGE_CONTENT_MAX} characters`);let res=await funnel.send("televet.messages.send",{method:"POST",path:televetThreadMessagesCall(ref),body:{content:content}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack(telemetry,"televet.messages.send_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=mapVetMessage(res.value);return parsed===null?unusable("the sent message was unreadable"):ok(parsed)},async markVetThreadRead(petRef,readAt){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");if(!isStamp(readAt))return invalid("readAt must be an ISO date-time");let res=await funnel.send("televet.messages.read",{method:"PUT",path:televetThreadReadCall(ref),body:{read_at:readAt}});return res.ok?ok(void 0):err(res.error)},async visitSummary(consultId,signal){let id=consultId.trim();if(id.length===0)return invalid("consultId is required");let res=await funnel.send("televet.messages.summary",{method:"GET",path:televetVisitSummaryCall(id),...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVisitSummary(res.value);return parsed===null?unusable("the visit summary was unreadable"):ok(parsed)}}}var TELEVET_BOOKING_BASE="/widget/v1/televet",TELEVET_STATE_POLICY_PATH=`${TELEVET_BOOKING_BASE}/state-policy`,TELEVET_CLINICIANS_PATH=`${TELEVET_BOOKING_BASE}/vets`,TELEVET_SLOTS_PATH=`${TELEVET_BOOKING_BASE}/slots`,TELEVET_NEXT_SLOT_PATH=`${TELEVET_BOOKING_BASE}/slots/next`,TELEVET_CONSULTS_PATH=`${TELEVET_BOOKING_BASE}/consults`,TELEVET_BOOKING_ENTITLEMENT_PATH=`${TELEVET_BOOKING_BASE}/entitlement`,TELEVET_CANCELLATION_POLICY_PATH=`${TELEVET_BOOKING_BASE}/cancellation-policy`,TELEVET_ATTACHMENT_INITIATE_PATH=`${TELEVET_BOOKING_BASE}/attachments/initiate`,TELEVET_TRIAGE_PATH=`${TELEVET_CONSULTS_PATH}/triage`;function televetHoldCall(slotId){return`${TELEVET_SLOTS_PATH}/${encodeURIComponent(slotId)}/hold`}function televetRescheduleCall(consultId){return`${TELEVET_CONSULTS_PATH}/${encodeURIComponent(consultId)}/reschedule`}function televetConsultCall(consultId){return`${TELEVET_CONSULTS_PATH}/${encodeURIComponent(consultId)}`}function televetJoinCall(consultId){return`${televetConsultCall(consultId)}/join`}function televetCancelCall(consultId){return`${televetConsultCall(consultId)}/cancel`}var TELEVET_CONSULT_PAGE_LIMIT=100;function invalid2(wireMessage){return err(makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage}))}function unusable2(wireMessage){return err(makeEverfurError("internalError",{retryable:false,httpStatus:502,wireMessage:wireMessage}))}function isDark(error){return error.httpStatus===404}function safeTrack2(telemetry,event,props){try{telemetry?.track(event,props)}catch{}}function validateBookingBody(body){if(body.pet_id.trim().length===0)return"pet_id is required";if(body.clinician_id.trim().length===0)return"clinician_id is required";if(body.slot_id.trim().length===0)return"slot_id is required";if(!isWellFormedStateCode(body.state))return"state must be a two-letter US state code";let reason=body.reason_text.trim();return reason.length===0?"reason_text is required":reason.length>REASON_TEXT_MAX?`reason_text must be at most ${REASON_TEXT_MAX} characters`:attestationRefusal(body)}function attestationRefusal(body){let attested=body.state_attested===true,version=body.cancellation_policy_version?.trim()??"";return attested!==version.length>0?"state_attested and cancellation_policy_version must be sent together or omitted together":version.length>CANCELLATION_POLICY_VERSION_MAX?`cancellation_policy_version must be at most ${CANCELLATION_POLICY_VERSION_MAX} characters`:null}function createTelevetBookingController(deps){let funnel=deps.funnel??createRequestFunnel({auth:deps.auth,...deps.errorPolicy?{errorPolicy:deps.errorPolicy}:{}}),telemetry=deps.telemetry;return{...createTelevetMessagesMethods(funnel,telemetry),async statePolicy(state,signal){let code=state.trim();if(!isWellFormedStateCode(code))return invalid2("state must be a two-letter US state code");let res=await funnel.send("televet.booking.state_policy",{method:"GET",path:`${TELEVET_STATE_POLICY_PATH}/${encodeURIComponent(code)}`,...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseStatePolicy(res.value,code);return parsed===null?unusable2("the state policy response was unreadable"):ok(parsed)},async entitlement(signal){let res=await funnel.send("televet.booking.entitlement",{method:"GET",path:TELEVET_BOOKING_ENTITLEMENT_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseBookingEntitlement(res.value)):err(res.error)},async cancellationPolicy(signal){let res=await funnel.send("televet.booking.cancellation_policy",{method:"GET",path:TELEVET_CANCELLATION_POLICY_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseCancellationPolicy(res.value)):ok(null)},async clinicians(state,signal){let code=state.trim();if(!isWellFormedStateCode(code))return invalid2("state must be a two-letter US state code");let res=await funnel.send("televet.booking.clinicians",{method:"GET",path:TELEVET_CLINICIANS_PATH,query:{state:code},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"vets"),parseClinician)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async slots(clinicianId,signal){let id=clinicianId.trim();if(id.length===0)return invalid2("clinicianId is required");let res=await funnel.send("televet.booking.slots",{method:"GET",path:TELEVET_SLOTS_PATH,query:{clinician_id:id},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"slots"),parseSlot)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async nextSlot(signal){let res=await funnel.send("televet.booking.next_slot",{method:"GET",path:TELEVET_NEXT_SLOT_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseSlot(unwrap(res.value,"slot"))):ok(null)},async holdSlot(slotId){let id=slotId.trim();if(id.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.hold",{method:"POST",path:televetHoldCall(id)},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.hold_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseSlotHold(res.value);return parsed===null?unusable2("the hold response carried no usable expiry"):ok(parsed)},async releaseHold(slotId){let id=slotId.trim();if(id.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.release_hold",{method:"DELETE",path:televetHoldCall(id)},{idempotent:false,maxAttempts:1});return!res.ok&&res.error.httpStatus!==404?err(res.error):ok(void 0)},async book(body,idempotencyKey){let refusal=validateBookingBody(body);if(refusal!==null)return invalid2(refusal);let key=idempotencyKey.trim();if(key.length===0)return invalid2("idempotencyKey is required");let res=await funnel.send("televet.booking.book",{method:"POST",path:TELEVET_CONSULTS_PATH,body:bookingWireBody(body)},{idempotent:true,idempotencyKey:key,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.book_failed",{status:res.error.httpStatus??null}),err(foldTelevetBookingKeyReused(res.error));let parsed=parseConsult(res.value);return parsed===null?unusable2("the booking response was unreadable"):isLiveConsult(parsed)?ok(parsed):(safeTrack2(telemetry,"televet.booking.book_failed",{status:null,consult_status:parsed.status}),err(televetBookingNotLiveError(parsed.status)))},async reschedule(consultId,slotId){let consult=consultId.trim(),slot=slotId.trim();if(consult.length===0)return invalid2("consultId is required");if(slot.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.reschedule",{method:"POST",path:televetRescheduleCall(consult),body:{new_slot_id:slot}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.reschedule_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseConsult(res.value);return parsed===null?unusable2("the reschedule response was unreadable"):ok(parsed)},async triage(reasonText,signal){let text2=reasonText.trim();if(text2.length===0)return ok(null);let res=await funnel.send("televet.booking.triage",{method:"POST",path:TELEVET_TRIAGE_PATH,body:{reason_text:text2},...signal?{signal:signal}:{}},{idempotent:false,maxAttempts:1});return res.ok?ok(parseTriageVerdict(res.value)):(safeTrack2(telemetry,"televet.booking.triage_unavailable",{status:res.error.httpStatus??null}),ok(null))},async listConsults(signal){let res=await funnel.send("televet.booking.consults",{method:"GET",path:TELEVET_CONSULTS_PATH,query:{limit:String(TELEVET_CONSULT_PAGE_LIMIT)},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"consults"),parseConsult)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async getConsult(consultId,signal){let id=consultId.trim();if(id.length===0)return invalid2("consultId is required");let res=await funnel.send("televet.booking.consult",{method:"GET",path:televetConsultCall(id),...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseConsult(res.value);return parsed===null?unusable2("the consult response was unreadable"):ok(parsed)},async joinConsult(consultId){let id=consultId.trim();if(id.length===0)return invalid2("consultId is required");let res=await funnel.send("televet.booking.join",{method:"POST",path:televetJoinCall(id)},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.join_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseVetCallCredential(res.value);return parsed===null?unusable2("the join response carried no usable room credential"):ok(parsed)},async cancelConsult(consultId,reason){let id=consultId.trim(),text2=reason.trim();if(id.length===0)return invalid2("consultId is required");if(text2.length===0)return invalid2("reason is required");if(text2.length>CANCEL_REASON_MAX)return invalid2(`reason must be at most ${CANCEL_REASON_MAX} characters`);let res=await funnel.send("televet.booking.cancel",{method:"POST",path:televetCancelCall(id),body:{reason:text2}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.cancel_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseCancelReceipt(res.value);return parsed===null?unusable2("the cancel response was unreadable"):ok(parsed)},async initiateAttachment(file,signal){let res=await funnel.send("televet.booking.attachment_initiate",{method:"POST",path:TELEVET_ATTACHMENT_INITIATE_PATH,body:{filename:file.filename,content_type:file.contentType,file_size:file.fileSize},...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseTelevetAttachmentPolicy(res.value);return parsed===null?unusable2("the attachment presign was unreadable"):ok(parsed)}}}function bookingWireBody(body){let version=body.cancellation_policy_version?.trim()??"",whole=body.state_attested===true&&version.length>0;return{pet_id:body.pet_id,clinician_id:body.clinician_id,slot_id:body.slot_id,state:body.state,reason_text:body.reason_text.trim(),species:body.species,media_refs:[...body.media_refs],emergency_acknowledged:body.emergency_acknowledged,share_health_records:body.share_health_records,...whole?{state_attested:true,cancellation_policy_version:version}:{}}}function rows(wire,key){if(Array.isArray(wire))return wire;if(typeof wire=="object"&&wire!==null){let envelope=wire,named=envelope[key]??envelope.items??envelope.data;if(Array.isArray(named))return named}return wire}function unwrap(wire,key){if(typeof wire=="object"&&wire!==null&&!Array.isArray(wire)){let envelope=wire,named=envelope[key]??envelope.data;if(typeof named=="object"&&named!==null)return named}return wire}var EVERFUR_CONTEXT_SYMBOL=/* @__PURE__ */Symbol.for("@everfur/sdk#EverfurContext@v1"),globalContextHost=globalThis,EverfurContext=globalContextHost[EVERFUR_CONTEXT_SYMBOL]??(globalContextHost[EVERFUR_CONTEXT_SYMBOL]=createContext(null));EverfurContext.displayName??="EverfurContext";function useEverfurContext(){let ctx=useContext(EverfurContext);if(ctx===null)throw new EverfurConfigError("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return ctx}var REQUIRES=/* @__PURE__ */Object.freeze({chat:/* @__PURE__ */Object.freeze(["chat.message.create"]),records:/* @__PURE__ */Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:/* @__PURE__ */Object.freeze(["records.clinic.create"]),video:/* @__PURE__ */Object.freeze(["video.gait.execute"]),photo:/* @__PURE__ */Object.freeze(["photo.checkup.execute"]),animations:/* @__PURE__ */Object.freeze(["animations.state.read"]),televet:/* @__PURE__ */Object.freeze(["televet.visit.create"])});function requires(name){return REQUIRES[name]}function decideCapability(name,decisions,opts){let keys=requires(name),byResource=/* @__PURE__ */new Map;for(let decision of decisions)byResource.set(decision.resource,decision);if(opts?.isPending===true&&keys.some(key=>!byResource.has(key)))return freezeDecision({name:name,enabled:false,isPending:true,limits:{}});let limits=mergeLimits(keys,byResource);return keys.filter(key=>byResource.get(key)?.granted!==true).length===0?freezeDecision({name:name,enabled:true,isPending:false,limits:limits}):freezeDecision({name:name,enabled:false,isPending:false,limits:limits,disabled:disabledFor(keys,byResource)})}function mergeLimits(keys,byResource){let out={};for(let key of keys){let decisionLimits=byResource.get(key)?.limits;if(decisionLimits)for(let[limitKey,limitValue]of Object.entries(decisionLimits)){let existing=out[limitKey];out[limitKey]=existing===void 0?limitValue:Math.min(existing,limitValue)}}return out}function disabledFor(keys,byResource){for(let key of keys){let explicit=byResource.get(key)?.disabled;if(explicit)/* @__PURE__ */
118
+ return Object.freeze({consultId:s.consult_id,findingsText:s.findings_text??"",nextStepsText:s.next_steps_text??"",medications:/* @__PURE__ */Object.freeze((s.medications??[]).map(toMedication).filter(m=>m!==null)),productRefs:/* @__PURE__ */Object.freeze([...s.product_refs??[]]),actionItems:/* @__PURE__ */Object.freeze((s.action_items??[]).filter(item=>item.trim().length>0)),approvedAt:s.approved_at,approvedByName:nonBlank(s.approved_by_display_name),credentialsText:nonBlank(s.credentials_text)})}function isVetMessagesDark(error){return error.httpStatus===404}function isVetThreadVetFirst(error){return error.httpStatus===409}function invalid(wireMessage){return err(makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage}))}function unusable(wireMessage){return err(makeEverfurError("internalError",{retryable:false,httpStatus:502,wireMessage:wireMessage}))}function clampLimit(limit){return limit===void 0||!Number.isFinite(limit)?VET_MESSAGE_PAGE_DEFAULT:Math.min(VET_MESSAGE_PAGE_MAX,Math.max(1,Math.trunc(limit)))}function isStamp(value){return value.trim().length>0&&!Number.isNaN(Date.parse(value))}function safeTrack(telemetry,event,props){try{telemetry?.track(event,props)}catch{}}function createTelevetMessagesMethods(funnel,telemetry){return{async listVetThreads(signal){let res=await funnel.send("televet.messages.threads",{method:"GET",path:TELEVET_MESSAGE_THREADS_PATH,...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVetThreads(res.value);return parsed===null?unusable("the vet thread list was unreadable"):ok(parsed)},async listVetMessages(petRef,page={},signal){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");let before=page.before?.trim();if(before!==void 0&&before.length>0&&!isStamp(before))return invalid("before must be an ISO date-time");let res=await funnel.send("televet.messages.thread",{method:"GET",path:televetThreadMessagesCall(ref),query:{...before?{before:before}:{},limit:clampLimit(page.limit)},...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVetMessages(res.value);return parsed===null?unusable("the vet thread page was unreadable"):ok(parsed)},async sendVetMessage(petRef,content){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");if(content.trim().length===0)return invalid("content must not be blank");if(content.length>VET_MESSAGE_CONTENT_MAX)return invalid(`content must be at most ${VET_MESSAGE_CONTENT_MAX} characters`);let res=await funnel.send("televet.messages.send",{method:"POST",path:televetThreadMessagesCall(ref),body:{content:content}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack(telemetry,"televet.messages.send_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=mapVetMessage(res.value);return parsed===null?unusable("the sent message was unreadable"):ok(parsed)},async markVetThreadRead(petRef,readAt){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");if(!isStamp(readAt))return invalid("readAt must be an ISO date-time");let res=await funnel.send("televet.messages.read",{method:"PUT",path:televetThreadReadCall(ref),body:{read_at:readAt}});return res.ok?ok(void 0):err(res.error)},async visitSummary(consultId,signal){let id=consultId.trim();if(id.length===0)return invalid("consultId is required");let res=await funnel.send("televet.messages.summary",{method:"GET",path:televetVisitSummaryCall(id),...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVisitSummary(res.value);return parsed===null?unusable("the visit summary was unreadable"):ok(parsed)}}}var TELEVET_BOOKING_BASE="/widget/v1/televet",TELEVET_STATE_POLICY_PATH=`${TELEVET_BOOKING_BASE}/state-policy`,TELEVET_CLINICIANS_PATH=`${TELEVET_BOOKING_BASE}/vets`,TELEVET_SLOTS_PATH=`${TELEVET_BOOKING_BASE}/slots`,TELEVET_NEXT_SLOT_PATH=`${TELEVET_BOOKING_BASE}/slots/next`,TELEVET_CONSULTS_PATH=`${TELEVET_BOOKING_BASE}/consults`,TELEVET_BOOKING_ENTITLEMENT_PATH=`${TELEVET_BOOKING_BASE}/entitlement`,TELEVET_CANCELLATION_POLICY_PATH=`${TELEVET_BOOKING_BASE}/cancellation-policy`,TELEVET_ATTACHMENT_INITIATE_PATH=`${TELEVET_BOOKING_BASE}/attachments/initiate`,TELEVET_TRIAGE_PATH=`${TELEVET_CONSULTS_PATH}/triage`;function televetHoldCall(slotId){return`${TELEVET_SLOTS_PATH}/${encodeURIComponent(slotId)}/hold`}function televetRescheduleCall(consultId){return`${TELEVET_CONSULTS_PATH}/${encodeURIComponent(consultId)}/reschedule`}function televetConsultCall(consultId){return`${TELEVET_CONSULTS_PATH}/${encodeURIComponent(consultId)}`}function televetJoinCall(consultId){return`${televetConsultCall(consultId)}/join`}function televetCancelCall(consultId){return`${televetConsultCall(consultId)}/cancel`}var TELEVET_CONSULT_PAGE_LIMIT=100;function invalid2(wireMessage){return err(makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage}))}function unusable2(wireMessage){return err(makeEverfurError("internalError",{retryable:false,httpStatus:502,wireMessage:wireMessage}))}function isDark(error){return error.httpStatus===404}function safeTrack2(telemetry,event,props){try{telemetry?.track(event,props)}catch{}}function validateBookingBody(body){if(body.pet_id.trim().length===0)return"pet_id is required";if(body.clinician_id.trim().length===0)return"clinician_id is required";if(body.slot_id.trim().length===0)return"slot_id is required";if(!isWellFormedStateCode(body.state))return"state must be a two-letter US state code";let reason=body.reason_text.trim();return reason.length===0?"reason_text is required":reason.length>REASON_TEXT_MAX?`reason_text must be at most ${REASON_TEXT_MAX} characters`:attestationRefusal(body)}function attestationRefusal(body){let attested=body.state_attested===true,version=body.cancellation_policy_version?.trim()??"";return attested!==version.length>0?"state_attested and cancellation_policy_version must be sent together or omitted together":version.length>CANCELLATION_POLICY_VERSION_MAX?`cancellation_policy_version must be at most ${CANCELLATION_POLICY_VERSION_MAX} characters`:null}function createTelevetBookingController(deps){let funnel=deps.funnel??createRequestFunnel({auth:deps.auth,...deps.errorPolicy?{errorPolicy:deps.errorPolicy}:{}}),telemetry=deps.telemetry;return{...createTelevetMessagesMethods(funnel,telemetry),async statePolicy(state,signal){let code=state.trim();if(!isWellFormedStateCode(code))return invalid2("state must be a two-letter US state code");let res=await funnel.send("televet.booking.state_policy",{method:"GET",path:`${TELEVET_STATE_POLICY_PATH}/${encodeURIComponent(code)}`,...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseStatePolicy(res.value,code);return parsed===null?unusable2("the state policy response was unreadable"):ok(parsed)},async entitlement(signal){let res=await funnel.send("televet.booking.entitlement",{method:"GET",path:TELEVET_BOOKING_ENTITLEMENT_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseBookingEntitlement(res.value)):err(res.error)},async cancellationPolicy(signal){let res=await funnel.send("televet.booking.cancellation_policy",{method:"GET",path:TELEVET_CANCELLATION_POLICY_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseCancellationPolicy(res.value)):ok(null)},async clinicians(state,signal){let code=state.trim();if(!isWellFormedStateCode(code))return invalid2("state must be a two-letter US state code");let res=await funnel.send("televet.booking.clinicians",{method:"GET",path:TELEVET_CLINICIANS_PATH,query:{state:code},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"vets"),parseClinician)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async slots(clinicianId,signal){let id=clinicianId.trim();if(id.length===0)return invalid2("clinicianId is required");let res=await funnel.send("televet.booking.slots",{method:"GET",path:TELEVET_SLOTS_PATH,query:{clinician_id:id},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"slots"),parseSlot)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async nextSlot(signal){let res=await funnel.send("televet.booking.next_slot",{method:"GET",path:TELEVET_NEXT_SLOT_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseSlot(unwrap(res.value,"slot"))):ok(null)},async holdSlot(slotId){let id=slotId.trim();if(id.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.hold",{method:"POST",path:televetHoldCall(id)},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.hold_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseSlotHold(res.value);return parsed===null?unusable2("the hold response carried no usable expiry"):ok(parsed)},async releaseHold(slotId){let id=slotId.trim();if(id.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.release_hold",{method:"DELETE",path:televetHoldCall(id)},{idempotent:false,maxAttempts:1});return!res.ok&&res.error.httpStatus!==404?err(res.error):ok(void 0)},async book(body,idempotencyKey){let refusal=validateBookingBody(body);if(refusal!==null)return invalid2(refusal);let key=idempotencyKey.trim();if(key.length===0)return invalid2("idempotencyKey is required");let res=await funnel.send("televet.booking.book",{method:"POST",path:TELEVET_CONSULTS_PATH,body:bookingWireBody(body)},{idempotent:true,idempotencyKey:key,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.book_failed",{status:res.error.httpStatus??null}),err(foldTelevetBookingKeyReused(res.error));let parsed=parseConsult(res.value);return parsed===null?unusable2("the booking response was unreadable"):isLiveConsult(parsed)?ok(parsed):(safeTrack2(telemetry,"televet.booking.book_failed",{status:null,consult_status:parsed.status}),err(televetBookingNotLiveError(parsed.status)))},async reschedule(consultId,slotId){let consult=consultId.trim(),slot=slotId.trim();if(consult.length===0)return invalid2("consultId is required");if(slot.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.reschedule",{method:"POST",path:televetRescheduleCall(consult),body:{new_slot_id:slot}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.reschedule_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseConsult(res.value);return parsed===null?unusable2("the reschedule response was unreadable"):ok(parsed)},async triage(reasonText,signal){let text2=reasonText.trim();if(text2.length===0)return ok(null);let res=await funnel.send("televet.booking.triage",{method:"POST",path:TELEVET_TRIAGE_PATH,body:{reason_text:text2},...signal?{signal:signal}:{}},{idempotent:false,maxAttempts:1});return res.ok?ok(parseTriageVerdict(res.value)):(safeTrack2(telemetry,"televet.booking.triage_unavailable",{status:res.error.httpStatus??null}),ok(null))},async listConsults(signal){let res=await funnel.send("televet.booking.consults",{method:"GET",path:TELEVET_CONSULTS_PATH,query:{limit:String(TELEVET_CONSULT_PAGE_LIMIT)},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"consults"),parseConsult)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async getConsult(consultId,signal){let id=consultId.trim();if(id.length===0)return invalid2("consultId is required");let res=await funnel.send("televet.booking.consult",{method:"GET",path:televetConsultCall(id),...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseConsult(res.value);return parsed===null?unusable2("the consult response was unreadable"):ok(parsed)},async joinConsult(consultId){let id=consultId.trim();if(id.length===0)return invalid2("consultId is required");let res=await funnel.send("televet.booking.join",{method:"POST",path:televetJoinCall(id)},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.join_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseVetCallCredential(res.value);return parsed===null?unusable2("the join response carried no usable room credential"):ok(parsed)},async cancelConsult(consultId,reason){let id=consultId.trim(),text2=reason.trim();if(id.length===0)return invalid2("consultId is required");if(text2.length===0)return invalid2("reason is required");if(text2.length>CANCEL_REASON_MAX)return invalid2(`reason must be at most ${CANCEL_REASON_MAX} characters`);let res=await funnel.send("televet.booking.cancel",{method:"POST",path:televetCancelCall(id),body:{reason:text2}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.cancel_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseCancelReceipt(res.value);return parsed===null?unusable2("the cancel response was unreadable"):ok(parsed)},async initiateAttachment(file,signal){let res=await funnel.send("televet.booking.attachment_initiate",{method:"POST",path:TELEVET_ATTACHMENT_INITIATE_PATH,body:{filename:file.filename,content_type:file.contentType,file_size:file.fileSize},...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseTelevetAttachmentPolicy(res.value);return parsed===null?unusable2("the attachment presign was unreadable"):ok(parsed)}}}function bookingWireBody(body){let version=body.cancellation_policy_version?.trim()??"",whole=body.state_attested===true&&version.length>0;return{pet_id:body.pet_id,clinician_id:body.clinician_id,slot_id:body.slot_id,state:body.state,reason_text:body.reason_text.trim(),species:body.species,media_refs:[...body.media_refs],emergency_acknowledged:body.emergency_acknowledged,share_health_records:body.share_health_records,...whole?{state_attested:true,cancellation_policy_version:version}:{}}}function rows(wire,key){if(Array.isArray(wire))return wire;if(typeof wire=="object"&&wire!==null){let envelope=wire,named=envelope[key]??envelope.items??envelope.data;if(Array.isArray(named))return named}return wire}function unwrap(wire,key){if(typeof wire=="object"&&wire!==null&&!Array.isArray(wire)){let envelope=wire,named=envelope[key]??envelope.data;if(typeof named=="object"&&named!==null)return named}return wire}var EVERFUR_CONTEXT_SYMBOL=/* @__PURE__ */Symbol.for("@everfur/sdk#EverfurContext@v1"),globalContextHost=globalThis,EverfurContext=globalContextHost[EVERFUR_CONTEXT_SYMBOL]??(globalContextHost[EVERFUR_CONTEXT_SYMBOL]=createContext(null));EverfurContext.displayName??="EverfurContext";function useEverfurContext(){let ctx=useContext(EverfurContext);if(ctx===null)throw new EverfurConfigError("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return ctx}var REQUIRES=/* @__PURE__ */Object.freeze({chat:/* @__PURE__ */Object.freeze(["chat.message.create"]),records:/* @__PURE__ */Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:/* @__PURE__ */Object.freeze(["records.clinic.create"]),video:/* @__PURE__ */Object.freeze(["video.gait.execute"]),photo:/* @__PURE__ */Object.freeze(["photo.checkup.execute"]),animations:/* @__PURE__ */Object.freeze(["animations.state.read"]),televet:/* @__PURE__ */Object.freeze(["televet.visit.create"]),texting:/* @__PURE__ */Object.freeze(["sms.identity.read","sms.identity.update"]),healthPlan:/* @__PURE__ */Object.freeze(["shop.plan.read","shop.plan.update"])});function requires(name){return REQUIRES[name]}function decideCapability(name,decisions,opts){let keys=requires(name),byResource=/* @__PURE__ */new Map;for(let decision of decisions)byResource.set(decision.resource,decision);if(opts?.isPending===true&&keys.some(key=>!byResource.has(key)))return freezeDecision({name:name,enabled:false,isPending:true,limits:{}});let limits=mergeLimits(keys,byResource);return keys.filter(key=>byResource.get(key)?.granted!==true).length===0?freezeDecision({name:name,enabled:true,isPending:false,limits:limits}):freezeDecision({name:name,enabled:false,isPending:false,limits:limits,disabled:disabledFor(keys,byResource)})}function mergeLimits(keys,byResource){let out={};for(let key of keys){let decisionLimits=byResource.get(key)?.limits;if(decisionLimits)for(let[limitKey,limitValue]of Object.entries(decisionLimits)){let existing=out[limitKey];out[limitKey]=existing===void 0?limitValue:Math.min(existing,limitValue)}}return out}function disabledFor(keys,byResource){for(let key of keys){let explicit=byResource.get(key)?.disabled;if(explicit)/* @__PURE__ */
115
119
  return Object.freeze({reason:explicit.reason,level:explicit.level,recoverable:explicit.recoverable})}/* @__PURE__ */
116
120
  return Object.freeze({reason:userFacingError("accessDenied"),level:"user_entitlement",recoverable:false})}function freezeDecision(d){let base={name:d.name,enabled:d.enabled,isPending:d.isPending,limits:/* @__PURE__ */Object.freeze({...d.limits})};return d.disabled!==void 0&&(base.disabled=d.disabled),/* @__PURE__ */Object.freeze(base)}function useCapability(name){let{runtime:runtime}=useEverfurContext(),store=runtime.entitlements,snapshot=useSyncExternalStore(store.subscribe,store.getSnapshot,store.getSnapshot);return useMemo(()=>decideCapability(name,snapshot.decisions,{isPending:snapshot.isPending}),[name,snapshot])}var RECORDS_EMPTY_COPY=/* @__PURE__ */Object.freeze({idle:/* @__PURE__ */Object.freeze({title:"Find your pet’s clinic",body:"Search for the clinic that holds your pet’s records. We’ll request them on your behalf once you sign the authorization.",action:null}),no_requests:/* @__PURE__ */Object.freeze({title:"No record requests yet",body:"When you request records from a clinic, you’ll be able to track every step here.",action:null}),no_records:/* @__PURE__ */Object.freeze({title:"Nothing to show just yet",body:"Once your pet’s records arrive and our team reviews them, lab trends and visits will appear here.",action:null}),rate_limited:/* @__PURE__ */Object.freeze({title:"Slow down a moment",body:"You’ve made a lot of requests just now. You can try again shortly.",action:"Try again"}),service_unavailable:/* @__PURE__ */Object.freeze({title:"Records search is temporarily down",body:"We’re working on it. Please try again in a few minutes.",action:"Try again"}),error:/* @__PURE__ */Object.freeze({title:"Couldn’t reach Everfur",body:"Check your connection and try again.",action:"Try again"})}),RATE_LIMIT_COOLDOWN_S=60;var TELEVET_RATE_LIMITED_COPY=/* @__PURE__ */Object.freeze({title:RECORDS_EMPTY_COPY.rate_limited.title,body:RECORDS_EMPTY_COPY.rate_limited.body});function isRateLimited(error){return error!=null&&(error.code==="rateLimited"||error.httpStatus===429)}function rateLimitWaitMs(error,nowMs){return retryOverrideMs(error,nowMs)??RATE_LIMIT_COOLDOWN_S*1e3}function useRateLimitWait(error){let rateLimited=isRateLimited(error),[elapsedFor,setElapsedFor]=useState(null);return useEffect(()=>{if(!rateLimited||error==null)return;let handle=setTimeout(()=>setElapsedFor(error),rateLimitWaitMs(error,Date.now()));return()=>clearTimeout(handle)},[error,rateLimited]),{rateLimited:rateLimited,waiting:rateLimited&&elapsedFor!==error}}var TELEVET_READ_FRESH_MS=3e4;function createTelevetReadCache(deps={}){let now=deps.now??Date.now,entries=/* @__PURE__ */new Map,kept=entry=>entry!==void 0&&entry.settled!==null&&now()<entry.keptUntil?entry.settled:null,join=(key,entry,signal)=>{let promise=entry.promise;entry.waiters+=1;let leave=()=>{entry.waiters-=1,entry.waiters===0&&entry.promise!==null&&(entry.abort.abort(),entries.get(key)===entry&&entries.delete(key))};return signal.aborted?(leave(),promise):(signal.addEventListener("abort",leave,{once:true}),promise.finally(()=>signal.removeEventListener("abort",leave)))},settle=(key,entry,result,freshMs)=>{if(entry.promise=null,entries.get(key)!==entry||entry.abort.signal.aborted){entries.get(key)===entry&&entries.delete(key);return}result.ok&&freshMs>0?(entry.settled=result,entry.keptUntil=now()+freshMs):!result.ok&&isRateLimited(result.error)?(entry.settled=result,entry.keptUntil=now()+rateLimitWaitMs(result.error,now())):entries.delete(key)};/* @__PURE__ */
117
- return Object.freeze({read(key,run,options){let existing=entries.get(key);if(existing?.promise)return join(key,existing,options.signal);let answer=kept(existing);if(answer!==null&&(options.force!==true||!answer.ok&&isRateLimited(answer.error)))return Promise.resolve(answer);let entry={abort:new AbortController,promise:null,settled:null,keptUntil:0,waiters:0};return entries.set(key,entry),entry.promise=run(entry.abort.signal).then(result=>(settle(key,entry,result,options.freshMs),result),cause=>{throw entry.promise=null,entries.get(key)===entry&&entries.delete(key),cause}),join(key,entry,options.signal)},peek(key){return kept(entries.get(key))},invalidate(prefixes){for(let key of[...entries.keys()])prefixes.some(prefix=>key.startsWith(prefix))&&entries.delete(key)}})}var CACHES=/* @__PURE__ */new WeakMap;function televetReadCacheFor(scope){let cache=CACHES.get(scope);return cache===void 0&&(cache=createTelevetReadCache(),CACHES.set(scope,cache)),cache}var TELEVET_SLOT_READS=/* @__PURE__ */Object.freeze(["slots:","next-slot"]),TELEVET_VISIT_READS=/* @__PURE__ */Object.freeze(["consults:","consult:","slots:","next-slot"]);function invalidateTelevetReads(scope,prefixes){CACHES.get(scope)?.invalidate(prefixes)}function useTelevetBookingController(injected){let{runtime:runtime,userRef:userRef,scopeEpoch:scopeEpoch}=useEverfurContext();return useMemo(()=>injected||(userRef===null?null:sharedBookingController(runtime,`${userRef}\0${scopeEpoch}`,()=>{let{services:services}=runtime.registry;return createTelevetBookingController({auth:services.authFor(userRef),telemetry:services.telemetry,...services.errorPolicy?{errorPolicy:services.errorPolicy}:{}})})),[runtime,userRef,scopeEpoch,injected])}var SHARED_CONTROLLERS=/* @__PURE__ */new WeakMap;function sharedBookingController(runtime,scope,build){let held=SHARED_CONTROLLERS.get(runtime);if(held!==void 0&&held.scope===scope)return held.controller;let controller=build();return SHARED_CONTROLLERS.set(runtime,{scope:scope,controller:controller}),controller}function useTelevetBookingAvailable(){let{userRef:userRef}=useEverfurContext(),capability=useCapability("televet");return useMemo(()=>({available:capability.enabled&&userRef!==null,isPending:capability.isPending}),[capability.enabled,capability.isPending,userRef])}function useTelevetRead(key,enabled,run,scope,freshMs=TELEVET_READ_FRESH_MS,rereadOnMount=false){let[state,setState]=useState(()=>{let kept=enabled&&run!==null&&scope!==null&&!rereadOnMount?televetReadCacheFor(scope).peek(key):null;return kept!==null?kept.ok?{key:key,data:kept.value,isPending:false,error:null}:{key:key,data:null,isPending:false,error:kept.error}:{key:key,data:null,isPending:enabled&&run!==null,error:null}}),[nonce,setNonce]=useState(0),runRef=useRef(run);runRef.current=run;let scopeRef=useRef(scope);scopeRef.current=scope;let forceNext=useRef(rereadOnMount);useEffect(()=>{let current=runRef.current;if(!enabled||current===null){setState({key:key,data:null,isPending:false,error:null});return}let force=forceNext.current;forceNext.current=false;let cache=scopeRef.current===null?null:televetReadCacheFor(scopeRef.current),kept=force||cache===null?null:cache.peek(key);if(kept!==null){setState(kept.ok?{key:key,data:kept.value,isPending:false,error:null}:{key:key,data:null,isPending:false,error:kept.error});return}let controller=new AbortController,live=true;return setState(prev=>prev.key===key?{...prev,isPending:true,error:null}:{key:key,data:null,isPending:true,error:null}),(async()=>{let settled;try{settled=cache===null?await current(controller.signal):await cache.read(key,current,{signal:controller.signal,freshMs:freshMs,force:force})}catch{live&&setState({key:key,data:null,isPending:false,error:null});return}live&&(settled.ok?setState({key:key,data:settled.value,isPending:false,error:null}):setState({key:key,data:null,isPending:false,error:settled.error}))})(),()=>{live=false,controller.abort()}},[key,enabled,nonce]);let refetch=useCallback(()=>{forceNext.current=true,setNonce(n=>n+1)},[]),fresh2=state.key===key;return useMemo(()=>({enabled:enabled,data:fresh2?state.data:null,isPending:enabled&&(!fresh2||state.isPending),isError:fresh2&&state.error!==null,error:fresh2?state.error:null,refetch:refetch}),[enabled,fresh2,state.data,state.isPending,state.error,refetch])}function useTelevetStatePolicy(state,controller){let code=state?.trim()??"",enabled=controller?.statePolicy!==void 0&&isWellFormedStateCode(code),read=controller?.statePolicy;return useTelevetRead(`state-policy:${code}`,enabled,enabled&&read?signal=>read.call(controller,code,signal):null,controller)}function useTelevetBookingEntitlement(controller){let enabled=controller?.entitlement!==void 0,read=controller?.entitlement;return useTelevetRead("entitlement",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller,0)}function useTelevetCancellationPolicy(controller){let enabled=controller?.cancellationPolicy!==void 0,read=controller?.cancellationPolicy;return useTelevetRead("cancellation-policy",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller)}function useTelevetClinicians(state,controller){let code=state?.trim()??"",enabled=controller?.clinicians!==void 0&&isWellFormedStateCode(code),read=controller?.clinicians;return useTelevetRead(`clinicians:${code}`,enabled,enabled&&read?signal=>read.call(controller,code,signal):null,controller)}function useTelevetSlots(clinicianId,controller){let id=clinicianId?.trim()??"",enabled=controller!==null&&id.length>0;return useTelevetRead(`slots:${id}`,enabled,enabled&&controller?signal=>controller.slots(id,signal):null,controller)}function useTelevetNextSlot(controller){let enabled=controller?.nextSlot!==void 0,read=controller?.nextSlot;return useTelevetRead("next-slot",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller)}function useTelevetWrite(run){let[inFlight,setInFlight]=useState(null),live=useRef(true),busy=useRef(false),runRef=useRef(run);runRef.current=run,useEffect(()=>(live.current=true,()=>{live.current=false}),[]);let mutate=useCallback((...args)=>{let current=runRef.current;if(current===null||busy.current)return;let last=args[args.length-1],hasCallbacks=typeof last=="object"&&last!==null&&("onSuccess"in last||"onError"in last),callbacks=hasCallbacks?last:void 0,callArgs=hasCallbacks?args.slice(0,-1):args;busy.current=true,setInFlight({variables:callArgs[0]??null}),(async()=>{let settled=null;try{settled=await current(...callArgs)}catch{settled=null}busy.current=false,live.current&&setInFlight(null),settled!==null&&(settled.ok?callbacks?.onSuccess?.(settled.value):callbacks?.onError?.(settled.error))})()},[]);return useMemo(()=>({isPending:inFlight!==null,variables:inFlight?.variables??null,mutate:mutate}),[inFlight,mutate])}async function invalidatingOnSuccess(controller,reads,write){let result=await write;return result.ok&&invalidateTelevetReads(controller,reads),result}function useTelevetHoldSlot(controller){return useTelevetWrite(controller?slotId=>invalidatingOnSuccess(controller,TELEVET_SLOT_READS,controller.holdSlot(slotId)):null)}function useTelevetBookConsult(controller){return useTelevetWrite(controller?(body,key)=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,controller.book(body,key)):null)}function useTelevetRescheduleConsult(consultId,controller){return useTelevetWrite(controller&&consultId?slotId=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,controller.reschedule(consultId,slotId)):null)}function useTelevetConsults(controller,revision=0,options){let enabled=controller?.listConsults!==void 0,read=controller?.listConsults;return useTelevetRead(`consults:${revision}`,enabled,enabled&&read?signal=>read.call(controller,signal):null,controller,TELEVET_READ_FRESH_MS,options?.reread===true)}function useTelevetConsult(consultId,controller,revision=0){let id=consultId?.trim()??"",enabled=controller?.getConsult!==void 0&&id.length>0,read=controller?.getConsult;return useTelevetRead(`consult:${id}:${revision}`,enabled,enabled&&read?signal=>read.call(controller,id,signal):null,controller)}function useTelevetCancelConsult(consultId,controller){let cancel=controller?.cancelConsult;return useTelevetWrite(controller&&cancel&&consultId?reason=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,cancel.call(controller,consultId,reason)):null)}function televetReadIsDark(read){return read.error!==null&&read.error.httpStatus===404}var TELEVET_JOIN_OPENS_MINUTES_BEFORE=15,TELEVET_JOIN_CLOSES_MINUTES_AFTER=250,JOINABLE=/* @__PURE__ */new Set(["scheduled","in_progress"]);function startsAtMs(consult){let parsed=Date.parse(consult.scheduledAt);return Number.isNaN(parsed)?null:parsed}function televetJoinOpensAtMs(consult){let start=startsAtMs(consult);return start===null?null:start-TELEVET_JOIN_OPENS_MINUTES_BEFORE*6e4}function televetJoinReadiness(consult,nowMs){if(consult===null)return{ready:false,reason:"not_open_yet"};if(TERMINAL_CONSULT_STATUSES.has(consult.status))return{ready:false,reason:"consult_over"};if(consult.status==="in_progress")return{ready:true};let start=startsAtMs(consult);return start===null?{ready:false,reason:"not_open_yet"}:nowMs<start-TELEVET_JOIN_OPENS_MINUTES_BEFORE*6e4?{ready:false,reason:"not_open_yet"}:nowMs>start+TELEVET_JOIN_CLOSES_MINUTES_AFTER*6e4?{ready:false,reason:"consult_over"}:{ready:true}}function splitTelevetVisits(consults,nowMs){let upcoming=[],past=[];for(let consult of consults){let start=startsAtMs(consult);(JOINABLE.has(consult.status)&&start!==null&&start+TELEVET_JOIN_CLOSES_MINUTES_AFTER*6e4>nowMs?upcoming:past).push(consult)}return upcoming.sort((a,b)=>(startsAtMs(a)??0)-(startsAtMs(b)??0)),past.sort((a,b)=>(startsAtMs(b)??0)-(startsAtMs(a)??0)),/* @__PURE__ */Object.freeze({upcoming:/* @__PURE__ */Object.freeze(upcoming),past:/* @__PURE__ */Object.freeze(past)})}function canManageTelevetVisit(status){return status==="scheduled"}function useTelevetLanding(controller){let consults=useTelevetConsults(controller);return consults.enabled?consults.isPending?"pending":consults.isError||splitTelevetVisits(consults.data??[],Date.now()).upcoming.length>0?"visits":"booking":"booking"}var freezeInPlace=Object.freeze;function deepFreeze(value){if(value!==null&&typeof value=="object"&&!Object.isFrozen(value)){freezeInPlace(value);for(let key of Object.keys(value))deepFreeze(value[key])}return value}var TEXT_SCALE_TIER_CAPS=/* @__PURE__ */Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),SPACE={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},RADIUS={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},TYPE_SIZE={nano:8,small:9,micro:10,tiny:11,caption:13,bodyTight:15,body:17,subtitle:20,heading:22,verdict:24},LINE_HEIGHT={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},WEIGHT={regular:"400",medium:"500",bold:"700"},LETTER_SPACING={eyebrow:1,monoWide:.9,headerBrand:-.42,tight:-.35},DEFAULT_MAX_FONT_SCALE=0,SYSTEM_FONT_FAMILY="System",SYSTEM_MONO_FAMILY="monospace",TIERS=["content","heading","control","compact","badge"];function authoredTierSizes(size){let out={};for(let tier of TIERS)out[tier]=size;return out}var NO_FONT_SOURCES=[];function baseType(){return{family:SYSTEM_FONT_FAMILY,mono:SYSTEM_MONO_FAMILY,fontUrl:null,families:{regular:SYSTEM_FONT_FAMILY,medium:SYSTEM_FONT_FAMILY,bold:SYSTEM_FONT_FAMILY,mono:SYSTEM_MONO_FAMILY,monoMedium:SYSTEM_MONO_FAMILY,monoBold:SYSTEM_MONO_FAMILY},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:TYPE_SIZE,tierSizes:authoredTierSizes(TYPE_SIZE),lineHeight:LINE_HEIGHT,weight:WEIGHT,letterSpacing:LETTER_SPACING,scale:1,maxScale:DEFAULT_MAX_FONT_SCALE,scaleCaps:TEXT_SCALE_TIER_CAPS,headingFamily:null,headingWeight:null,fontSources:NO_FONT_SOURCES}}var NO_SLOTS={},EASING_CURVES=/* @__PURE__ */Object.freeze({standard:/* @__PURE__ */Object.freeze([.2,0,0,1]),emphasized:/* @__PURE__ */Object.freeze([.2,.8,.2,1]),exit:/* @__PURE__ */Object.freeze([.4,0,1,1])});function cssCubicBezier(curve){return`cubic-bezier(${curve.join(", ")})`}var MOTION={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:cssCubicBezier(EASING_CURVES.standard),emphasized:cssCubicBezier(EASING_CURVES.emphasized),exit:cssCubicBezier(EASING_CURVES.exit)},reducedMotion:false},LIGHT_COLOR={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",highlight:"#FFC3BC",onHighlight:"#000000",mark:"#07C168",controlEdge:"rgba(16,70,46,0.18)",structureEdge:"rgba(16,70,46,0.25)",primaryEdge:"#10462E",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)",info:"#10462E",badgeBgInfo:"rgba(16,70,46,0.10)",infoEdge:"rgba(16,70,46,0.25)"},EVERFUR_LIGHT=deepFreeze({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false,assistantAvatarUrl:null},color:LIGHT_COLOR,space:SPACE,radius:RADIUS,type:baseType(),motion:MOTION,slots:NO_SLOTS}),DARK_COLOR={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",highlight:"#605051",onHighlight:"#F5F3F0",mark:"#07C168",controlEdge:"rgba(107,211,154,0.22)",structureEdge:"rgba(107,211,154,0.28)",primaryEdge:"#6BD39A",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)",info:"#6BD39A",badgeBgInfo:"rgba(107,211,154,0.12)",infoEdge:"rgba(107,211,154,0.28)"};deepFreeze({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false,assistantAvatarUrl:null},color:DARK_COLOR,space:SPACE,radius:RADIUS,type:baseType(),motion:MOTION,slots:NO_SLOTS});var EVERFUR_THEME_CONTEXT_SYMBOL=/* @__PURE__ */Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),globalThemeHost=globalThis,EverfurThemeContext=globalThemeHost[EVERFUR_THEME_CONTEXT_SYMBOL]??(globalThemeHost[EVERFUR_THEME_CONTEXT_SYMBOL]=createContext(EVERFUR_LIGHT));EverfurThemeContext.displayName??="EverfurThemeContext";function useEverfurTheme(){return useContext(EverfurThemeContext)}function tierMultiplier(type,tier){let cap=type.scaleCaps[tier];return cap>0?cap:void 0}function Text({tier:tier="content",...props}){let{type:type}=useEverfurTheme(),cap=tierMultiplier(type,tier);return createElement(Text$1,cap===void 0?props:{maxFontSizeMultiplier:cap,...props})}var TextInput=forwardRef(function(props,ref){return createElement(TextInput$1,{...props,...ref===null?{}:{ref:ref}})});var FACE_WEIGHT=/* @__PURE__ */Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});function face(theme,weight){let type=theme.type,fontFamily=type.families[weight];return weight==="mono"||type.namedFaces[weight]?{fontFamily:fontFamily}:{fontFamily:fontFamily,fontWeight:type.weight[FACE_WEIGHT[weight]]}}function headingFace(theme,fallback="bold"){let{headingFamily:headingFamily,headingWeight:headingWeight}=theme.type;if(headingFamily===null&&headingWeight===null)return face(theme,fallback);if(headingFamily!==null)return{fontFamily:headingFamily,fontWeight:headingWeight??theme.type.weight[FACE_WEIGHT[fallback]]};let base=face(theme,fallback);return base.fontWeight===void 0||headingWeight===null?base:{fontFamily:base.fontFamily,fontWeight:headingWeight}}var HostRenderBoundary=class extends Component{constructor(){super(...arguments);this.state={failed:false,key:this.props.resetKey}}static getDerivedStateFromError(){return{failed:true}}static getDerivedStateFromProps(props,state){return Object.is(props.resetKey,state.key)?null:{failed:false,key:props.resetKey}}render(){return this.state.failed?this.props.fallback:this.props.children}};function RenderHost({render:render}){return render()}function HostRender({render:render,fallback:fallback,resetKey:resetKey}){return createElement(HostRenderBoundary,{fallback:fallback,resetKey:resetKey,children:createElement(RenderHost,{render:render})})}var MIN_OFFSTATE_HEIGHT=48;function selectView(decision){return decision.isPending?"pending":decision.enabled?"enabled":"disabled"}function CapabilityGate(props){let{capability:capability,children:children,renderDisabled:renderDisabled,renderPending:renderPending,style:style}=props,decision=useCapability(capability),view=useMemo(()=>selectView(decision),[decision]);switch(view){case"enabled":return children;case"pending":return renderPending?/* @__PURE__ */jsx(HostRender,{render:renderPending,fallback:/* @__PURE__ */jsx(PendingSkeleton,{capability:capability,style:style})}):/* @__PURE__ */jsx(PendingSkeleton,{capability:capability,style:style});case"disabled":return renderDisabled?/* @__PURE__ */jsx(HostRender,{render:()=>renderDisabled(decision),fallback:/* @__PURE__ */jsx(OffState,{decision:decision,style:style}),resetKey:decision}):/* @__PURE__ */jsx(OffState,{decision:decision,style:style});default:return assertNever(view)}}function PendingSkeleton({capability:capability,style:style}){let theme=useEverfurTheme(),styles2=useMemo(()=>makeStyles(theme),[theme]);/* @__PURE__ */
121
+ return Object.freeze({read(key,run,options){let existing=entries.get(key);if(existing?.promise)return join(key,existing,options.signal);let answer=kept(existing);if(answer!==null&&(options.force!==true||!answer.ok&&isRateLimited(answer.error)))return Promise.resolve(answer);let entry={abort:new AbortController,promise:null,settled:null,keptUntil:0,waiters:0};return entries.set(key,entry),entry.promise=run(entry.abort.signal).then(result=>(settle(key,entry,result,options.freshMs),result),cause=>{throw entry.promise=null,entries.get(key)===entry&&entries.delete(key),cause}),join(key,entry,options.signal)},peek(key){return kept(entries.get(key))},invalidate(prefixes){for(let key of[...entries.keys()])prefixes.some(prefix=>key.startsWith(prefix))&&entries.delete(key)}})}var CACHES=/* @__PURE__ */new WeakMap;function televetReadCacheFor(scope){let cache=CACHES.get(scope);return cache===void 0&&(cache=createTelevetReadCache(),CACHES.set(scope,cache)),cache}var TELEVET_SLOT_READS=/* @__PURE__ */Object.freeze(["slots:","next-slot"]),TELEVET_VISIT_READS=/* @__PURE__ */Object.freeze(["consults:","consult:","slots:","next-slot"]);function invalidateTelevetReads(scope,prefixes){CACHES.get(scope)?.invalidate(prefixes)}function useTelevetBookingController(injected){let{runtime:runtime,userRef:userRef,scopeEpoch:scopeEpoch}=useEverfurContext();return useMemo(()=>injected||(userRef===null?null:sharedBookingController(runtime,`${userRef}\0${scopeEpoch}`,()=>{let{services:services}=runtime.registry;return createTelevetBookingController({auth:services.authFor(userRef),telemetry:services.telemetry,...services.errorPolicy?{errorPolicy:services.errorPolicy}:{}})})),[runtime,userRef,scopeEpoch,injected])}var SHARED_CONTROLLERS=/* @__PURE__ */new WeakMap;function sharedBookingController(runtime,scope,build){let held=SHARED_CONTROLLERS.get(runtime);if(held!==void 0&&held.scope===scope)return held.controller;let controller=build();return SHARED_CONTROLLERS.set(runtime,{scope:scope,controller:controller}),controller}function useTelevetBookingAvailable(){let{userRef:userRef}=useEverfurContext(),capability=useCapability("televet");return useMemo(()=>({available:capability.enabled&&userRef!==null,isPending:capability.isPending}),[capability.enabled,capability.isPending,userRef])}function useTelevetRead(key,enabled,run,scope,freshMs=TELEVET_READ_FRESH_MS,rereadOnMount=false){let[state,setState]=useState(()=>{let kept=enabled&&run!==null&&scope!==null&&!rereadOnMount?televetReadCacheFor(scope).peek(key):null;return kept!==null?kept.ok?{key:key,data:kept.value,isPending:false,error:null}:{key:key,data:null,isPending:false,error:kept.error}:{key:key,data:null,isPending:enabled&&run!==null,error:null}}),[nonce,setNonce]=useState(0),runRef=useRef(run);runRef.current=run;let scopeRef=useRef(scope);scopeRef.current=scope;let forceNext=useRef(rereadOnMount);useEffect(()=>{let current=runRef.current;if(!enabled||current===null){setState({key:key,data:null,isPending:false,error:null});return}let force=forceNext.current;forceNext.current=false;let cache=scopeRef.current===null?null:televetReadCacheFor(scopeRef.current),kept=force||cache===null?null:cache.peek(key);if(kept!==null){setState(kept.ok?{key:key,data:kept.value,isPending:false,error:null}:{key:key,data:null,isPending:false,error:kept.error});return}let controller=new AbortController,live=true;return setState(prev=>prev.key===key?{...prev,isPending:true,error:null}:{key:key,data:null,isPending:true,error:null}),(async()=>{let settled;try{settled=cache===null?await current(controller.signal):await cache.read(key,current,{signal:controller.signal,freshMs:freshMs,force:force})}catch{live&&setState({key:key,data:null,isPending:false,error:null});return}live&&(settled.ok?setState({key:key,data:settled.value,isPending:false,error:null}):setState({key:key,data:null,isPending:false,error:settled.error}))})(),()=>{live=false,controller.abort()}},[key,enabled,nonce]);let refetch=useCallback(()=>{forceNext.current=true,setNonce(n=>n+1)},[]),fresh2=state.key===key;return useMemo(()=>({enabled:enabled,data:fresh2?state.data:null,isPending:enabled&&(!fresh2||state.isPending),isError:fresh2&&state.error!==null,error:fresh2?state.error:null,refetch:refetch}),[enabled,fresh2,state.data,state.isPending,state.error,refetch])}function useTelevetStatePolicy(state,controller){let code=state?.trim()??"",enabled=controller?.statePolicy!==void 0&&isWellFormedStateCode(code),read=controller?.statePolicy;return useTelevetRead(`state-policy:${code}`,enabled,enabled&&read?signal=>read.call(controller,code,signal):null,controller)}function useTelevetBookingEntitlement(controller){let enabled=controller?.entitlement!==void 0,read=controller?.entitlement;return useTelevetRead("entitlement",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller,0)}function useTelevetCancellationPolicy(controller){let enabled=controller?.cancellationPolicy!==void 0,read=controller?.cancellationPolicy;return useTelevetRead("cancellation-policy",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller)}function useTelevetClinicians(state,controller){let code=state?.trim()??"",enabled=controller?.clinicians!==void 0&&isWellFormedStateCode(code),read=controller?.clinicians;return useTelevetRead(`clinicians:${code}`,enabled,enabled&&read?signal=>read.call(controller,code,signal):null,controller)}function useTelevetSlots(clinicianId,controller){let id=clinicianId?.trim()??"",enabled=controller!==null&&id.length>0;return useTelevetRead(`slots:${id}`,enabled,enabled&&controller?signal=>controller.slots(id,signal):null,controller)}function useTelevetNextSlot(controller){let enabled=controller?.nextSlot!==void 0,read=controller?.nextSlot;return useTelevetRead("next-slot",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller)}function useTelevetWrite(run){let[inFlight,setInFlight]=useState(null),live=useRef(true),busy=useRef(false),runRef=useRef(run);runRef.current=run,useEffect(()=>(live.current=true,()=>{live.current=false}),[]);let mutate=useCallback((...args)=>{let current=runRef.current;if(current===null||busy.current)return;let last=args[args.length-1],hasCallbacks=typeof last=="object"&&last!==null&&("onSuccess"in last||"onError"in last),callbacks=hasCallbacks?last:void 0,callArgs=hasCallbacks?args.slice(0,-1):args;busy.current=true,setInFlight({variables:callArgs[0]??null}),(async()=>{let settled=null;try{settled=await current(...callArgs)}catch{settled=null}busy.current=false,live.current&&setInFlight(null),settled!==null&&(settled.ok?callbacks?.onSuccess?.(settled.value):callbacks?.onError?.(settled.error))})()},[]);return useMemo(()=>({isPending:inFlight!==null,variables:inFlight?.variables??null,mutate:mutate}),[inFlight,mutate])}async function invalidatingOnSuccess(controller,reads,write){let result=await write;return result.ok&&invalidateTelevetReads(controller,reads),result}function useTelevetHoldSlot(controller){return useTelevetWrite(controller?slotId=>invalidatingOnSuccess(controller,TELEVET_SLOT_READS,controller.holdSlot(slotId)):null)}function useTelevetBookConsult(controller){return useTelevetWrite(controller?(body,key)=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,controller.book(body,key)):null)}function useTelevetRescheduleConsult(consultId,controller){return useTelevetWrite(controller&&consultId?slotId=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,controller.reschedule(consultId,slotId)):null)}function useTelevetConsults(controller,revision=0,options){let enabled=controller?.listConsults!==void 0,read=controller?.listConsults;return useTelevetRead(`consults:${revision}`,enabled,enabled&&read?signal=>read.call(controller,signal):null,controller,TELEVET_READ_FRESH_MS,options?.reread===true)}function useTelevetConsult(consultId,controller,revision=0){let id=consultId?.trim()??"",enabled=controller?.getConsult!==void 0&&id.length>0,read=controller?.getConsult;return useTelevetRead(`consult:${id}:${revision}`,enabled,enabled&&read?signal=>read.call(controller,id,signal):null,controller)}function useTelevetCancelConsult(consultId,controller){let cancel=controller?.cancelConsult;return useTelevetWrite(controller&&cancel&&consultId?reason=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,cancel.call(controller,consultId,reason)):null)}function televetReadIsDark(read){return read.error!==null&&read.error.httpStatus===404}function useTelevetLanding(controller){let consults=useTelevetConsults(controller);if(!consults.enabled)return"booking";if(consults.isPending)return"pending";if(consults.isError)return"visits";let{upcoming:upcoming,past:past}=splitTelevetVisits(consults.data??[],Date.now());return upcoming.length>0||past.length>0?"visits":"booking"}var freezeInPlace=Object.freeze;function deepFreeze(value){if(value!==null&&typeof value=="object"&&!Object.isFrozen(value)){freezeInPlace(value);for(let key of Object.keys(value))deepFreeze(value[key])}return value}var TEXT_SCALE_TIER_CAPS=/* @__PURE__ */Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),SPACE={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},RADIUS={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},TYPE_SIZE={nano:8,small:9,micro:10,tiny:11,caption:13,bodyTight:15,body:17,subtitle:20,heading:22,verdict:24},LINE_HEIGHT={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},WEIGHT={regular:"400",medium:"500",bold:"700"},LETTER_SPACING={eyebrow:1,monoWide:.9,headerBrand:-.42,tight:-.35},DEFAULT_MAX_FONT_SCALE=0,SYSTEM_FONT_FAMILY="System",SYSTEM_MONO_FAMILY="monospace",TIERS=["content","heading","control","compact","badge"];function authoredTierSizes(size){let out={};for(let tier of TIERS)out[tier]=size;return out}var NO_FONT_SOURCES=[];function baseType(){return{family:SYSTEM_FONT_FAMILY,mono:SYSTEM_MONO_FAMILY,fontUrl:null,families:{regular:SYSTEM_FONT_FAMILY,medium:SYSTEM_FONT_FAMILY,bold:SYSTEM_FONT_FAMILY,mono:SYSTEM_MONO_FAMILY,monoMedium:SYSTEM_MONO_FAMILY,monoBold:SYSTEM_MONO_FAMILY},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:TYPE_SIZE,tierSizes:authoredTierSizes(TYPE_SIZE),lineHeight:LINE_HEIGHT,weight:WEIGHT,letterSpacing:LETTER_SPACING,scale:1,maxScale:DEFAULT_MAX_FONT_SCALE,scaleCaps:TEXT_SCALE_TIER_CAPS,headingFamily:null,headingWeight:null,fontSources:NO_FONT_SOURCES}}var NO_SLOTS={},EASING_CURVES=/* @__PURE__ */Object.freeze({standard:/* @__PURE__ */Object.freeze([.2,0,0,1]),emphasized:/* @__PURE__ */Object.freeze([.2,.8,.2,1]),exit:/* @__PURE__ */Object.freeze([.4,0,1,1])});function cssCubicBezier(curve){return`cubic-bezier(${curve.join(", ")})`}var MOTION={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:cssCubicBezier(EASING_CURVES.standard),emphasized:cssCubicBezier(EASING_CURVES.emphasized),exit:cssCubicBezier(EASING_CURVES.exit)},reducedMotion:false},LIGHT_COLOR={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",highlight:"#FFC3BC",onHighlight:"#000000",mark:"#07C168",controlEdge:"rgba(16,70,46,0.18)",structureEdge:"rgba(16,70,46,0.25)",primaryEdge:"#10462E",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)",info:"#10462E",badgeBgInfo:"rgba(16,70,46,0.10)",infoEdge:"rgba(16,70,46,0.25)"},EVERFUR_LIGHT=deepFreeze({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false,assistantAvatarUrl:null},color:LIGHT_COLOR,space:SPACE,radius:RADIUS,type:baseType(),motion:MOTION,slots:NO_SLOTS}),DARK_COLOR={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",highlight:"#605051",onHighlight:"#F5F3F0",mark:"#07C168",controlEdge:"rgba(107,211,154,0.22)",structureEdge:"rgba(107,211,154,0.28)",primaryEdge:"#6BD39A",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)",info:"#6BD39A",badgeBgInfo:"rgba(107,211,154,0.12)",infoEdge:"rgba(107,211,154,0.28)"};deepFreeze({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false,assistantAvatarUrl:null},color:DARK_COLOR,space:SPACE,radius:RADIUS,type:baseType(),motion:MOTION,slots:NO_SLOTS});var EVERFUR_THEME_CONTEXT_SYMBOL=/* @__PURE__ */Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),globalThemeHost=globalThis,EverfurThemeContext=globalThemeHost[EVERFUR_THEME_CONTEXT_SYMBOL]??(globalThemeHost[EVERFUR_THEME_CONTEXT_SYMBOL]=createContext(EVERFUR_LIGHT));EverfurThemeContext.displayName??="EverfurThemeContext";function useEverfurTheme(){return useContext(EverfurThemeContext)}function tierMultiplier(type,tier){let cap=type.scaleCaps[tier];return cap>0?cap:void 0}function Text({tier:tier="content",...props}){let{type:type}=useEverfurTheme(),cap=tierMultiplier(type,tier);return createElement(Text$1,cap===void 0?props:{maxFontSizeMultiplier:cap,...props})}var TextInput=forwardRef(function(props,ref){return createElement(TextInput$1,{...props,...ref===null?{}:{ref:ref}})});var FACE_WEIGHT=/* @__PURE__ */Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});function face(theme,weight){let type=theme.type,fontFamily=type.families[weight];return weight==="mono"||type.namedFaces[weight]?{fontFamily:fontFamily}:{fontFamily:fontFamily,fontWeight:type.weight[FACE_WEIGHT[weight]]}}function headingFace(theme,fallback="bold"){let{headingFamily:headingFamily,headingWeight:headingWeight}=theme.type;if(headingFamily===null&&headingWeight===null)return face(theme,fallback);if(headingFamily!==null)return{fontFamily:headingFamily,fontWeight:headingWeight??theme.type.weight[FACE_WEIGHT[fallback]]};let base=face(theme,fallback);return base.fontWeight===void 0||headingWeight===null?base:{fontFamily:base.fontFamily,fontWeight:headingWeight}}var HostRenderBoundary=class extends Component{constructor(){super(...arguments);this.state={failed:false,key:this.props.resetKey}}static getDerivedStateFromError(){return{failed:true}}static getDerivedStateFromProps(props,state){return Object.is(props.resetKey,state.key)?null:{failed:false,key:props.resetKey}}render(){return this.state.failed?this.props.fallback:this.props.children}};function RenderHost({render:render}){return render()}function HostRender({render:render,fallback:fallback,resetKey:resetKey}){return createElement(HostRenderBoundary,{fallback:fallback,resetKey:resetKey,children:createElement(RenderHost,{render:render})})}var MIN_OFFSTATE_HEIGHT=48;function selectView(decision){return decision.isPending?"pending":decision.enabled?"enabled":"disabled"}function CapabilityGate(props){let{capability:capability,children:children,renderDisabled:renderDisabled,renderPending:renderPending,style:style}=props,decision=useCapability(capability),view=useMemo(()=>selectView(decision),[decision]);switch(view){case"enabled":return children;case"pending":return renderPending?/* @__PURE__ */jsx(HostRender,{render:renderPending,fallback:/* @__PURE__ */jsx(PendingSkeleton,{capability:capability,style:style})}):/* @__PURE__ */jsx(PendingSkeleton,{capability:capability,style:style});case"disabled":return renderDisabled?/* @__PURE__ */jsx(HostRender,{render:()=>renderDisabled(decision),fallback:/* @__PURE__ */jsx(OffState,{decision:decision,style:style}),resetKey:decision}):/* @__PURE__ */jsx(OffState,{decision:decision,style:style});default:return assertNever(view)}}function PendingSkeleton({capability:capability,style:style}){let theme=useEverfurTheme(),styles2=useMemo(()=>makeStyles(theme),[theme]);/* @__PURE__ */
118
122
  return jsx(View,{style:[styles2.offstate,style],accessible:true,accessibilityState:{busy:true},accessibilityLabel:`Loading ${capability}`,children:/* @__PURE__ */jsx(View,{style:styles2.skeletonBar})})}function OffState({decision:decision,style:style}){let theme=useEverfurTheme(),styles2=useMemo(()=>makeStyles(theme),[theme]),message=decision.disabled?.reason??"";/* @__PURE__ */
119
123
  return jsx(View,{style:[styles2.offstate,style],accessible:true,accessibilityRole:"text",accessibilityLabel:message,children:message.length>0?/* @__PURE__ */jsx(Text,{style:styles2.offstateText,children:message}):null})}function makeStyles(theme){let{color:color,space:space,radius:radius,type:type}=theme;return StyleSheet.create({offstate:{minHeight:MIN_OFFSTATE_HEIGHT,justifyContent:"center",paddingHorizontal:space.lg,paddingVertical:space.md,backgroundColor:color.surfaceCream,borderRadius:radius.md,borderWidth:StyleSheet.hairlineWidth,borderColor:color.brandBorder},offstateText:{...face(theme,"regular"),fontSize:type.size.body,lineHeight:Math.round(type.size.body*type.lineHeight.normal),color:color.text.muted},skeletonBar:{height:space.md,borderRadius:radius.xs,backgroundColor:color.brandSofter}})}function hasLoneSurrogate(value){for(let i=0;i<value.length;i+=1){let code=value.charCodeAt(i);if(code>=55296&&code<=56319){let low=value.charCodeAt(i+1);if(!(low>=56320&&low<=57343))return true;i+=1}else if(code>=56320&&code<=57343)return true}return false}function serverLength(value){return[...value].length}var SPECIES_ALIASES=/* @__PURE__ */Object.freeze({dog:"dog",canine:"dog",k9:"dog",puppy:"dog",cat:"cat",feline:"cat",kitten:"cat"});function canonicalPetSpecies(raw){if(typeof raw!="string")return null;let key=raw.trim().toLowerCase();return Object.prototype.hasOwnProperty.call(SPECIES_ALIASES,key)?SPECIES_ALIASES[key]:null}var LIST_MAX=50,REF_MAX=128,NAME_MAX=120,SHORT_MAX=120,NOTES_MAX=2e3,FOOD_MAX=120,MICROCHIP_MAX=80,SEXES=/* @__PURE__ */new Set(["male","female","unknown"]),PRECISIONS=/* @__PURE__ */new Set(["day","month","year"]),ACTIVITY=/* @__PURE__ */new Set(["low","medium","high","athletic"]),INDOOR_OUTDOOR=/* @__PURE__ */new Set(["indoor","outdoor","both"]),SEVERITIES=/* @__PURE__ */new Set(["mild","moderate","severe"]),ISO_DATE=/^(\d{4})-(\d{2})-(\d{2})$/,SCALAR_WIRE=[["sex","sex"],["spayedNeutered","spayed_neutered"],["birthDate","birth_date"],["birthDatePrecision","birth_date_precision"],["activityLevel","activity_level"],["indoorOutdoor","indoor_outdoor"],["foodBrand","food_brand"],["foodType","food_type"],["microchipId","microchip_id"]],LIST_WIRE=[["allergies","allergies"],["medications","medications"],["supplements","supplements"],["conditions","conditions"]];/* @__PURE__ */Object.freeze([...SCALAR_WIRE,...LIST_WIRE].map(([key])=>key));function isRealDate(value){let match=ISO_DATE.exec(value);if(match===null)return false;let[year,month,day]=[Number(match[1]),Number(match[2]),Number(match[3])],date2=new Date(Date.UTC(year,month-1,day));return date2.getUTCFullYear()===year&&date2.getUTCMonth()===month-1&&date2.getUTCDate()===day}var oneOf=allowed=>(field,value)=>typeof value=="string"&&allowed.has(value)?null:`${field} must be one of ${[...allowed].join(", ")}`,boolean=(field,value)=>typeof value=="boolean"?null:`${field} must be true or false`,date=(field,value)=>typeof value=="string"&&isRealDate(value)?null:`${field} must be a real date written YYYY-MM-DD`,text=(max,opts={})=>(field,value)=>{if(typeof value!="string")return`${field} must be a string`;if(hasLoneSurrogate(value))return`${field} contains an unpaired surrogate and cannot be encoded`;let measured=opts.trimmed?value.trim():value;if(opts.required&&measured.length===0)return`${field} is required and must not be blank`;let length=serverLength(measured);return length<=max?null:`${field} is ${length} characters; the server accepts at most ${max}`},SCALAR_CHECKS={sex:oneOf(SEXES),spayedNeutered:boolean,birthDate:date,birthDatePrecision:oneOf(PRECISIONS),activityLevel:oneOf(ACTIVITY),indoorOutdoor:oneOf(INDOOR_OUTDOOR),foodBrand:text(FOOD_MAX),foodType:text(FOOD_MAX),microchipId:text(MICROCHIP_MAX)},REF_FIELD=["ref","ref",false,text(REF_MAX,{required:true,trimmed:true})],NOTES_FIELD=["notes","notes",false,text(NOTES_MAX,{trimmed:true})],MEDICATION_FIELDS=[REF_FIELD,["name","name",true,text(NAME_MAX,{required:true,trimmed:true})],["dose","dose",false,text(SHORT_MAX,{trimmed:true})],["frequency","frequency",false,text(SHORT_MAX,{trimmed:true})],["startDate","start_date",false,date],["endDate","end_date",false,date],NOTES_FIELD],ITEM_FIELDS={allergies:[REF_FIELD,["allergen","allergen",true,text(NAME_MAX,{required:true,trimmed:true})],["severity","severity",false,oneOf(SEVERITIES)],NOTES_FIELD],medications:MEDICATION_FIELDS,supplements:MEDICATION_FIELDS,conditions:[REF_FIELD,["conditionName","condition_name",true,text(NAME_MAX,{required:true,trimmed:true})],["diagnosedDate","diagnosed_date",false,date],NOTES_FIELD]};function itemToWire(list,index,raw){let at=`${list}[${index}]`;if(typeof raw!="object"||raw===null||Array.isArray(raw))return{error:`${at} must be an object`};let source=raw,item={};for(let[key,wire,isRequired,check]of ITEM_FIELDS[list]){let value=source[key];if(value==null){if(isRequired)return{error:`${at}.${key} is required`};value===null&&(item[wire]=null);continue}let bad=check(`${at}.${key}`,value);if(bad!==null)return{error:bad};item[wire]=value}let start=item.start_date,end=item.end_date;return typeof start=="string"&&typeof end=="string"&&end<start?{error:`${at}.endDate must not be before startDate`}:{item:item}}function listToWire(list,raw){if(!Array.isArray(raw))return{error:`${list} must be an array (send [] to clear it)`};if(raw.length>LIST_MAX)return{error:`${list} has ${raw.length} items; the server accepts at most ${LIST_MAX}`};let items=[],refs=/* @__PURE__ */new Set;for(let index=0;index<raw.length;index+=1){let mapped=itemToWire(list,index,raw[index]);if("error"in mapped)return mapped;let ref=mapped.item.ref;if(typeof ref=="string"){let key=ref.trim();if(refs.has(key))return{error:`${list}: ref ${JSON.stringify(key)} is used twice; a ref names one item`};refs.add(key)}items.push(mapped.item)}return{items:items}}function petHealthToWire(input,species){let source=input,body={};for(let[key,wire]of SCALAR_WIRE){let value=source[key];if(value!==void 0){if(value!==null){let bad=SCALAR_CHECKS[key](key,value);if(bad!==null)return{error:bad}}body[wire]=value}}let dateSent=source.birthDate!==void 0,precisionSent=source.birthDatePrecision!==void 0;if(dateSent!==precisionSent||dateSent&&source.birthDate===null!=(source.birthDatePrecision===null))return{error:"birthDate and birthDatePrecision must be sent together, both set or both null"};for(let[key,wire]of LIST_WIRE){let value=source[key];if(value===void 0)continue;let mapped=listToWire(key,value);if("error"in mapped)return mapped;body[wire]=mapped.items}return Object.keys(body).length>0&&species!==void 0&&canonicalPetSpecies(species)===null?{error:"health fields need a pet Everfur reads as a dog or a cat (dog, canine, k9, puppy, cat, feline, kitten)"}:{body:body}}var str2=value=>typeof value=="string"?value:null,pick=(allowed,value)=>typeof value=="string"&&allowed.has(value)?value:null,bool2=value=>typeof value=="boolean"?value:null;function itemsFromWire(raw,map){return Array.isArray(raw)?/* @__PURE__ */Object.freeze(raw.flatMap(row2=>{if(typeof row2!="object"||row2===null||Array.isArray(row2))return[];let item=map(row2);return item===null?[]:[item]})):/* @__PURE__ */Object.freeze([])}function medicationFromWire(o){let name=str2(o.name);return name===null||name.length===0?null:/* @__PURE__ */Object.freeze({ref:str2(o.ref),name:name,dose:str2(o.dose),frequency:str2(o.frequency),startDate:str2(o.start_date),endDate:str2(o.end_date),notes:str2(o.notes)})}function petHealthFromWire(o){let version=o.profile_version;/* @__PURE__ */
120
124
  return Object.freeze({profileVersion:typeof version=="number"&&Number.isInteger(version)&&version>=0?version:0,sex:pick(SEXES,o.sex),spayedNeutered:bool2(o.spayed_neutered),birthDate:str2(o.birth_date),birthDatePrecision:pick(PRECISIONS,o.birth_date_precision),activityLevel:pick(ACTIVITY,o.activity_level),indoorOutdoor:pick(INDOOR_OUTDOOR,o.indoor_outdoor),foodBrand:str2(o.food_brand),foodType:str2(o.food_type),microchipId:str2(o.microchip_id),allergies:itemsFromWire(o.allergies,row2=>{let allergen=str2(row2.allergen);return allergen===null||allergen.length===0?null:/* @__PURE__ */Object.freeze({ref:str2(row2.ref),allergen:allergen,severity:pick(SEVERITIES,row2.severity),notes:str2(row2.notes)})}),medications:itemsFromWire(o.medications,medicationFromWire),supplements:itemsFromWire(o.supplements,medicationFromWire),conditions:itemsFromWire(o.conditions,row2=>{let conditionName=str2(row2.condition_name);return conditionName===null||conditionName.length===0?null:/* @__PURE__ */Object.freeze({ref:str2(row2.ref),conditionName:conditionName,diagnosedDate:str2(row2.diagnosed_date),notes:str2(row2.notes)})})})}var PET_NAME_MAX=100,PET_SPECIES_MAX=50,PET_BREED_MAX=100,PET_AGE_YEARS_MAX=50,PET_WEIGHT_KG_MAX=500,PET_REF_MAX=128,ERASE_USER_DATA_TIMEOUT_MS=6e4;function invalid3(wireMessage){return makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage})}function checkString(field,value,max){if(typeof value!="string")return invalid3(`${field} must be a string`);let length=serverLength(value);return length<=max?null:invalid3(`${field} is ${length} characters; the server accepts at most ${max}`)}function outOfRange(field,value,max){return typeof value=="number"&&Number.isFinite(value)&&value>=0&&value<=max?null:invalid3(`${field} must be a finite number between 0 and ${max}`)}function validate(petRef,profile){if(typeof petRef!="string")return invalid3("pet_ref must be a string");if(petRef.trim().length===0)return invalid3("pet_ref must not be blank");if(hasLoneSurrogate(petRef))return invalid3("pet_ref contains an unpaired surrogate and cannot be encoded");if(profile!=null&&typeof profile!="object")return invalid3("profile must be an object");let checks=[checkString("pet_ref",petRef,PET_REF_MAX)];return profile?.name!==void 0&&checks.push(checkString("name",profile.name,PET_NAME_MAX)),profile?.species!==void 0&&checks.push(checkString("species",profile.species,PET_SPECIES_MAX)),profile?.breed!==void 0&&checks.push(checkString("breed",profile.breed,PET_BREED_MAX)),profile?.ageYears!==void 0&&checks.push(outOfRange("age_years",profile.ageYears,PET_AGE_YEARS_MAX)),profile?.weightKg!==void 0&&checks.push(outOfRange("weight_kg",profile.weightKg,PET_WEIGHT_KG_MAX)),checks.find(c=>c!==null)??null}function healthToWire(source,species){let health=petHealthToWire(source,species);return"error"in health?{error:invalid3(health.error)}:health}function patchToWire(patch){if(typeof patch!="object"||patch===null)return{error:invalid3("patch must be an object")};let p=patch,fields=[["name","name",v=>checkString("name",v,PET_NAME_MAX)],["species","species",v=>checkString("species",v,PET_SPECIES_MAX)],["breed","breed",v=>checkString("breed",v,PET_BREED_MAX)],["ageYears","age_years",v=>outOfRange("age_years",v,PET_AGE_YEARS_MAX)],["weightKg","weight_kg",v=>outOfRange("weight_kg",v,PET_WEIGHT_KG_MAX)]],body={};for(let[key,wire,check]of fields){let value=p[key];if(value!==void 0){if(value!==null){let bad=check(value);if(bad!==null)return{error:bad}}body[wire]=value}}let health=healthToWire(p,p.species);return"error"in health?health:(Object.assign(body,health.body),Object.keys(body).length===0?{error:invalid3("patch must change at least one field")}:{body:body})}function toWire(profile){if(profile==null)return{body:{}};let health=healthToWire(profile,profile.species);return"error"in health?health:{body:{...profile.name!==void 0?{name:profile.name}:{},...profile.species!==void 0?{species:profile.species}:{},...profile.breed!==void 0?{breed:profile.breed}:{},...profile.ageYears!==void 0?{age_years:profile.ageYears}:{},...profile.weightKg!==void 0?{weight_kg:profile.weightKg}:{},...health.body}}}var str3=v=>typeof v=="string"?v:null,num2=v=>typeof v=="number"&&Number.isFinite(v)?v:null;function fromWire2(raw,petRef){let o=typeof raw=="object"&&raw!==null?raw:{};/* @__PURE__ */
@@ -321,7 +325,7 @@ return jsxs(View,{style:visit.card,testID:"televet-messages-card",children:[
321
325
  return jsxs(Pressable,{onPress:()=>onOpen({petRef:thread.petRef,petName:petName,vetName:vetName,ownerCanStart:thread.ownerCanStart}),accessibilityRole:"button",accessibilityLabel:[title,preview,day,unread?VET_MESSAGES_COPY.newPillNative:null].filter(Boolean).join(", "),style:[visit.row,i===0?visit.rowFirst:null,styles2.rowPress],testID:`televet-messages-row-${thread.petRef}`,children:[
322
326
  /* @__PURE__ */jsxs(View,{style:styles2.rowMain,children:[
323
327
  /* @__PURE__ */jsx(Text,{style:visit.when,children:title}),preview?/* @__PURE__ */jsx(Text,{style:styles2.preview,numberOfLines:1,children:preview}):null]}),
324
- /* @__PURE__ */jsxs(View,{style:styles2.rowEnd,children:[day?/* @__PURE__ */jsx(Text,{style:visit.meta,children:day}):null,unread?/* @__PURE__ */jsx(View,{style:[visit.pill,{marginLeft:0}],children:/* @__PURE__ */jsx(Text,{tier:"badge",style:visit.pillText,children:VET_MESSAGES_COPY.newPillNative})}):null]})]},thread.petRef)})})]})}function previewLine(message){let text2=message.content.split(`\n`)[0]?.trim()??"";return message.role==="owner"?fillVetCopy(VET_MESSAGES_COPY.previewOwnerTemplate,{text:text2}):text2}function TelevetVisitsScreen({controller:injected,onOpenVisit:onOpenVisit,onBook:onBook,onBack:onBack,revision:revision=0,onOpenThread:onOpenThread,onOpenSummary:onOpenSummary,nowMs:nowMs,style:style}){let styles2=useVisitStyles(),controller=useTelevetBookingController(injected),consults=useTelevetConsults(controller,revision),{pets:pets}=useEverfurPets(),threads=useVetThreads(controller,revision),messagesLit=threads.availability==="lit",rows2=consults.data??[],anythingAhead=rows2.some(c=>!TERMINAL_CONSULT_STATUSES.has(c.status)),ticked=useNowMs(anythingAhead),now=nowMs??ticked,{upcoming:upcoming,past:past}=useMemo(()=>splitTelevetVisits(rows2,now),[rows2,now]),isLoading=consults.enabled&&consults.isPending,hardError=consults.isError&&consults.data===null,titleOf=consult=>{let pet=nameOf(pets,consult.petId),vet=consult.clinicianName;return pet&&vet?fill(TELEVET_VISITS_COPY_NATIVE.visitTitleTemplate,{pet:pet,vet:vet}):pet??vet},renderRow=(consult,index)=>{let status=televetVisitStatusNative(consult.status),title=titleOf(consult);return consult.status==="completed"&&messagesLit&&onOpenSummary?/* @__PURE__ */jsxs(Pressable,{onPress:()=>onOpenSummary(consult),accessibilityRole:"button",accessibilityLabel:[title??formatRecordWhen(consult.scheduledAt),status].filter(Boolean).join(", "),style:[styles2.row,index===0?styles2.rowFirst:null],testID:`televet-visits-summary-${consult.consultId}`,children:[
328
+ /* @__PURE__ */jsxs(View,{style:styles2.rowEnd,children:[day?/* @__PURE__ */jsx(Text,{style:visit.meta,children:day}):null,unread?/* @__PURE__ */jsx(View,{style:[visit.pill,{marginLeft:0}],children:/* @__PURE__ */jsx(Text,{tier:"badge",style:visit.pillText,children:VET_MESSAGES_COPY.newPillNative})}):null]})]},thread.petRef)})})]})}function previewLine(message){let text2=message.content.split(`\n`)[0]?.trim()??"";return message.role==="owner"?fillVetCopy(VET_MESSAGES_COPY.previewOwnerTemplate,{text:text2}):text2}function TelevetVisitsScreen({controller:injected,onOpenVisit:onOpenVisit,onBook:onBook,onBack:onBack,revision:revision=0,onOpenThread:onOpenThread,onOpenSummary:onOpenSummary,joinFirst:joinFirst,onJoinFirst:onJoinFirst,nowMs:nowMs,style:style}){let styles2=useVisitStyles(),controller=useTelevetBookingController(injected),consults=useTelevetConsults(controller,revision),{pets:pets}=useEverfurPets(),threads=useVetThreads(controller,revision),messagesLit=threads.availability==="lit",rows2=consults.data??[],anythingAhead=rows2.some(c=>!TERMINAL_CONSULT_STATUSES.has(c.status)),ticked=useNowMs(anythingAhead),now=nowMs??ticked,{upcoming:upcoming,past:past}=useMemo(()=>splitTelevetVisits(rows2,now),[rows2,now]),isLoading=consults.enabled&&consults.isPending,hardError=consults.isError&&consults.data===null,joinFirstRef=useRef(joinFirst??null),joinListKnown=consults.enabled&&!isLoading&&!hardError;useEffect(()=>{let target=joinFirstRef.current;if(target===null||!onJoinFirst||!joinListKnown)return;joinFirstRef.current=null;let consult=upcoming.find(c=>c.consultId===target)??null;onJoinFirst(consult,consult?nameOf(pets,consult.petId):null)},[joinListKnown,upcoming,pets,onJoinFirst]);let titleOf=consult=>{let pet=nameOf(pets,consult.petId),vet=consult.clinicianName;return pet&&vet?fill(TELEVET_VISITS_COPY_NATIVE.visitTitleTemplate,{pet:pet,vet:vet}):pet??vet},renderRow=(consult,index)=>{let status=televetVisitStatusNative(consult.status),title=titleOf(consult);return consult.status==="completed"&&messagesLit&&onOpenSummary?/* @__PURE__ */jsxs(Pressable,{onPress:()=>onOpenSummary(consult),accessibilityRole:"button",accessibilityLabel:[title??formatRecordWhen(consult.scheduledAt),status].filter(Boolean).join(", "),style:[styles2.row,index===0?styles2.rowFirst:null],testID:`televet-visits-summary-${consult.consultId}`,children:[
325
329
  /* @__PURE__ */jsxs(View,{style:styles2.rowHead,children:[
326
330
  /* @__PURE__ */jsx(Text,{style:styles2.when,children:title??formatRecordWhen(consult.scheduledAt)}),status?/* @__PURE__ */jsx(Text,{style:styles2.status,children:status}):null]}),title?/* @__PURE__ */jsx(Text,{style:styles2.meta,children:formatRecordWhen(consult.scheduledAt)}):null]},consult.consultId):/* @__PURE__ */jsxs(View,{style:[styles2.row,index===0?styles2.rowFirst:null],testID:`televet-visits-row-${consult.consultId}`,children:[
327
331
  /* @__PURE__ */jsxs(View,{style:styles2.rowHead,children:[
@@ -386,10 +390,10 @@ return jsxs(View,{style:[visit.screen,style],testID:"televet-visit-summary",chil
386
390
  /* @__PURE__ */jsx(Text,{style:styles2.planText,children:`“${item}”`})]},`${String(i)}-${item}`))]}):null,summary.medications.length>0?/* @__PURE__ */jsxs(View,{style:visit.card,testID:"televet-visit-summary-medications",children:[
387
391
  /* @__PURE__ */jsx(Text,{style:visit.title,accessibilityRole:"header",children:VET_MESSAGES_COPY.fromThisVisitTitle}),summary.medications.map((med,i)=>/* @__PURE__ */jsxs(View,{style:[visit.row,i===0?visit.rowFirst:null],children:[
388
392
  /* @__PURE__ */jsx(Text,{style:visit.when,children:[med.drug,med.strength].filter(Boolean).join(" ")}),med.sig?/* @__PURE__ */jsx(Text,{style:visit.meta,children:med.sig}):null]},`${String(i)}-${med.drug}`))]}):null,named||messageVet?/* @__PURE__ */jsxs(View,{style:visit.card,testID:"televet-visit-summary-vet",children:[named?/* @__PURE__ */jsx(Text,{style:visit.title,children:named}):null,summary.credentialsText?/* @__PURE__ */jsx(Text,{style:visit.meta,children:summary.credentialsText}):null,messageVet?/* @__PURE__ */jsx(TelevetButton,{label:sentenceCase(fillVetCopy(VET_MESSAGES_COPY.messageVetTemplate,{vet:vet})),kind:"secondary",fullWidth:false,onPress:messageVet,testID:"televet-visit-summary-message"}):null]}):null,onBook?/* @__PURE__ */jsx(TelevetButton,{label:VET_MESSAGES_COPY.bookFollowUp,onPress:onBook,testID:"televet-visit-summary-book"}):null,
389
- /* @__PURE__ */jsx(Text,{style:visit.footnote,testID:"televet-visit-summary-footnote",children:fillVetCopy(VET_MESSAGES_COPY.summaryFootnoteTemplate,{vet:vet})})]})]})]})}var TELEVET_ROOT=/* @__PURE__ */Object.freeze({name:"home"}),VISITS_ROOT=/* @__PURE__ */Object.freeze({name:"visits"}),BOOKING_ROOT=/* @__PURE__ */Object.freeze({name:"booking"});function televetScreenForRequest(request){let visitRef=request.visitRef?.trim()??"";return visitRef.length>0?/* @__PURE__ */Object.freeze({name:"visit",visitRef:visitRef,intent:request.intent??null}):TELEVET_ROOT}function navReducer(state,action){switch(action.type){case"push":/* @__PURE__ */
393
+ /* @__PURE__ */jsx(Text,{style:visit.footnote,testID:"televet-visit-summary-footnote",children:fillVetCopy(VET_MESSAGES_COPY.summaryFootnoteTemplate,{vet:vet})})]})]})]})}var TELEVET_ROOT=/* @__PURE__ */Object.freeze({name:"home"}),VISITS_ROOT=/* @__PURE__ */Object.freeze({name:"visits"}),BOOKING_ROOT=/* @__PURE__ */Object.freeze({name:"booking"});function televetScreenForRequest(request){let consultId=request.consultId?.trim()??"";if(consultId.length>0)/* @__PURE__ */return Object.freeze({name:"join",consultId:consultId});let visitRef=request.visitRef?.trim()??"";return visitRef.length>0?/* @__PURE__ */Object.freeze({name:"visit",visitRef:visitRef,intent:request.intent??null}):TELEVET_ROOT}function navReducer(state,action){switch(action.type){case"push":/* @__PURE__ */
390
394
  return Object.freeze({stack:/* @__PURE__ */Object.freeze([...state.stack,action.screen])});case"pop":return state.stack.length<=1?state:/* @__PURE__ */Object.freeze({stack:/* @__PURE__ */Object.freeze(state.stack.slice(0,-1))});case"land":return state.stack[0]?.name!=="home"?state:/* @__PURE__ */Object.freeze({stack:/* @__PURE__ */Object.freeze([action.screen,...state.stack.slice(1)])});default:return state}}function EverfurTelevetFlow(props){let{style:style,renderPending:renderPending,...rest}=guardHostProps(props,["onExit","onBooked","onAddPet","onRequestLocation","onFindEmergencyVet"]);/* @__PURE__ */
391
- return jsx(CapabilityGate,{capability:"televet",style:style,...renderPending?{renderPending:renderPending}:{},children:/* @__PURE__ */jsx(TelevetFlowBody,{...rest,style:style})})}function TelevetFlowBody({petRef:petRef,usState:usState,controller:controller,onBooked:onBooked,onExit:onExit,onAddPet:onAddPet,onPickMedia:onPickMedia,onAddToCalendar:onAddToCalendar,onConfirmDiscard:onConfirmDiscard,onRequestLocation:onRequestLocation,locationStatus:locationStatus,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,onTriageReason:onTriageReason,canJoinInApp:canJoinInApp=false,renderUnavailable:renderUnavailable,initialScreen:initialScreen,style:style}){let styles2=useBookingStyles(),[nav,dispatch]=useReducer(navReducer,initialScreen??TELEVET_ROOT,initial=>/* @__PURE__ */Object.freeze({stack:/* @__PURE__ */Object.freeze([initial])})),screen=nav.stack[nav.stack.length-1]??TELEVET_ROOT,depth=nav.stack.length,[revision,setRevision]=useState(0),changed=useCallback(()=>setRevision(n=>n+1),[]),onBackPress=useCallback(()=>depth<=1||screen.name==="call"||screen.name==="booking"?false:(dispatch({type:"pop"}),true),[depth,screen.name]);useEffect(()=>{let subscription=BackHandler.addEventListener("hardwareBackPress",onBackPress);return()=>{subscription.remove()}},[onBackPress]),useTelevetBackChannel(onBackPress);let fallback=useCallback(()=>renderUnavailable?renderUnavailable():/* @__PURE__ */jsx(View,{style:styles2.list,testID:"televet-unavailable",children:isTelevetBookingCopyReady()?/* @__PURE__ */jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY.bookingPausedTitle}):null}),[renderUnavailable,styles2.list]),leave=useCallback(()=>{depth>1?dispatch({type:"pop"}):onExit?.()},[depth,onExit]),push=next=>dispatch({type:"push",screen:next}),land=useCallback(landing=>dispatch({type:"land",screen:landing==="visits"?VISITS_ROOT:BOOKING_ROOT}),[]),booking=/* @__PURE__ */jsx(EverfurTelevetBooking,{...petRef!==void 0?{petRef:petRef}:{},...usState!==void 0?{usState:usState}:{},...controller?{controller:controller}:{},onBooked:consult=>{changed(),onBooked?.(consult)},onExit:leave,...onAddPet?{onAddPet:onAddPet}:{},...onPickMedia?{onPickMedia:onPickMedia}:{},...onAddToCalendar?{onAddToCalendar:onAddToCalendar}:{},...onConfirmDiscard?{onConfirmDiscard:onConfirmDiscard}:{},...onRequestLocation?{onRequestLocation:onRequestLocation}:{},...locationStatus?{locationStatus:locationStatus}:{},...primaryVet?{primaryVet:primaryVet}:{},...onFindEmergencyVet?{onFindEmergencyVet:onFindEmergencyVet}:{},...onTriageReason?{onTriageReason:onTriageReason}:{},canJoinInApp:canJoinInApp,renderUnavailable:fallback,style:style}),visits=/* @__PURE__ */jsx(TelevetVisitsScreen,{...controller?{controller:controller}:{},revision:revision,onOpenVisit:consult=>push({name:"consult",consult:consult}),onBook:()=>push({name:"booking"}),onBack:leave,onOpenThread:target=>push({name:"thread",target:target}),onOpenSummary:consult=>push({name:"summary",consult:consult}),style:style});switch(screen.name){case"home":/* @__PURE__ */
392
- return jsx(TelevetLandingScreen,{controller:controller,onLand:land,style:style});case"booking":return booking;case"visits":case"visit":return visits;case"consult":/* @__PURE__ */
395
+ return jsx(CapabilityGate,{capability:"televet",style:style,...renderPending?{renderPending:renderPending}:{},children:/* @__PURE__ */jsx(TelevetFlowBody,{...rest,style:style})})}function TelevetFlowBody({petRef:petRef,usState:usState,controller:controller,onBooked:onBooked,onExit:onExit,onAddPet:onAddPet,onPickMedia:onPickMedia,onAddToCalendar:onAddToCalendar,onConfirmDiscard:onConfirmDiscard,onRequestLocation:onRequestLocation,locationStatus:locationStatus,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,onTriageReason:onTriageReason,canJoinInApp:canJoinInApp=false,renderUnavailable:renderUnavailable,initialScreen:initialScreen,style:style}){let styles2=useBookingStyles(),[nav,dispatch]=useReducer(navReducer,initialScreen??TELEVET_ROOT,initial=>/* @__PURE__ */Object.freeze({stack:/* @__PURE__ */Object.freeze([initial])})),[pendingJoin,setPendingJoin]=useState(()=>initialScreen?.name==="join"?initialScreen.consultId:null),screen=nav.stack[nav.stack.length-1]??TELEVET_ROOT,depth=nav.stack.length,[revision,setRevision]=useState(0),changed=useCallback(()=>setRevision(n=>n+1),[]),onBackPress=useCallback(()=>depth<=1||screen.name==="call"||screen.name==="booking"?false:(dispatch({type:"pop"}),true),[depth,screen.name]);useEffect(()=>{let subscription=BackHandler.addEventListener("hardwareBackPress",onBackPress);return()=>{subscription.remove()}},[onBackPress]),useTelevetBackChannel(onBackPress);let fallback=useCallback(()=>renderUnavailable?renderUnavailable():/* @__PURE__ */jsx(View,{style:styles2.list,testID:"televet-unavailable",children:isTelevetBookingCopyReady()?/* @__PURE__ */jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY.bookingPausedTitle}):null}),[renderUnavailable,styles2.list]),leave=useCallback(()=>{depth>1?dispatch({type:"pop"}):onExit?.()},[depth,onExit]),push=next=>dispatch({type:"push",screen:next}),land=useCallback(landing=>dispatch({type:"land",screen:landing==="visits"?VISITS_ROOT:BOOKING_ROOT}),[]),booking=/* @__PURE__ */jsx(EverfurTelevetBooking,{...petRef!==void 0?{petRef:petRef}:{},...usState!==void 0?{usState:usState}:{},...controller?{controller:controller}:{},onBooked:consult=>{changed(),onBooked?.(consult)},onExit:leave,...onAddPet?{onAddPet:onAddPet}:{},...onPickMedia?{onPickMedia:onPickMedia}:{},...onAddToCalendar?{onAddToCalendar:onAddToCalendar}:{},...onConfirmDiscard?{onConfirmDiscard:onConfirmDiscard}:{},...onRequestLocation?{onRequestLocation:onRequestLocation}:{},...locationStatus?{locationStatus:locationStatus}:{},...primaryVet?{primaryVet:primaryVet}:{},...onFindEmergencyVet?{onFindEmergencyVet:onFindEmergencyVet}:{},...onTriageReason?{onTriageReason:onTriageReason}:{},canJoinInApp:canJoinInApp,renderUnavailable:fallback,style:style}),visits=/* @__PURE__ */jsx(TelevetVisitsScreen,{...controller?{controller:controller}:{},revision:revision,onOpenVisit:consult=>push({name:"consult",consult:consult}),onBook:()=>push({name:"booking"}),onBack:leave,onOpenThread:target=>push({name:"thread",target:target}),onOpenSummary:consult=>push({name:"summary",consult:consult}),...pendingJoin!==null?{joinFirst:pendingJoin,onJoinFirst:(consult,petName)=>{setPendingJoin(null),consult!==null&&(televetJoinDecision(consult,Date.now()).joinable?push({name:"call",consultId:consult.consultId,clinicianName:consult.clinicianName,petName:petName}):push({name:"consult",consult:consult}))}}:{},style:style});switch(screen.name){case"home":/* @__PURE__ */
396
+ return jsx(TelevetLandingScreen,{controller:controller,onLand:land,style:style});case"booking":return booking;case"visits":case"visit":case"join":return visits;case"consult":/* @__PURE__ */
393
397
  return jsx(TelevetConsultScreen,{consult:screen.consult,...controller?{controller:controller}:{},revision:revision,onJoin:(consult,petName)=>push({name:"call",consultId:consult.consultId,clinicianName:consult.clinicianName,petName:petName}),onReschedule:consult=>push({name:"reschedule",consult:consult}),onCancelled:changed,onBack:leave,onMessageVet:target=>push({name:"thread",target:target}),style:style});case"reschedule":/* @__PURE__ */
394
398
  return jsx(EverfurTelevetReschedule,{consult:screen.consult,...controller?{controller:controller}:{},onRescheduled:()=>{changed(),dispatch({type:"pop"})},onCancel:()=>dispatch({type:"pop"}),style:style});case"call":/* @__PURE__ */
395
399
  return jsx(TelevetJoinScreen,{consultId:screen.consultId,...controller?{controller:controller}:{},...screen.clinicianName!==void 0?{clinicianName:screen.clinicianName}:{},...screen.petName!==void 0?{petName:screen.petName}:{},onLeave:()=>{changed(),leave()},style:style});case"thread":/* @__PURE__ */
@@ -399,4 +403,4 @@ return jsx(TelevetVisitSummaryScreen,{consult:screen.consult,...controller?{cont
399
403
  /* @__PURE__ */jsx(TelevetSkeletonBlock,{height:72})]})}var EverfurTelevet=EverfurTelevetFlow;function EverfurTelevetModal({request:request,onClose:onClose,onAddToCalendar:onAddToCalendar,onPickMedia:onPickMedia,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet}){let theme=useEverfurTheme(),insets=useSafeAreaInsets(),channel=useMemo(()=>createTelevetBackChannel(),[]),onRequestClose=useCallback(()=>{channel.dispatch()||onClose()},[channel,onClose]),[fullBleed,setFullBleed]=useState(false),layout=useMemo(()=>({setFullBleed:setFullBleed}),[]),initialScreen=useMemo(()=>televetScreenForRequest(request),[request]),lightBar=fullBleed||poleForGrounds([theme.color.surface])===WHITE;/* @__PURE__ */
400
404
  return jsxs(Modal,{visible:true,animationType:theme.motion.reducedMotion?"none":"slide",presentationStyle:"fullScreen",onRequestClose:onRequestClose,children:[
401
405
  /* @__PURE__ */jsx(StatusBar,{barStyle:lightBar?"light-content":"dark-content",animated:true}),
402
- /* @__PURE__ */jsx(View,{testID:"everfur-televet-modal",style:[styles.root,{backgroundColor:theme.color.surface},fullBleed?null:{paddingTop:insets.top,paddingBottom:insets.bottom}],children:/* @__PURE__ */jsx(TelevetBackChannelContext.Provider,{value:channel,children:/* @__PURE__ */jsx(TelevetModalLayoutContext.Provider,{value:layout,children:/* @__PURE__ */jsx(EverfurTelevet,{...request.petRef!==void 0?{petRef:request.petRef}:{},...request.usState!==void 0?{usState:request.usState}:{},initialScreen:initialScreen,onExit:onClose,...onAddToCalendar?{onAddToCalendar:onAddToCalendar}:{},...onPickMedia?{onPickMedia:onPickMedia}:{},...primaryVet?{primaryVet:primaryVet}:{},...onFindEmergencyVet?{onFindEmergencyVet:onFindEmergencyVet}:{},canJoinInApp:isEverfurDailyRegistered(),style:styles.root})})})})]})}var styles=StyleSheet.create({root:{flex:1}});export{BACK_LABEL,CANCELLATION_POLICY_VERSION_MAX,CANCEL_REASON_MAX,CONSULT_KINDS,CONSULT_MINUTES,CONSULT_STATUSES,EverfurTelevet,EverfurTelevetBooking,EverfurTelevetFlow,EverfurTelevetModal,EverfurTelevetReschedule,MEDIA_REFS_MAX,NO_MEDIA_SHORTFALL,REASON_TEXT_MAX,TELEVET_BOOKING_BASE,TELEVET_BOOKING_COPY,TELEVET_BOOKING_STEPS,TELEVET_CONSULT_PAGE_LIMIT,TELEVET_JOIN_CLOSES_MINUTES_AFTER,TELEVET_JOIN_OPENS_MINUTES_BEFORE,TELEVET_MESSAGE_THREADS_PATH,TERMINAL_CONSULT_STATUSES,TelevetBookedScreen,TelevetBookingChrome,TelevetClinicianEmptyState,TelevetConsentCheckbox,TelevetConsultScreen,TelevetDayStrip,TelevetEarlyEmergency,TelevetEmergencyExits,TelevetEntitlementInterestState,TelevetIntakeMedia,TelevetJoinScreen,TelevetMediaDropNotice,TelevetSlotPicker,TelevetStateInterestAction,TelevetSummaryCard,TelevetSummaryRow,TelevetVetThreadScreen,TelevetVisitSummaryScreen,TelevetVisitsScreen,VET_MESSAGES_COPY,VET_MESSAGE_CONTENT_MAX,VET_MESSAGE_PAGE_DEFAULT,VET_MESSAGE_PAGE_MAX,attestation,canConfirm,canManageTelevetVisit,createTelevetBookingController,currentStep,emptyTelevetDraft,formatVisitRange,formatWhen,formatWhenWithDay,hasPreviousStep,initialTelevetBookingState,isHoldExpired,isMediaShortfallEmpty,isSkipped,isTelevetBookingCopyReady,isVetMessagesDark,isVetThreadVetFirst,isWellFormedStateCode,mediaShortfallFromUnsentPicks,parseVetCallCredential,splitTelevetVisits,televetBookingKey,televetBookingReducer,televetBookingRefusal,televetCancelCall,televetConsultCalendarKey,televetConsultCall,televetDaysFromSlots,televetEmptyRosterCause,televetEmptyRosterView,televetHoldCall,televetJoinCall,televetJoinOpensAtMs,televetJoinReadiness,televetMediaShortfallLines,televetRescheduleCall,televetScreenForRequest,televetThreadMessagesCall,televetThreadReadCall,televetVisitSummaryCall,useEarlyTriage,useStateInterest,useTelevetBookConsult,useTelevetBookingAvailable,useTelevetBookingController,useTelevetBookingEntitlement,useTelevetCancellationPolicy,useTelevetClinicians,useTelevetHoldSlot,useTelevetJoin,useTelevetNextSlot,useTelevetRescheduleConsult,useTelevetSlots,useTelevetStatePolicy,useVetThread,useVetThreads,useVisitSummary,validateBookingBody,vetCallJoinReason,vetCallJoinRefusal,vetThreadPetRef,withUnsentPicks};
406
+ /* @__PURE__ */jsx(View,{testID:"everfur-televet-modal",style:[styles.root,{backgroundColor:theme.color.surface},fullBleed?null:{paddingTop:insets.top,paddingBottom:insets.bottom}],children:/* @__PURE__ */jsx(TelevetBackChannelContext.Provider,{value:channel,children:/* @__PURE__ */jsx(TelevetModalLayoutContext.Provider,{value:layout,children:/* @__PURE__ */jsx(EverfurTelevet,{...request.petRef!==void 0?{petRef:request.petRef}:{},...request.usState!==void 0?{usState:request.usState}:{},initialScreen:initialScreen,onExit:onClose,...onAddToCalendar?{onAddToCalendar:onAddToCalendar}:{},...onPickMedia?{onPickMedia:onPickMedia}:{},...primaryVet?{primaryVet:primaryVet}:{},...onFindEmergencyVet?{onFindEmergencyVet:onFindEmergencyVet}:{},canJoinInApp:isEverfurDailyRegistered(),style:styles.root})})})})]})}var styles=StyleSheet.create({root:{flex:1}});function useUpcomingTelevetVisit(options){let controller=useTelevetBookingController(),enabled=options?.enabled!==false&&controller!==null,consults=useTelevetConsults(enabled?controller:null);return useMemo(()=>enabled?{upcoming:consults.data===null?null:splitTelevetVisits(consults.data,Date.now()).upcoming[0]??null,isPending:consults.isPending}:{upcoming:null,isPending:false},[enabled,consults.data,consults.isPending])}export{BACK_LABEL,CANCELLATION_POLICY_VERSION_MAX,CANCEL_REASON_MAX,CONSULT_KINDS,CONSULT_MINUTES,CONSULT_STATUSES,EverfurTelevet,EverfurTelevetBooking,EverfurTelevetFlow,EverfurTelevetModal,EverfurTelevetReschedule,MEDIA_REFS_MAX,NO_MEDIA_SHORTFALL,REASON_TEXT_MAX,TELEVET_BOOKING_BASE,TELEVET_BOOKING_COPY,TELEVET_BOOKING_STEPS,TELEVET_CONSULT_PAGE_LIMIT,TELEVET_JOIN_CLOSES_MINUTES_AFTER,TELEVET_JOIN_OPENS_MINUTES_BEFORE,TELEVET_MESSAGE_THREADS_PATH,TERMINAL_CONSULT_STATUSES,TelevetBookedScreen,TelevetBookingChrome,TelevetClinicianEmptyState,TelevetConsentCheckbox,TelevetConsultScreen,TelevetDayStrip,TelevetEarlyEmergency,TelevetEmergencyExits,TelevetEntitlementInterestState,TelevetIntakeMedia,TelevetJoinScreen,TelevetMediaDropNotice,TelevetSlotPicker,TelevetStateInterestAction,TelevetSummaryCard,TelevetSummaryRow,TelevetVetThreadScreen,TelevetVisitSummaryScreen,TelevetVisitsScreen,VET_MESSAGES_COPY,VET_MESSAGE_CONTENT_MAX,VET_MESSAGE_PAGE_DEFAULT,VET_MESSAGE_PAGE_MAX,attestation,canConfirm,canManageTelevetVisit,createTelevetBookingController,currentStep,emptyTelevetDraft,formatVisitRange,formatWhen,formatWhenWithDay,hasPreviousStep,initialTelevetBookingState,isHoldExpired,isMediaShortfallEmpty,isSkipped,isTelevetBookingCopyReady,isVetMessagesDark,isVetThreadVetFirst,isWellFormedStateCode,mediaShortfallFromUnsentPicks,parseVetCallCredential,splitTelevetVisits,televetBookingKey,televetBookingReducer,televetBookingRefusal,televetCancelCall,televetConsultCalendarKey,televetConsultCall,televetDaysFromSlots,televetEmptyRosterCause,televetEmptyRosterView,televetHoldCall,televetJoinCall,televetJoinOpensAtMs,televetJoinReadiness,televetMediaShortfallLines,televetRescheduleCall,televetScreenForRequest,televetThreadMessagesCall,televetThreadReadCall,televetVisitSummaryCall,useEarlyTriage,useStateInterest,useTelevetBookConsult,useTelevetBookingAvailable,useTelevetBookingController,useTelevetBookingEntitlement,useTelevetCancellationPolicy,useTelevetClinicians,useTelevetHoldSlot,useTelevetJoin,useTelevetNextSlot,useTelevetRescheduleConsult,useTelevetSlots,useTelevetStatePolicy,useUpcomingTelevetVisit,useVetThread,useVetThreads,useVisitSummary,validateBookingBody,vetCallJoinReason,vetCallJoinRefusal,vetThreadPetRef,withUnsentPicks};
@@ -1,10 +1,10 @@
1
1
  import { ComponentType, ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { T as TelemetryPort } from '../../TelemetryPort-BDNr00hu.cjs';
4
- import { O as OptionalModule } from '../../optionalModule-DbJmsq5f.cjs';
5
- export { V as VetCallPhase, i as isSafeRoomUrl, a as isUsableRoomCredential } from '../../callRoom-BhIdadyV.cjs';
6
- export { V as VET_CALL_CONSULT_MINUTES, a as VET_CALL_COPY } from '../../callCopy-Bw6oZT54.cjs';
7
- import '../../EverfurError-DeBqRpQV.cjs';
3
+ import { T as TelemetryPort } from '../../TelemetryPort.d-BDNr00hu.cjs';
4
+ import { O as OptionalModule } from '../../optionalModule.d-DbJmsq5f.cjs';
5
+ export { V as VetCallPhase, i as isSafeRoomUrl, a as isUsableRoomCredential } from '../../callRoom.d-B1DoYdJe.cjs';
6
+ export { V as VET_CALL_CONSULT_MINUTES, a as VET_CALL_COPY } from '../../callCopy.d-Bw6oZT54.cjs';
7
+ import '../../EverfurError.d-8NHtlgzA.cjs';
8
8
 
9
9
  /**
10
10
  * A participant's media track. Daily types this `MediaStreamTrack | false | null`: `false` means the track
@@ -1,10 +1,10 @@
1
1
  import { ComponentType, ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { T as TelemetryPort } from '../../TelemetryPort-BDNr00hu.js';
4
- import { O as OptionalModule } from '../../optionalModule-DbJmsq5f.js';
5
- export { V as VetCallPhase, i as isSafeRoomUrl, a as isUsableRoomCredential } from '../../callRoom-B92eH_ij.js';
6
- export { V as VET_CALL_CONSULT_MINUTES, a as VET_CALL_COPY } from '../../callCopy-Bw6oZT54.js';
7
- import '../../EverfurError-DeBqRpQV.js';
3
+ import { T as TelemetryPort } from '../../TelemetryPort.d-BDNr00hu.js';
4
+ import { O as OptionalModule } from '../../optionalModule.d-DbJmsq5f.js';
5
+ export { V as VetCallPhase, i as isSafeRoomUrl, a as isUsableRoomCredential } from '../../callRoom.d-Dqm1rUqT.js';
6
+ export { V as VET_CALL_CONSULT_MINUTES, a as VET_CALL_COPY } from '../../callCopy.d-Bw6oZT54.js';
7
+ import '../../EverfurError.d-8NHtlgzA.js';
8
8
 
9
9
  /**
10
10
  * A participant's media track. Daily types this `MediaStreamTrack | false | null`: `false` means the track