@everfur/sdk 0.12.1 → 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 +166 -0
  2. package/README.md +2 -1
  3. package/dist/{Chat-CbyZ1vAX.d.cts → Chat.d-DUNTfzqC.d.ts} +170 -8
  4. package/dist/{Chat-CgYQdfqi.d.ts → Chat.d-Dts8u_1a.d.cts} +170 -8
  5. package/dist/{DepthViews-CaQUyCHK.d.ts → DepthViews.d-BIp599lz.d.cts} +1 -1
  6. package/dist/{DepthViews-CCz4ig0u.d.ts → DepthViews.d-BMU2jFPw.d.cts} +1 -1
  7. package/dist/{DepthViews-D3OiIK_x.d.cts → DepthViews.d-Ce2Zhnrb.d.ts} +1 -1
  8. package/dist/{DepthViews-iGZi4_WK.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 +4 -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 +4 -1
  27. package/dist/{attachments-DkMrKCIU.d.ts → attachments.d-Bp2qbHxn.d.cts} +22 -26
  28. package/dist/{attachments-CTJK0jQ4.d.ts → attachments.d-D1yhJjcZ.d.ts} +4 -4
  29. package/dist/{attachments-DXBETOrV.d.cts → attachments.d-DisnvB9R.d.cts} +4 -4
  30. package/dist/{attachments-BOk3hEAM.d.cts → attachments.d-Djy9z_0Z.d.ts} +22 -26
  31. package/dist/{bookingCopy-C_a45T4-.d.ts → bookingCopy.d-BJF6gd1A.d.ts} +24 -9
  32. package/dist/{bookingCopy-CHYGYHe0.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-C8KJmlxE.d.cts → casesRepository.d-CT2LTicS.d.cts} +3 -3
  38. package/dist/{casesRepository-iAi5qWnx.d.ts → casesRepository.d-UsWOz9bv.d.ts} +3 -3
  39. package/dist/chat/index.cjs +131 -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 +132 -58
  43. package/dist/client/index.cjs +14 -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 +14 -10
  47. package/dist/{config-C9zhanL-.d.cts → config.d-BR3DT9ho.d.cts} +3 -3
  48. package/dist/{config-C5iPNKDj.d.ts → config.d-Dy6igYlH.d.ts} +3 -3
  49. package/dist/consent/index.cjs +4 -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 +4 -1
  53. package/dist/{context-BUIrC20Z.d.ts → context.d-Cwks0p3C.d.cts} +15 -15
  54. package/dist/{context-D_bcpHDA.d.cts → context.d-QcCgguzA.d.ts} +15 -15
  55. package/dist/{copy-KbCU9fen.d.ts → copy.d-CiMn2IIt.d.ts} +6 -6
  56. package/dist/{copy-BE31T2jR.d.cts → copy.d-DLJTyRfT.d.cts} +6 -6
  57. package/dist/core/index.cjs +16 -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 +16 -13
  61. package/dist/{depth-DNxDieoO.d.cts → depth.d-CjPGVPDL.d.cts} +9 -115
  62. package/dist/{depth-DDKGfFaB.d.ts → depth.d-OSALbYM7.d.ts} +9 -115
  63. package/dist/{entitlementRepository-C1_wXIE3.d.cts → entitlementRepository.d-CVQa1DA1.d.cts} +10 -5
  64. package/dist/{entitlementRepository-CYtdIGfH.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-BqeaN8An.d.ts → identity.d-60LeJt_s.d.cts} +3 -3
  76. package/dist/{identity-gjurBi7m.d.cts → identity.d-DzTijonw.d.ts} +3 -3
  77. package/dist/index.cjs +140 -66
  78. package/dist/index.d.cts +31 -29
  79. package/dist/index.d.ts +31 -29
  80. package/dist/index.js +141 -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 +4 -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 +4 -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-CfutxNs9.d.cts → pets.d-C_53_fzo.d.ts} +3 -3
  92. package/dist/{pets-LIGadUtr.d.ts → pets.d-NbJvP_kh.d.cts} +3 -3
  93. package/dist/{petsRepository-Cqpd3hLU.d.cts → petsRepository.d-BuGHymNx.d.ts} +4 -4
  94. package/dist/{petsRepository-CoRa3C_U.d.ts → petsRepository.d-lp1BHRqM.d.cts} +4 -4
  95. package/dist/photo/index.cjs +5 -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 +5 -2
  99. package/dist/{ports-BN6RHF9W.d.cts → ports.d-BX4f4UsB.d.cts} +14 -1
  100. package/dist/{ports-BN6RHF9W.d.ts → ports.d-BX4f4UsB.d.ts} +14 -1
  101. package/dist/{ports-gJ3faaWz.d.cts → ports.d-CEROoqnA.d.cts} +16 -10
  102. package/dist/{ports-CVi3n0re.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 +10 -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 +10 -7
  109. package/dist/records/index.cjs +224 -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 +224 -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-BYzlyaC0.d.ts → requestFunnel.d-CXUMPw1K.d.ts} +5 -5
  116. package/dist/{requestFunnel-DLZpiFD3.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-BxxCKMn8.d.cts → runtimeTypes.d-4yFNNuYR.d.ts} +20 -13
  120. package/dist/{runtimeTypes-Doa_xxSa.d.ts → runtimeTypes.d-D6N_fhxx.d.cts} +20 -13
  121. package/dist/server/events/index.cjs +6 -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 +6 -3
  125. package/dist/server/index.cjs +11 -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 +11 -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 +15 -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 +15 -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 +6 -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 +6 -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 +6 -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 +6 -3
  153. package/dist/testing/rn/index.cjs +4 -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 +4 -1
  157. package/dist/testing/web/index.cjs +4 -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 +4 -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-CGOlC_Q9.d.ts → timelineRows.d-BNxgzYRW.d.cts} +1 -1
  168. package/dist/{timelineRows-Beun96e2.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-C6kGP1Kd.d.ts → uploadTransport.d-CWL7CdWP.d.cts} +1 -1
  174. package/dist/{uploadTransport-BM_pnEWj.d.cts → 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-hR94debv.d.ts → useRecordsDepth.d-DFcCfiXm.d.ts} +8 -20
  180. package/dist/{useRecordsDepth-DRrJntjt.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 +5 -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 +5 -2
  187. package/dist/{view-C_B5U04g.d.ts → view.d-C-SNpDJX.d.ts} +10 -122
  188. package/dist/{view-VvLEdXP4.d.cts → view.d-Dps5C8-s.d.cts} +10 -122
  189. package/dist/web/consent/index.cjs +4 -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 +4 -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 +149 -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 +149 -82
  201. package/dist/web/notifications/index.cjs +15 -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 +15 -3
  205. package/dist/web/records/depth/index.cjs +10 -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 +10 -7
  209. package/dist/web/records/index.cjs +94 -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 +94 -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 +15 -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 +15 -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 +6 -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 +6 -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,10 +1,10 @@
1
- import { E as EverfurError } from '../EverfurError-DeBqRpQV.cjs';
2
- export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError-DeBqRpQV.cjs';
3
- import { E as EverfurResult } from '../EverfurResult-COlXj1wq.cjs';
4
- import { J as JobId, P as PetRef } from '../ids-B2GAAifq.cjs';
5
- export { B as Brand, _ as __brand } from '../ids-B2GAAifq.cjs';
6
- import { M as MediaSource } from '../CameraPort-Cv31Pz7g.cjs';
7
- import { I as Interpretation } from '../projection-CeIUsbSk.cjs';
1
+ import { E as EverfurError } from '../EverfurError.d-8NHtlgzA.cjs';
2
+ export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError.d-8NHtlgzA.cjs';
3
+ import { E as EverfurResult } from '../EverfurResult.d-BFH-3s6E.cjs';
4
+ import { J as JobId, P as PetRef } from '../ids.d-B2GAAifq.cjs';
5
+ export { B as Brand, _ as __brand } from '../ids.d-B2GAAifq.cjs';
6
+ import { M as MediaSource } from '../CameraPort.d-Cv31Pz7g.cjs';
7
+ import { I as Interpretation } from '../projection.d-CeIUsbSk.cjs';
8
8
  import { ReactNode } from 'react';
9
9
  import { StyleProp, ViewStyle } from 'react-native';
10
10
 
@@ -1,10 +1,10 @@
1
- import { E as EverfurError } from '../EverfurError-DeBqRpQV.js';
2
- export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError-DeBqRpQV.js';
3
- import { E as EverfurResult } from '../EverfurResult-ClPTS0P2.js';
4
- import { J as JobId, P as PetRef } from '../ids-B2GAAifq.js';
5
- export { B as Brand, _ as __brand } from '../ids-B2GAAifq.js';
6
- import { M as MediaSource } from '../CameraPort-Cv31Pz7g.js';
7
- import { I as Interpretation } from '../projection-CeIUsbSk.js';
1
+ import { E as EverfurError } from '../EverfurError.d-8NHtlgzA.js';
2
+ export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError.d-8NHtlgzA.js';
3
+ import { E as EverfurResult } from '../EverfurResult.d-D_-254ZY.js';
4
+ import { J as JobId, P as PetRef } from '../ids.d-B2GAAifq.js';
5
+ export { B as Brand, _ as __brand } from '../ids.d-B2GAAifq.js';
6
+ import { M as MediaSource } from '../CameraPort.d-Cv31Pz7g.js';
7
+ import { I as Interpretation } from '../projection.d-CeIUsbSk.js';
8
8
  import { ReactNode } from 'react';
9
9
  import { StyleProp, ViewStyle } from 'react-native';
10
10
 
@@ -21,6 +21,8 @@ import{createContext,forwardRef,createElement,useState,useEffect,useCallback,use
21
21
  /* @__PURE__ */Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),
22
22
  /* @__PURE__ */Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),
23
23
  /* @__PURE__ */Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),
24
+ /* @__PURE__ */Object.freeze({wireCode:"catalog_empty_refused",envelope:"http_envelope",httpStatus:409,retryable:false}),
25
+ /* @__PURE__ */Object.freeze({wireCode:"catalog_shrink_refused",envelope:"http_envelope",httpStatus:409,retryable:false}),
24
26
  /* @__PURE__ */Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
25
27
  /* @__PURE__ */Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),
26
28
  /* @__PURE__ */Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),
@@ -45,6 +47,7 @@ import{createContext,forwardRef,createElement,useState,useEffect,useCallback,use
45
47
  /* @__PURE__ */Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),
46
48
  /* @__PURE__ */Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),
47
49
  /* @__PURE__ */Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),
50
+ /* @__PURE__ */Object.freeze({wireCode:"linked_account_read_only",envelope:"http_envelope",httpStatus:409,retryable:false}),
48
51
  /* @__PURE__ */Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),
49
52
  /* @__PURE__ */Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),
50
53
  /* @__PURE__ */Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),
@@ -88,7 +91,7 @@ import{createContext,forwardRef,createElement,useState,useEffect,useCallback,use
88
91
  /* @__PURE__ */Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
89
92
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),
90
93
  /* @__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(row=>row.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"}),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 row=BY_KEY.get(candidate+key);if(row)return row}}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 row=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)),row);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__ */
94
+ /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row=>row.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 row=BY_KEY.get(candidate+key);if(row)return row}}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 row=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)),row);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
95
  return Object.freeze({ok:true,value:value})}function err(error){/* @__PURE__ */
93
96
  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 assertNever(x){throw new Error(`assertNever: unhandled discriminated-union member ${JSON.stringify(x)}`)}function errorFrame(fields){/* @__PURE__ */
94
97
  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 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 stamp=extra=>/* @__PURE__ */Object.freeze({call:call,method:req.method,path:req.path,attempt:attempt,...idempotencyKey?{idempotencyKey:idempotencyKey}:{},...extra});emit(stamp({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(stamp({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(stamp({phase:"settled",...settledEvent})),err(error);if(emit(stamp({phase:"retry",...settledEvent,delayMs:decision.delayMs})),await sleep(decision.delayMs,req.signal),req.signal?.aborted===true)return emit(stamp({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(
@@ -99,7 +102,7 @@ return Object.freeze({metadata:/* @__PURE__ */Object.freeze(out),droppedOperator
99
102
  return Object.freeze({url:url,fields:/* @__PURE__ */Object.freeze(fields),s3Key:s3Key,expiresAt:asFiniteNumber(raw.expires_at)})}async function stageUpload(upload,source,policy,idempotencyKey,signal){try{return await upload.presignedPut(fileHandleFromMedia(source),{target:policy,idempotencyKey:idempotencyKey,...signal?{signal:signal}:{}}),ok(void 0)}catch{return err(makeEverfurError("mediaUploadFailed",{retryable:false}))}}async function submitAnalyze(funnel,path,body,detectGate,signal){let req={method:"POST",path:path,body:body,...signal?{signal:signal}:{}},res=await funnel.send("media.analyze",req);if(res.ok){let job=parseAsyncJob(res.value);return job!==null?{kind:"async",job:job}:{kind:"sync",body:res.value}}let gate=detectGate(res.error.httpStatus,res.error);return gate!==null?{kind:"gate",gate:gate}:{kind:"error",error:res.error}}function parseAsyncJob(raw){if(!isRecord2(raw))return null;let jobId=asString(raw.job_id);if(jobId===null)return null;let status=asString(raw.status);return status!==null&&isTerminalStatus(status)?null:/* @__PURE__ */Object.freeze({jobId:jobId,estimatedSeconds:asFiniteNumber(raw.estimated_completion_seconds)})}var POLL_FIRST_DELAY_MS=2e3,POLL_MAX_DELAY_MS=5e3,POLL_BUDGET_MS=9e4;async function pollJob(funnel,jobId,deps){let{timers:timers,signal:signal,alive:alive}=deps,start=timers.now(),budget=Math.max(POLL_BUDGET_MS,(deps.estimatedSeconds??0)*1e3),delay=POLL_FIRST_DELAY_MS;for(;;){if(signal.aborted||!alive())return{kind:"aborted"};if(await delayAbortable2(delay,signal,timers),signal.aborted||!alive())return{kind:"aborted"};if(timers.now()-start>budget)return{kind:"timeout"};let path=ENDPOINTS.job(jobId);if(path===null)return{kind:"notFound"};let res=await funnel.send("media.pollJob",{method:"GET",path:path,...signal?{signal:signal}:{}},{maxAttempts:1});if(signal.aborted||!alive())return{kind:"aborted"};if(!res.ok){if(res.error.httpStatus===404)return{kind:"notFound"};delay=Math.min(POLL_MAX_DELAY_MS,delay+1e3);continue}let status=jobStatusOf(res.value);if(status==="COMPLETED")return{kind:"complete",body:res.value};if(status==="FAILED")return{kind:"failed",error:jobFailureError(res.value)};delay=Math.min(POLL_MAX_DELAY_MS,delay+1e3)}}function jobStatusOf(body){return isRecord2(body)?(asString(body.status)??"PROCESSING").toUpperCase():"PROCESSING"}function isTerminalStatus(status){let upper=status.toUpperCase();return upper==="COMPLETED"||upper==="FAILED"}function jobFailureError(body){let wire=isRecord2(body)?asString(body.error)??asString(body.error_code):null;return makeEverfurError("internalError",{retryable:false,...wire?{wireMessage:wire}:{}})}function detectNoGate(){return null}function analyzeBody(s3Key,extra){let body={s3_key:s3Key};return extra.type!==void 0&&(body.type=extra.type),extra.petRef!=null&&(body.pet_id=extra.petRef),extra.precheckToken!=null&&(body.precheck_token=extra.precheckToken),body}function createVideoController(deps){return new VideoController(deps)}var VideoController=class extends MediaStore{constructor(deps){super({status:"idle",job:null,result:null,error:null,isCaptureAvailable:isCaptureAvailable(deps.camera),progress:0}),this.funnel=deps.funnel??createRequestFunnel({auth:deps.auth,...deps.errorPolicy?{errorPolicy:deps.errorPolicy}:{}}),this.camera=deps.camera,this.upload=deps.upload,this.defaultPetRef=deps.petRef??null,this.telemetry=deps.telemetry??noopTelemetry,this.timers=deps.timers??defaultTimers,this.makeIdempotencyKey=deps.makeIdempotencyKey??defaultIdempotencyFactory()}async capture(opts){if(!isCaptureAvailable(this.camera))return err(makeEverfurError("unknown",{retryable:false}));let source;try{source=await this.camera.capture(captureOptionsFor("video",15))}catch{return this.snapshot.status!=="idle"&&this.patch({status:"idle",progress:0}),err(makeEverfurError("unknown",{retryable:false}))}return this.submit(source,opts?.petRef!==void 0?{petRef:opts.petRef}:void 0)}async submit(source,opts){let op=this.beginOperation(opts?.signal),petRef=opts?.petRef??this.defaultPetRef,idempotencyKey=this.makeIdempotencyKey(),startedAt=this.timers.now();this.patch({status:"uploading",progress:0,error:null,result:null,job:null});try{let initiated=await initiateUpload(this.funnel,{purpose:"gait_video",contentType:source.mimeType,byteSize:mediaByteSize(source),signal:op.signal});if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();if(!initiated.ok)return this.fail(op,initiated.error);let staged=await stageUpload(this.upload,source,initiated.value,idempotencyKey,op.signal);if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();if(!staged.ok)return this.telemetry.track("analysis.upload",{capability:"video",purpose:"gait_video",outcome:"failed"}),this.fail(op,staged.error);this.patch({progress:1}),this.telemetry.track("analysis.upload",{capability:"video",purpose:"gait_video",byteSize:mediaByteSize(source)??0,durationMs:mediaDurationMs(source)??0,outcome:"ok"}),this.patch({status:"analyzing"});let outcome=await submitAnalyze(this.funnel,ENDPOINTS.videoAnalyze,analyzeBody(initiated.value.s3Key,{petRef:petRef}),detectNoGate,op.signal);if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();if(outcome.kind==="error")return this.fail(op,outcome.error);if(outcome.kind==="gate")return this.fail(op,makeEverfurError("unknown",{retryable:!1}));if(outcome.kind==="sync"){let jobId=resultIdOf(outcome.body)??"";return this.complete(op,outcome.body,jobId,startedAt)}let job=outcome.job;this.patch({job:{id:job.jobId,state:"processing"}});let poll=await pollJob(this.funnel,job.jobId,{timers:this.timers,signal:op.signal,alive:()=>this.alive(op.epoch),estimatedSeconds:job.estimatedSeconds});if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();switch(poll.kind){case"aborted":return abortedResult();case"complete":return this.complete(op,poll.body,job.jobId,startedAt);case"failed":return this.fail(op,poll.error);case"timeout":return this.fail(op,makeEverfurError("streamTimeout",{retryable:!0}));case"notFound":return this.patch({job:null}),this.fail(op,makeEverfurError("conversationNotFound",{retryable:!1,httpStatus:404}));default:return this.fail(op,makeEverfurError("internalError",{retryable:!1}))}}finally{op.settle()}}cancel(){this.inFlight?.abort(),this.inFlight=null,(this.snapshot.status==="uploading"||this.snapshot.status==="analyzing")&&this.patch({status:"idle",progress:0})}complete(op,body,jobId,startedAt){if(!this.alive(op.epoch))return abortedResult();let mapped=mapVideoResult(body,jobId);return mapped.droppedOperatorKeys>0&&this.telemetry.track("analysis.metadata_leak_guard",{droppedKeyCount:mapped.droppedOperatorKeys}),this.telemetry.track("analysis.quality_gate",{usable:mapped.result.quality.usable,reasons:mapped.result.quality.reasons}),this.patch({status:"complete",progress:1,result:mapped.result,error:null,job:{id:jobId,state:"complete"}}),this.telemetry.track("analysis.result",{capability:"video",modelVersion:mapped.result.modelVersion??"",timeToResultMs:this.timers.now()-startedAt}),ok(jobId)}fail(op,error){return this.alive(op.epoch)?(this.patch({status:"error",error:error,progress:0}),this.telemetry.trackExpectedFailure("analysis.error",{code:error.code,...error.httpStatus!==void 0?{httpStatus:error.httpStatus}:{}}),err(error)):abortedResult()}};function mapVideoResult(body,jobId){let projection=projectDetectionMetadata(locateDetectionMetadata(body)),interpretation=parseInterpretation(locateInterpretation(body)),modelVersion=asString(projection.metadata.model_version)??(isRecord2(body)?asString(body.model_version):null);return{result:/* @__PURE__ */Object.freeze({jobId:jobId,analysisType:"gait",detections:parseVideoDetections(body),interpretation:interpretation,modelVersion:modelVersion,quality:parseQuality(body)}),droppedOperatorKeys:projection.droppedOperatorKeys}}function parseVideoDetections(body){let raw=isRecord2(body)?body.detections:null;if(!Array.isArray(raw))/* @__PURE__ */return Object.freeze([]);let out=[];for(let entry of raw){if(!isRecord2(entry))continue;let label=asString(entry.label)??asString(entry.name);label!==null&&out.push(
100
103
  /* @__PURE__ */Object.freeze({label:label,confidence:asUnitNumber(entry.confidence)??0,timestampMs:asFiniteNumber(entry.timestamp_ms??entry.timestamp),durationMs:asFiniteNumber(entry.duration_ms??entry.duration)}))}/* @__PURE__ */
101
104
  return Object.freeze(out)}function parseQuality(body){let raw=isRecord2(body)?body.quality:null;if(!isRecord2(raw))/* @__PURE__ */return Object.freeze({usable:true,reasons:/* @__PURE__ */Object.freeze([])});let usable=raw.usable;/* @__PURE__ */
102
- return Object.freeze({usable:typeof usable=="boolean"?usable:true,reasons:/* @__PURE__ */Object.freeze(asStringList(raw.reasons))})}function resultIdOf(body){return isRecord2(body)?asString(body.result_id)??asString(body.request_id)??asString(body.job_id):null}function abortedResult(){return err(makeEverfurError("unknown",{retryable:false}))}function defaultIdempotencyFactory(){let counter=0;return()=>`video-analyze-${Date.now().toString(36)}-${(counter++).toString(36)}-${Math.random().toString(36).slice(2,10)}`}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 BOOTSTRAP_SNAPSHOT=/* @__PURE__ */Object.freeze({status:"idle",job:null,result:null,error:null,isCaptureAvailable:false,progress:0}),NOOP_UNSUBSCRIBE=()=>{};function useEverfurVideo(opts){let{runtime:runtime,userRef:userRef,activePet:activePet,scopeEpoch:scopeEpoch}=useEverfurContext(),petRef=opts?.petRef??activePet??null,[controller,setController]=useState(null);useEffect(()=>{let{services:services}=runtime.registry,acquired=runtime.registry.acquire("video",`${userRef??""}|${petRef??""}`,()=>createVideoController({...services.errorPolicy?{errorPolicy:services.errorPolicy}:{},auth:services.authFor(userRef),camera:services.camera,upload:services.upload,petRef:petRef,telemetry:services.telemetry}),controller2=>controller2.dispose());return setController(acquired),()=>{setController(current=>current===acquired?null:current),runtime.registry.release(acquired)}},[runtime,userRef,petRef,scopeEpoch]);let subscribe=useCallback(onChange=>controller?controller.subscribe(onChange):NOOP_UNSUBSCRIBE,[controller]),getSnapshot=useCallback(()=>controller?controller.getSnapshot():BOOTSTRAP_SNAPSHOT,[controller]),snapshot=useSyncExternalStore(subscribe,getSnapshot,getSnapshot),submit=useCallback(source=>controller?controller.submit(source):Promise.resolve(notReadyError()),[controller]),capture=useCallback(()=>controller?controller.capture():Promise.resolve(notReadyError()),[controller]),cancel=useCallback(()=>{controller?.cancel()},[controller]);return useMemo(()=>({status:snapshot.status,job:snapshot.job,result:snapshot.result,error:snapshot.error,isCaptureAvailable:snapshot.isCaptureAvailable,progress:snapshot.progress,isBootstrapping:controller===null,submit:submit,capture:capture,cancel:cancel}),[snapshot,controller,submit,capture,cancel])}function notReadyError(){return err(makeEverfurError("internalError",{retryable:true}))}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})}forwardRef(function(props,ref){return createElement(TextInput,{...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]]}}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 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__ */
105
+ return Object.freeze({usable:typeof usable=="boolean"?usable:true,reasons:/* @__PURE__ */Object.freeze(asStringList(raw.reasons))})}function resultIdOf(body){return isRecord2(body)?asString(body.result_id)??asString(body.request_id)??asString(body.job_id):null}function abortedResult(){return err(makeEverfurError("unknown",{retryable:false}))}function defaultIdempotencyFactory(){let counter=0;return()=>`video-analyze-${Date.now().toString(36)}-${(counter++).toString(36)}-${Math.random().toString(36).slice(2,10)}`}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 BOOTSTRAP_SNAPSHOT=/* @__PURE__ */Object.freeze({status:"idle",job:null,result:null,error:null,isCaptureAvailable:false,progress:0}),NOOP_UNSUBSCRIBE=()=>{};function useEverfurVideo(opts){let{runtime:runtime,userRef:userRef,activePet:activePet,scopeEpoch:scopeEpoch}=useEverfurContext(),petRef=opts?.petRef??activePet??null,[controller,setController]=useState(null);useEffect(()=>{let{services:services}=runtime.registry,acquired=runtime.registry.acquire("video",`${userRef??""}|${petRef??""}`,()=>createVideoController({...services.errorPolicy?{errorPolicy:services.errorPolicy}:{},auth:services.authFor(userRef),camera:services.camera,upload:services.upload,petRef:petRef,telemetry:services.telemetry}),controller2=>controller2.dispose());return setController(acquired),()=>{setController(current=>current===acquired?null:current),runtime.registry.release(acquired)}},[runtime,userRef,petRef,scopeEpoch]);let subscribe=useCallback(onChange=>controller?controller.subscribe(onChange):NOOP_UNSUBSCRIBE,[controller]),getSnapshot=useCallback(()=>controller?controller.getSnapshot():BOOTSTRAP_SNAPSHOT,[controller]),snapshot=useSyncExternalStore(subscribe,getSnapshot,getSnapshot),submit=useCallback(source=>controller?controller.submit(source):Promise.resolve(notReadyError()),[controller]),capture=useCallback(()=>controller?controller.capture():Promise.resolve(notReadyError()),[controller]),cancel=useCallback(()=>{controller?.cancel()},[controller]);return useMemo(()=>({status:snapshot.status,job:snapshot.job,result:snapshot.result,error:snapshot.error,isCaptureAvailable:snapshot.isCaptureAvailable,progress:snapshot.progress,isBootstrapping:controller===null,submit:submit,capture:capture,cancel:cancel}),[snapshot,controller,submit,capture,cancel])}function notReadyError(){return err(makeEverfurError("internalError",{retryable:true}))}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})}forwardRef(function(props,ref){return createElement(TextInput,{...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]]}}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 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__ */
103
106
  return Object.freeze({reason:explicit.reason,level:explicit.level,recoverable:explicit.recoverable})}/* @__PURE__ */
104
107
  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 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(),styles=useMemo(()=>makeStyles(theme),[theme]);/* @__PURE__ */
105
108
  return jsx(View,{style:[styles.offstate,style],accessible:true,accessibilityState:{busy:true},accessibilityLabel:`Loading ${capability}`,children:/* @__PURE__ */jsx(View,{style:styles.skeletonBar})})}function OffState({decision:decision,style:style}){let theme=useEverfurTheme(),styles=useMemo(()=>makeStyles(theme),[theme]),message=decision.disabled?.reason??"";/* @__PURE__ */
@@ -1,123 +1,10 @@
1
- import { E as EverfurError } from './EverfurError-DeBqRpQV.js';
2
- import { E as EverfurResult } from './EverfurResult-ClPTS0P2.js';
3
- import { R as RecordsRequestId, P as PetRef } from './ids-B2GAAifq.js';
4
- import { F as FileHandle, U as UploadTransport } from './ports-BN6RHF9W.js';
5
- import { am as RecordsFeatures, an as RecordsUploadContentType, M as RecordMarkersView, N as RecordPdfLink, P as RecordShareAudienceScope, l as RecordShareAudience, T as RecordShareLink, Q as RecordShareEmailInput, S as RecordShareEmailReceipt, X as RecordsClinicBatchClient } from './depth-DDKGfFaB.js';
6
- import { C as CreateUploadRequestInput, d as RecordsRequestView, U as UploadedDocument, g as RecordsView, h as ConsentState, G as GrantConsentInput, i as RecordsDenialReason, a as RecordEntity } from './models-CnXY5LuO.js';
7
- import { c as RecordsDepthStatus, i as RecordsClinicController } from './useRecordsDepth-hR94debv.js';
8
-
9
- interface UploadDocumentInput {
10
- readonly requestId: RecordsRequestId;
11
- readonly file: FileHandle;
12
- readonly onProgress?: (fraction: number) => void;
13
- readonly signal?: AbortSignal;
14
- }
15
- interface RecordsController {
16
- /** Create the self-upload request. Idempotent on `idempotencyKey`. Lands `awaiting_upload`. */
17
- createUploadRequest(input: CreateUploadRequestInput): Promise<EverfurResult<RecordsRequestView>>;
18
- /** Two-phase presigned upload of ONE document (§3.2). Bytes go DIRECT to S3. Resolves at `received`. */
19
- uploadDocument(input: UploadDocumentInput): Promise<EverfurResult<UploadedDocument>>;
20
- /** Poll one request's parse lifecycle. */
21
- getRequest(id: RecordsRequestId): Promise<EverfurResult<RecordsRequestView>>;
22
- /** All of this user's requests, newest-first (server-ordered). */
23
- listRequests(): Promise<EverfurResult<readonly RecordsRequestView[]>>;
24
- /** The parsed, partner-redacted record. Consent-gated + redaction-fail-closed. */
25
- getRecord(pet: PetRef): Promise<EverfurResult<RecordsView>>;
26
- /** Consent read-back. Never a hard failure for an absent row -> `granted:false`. */
27
- getConsent(pet: PetRef): Promise<EverfurResult<ConsentState>>;
28
- /** Grant content-exposure consent. Fail-closed audited server-side. Idempotent. */
29
- grantConsent(input: GrantConsentInput): Promise<EverfurResult<ConsentState>>;
30
- /** Revoke consent (prospective). Drops any cached record for the pet from memory. Idempotent. */
31
- revokeConsent(pet: PetRef): Promise<EverfurResult<ConsentState>>;
32
- /** The last record read for a pet, held in memory only; cleared on revoke. Null when none. */
33
- peekCachedRecord(pet: PetRef): RecordsView | null;
34
- /** Emit `records.capability.denied` (the rn CapabilityGate disabled surface calls this once, R12). */
35
- reportCapabilityDenied(pet: PetRef | null): void;
36
- /**
37
- * `GET /widget/v1/records/features`: which records features are live, and the upload types while photo
38
- * upload is armed. NEVER rejects: a failed or malformed read is `RECORDS_FEATURES_PDF_ONLY`. The answer is
39
- * also what `uploadDocument`'s client-side gate accepts from then on, so a photo is refused before initiate
40
- * until a read has armed it (and again after a read that comes back dark).
41
- *
42
- * OPTIONAL so a host's own controller still satisfies this interface; a surface given one without it offers
43
- * PDF upload only, exactly as before the read existed.
44
- */
45
- readFeatures?(): Promise<RecordsFeatures>;
46
- }
47
-
48
- type RecordsStatus = 'loading' | 'empty' | 'error' | 'populated';
49
- /** Why a picked file was not uploaded (the consumer picker's `PickSkipReason`): decided BEFORE any request is made. */
50
- type UploadSkipReason = 'too_large' | 'unsupported';
51
- /** One file of an upload batch, with its own lifecycle and progress (the consumer `UploadItem`). */
52
- interface UploadQueueItem {
53
- /** Stable row key within the batch. */
54
- readonly key: string;
55
- /** The host's file name when it gave one; rendered locally, never sent. */
56
- readonly name: string | null;
57
- readonly status: 'queued' | 'uploading' | 'done' | 'failed' | 'skipped';
58
- /** 0..1, monotonic while uploading; 1 once done. */
59
- readonly progress: number;
60
- readonly skipReason: UploadSkipReason | null;
61
- readonly error: EverfurError | null;
62
- }
63
- interface UseEverfurRecordsState {
64
- readonly status: RecordsStatus;
65
- readonly record: RecordsView | null;
66
- readonly requests: readonly RecordsRequestView[];
67
- /** the most-recent request, whose timeline the populated state renders. */
68
- readonly activeRequest: RecordsRequestView | null;
69
- readonly consent: ConsentState | null;
70
- readonly error: EverfurError | null;
71
- /** drives the recovery affordance: consent CTA / establish-session CTA / disabled. */
72
- readonly denialReason: RecordsDenialReason | null;
73
- /** §5.1 fail-closed suppression: render the withheld notice, never empty, never raw. */
74
- readonly withheld: boolean;
75
- readonly isUploading: boolean;
76
- readonly uploadProgress: number | null;
77
- /** The files of the last pick, one row each, with per-file status and progress. Empty until a pick. */
78
- readonly uploadQueue: readonly UploadQueueItem[];
79
- /**
80
- * What an upload may be: `['application/pdf']`, plus the photo types while the records features read says
81
- * photo upload is live. Read only for a hook opened with `readUploadFeatures: true`; PDF only otherwise, until
82
- * the read lands, and whenever it fails. `acceptsPhotos(uploadContentTypes)` is the "photos live" test.
83
- */
84
- readonly uploadContentTypes: readonly RecordsUploadContentType[];
85
- /** Create a self-upload request the user attaches documents to. */
86
- createRequest(idempotencyKey: string): Promise<EverfurResult<RecordsRequestView>>;
87
- /** Two-phase presigned upload of one document to the active request. */
88
- uploadDocument(requestId: RecordsRequestView['id'], file: FileHandle): Promise<EverfurResult<UploadedDocument>>;
89
- /**
90
- * Several documents in one pick: uploaded ONE AT A TIME (kinder to slow links), a live row per file, one failed
91
- * file never aborts the rest (continue-on-error), and a non-PDF or oversize file is skipped with a reason before
92
- * any request is created, so no quota is charged for it. Resolves with the settled rows.
93
- */
94
- uploadDocuments(requestId: RecordsRequestView['id'], files: readonly FileHandle[]): Promise<readonly UploadQueueItem[]>;
95
- /** Grant content-exposure consent, then fetch the record. */
96
- grantConsent(consentVersion: string, idempotencyKey: string): Promise<EverfurResult<ConsentState>>;
97
- /** Revoke consent (prospective); drops the record from view. */
98
- revokeConsent(): Promise<EverfurResult<ConsentState>>;
99
- /**
100
- * Re-run the surface fetch (error retry, pull to refresh). Settles once the reads it started have landed, so a
101
- * pull-to-refresh spinner can stay up until then; a caller that does not need that can ignore the promise.
102
- */
103
- refresh(): Promise<void>;
104
- }
105
- declare function useEverfurRecords(opts: {
106
- readonly petRef: PetRef;
107
- /** Host/test seam: inject a controller directly instead of acquiring one from the runtime. */
108
- readonly controller?: RecordsController;
109
- /**
110
- * The upload transport for this surface, overriding `EverfurConfig.uploadTransport`. The latest value is used
111
- * at upload time, so a transport created inline on each render does not rebuild the controller.
112
- */
113
- readonly uploadTransport?: UploadTransport;
114
- /**
115
- * Read `GET /widget/v1/records/features` on mount, so `uploadContentTypes` (and the upload gate) carry the
116
- * photo types while photo upload is live. Set by the surfaces that offer an upload; a surface that offers
117
- * none leaves it off and issues no read.
118
- */
119
- readonly readUploadFeatures?: boolean;
120
- }): UseEverfurRecordsState;
1
+ import { E as EverfurError } from './EverfurError.d-8NHtlgzA.js';
2
+ import { P as PetRef } from './ids.d-B2GAAifq.js';
3
+ import { K as RecordMarkersView, N as RecordsClinicBatchClient } from './depth.d-OSALbYM7.js';
4
+ import { R as RecordsDepthStatus, g as RecordsClinicController } from './useRecordsDepth.d-DFcCfiXm.js';
5
+ import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
6
+ import { d as RecordPdfLink, f as RecordShareAudienceScope, R as RecordShareAudience, i as RecordShareLink, g as RecordShareEmailInput, h as RecordShareEmailReceipt } from './features.d-fNsGcg0R.js';
7
+ import { a as RecordEntity, d as RecordsRequestView } from './models.d-BagXhafD.js';
121
8
 
122
9
  interface UseRecordsMarkersState {
123
10
  readonly status: RecordsDepthStatus;
@@ -232,7 +119,8 @@ interface UseRecordFactEditState {
232
119
  readonly error: string | null;
233
120
  /**
234
121
  * Whether to offer the editor. The fact routes are their own feature flag and it defaults ON, so this is true
235
- * from the first render and turns false only once a write has answered the dark 404 for this scope. There is
122
+ * from the first render and turns false once a write has answered the dark 404 for this scope, or once the
123
+ * records features read says `fact_edit: false` for this caller (an Everfur-linked member). There is
236
124
  * no cheap read on these POST-only routes to probe with, and reading another feature's route instead is what
237
125
  * made a tenant's share-links setting silently disable its fact editor.
238
126
  */
@@ -359,4 +247,4 @@ interface ClinicCall {
359
247
  */
360
248
  declare function selectClinicCall(request: RecordsRequestView): ClinicCall | null;
361
249
 
362
- export { useEverfurRecords as A, useEverfurRecordsClinic as B, type ClinicCall as C, useEverfurRecordsClinicBatch as D, useRecordFactEdit as E, type FactOverlay as F, useRecordPdfLink as G, useRecordShares as H, useRecordsMarkers as I, type RecordsController as R, type ShareRowView as S, type UploadDocumentInput as U, REQUEST_TIMELINE_TITLES as a, type RecordSharesStatus as b, type RecordsDashboardState as c, type RecordsDashboardView as d, type RecordsEmptyVariant as e, type RecordsStatus as f, type RequestTimelineEvent as g, type RequestTimelineEventKey as h, type RequestTimelineEventState as i, type UploadQueueItem as j, type UploadSkipReason as k, type UseEverfurRecordsState as l, type UseRecordFactEditState as m, type UseRecordPdfLinkState as n, type UseRecordSharesState as o, type UseRecordsMarkersState as p, applyFactOverlay as q, buildRequestTimeline as r, deriveRecordsDashboardState as s, isFactEditable as t, pickPetRecordsRequest as u, selectClinicCall as v, selectDashboardView as w, selectPrimaryLabel as x, selectRequestList as y, selectRequestTitle as z };
250
+ export { type ClinicCall as C, type FactOverlay as F, REQUEST_TIMELINE_TITLES as R, type ShareRowView as S, type UseRecordFactEditState as U, type RecordSharesStatus as a, type RecordsDashboardState as b, type RecordsDashboardView as c, type RecordsEmptyVariant as d, type RequestTimelineEvent as e, type RequestTimelineEventKey as f, type RequestTimelineEventState as g, type UseRecordPdfLinkState as h, type UseRecordSharesState as i, type UseRecordsMarkersState as j, applyFactOverlay as k, buildRequestTimeline as l, deriveRecordsDashboardState as m, isFactEditable as n, selectDashboardView as o, pickPetRecordsRequest as p, selectPrimaryLabel as q, selectRequestList as r, selectClinicCall as s, selectRequestTitle as t, useEverfurRecordsClinic as u, useEverfurRecordsClinicBatch as v, useRecordFactEdit as w, useRecordPdfLink as x, useRecordShares as y, useRecordsMarkers as z };
@@ -1,123 +1,10 @@
1
- import { E as EverfurError } from './EverfurError-DeBqRpQV.cjs';
2
- import { E as EverfurResult } from './EverfurResult-COlXj1wq.cjs';
3
- import { R as RecordsRequestId, P as PetRef } from './ids-B2GAAifq.cjs';
4
- import { F as FileHandle, U as UploadTransport } from './ports-BN6RHF9W.cjs';
5
- import { am as RecordsFeatures, an as RecordsUploadContentType, M as RecordMarkersView, N as RecordPdfLink, P as RecordShareAudienceScope, l as RecordShareAudience, T as RecordShareLink, Q as RecordShareEmailInput, S as RecordShareEmailReceipt, X as RecordsClinicBatchClient } from './depth-DNxDieoO.cjs';
6
- import { C as CreateUploadRequestInput, d as RecordsRequestView, U as UploadedDocument, g as RecordsView, h as ConsentState, G as GrantConsentInput, i as RecordsDenialReason, a as RecordEntity } from './models-A4A5S7AG.cjs';
7
- import { c as RecordsDepthStatus, i as RecordsClinicController } from './useRecordsDepth-DRrJntjt.cjs';
8
-
9
- interface UploadDocumentInput {
10
- readonly requestId: RecordsRequestId;
11
- readonly file: FileHandle;
12
- readonly onProgress?: (fraction: number) => void;
13
- readonly signal?: AbortSignal;
14
- }
15
- interface RecordsController {
16
- /** Create the self-upload request. Idempotent on `idempotencyKey`. Lands `awaiting_upload`. */
17
- createUploadRequest(input: CreateUploadRequestInput): Promise<EverfurResult<RecordsRequestView>>;
18
- /** Two-phase presigned upload of ONE document (§3.2). Bytes go DIRECT to S3. Resolves at `received`. */
19
- uploadDocument(input: UploadDocumentInput): Promise<EverfurResult<UploadedDocument>>;
20
- /** Poll one request's parse lifecycle. */
21
- getRequest(id: RecordsRequestId): Promise<EverfurResult<RecordsRequestView>>;
22
- /** All of this user's requests, newest-first (server-ordered). */
23
- listRequests(): Promise<EverfurResult<readonly RecordsRequestView[]>>;
24
- /** The parsed, partner-redacted record. Consent-gated + redaction-fail-closed. */
25
- getRecord(pet: PetRef): Promise<EverfurResult<RecordsView>>;
26
- /** Consent read-back. Never a hard failure for an absent row -> `granted:false`. */
27
- getConsent(pet: PetRef): Promise<EverfurResult<ConsentState>>;
28
- /** Grant content-exposure consent. Fail-closed audited server-side. Idempotent. */
29
- grantConsent(input: GrantConsentInput): Promise<EverfurResult<ConsentState>>;
30
- /** Revoke consent (prospective). Drops any cached record for the pet from memory. Idempotent. */
31
- revokeConsent(pet: PetRef): Promise<EverfurResult<ConsentState>>;
32
- /** The last record read for a pet, held in memory only; cleared on revoke. Null when none. */
33
- peekCachedRecord(pet: PetRef): RecordsView | null;
34
- /** Emit `records.capability.denied` (the rn CapabilityGate disabled surface calls this once, R12). */
35
- reportCapabilityDenied(pet: PetRef | null): void;
36
- /**
37
- * `GET /widget/v1/records/features`: which records features are live, and the upload types while photo
38
- * upload is armed. NEVER rejects: a failed or malformed read is `RECORDS_FEATURES_PDF_ONLY`. The answer is
39
- * also what `uploadDocument`'s client-side gate accepts from then on, so a photo is refused before initiate
40
- * until a read has armed it (and again after a read that comes back dark).
41
- *
42
- * OPTIONAL so a host's own controller still satisfies this interface; a surface given one without it offers
43
- * PDF upload only, exactly as before the read existed.
44
- */
45
- readFeatures?(): Promise<RecordsFeatures>;
46
- }
47
-
48
- type RecordsStatus = 'loading' | 'empty' | 'error' | 'populated';
49
- /** Why a picked file was not uploaded (the consumer picker's `PickSkipReason`): decided BEFORE any request is made. */
50
- type UploadSkipReason = 'too_large' | 'unsupported';
51
- /** One file of an upload batch, with its own lifecycle and progress (the consumer `UploadItem`). */
52
- interface UploadQueueItem {
53
- /** Stable row key within the batch. */
54
- readonly key: string;
55
- /** The host's file name when it gave one; rendered locally, never sent. */
56
- readonly name: string | null;
57
- readonly status: 'queued' | 'uploading' | 'done' | 'failed' | 'skipped';
58
- /** 0..1, monotonic while uploading; 1 once done. */
59
- readonly progress: number;
60
- readonly skipReason: UploadSkipReason | null;
61
- readonly error: EverfurError | null;
62
- }
63
- interface UseEverfurRecordsState {
64
- readonly status: RecordsStatus;
65
- readonly record: RecordsView | null;
66
- readonly requests: readonly RecordsRequestView[];
67
- /** the most-recent request, whose timeline the populated state renders. */
68
- readonly activeRequest: RecordsRequestView | null;
69
- readonly consent: ConsentState | null;
70
- readonly error: EverfurError | null;
71
- /** drives the recovery affordance: consent CTA / establish-session CTA / disabled. */
72
- readonly denialReason: RecordsDenialReason | null;
73
- /** §5.1 fail-closed suppression: render the withheld notice, never empty, never raw. */
74
- readonly withheld: boolean;
75
- readonly isUploading: boolean;
76
- readonly uploadProgress: number | null;
77
- /** The files of the last pick, one row each, with per-file status and progress. Empty until a pick. */
78
- readonly uploadQueue: readonly UploadQueueItem[];
79
- /**
80
- * What an upload may be: `['application/pdf']`, plus the photo types while the records features read says
81
- * photo upload is live. Read only for a hook opened with `readUploadFeatures: true`; PDF only otherwise, until
82
- * the read lands, and whenever it fails. `acceptsPhotos(uploadContentTypes)` is the "photos live" test.
83
- */
84
- readonly uploadContentTypes: readonly RecordsUploadContentType[];
85
- /** Create a self-upload request the user attaches documents to. */
86
- createRequest(idempotencyKey: string): Promise<EverfurResult<RecordsRequestView>>;
87
- /** Two-phase presigned upload of one document to the active request. */
88
- uploadDocument(requestId: RecordsRequestView['id'], file: FileHandle): Promise<EverfurResult<UploadedDocument>>;
89
- /**
90
- * Several documents in one pick: uploaded ONE AT A TIME (kinder to slow links), a live row per file, one failed
91
- * file never aborts the rest (continue-on-error), and a non-PDF or oversize file is skipped with a reason before
92
- * any request is created, so no quota is charged for it. Resolves with the settled rows.
93
- */
94
- uploadDocuments(requestId: RecordsRequestView['id'], files: readonly FileHandle[]): Promise<readonly UploadQueueItem[]>;
95
- /** Grant content-exposure consent, then fetch the record. */
96
- grantConsent(consentVersion: string, idempotencyKey: string): Promise<EverfurResult<ConsentState>>;
97
- /** Revoke consent (prospective); drops the record from view. */
98
- revokeConsent(): Promise<EverfurResult<ConsentState>>;
99
- /**
100
- * Re-run the surface fetch (error retry, pull to refresh). Settles once the reads it started have landed, so a
101
- * pull-to-refresh spinner can stay up until then; a caller that does not need that can ignore the promise.
102
- */
103
- refresh(): Promise<void>;
104
- }
105
- declare function useEverfurRecords(opts: {
106
- readonly petRef: PetRef;
107
- /** Host/test seam: inject a controller directly instead of acquiring one from the runtime. */
108
- readonly controller?: RecordsController;
109
- /**
110
- * The upload transport for this surface, overriding `EverfurConfig.uploadTransport`. The latest value is used
111
- * at upload time, so a transport created inline on each render does not rebuild the controller.
112
- */
113
- readonly uploadTransport?: UploadTransport;
114
- /**
115
- * Read `GET /widget/v1/records/features` on mount, so `uploadContentTypes` (and the upload gate) carry the
116
- * photo types while photo upload is live. Set by the surfaces that offer an upload; a surface that offers
117
- * none leaves it off and issues no read.
118
- */
119
- readonly readUploadFeatures?: boolean;
120
- }): UseEverfurRecordsState;
1
+ import { E as EverfurError } from './EverfurError.d-8NHtlgzA.cjs';
2
+ import { P as PetRef } from './ids.d-B2GAAifq.cjs';
3
+ import { K as RecordMarkersView, N as RecordsClinicBatchClient } from './depth.d-CjPGVPDL.cjs';
4
+ import { R as RecordsDepthStatus, g as RecordsClinicController } from './useRecordsDepth.d-sAq2Qkhr.cjs';
5
+ import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
6
+ import { d as RecordPdfLink, f as RecordShareAudienceScope, R as RecordShareAudience, i as RecordShareLink, g as RecordShareEmailInput, h as RecordShareEmailReceipt } from './features.d-fNsGcg0R.cjs';
7
+ import { a as RecordEntity, d as RecordsRequestView } from './models.d-BnLm3VAA.cjs';
121
8
 
122
9
  interface UseRecordsMarkersState {
123
10
  readonly status: RecordsDepthStatus;
@@ -232,7 +119,8 @@ interface UseRecordFactEditState {
232
119
  readonly error: string | null;
233
120
  /**
234
121
  * Whether to offer the editor. The fact routes are their own feature flag and it defaults ON, so this is true
235
- * from the first render and turns false only once a write has answered the dark 404 for this scope. There is
122
+ * from the first render and turns false once a write has answered the dark 404 for this scope, or once the
123
+ * records features read says `fact_edit: false` for this caller (an Everfur-linked member). There is
236
124
  * no cheap read on these POST-only routes to probe with, and reading another feature's route instead is what
237
125
  * made a tenant's share-links setting silently disable its fact editor.
238
126
  */
@@ -359,4 +247,4 @@ interface ClinicCall {
359
247
  */
360
248
  declare function selectClinicCall(request: RecordsRequestView): ClinicCall | null;
361
249
 
362
- export { useEverfurRecords as A, useEverfurRecordsClinic as B, type ClinicCall as C, useEverfurRecordsClinicBatch as D, useRecordFactEdit as E, type FactOverlay as F, useRecordPdfLink as G, useRecordShares as H, useRecordsMarkers as I, type RecordsController as R, type ShareRowView as S, type UploadDocumentInput as U, REQUEST_TIMELINE_TITLES as a, type RecordSharesStatus as b, type RecordsDashboardState as c, type RecordsDashboardView as d, type RecordsEmptyVariant as e, type RecordsStatus as f, type RequestTimelineEvent as g, type RequestTimelineEventKey as h, type RequestTimelineEventState as i, type UploadQueueItem as j, type UploadSkipReason as k, type UseEverfurRecordsState as l, type UseRecordFactEditState as m, type UseRecordPdfLinkState as n, type UseRecordSharesState as o, type UseRecordsMarkersState as p, applyFactOverlay as q, buildRequestTimeline as r, deriveRecordsDashboardState as s, isFactEditable as t, pickPetRecordsRequest as u, selectClinicCall as v, selectDashboardView as w, selectPrimaryLabel as x, selectRequestList as y, selectRequestTitle as z };
250
+ export { type ClinicCall as C, type FactOverlay as F, REQUEST_TIMELINE_TITLES as R, type ShareRowView as S, type UseRecordFactEditState as U, type RecordSharesStatus as a, type RecordsDashboardState as b, type RecordsDashboardView as c, type RecordsEmptyVariant as d, type RequestTimelineEvent as e, type RequestTimelineEventKey as f, type RequestTimelineEventState as g, type UseRecordPdfLinkState as h, type UseRecordSharesState as i, type UseRecordsMarkersState as j, applyFactOverlay as k, buildRequestTimeline as l, deriveRecordsDashboardState as m, isFactEditable as n, selectDashboardView as o, pickPetRecordsRequest as p, selectPrimaryLabel as q, selectRequestList as r, selectClinicCall as s, selectRequestTitle as t, useEverfurRecordsClinic as u, useEverfurRecordsClinicBatch as v, useRecordFactEdit as w, useRecordPdfLink as x, useRecordShares as y, useRecordsMarkers as z };