@everfur/sdk 0.15.1 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/README.md +3 -1
  3. package/chat/lite/package.json +8 -0
  4. package/dist/Chat.d-CzI2228d.d.ts +11 -0
  5. package/dist/Chat.d-D3ScVQ22.d.cts +11 -0
  6. package/dist/{DepthViews.d-PuBGdAYk.d.cts → DepthViews.d-6U4QqaW3.d.cts} +1 -1
  7. package/dist/{DepthViews.d--1daZblh.d.cts → DepthViews.d-BLx_ZTwa.d.cts} +1 -1
  8. package/dist/{DepthViews.d-CKTnEeUo.d.ts → DepthViews.d-Cwbel5o4.d.ts} +1 -1
  9. package/dist/{DepthViews.d-BuEWI6Ln.d.ts → DepthViews.d-DVIydPLt.d.ts} +1 -1
  10. package/dist/{RecordsPage.d-CBB8sfoY.d.ts → RecordsPage.d-Bwalb0wU.d.ts} +1 -1
  11. package/dist/{RecordsPage.d-Dq5gpQG0.d.cts → RecordsPage.d-Do7T8Fns.d.cts} +1 -1
  12. package/dist/animations/index.d.cts +5 -5
  13. package/dist/animations/index.d.ts +5 -5
  14. package/dist/{Chat.d-BlsnQwCQ.d.ts → appStateLifecycle.d-Bd-rNy6K.d.ts} +62 -144
  15. package/dist/{Chat.d-BO5iJsR2.d.cts → appStateLifecycle.d-_mh4CEAq.d.cts} +62 -144
  16. package/dist/attachmentTransport.d-Syrvv5zH.d.ts +41 -0
  17. package/dist/attachmentTransport.d-r1XCCdUB.d.cts +41 -0
  18. package/dist/{attachments.d-DFP9yvz9.d.ts → attachments.d-BiBGBE4o.d.ts} +24 -6
  19. package/dist/{attachments.d-C2nkIyDB.d.ts → attachments.d-CyB8hzDo.d.ts} +2 -2
  20. package/dist/{attachments.d-DRHsJkni.d.cts → attachments.d-GlO5UP7H.d.cts} +24 -6
  21. package/dist/{attachments.d-DRUC35Ti.d.cts → attachments.d-Y-qvSHVU.d.cts} +2 -2
  22. package/dist/{bookingCopy.d-bF_QknDC.d.cts → bookingCopy.d-BIaCiRuW.d.cts} +2 -2
  23. package/dist/{bookingCopy.d-CFL-1Be2.d.ts → bookingCopy.d-DgWvNKD5.d.ts} +2 -2
  24. package/dist/{casesRepository.d-C__BnffJ.d.ts → casesRepository.d-BW8DTYeN.d.ts} +1 -1
  25. package/dist/{casesRepository.d-BMOnT1fg.d.cts → casesRepository.d-_0AO2YrL.d.cts} +1 -1
  26. package/dist/chat/index.cjs +246 -231
  27. package/dist/chat/index.d.cts +16 -49
  28. package/dist/chat/index.d.ts +16 -49
  29. package/dist/chat/index.js +246 -231
  30. package/dist/chat/lite/index.cjs +430 -0
  31. package/dist/chat/lite/index.d.cts +35 -0
  32. package/dist/chat/lite/index.d.ts +35 -0
  33. package/dist/chat/lite/index.js +430 -0
  34. package/dist/client/index.cjs +4 -4
  35. package/dist/client/index.d.cts +6 -6
  36. package/dist/client/index.d.ts +6 -6
  37. package/dist/client/index.js +4 -4
  38. package/dist/{clinicBatch.d-D68RYvc3.d.ts → clinicBatch.d-BXwATY3-.d.ts} +2 -2
  39. package/dist/{clinicBatch.d-C5deJ4xY.d.cts → clinicBatch.d-BcuSaOkv.d.cts} +2 -2
  40. package/dist/{config.d-BQgrIDdu.d.cts → config.d-D1xcxALX.d.cts} +1 -1
  41. package/dist/{config.d-XSMThgVj.d.ts → config.d-jTVsAeky.d.ts} +1 -1
  42. package/dist/consent/index.d.cts +5 -5
  43. package/dist/consent/index.d.ts +5 -5
  44. package/dist/{context.d-Ba8YyJpk.d.cts → context.d-C3x-z665.d.cts} +5 -5
  45. package/dist/{context.d-xoh5vmxS.d.ts → context.d-goZeZO2I.d.ts} +5 -5
  46. package/dist/{copy.d-Cq-s-UUv.d.cts → copy.d-DPwFY4r5.d.cts} +2 -2
  47. package/dist/{copy.d-HV9fU5kh.d.ts → copy.d-yfJv7fl6.d.ts} +2 -2
  48. package/dist/core/index.cjs +10 -10
  49. package/dist/core/index.d.cts +13 -13
  50. package/dist/core/index.d.ts +13 -13
  51. package/dist/core/index.js +10 -10
  52. package/dist/{depth.d-D7kKiYl7.d.ts → depth.d-SJzknw_P.d.ts} +2 -2
  53. package/dist/{depth.d-DYnkz8Re.d.cts → depth.d-e_8_icip.d.cts} +2 -2
  54. package/dist/{entitlementRepository.d-DmnUZLl_.d.ts → entitlementRepository.d-BNgZhwoE.d.ts} +2 -2
  55. package/dist/{entitlementRepository.d-B_kEPLhz.d.cts → entitlementRepository.d-C_LdzINM.d.cts} +2 -2
  56. package/dist/{focus.d-BHm_QtQ9.d.cts → focus.d-CXpIkIuU.d.cts} +3 -3
  57. package/dist/{focus.d-CjL6Cj0m.d.ts → focus.d-DzIgOqNB.d.ts} +3 -3
  58. package/dist/health-plan/index.cjs +136 -133
  59. package/dist/health-plan/index.d.cts +77 -24
  60. package/dist/health-plan/index.d.ts +77 -24
  61. package/dist/health-plan/index.js +136 -133
  62. package/dist/{idempotency.d-BSRK8od4.d.cts → idempotency.d-0biUa_Vw.d.cts} +1 -1
  63. package/dist/{idempotency.d-CFc4CCc9.d.ts → idempotency.d-DcqIqmf9.d.ts} +1 -1
  64. package/dist/{identity.d-Be2Es9Td.d.ts → identity.d-BEJcHY-5.d.ts} +1 -1
  65. package/dist/{identity.d-HbwYQ4-z.d.cts → identity.d-COcNGuCJ.d.cts} +1 -1
  66. package/dist/index.cjs +245 -230
  67. package/dist/index.d.cts +15 -12
  68. package/dist/index.d.ts +15 -12
  69. package/dist/index.js +246 -231
  70. package/dist/{introEvents.d-Dr34KIaD.d.cts → introEvents.d-D8N9bbGO.d.cts} +1 -1
  71. package/dist/{introEvents.d-DflJ6J9H.d.ts → introEvents.d-GCdyQyUG.d.ts} +1 -1
  72. package/dist/notifications/index.d.cts +4 -4
  73. package/dist/notifications/index.d.ts +4 -4
  74. package/dist/{optInView.d-3mbj1mR6.d.ts → optInView.d-CY2IueSZ.d.ts} +2 -2
  75. package/dist/{optInView.d-D23o1gtT.d.cts → optInView.d-DVuuWDRw.d.cts} +2 -2
  76. package/dist/{parse.d-BERabxHw.d.ts → parse.d--ztmWIIP.d.ts} +1 -1
  77. package/dist/{parse.d-4lUXdmvY.d.cts → parse.d-B-WrkW2C.d.cts} +1 -1
  78. package/dist/{pets.d-CHU0UbXt.d.cts → pets.d-BSW0oEYx.d.cts} +1 -1
  79. package/dist/{pets.d-D_ayuqjp.d.ts → pets.d-DwsImaHU.d.ts} +1 -1
  80. package/dist/{petsRepository.d-Bwfe8yuR.d.cts → petsRepository.d-BQfWC3d4.d.cts} +1 -1
  81. package/dist/{petsRepository.d-DUaAWoTv.d.ts → petsRepository.d-BudLFHVe.d.ts} +1 -1
  82. package/dist/photo/index.cjs +2 -2
  83. package/dist/photo/index.js +2 -2
  84. package/dist/{ports.d-DzEJMVRs.d.ts → ports.d-B6kDPKF7.d.ts} +4 -4
  85. package/dist/{ports.d-ClbPRUtx.d.cts → ports.d-DzPbmiDT.d.cts} +4 -4
  86. package/dist/records/depth/index.cjs +10 -10
  87. package/dist/records/depth/index.d.cts +9 -9
  88. package/dist/records/depth/index.d.ts +9 -9
  89. package/dist/records/depth/index.js +10 -10
  90. package/dist/records/index.cjs +253 -211
  91. package/dist/records/index.d.cts +169 -73
  92. package/dist/records/index.d.ts +169 -73
  93. package/dist/records/index.js +254 -212
  94. package/dist/{requestFunnel.d-YabU6G-Z.d.ts → requestFunnel.d-BPsCHJWf.d.ts} +2 -2
  95. package/dist/{requestFunnel.d-JoqddYSx.d.cts → requestFunnel.d-BdpL7gwg.d.cts} +2 -2
  96. package/dist/{runtimeTypes.d-DQTBJAbk.d.ts → runtimeTypes.d-C_Pcxn-n.d.ts} +4 -4
  97. package/dist/{runtimeTypes.d-Cv38YuzP.d.cts → runtimeTypes.d-Cfq3IrZG.d.cts} +4 -4
  98. package/dist/{screenProps.d-C-AuHoyF.d.cts → screenProps.d-BJMn1kTR.d.cts} +2 -2
  99. package/dist/{screenProps.d-BuJLzFkN.d.ts → screenProps.d-DGrfO17l.d.ts} +2 -2
  100. package/dist/server/events/index.cjs +3 -3
  101. package/dist/server/events/index.d.cts +48 -6
  102. package/dist/server/events/index.d.ts +48 -6
  103. package/dist/server/events/index.js +3 -3
  104. package/dist/server/index.cjs +2 -2
  105. package/dist/server/index.d.cts +3 -3
  106. package/dist/server/index.d.ts +3 -3
  107. package/dist/server/index.js +2 -2
  108. package/dist/shop/index.cjs +16 -16
  109. package/dist/shop/index.d.cts +12 -3
  110. package/dist/shop/index.d.ts +12 -3
  111. package/dist/shop/index.js +16 -16
  112. package/dist/tabs/index.cjs +4 -4
  113. package/dist/tabs/index.d.cts +34 -15
  114. package/dist/tabs/index.d.ts +34 -15
  115. package/dist/tabs/index.js +5 -5
  116. package/dist/{tabsModel.d-BfIQg6yS.d.ts → tabsModel.d-B7QMug1u.d.cts} +1 -17
  117. package/dist/{tabsModel.d-BfIQg6yS.d.cts → tabsModel.d-B7QMug1u.d.ts} +1 -17
  118. package/dist/televet/booking/index.cjs +2 -2
  119. package/dist/televet/booking/index.d.cts +6 -6
  120. package/dist/televet/booking/index.d.ts +6 -6
  121. package/dist/televet/booking/index.js +2 -2
  122. package/dist/televet/call/index.cjs +1 -1
  123. package/dist/televet/call/index.js +1 -1
  124. package/dist/televet/index.cjs +4 -3
  125. package/dist/televet/index.d.cts +1 -0
  126. package/dist/televet/index.d.ts +1 -0
  127. package/dist/televet/index.js +5 -4
  128. package/dist/testing/index.d.cts +1 -1
  129. package/dist/testing/index.d.ts +1 -1
  130. package/dist/testing/rn/index.cjs +1 -1
  131. package/dist/testing/rn/index.d.cts +7 -7
  132. package/dist/testing/rn/index.d.ts +7 -7
  133. package/dist/testing/rn/index.js +1 -1
  134. package/dist/testing/web/index.d.cts +7 -7
  135. package/dist/testing/web/index.d.ts +7 -7
  136. package/dist/texting/index.cjs +21 -16
  137. package/dist/texting/index.d.cts +5 -5
  138. package/dist/texting/index.d.ts +5 -5
  139. package/dist/texting/index.js +22 -17
  140. package/dist/threadOptions.d-B0folrKm.d.cts +147 -0
  141. package/dist/{threadOptions.d-DBrmOwmb.d.cts → threadOptions.d-B8HTJa9A.d.cts} +6 -40
  142. package/dist/{threadOptions.d-8x_1evAr.d.ts → threadOptions.d-BnhE7T8Y.d.ts} +6 -40
  143. package/dist/threadOptions.d-DTsJFkL-.d.ts +147 -0
  144. package/dist/threadOptions.d-GPJPprkn.d.cts +55 -0
  145. package/dist/threadOptions.d-GPJPprkn.d.ts +55 -0
  146. package/dist/{timelineRows.d-B6lLC8Ud.d.cts → timelineRows.d-BTcUdNeI.d.cts} +1 -1
  147. package/dist/{timelineRows.d-Brlkti-G.d.ts → timelineRows.d-kmBms1W5.d.ts} +1 -1
  148. package/dist/{planSignals.d-Dha2CMDF.d.cts → useHealthPlanSubscription.d-B_cth_iF.d.cts} +81 -3
  149. package/dist/{planSignals.d-CON9gTvJ.d.ts → useHealthPlanSubscription.d-BzNaVl89.d.ts} +81 -3
  150. package/dist/{usePresentation.d-Bne14SlX.d.ts → usePresentation.d-B7Uf44Ax.d.ts} +40 -40
  151. package/dist/{usePresentation.d-BcdCIuEU.d.cts → usePresentation.d-BkAMOfb5.d.cts} +40 -40
  152. package/dist/{useRecordsDepth.d-Cd6J03o5.d.ts → useRecordsDepth.d-BHkZi0tM.d.ts} +1 -1
  153. package/dist/{useRecordsDepth.d-DAa169VY.d.cts → useRecordsDepth.d-BxHpKipf.d.cts} +1 -1
  154. package/dist/video/index.cjs +2 -2
  155. package/dist/video/index.js +2 -2
  156. package/dist/{view.d-DkGM8GNA.d.ts → view.d-2BYMRnWj.d.ts} +3 -3
  157. package/dist/{view.d-3d5_O7Xk.d.cts → view.d-CoDbnv0f.d.cts} +3 -3
  158. package/dist/web/consent/index.d.cts +5 -5
  159. package/dist/web/consent/index.d.ts +5 -5
  160. package/dist/web/health-plan/index.cjs +5 -5
  161. package/dist/web/health-plan/index.d.cts +15 -69
  162. package/dist/web/health-plan/index.d.ts +15 -69
  163. package/dist/web/health-plan/index.js +5 -5
  164. package/dist/web/index.cjs +8 -8
  165. package/dist/web/index.d.cts +26 -43
  166. package/dist/web/index.d.ts +26 -43
  167. package/dist/web/index.js +8 -8
  168. package/dist/web/intro/index.d.cts +6 -6
  169. package/dist/web/intro/index.d.ts +6 -6
  170. package/dist/web/notifications/index.d.cts +3 -3
  171. package/dist/web/notifications/index.d.ts +3 -3
  172. package/dist/web/records/depth/index.cjs +9 -9
  173. package/dist/web/records/depth/index.d.cts +9 -9
  174. package/dist/web/records/depth/index.d.ts +9 -9
  175. package/dist/web/records/depth/index.js +9 -9
  176. package/dist/web/records/index.cjs +12 -12
  177. package/dist/web/records/index.d.cts +11 -11
  178. package/dist/web/records/index.d.ts +11 -11
  179. package/dist/web/records/index.js +12 -12
  180. package/dist/web/records-sheet/index.cjs +17 -17
  181. package/dist/web/records-sheet/index.js +17 -17
  182. package/dist/web/shop/index.cjs +12 -12
  183. package/dist/web/shop/index.d.cts +3 -3
  184. package/dist/web/shop/index.d.ts +3 -3
  185. package/dist/web/shop/index.js +12 -12
  186. package/dist/web/televet/booking/index.cjs +2 -2
  187. package/dist/web/televet/booking/index.d.cts +6 -6
  188. package/dist/web/televet/booking/index.d.ts +6 -6
  189. package/dist/web/televet/booking/index.js +2 -2
  190. package/dist/web/televet/call/index.cjs +1 -1
  191. package/dist/web/televet/call/index.js +1 -1
  192. package/dist/web/texting/index.d.cts +5 -5
  193. package/dist/web/texting/index.d.ts +5 -5
  194. package/package.json +22 -27
@@ -1,5 +1,5 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
- import { a as HealthPlanPetWords, H as HealthPlanPage } from './focus.d-BHm_QtQ9.cjs';
2
+ import { a as HealthPlanPetWords, H as HealthPlanPage } from './focus.d-CXpIkIuU.cjs';
3
3
  import { P as PetRef } from './ids.d-B2GAAifq.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
- import { a as HealthPlanPetWords, H as HealthPlanPage } from './focus.d-CjL6Cj0m.js';
2
+ import { a as HealthPlanPetWords, H as HealthPlanPage } from './focus.d-DzIgOqNB.js';
3
3
  import { P as PetRef } from './ids.d-B2GAAifq.js';
4
4
 
5
5
  /**
@@ -1,9 +1,9 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
- import { E as EverfurNotificationsOptions, a as EverfurNotificationsState } from '../parse.d-4lUXdmvY.cjs';
3
- export { D as DevicePlatform, b as EVERFUR_NOTIFICATION_EVENT_TYPES, c as EVERFUR_NOTIFICATION_TARGET_KINDS, d as EVERFUR_NOTIFICATION_VERSION, e as EverfurNotification, f as EverfurNotificationEventType, g as EverfurNotificationTarget, h as EverfurNotificationTargetKind, i as EverfurNotificationsStatus, N as NOTIFICATIONS_REASON_MESSAGES, j as NotificationPreferences, k as NotificationPreferencesInput, l as NotificationsClient, m as NotificationsReasonCode, n as NotificationsRuntime, P as PushProvider, R as RegisterDeviceInput, o as RegisteredDevice, p as createNotificationsClient, q as explainNotificationsReason, r as parseEverfurNotification, u as useEverfurNotificationsClient } from '../parse.d-4lUXdmvY.cjs';
2
+ import { E as EverfurNotificationsOptions, a as EverfurNotificationsState } from '../parse.d-B-WrkW2C.cjs';
3
+ export { D as DevicePlatform, b as EVERFUR_NOTIFICATION_EVENT_TYPES, c as EVERFUR_NOTIFICATION_TARGET_KINDS, d as EVERFUR_NOTIFICATION_VERSION, e as EverfurNotification, f as EverfurNotificationEventType, g as EverfurNotificationTarget, h as EverfurNotificationTargetKind, i as EverfurNotificationsStatus, N as NOTIFICATIONS_REASON_MESSAGES, j as NotificationPreferences, k as NotificationPreferencesInput, l as NotificationsClient, m as NotificationsReasonCode, n as NotificationsRuntime, P as PushProvider, R as RegisterDeviceInput, o as RegisteredDevice, p as createNotificationsClient, q as explainNotificationsReason, r as parseEverfurNotification, u as useEverfurNotificationsClient } from '../parse.d-B-WrkW2C.cjs';
4
4
  export { V as VetVisitIntent } from '../visitIntent.d-D7_yVp1I.cjs';
5
- export { A as AuthContext, I as IdentityProvider, M as MintedToken, T as TokenProvider } from '../identity.d-HbwYQ4-z.cjs';
6
- export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-BQgrIDdu.cjs';
5
+ export { A as AuthContext, I as IdentityProvider, M as MintedToken, T as TokenProvider } from '../identity.d-COcNGuCJ.cjs';
6
+ export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-D1xcxALX.cjs';
7
7
  export { B as Brand, C as ConversationId, P as PetRef, R as RecordsRequestId, U as UserRef, _ as __brand } from '../ids.d-B2GAAifq.cjs';
8
8
  export { E as EverfurError, a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError.d-8NHtlgzA.cjs';
9
9
  export { E as EverfurResult } from '../EverfurResult.d-BFH-3s6E.cjs';
@@ -1,9 +1,9 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
- import { E as EverfurNotificationsOptions, a as EverfurNotificationsState } from '../parse.d-BERabxHw.js';
3
- export { D as DevicePlatform, b as EVERFUR_NOTIFICATION_EVENT_TYPES, c as EVERFUR_NOTIFICATION_TARGET_KINDS, d as EVERFUR_NOTIFICATION_VERSION, e as EverfurNotification, f as EverfurNotificationEventType, g as EverfurNotificationTarget, h as EverfurNotificationTargetKind, i as EverfurNotificationsStatus, N as NOTIFICATIONS_REASON_MESSAGES, j as NotificationPreferences, k as NotificationPreferencesInput, l as NotificationsClient, m as NotificationsReasonCode, n as NotificationsRuntime, P as PushProvider, R as RegisterDeviceInput, o as RegisteredDevice, p as createNotificationsClient, q as explainNotificationsReason, r as parseEverfurNotification, u as useEverfurNotificationsClient } from '../parse.d-BERabxHw.js';
2
+ import { E as EverfurNotificationsOptions, a as EverfurNotificationsState } from '../parse.d--ztmWIIP.js';
3
+ export { D as DevicePlatform, b as EVERFUR_NOTIFICATION_EVENT_TYPES, c as EVERFUR_NOTIFICATION_TARGET_KINDS, d as EVERFUR_NOTIFICATION_VERSION, e as EverfurNotification, f as EverfurNotificationEventType, g as EverfurNotificationTarget, h as EverfurNotificationTargetKind, i as EverfurNotificationsStatus, N as NOTIFICATIONS_REASON_MESSAGES, j as NotificationPreferences, k as NotificationPreferencesInput, l as NotificationsClient, m as NotificationsReasonCode, n as NotificationsRuntime, P as PushProvider, R as RegisterDeviceInput, o as RegisteredDevice, p as createNotificationsClient, q as explainNotificationsReason, r as parseEverfurNotification, u as useEverfurNotificationsClient } from '../parse.d--ztmWIIP.js';
4
4
  export { V as VetVisitIntent } from '../visitIntent.d-D7_yVp1I.js';
5
- export { A as AuthContext, I as IdentityProvider, M as MintedToken, T as TokenProvider } from '../identity.d-Be2Es9Td.js';
6
- export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-XSMThgVj.js';
5
+ export { A as AuthContext, I as IdentityProvider, M as MintedToken, T as TokenProvider } from '../identity.d-BEJcHY-5.js';
6
+ export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-jTVsAeky.js';
7
7
  export { B as Brand, C as ConversationId, P as PetRef, R as RecordsRequestId, U as UserRef, _ as __brand } from '../ids.d-B2GAAifq.js';
8
8
  export { E as EverfurError, a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError.d-8NHtlgzA.js';
9
9
  export { E as EverfurResult } from '../EverfurResult.d-D_-254ZY.js';
@@ -1,8 +1,8 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
2
  import { E as EverfurError } from './EverfurError.d-8NHtlgzA.js';
3
3
  import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
4
- import { R as RequestFunnel } from './requestFunnel.d-YabU6G-Z.js';
5
- import { A as AuthContext } from './identity.d-Be2Es9Td.js';
4
+ import { R as RequestFunnel } from './requestFunnel.d-BPsCHJWf.js';
5
+ import { A as AuthContext } from './identity.d-BEJcHY-5.js';
6
6
  import { P as PetRef, U as UserRef } from './ids.d-B2GAAifq.js';
7
7
  import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-68yrE3BE.js';
8
8
 
@@ -1,8 +1,8 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
2
  import { E as EverfurError } from './EverfurError.d-8NHtlgzA.cjs';
3
3
  import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
4
- import { R as RequestFunnel } from './requestFunnel.d-JoqddYSx.cjs';
5
- import { A as AuthContext } from './identity.d-HbwYQ4-z.cjs';
4
+ import { R as RequestFunnel } from './requestFunnel.d-BdpL7gwg.cjs';
5
+ import { A as AuthContext } from './identity.d-COcNGuCJ.cjs';
6
6
  import { P as PetRef, U as UserRef } from './ids.d-B2GAAifq.cjs';
7
7
  import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-DirW9hgO.cjs';
8
8
 
@@ -2,7 +2,7 @@
2
2
  import { E as EverfurError } from './EverfurError.d-8NHtlgzA.js';
3
3
  import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
4
4
  import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-68yrE3BE.js';
5
- import { A as AuthContext } from './identity.d-Be2Es9Td.js';
5
+ import { A as AuthContext } from './identity.d-BEJcHY-5.js';
6
6
  import { U as UserRef, R as RecordsRequestId, P as PetRef, C as ConversationId } from './ids.d-B2GAAifq.js';
7
7
  import { V as VetVisitIntent } from './visitIntent.d-D7_yVp1I.js';
8
8
 
@@ -2,7 +2,7 @@
2
2
  import { E as EverfurError } from './EverfurError.d-8NHtlgzA.cjs';
3
3
  import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
4
4
  import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-DirW9hgO.cjs';
5
- import { A as AuthContext } from './identity.d-HbwYQ4-z.cjs';
5
+ import { A as AuthContext } from './identity.d-COcNGuCJ.cjs';
6
6
  import { U as UserRef, R as RecordsRequestId, P as PetRef, C as ConversationId } from './ids.d-B2GAAifq.cjs';
7
7
  import { V as VetVisitIntent } from './visitIntent.d-D7_yVp1I.cjs';
8
8
 
@@ -1,6 +1,6 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
2
  import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
3
- import { j as FetchLike } from './config.d-BQgrIDdu.cjs';
3
+ import { j as FetchLike } from './config.d-D1xcxALX.cjs';
4
4
  import { P as PetHealthProfileInput, a as PetHealthProfile } from './profile.d-CSs1wlXT.cjs';
5
5
 
6
6
  /** How your backend reaches Everfur for pet writes. Build it once and reuse it. */
@@ -1,6 +1,6 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
2
  import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
3
- import { j as FetchLike } from './config.d-XSMThgVj.js';
3
+ import { j as FetchLike } from './config.d-jTVsAeky.js';
4
4
  import { P as PetHealthProfileInput, a as PetHealthProfile } from './profile.d-CSs1wlXT.js';
5
5
 
6
6
  /** How your backend reaches Everfur for pet writes. Build it once and reuse it. */
@@ -1,6 +1,6 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
2
  import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
3
- import { A as AuthContext } from './identity.d-HbwYQ4-z.cjs';
3
+ import { A as AuthContext } from './identity.d-COcNGuCJ.cjs';
4
4
  import { P as PetRef } from './ids.d-B2GAAifq.cjs';
5
5
  import { P as PetHealthProfileInput, a as PetHealthProfile } from './profile.d-CSs1wlXT.cjs';
6
6
 
@@ -1,6 +1,6 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
2
  import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
3
- import { A as AuthContext } from './identity.d-Be2Es9Td.js';
3
+ import { A as AuthContext } from './identity.d-BEJcHY-5.js';
4
4
  import { P as PetRef } from './ids.d-B2GAAifq.js';
5
5
  import { P as PetHealthProfileInput, a as PetHealthProfile } from './profile.d-CSs1wlXT.js';
6
6
 
@@ -98,8 +98,8 @@ return Object.freeze({ok:false,error:error})}var EverfurConfigError=class _Everf
98
98
  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
99
  /* @__PURE__ */Object.freeze({call:call,phase:"stream.open",method:req.method,path:req.path,attempt:0}));try{yield*deps.auth.transport.stream(req,signal)}catch{yield errorFrame({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null})}}/* @__PURE__ */
100
100
  return Object.freeze({send:send,authorize:authorize,stream:stream})}function assembleHeaders(req,idempotencyKey){let headers={};for(let[key,value]of Object.entries(req.headers??{}))key.toLowerCase()!==IDEMPOTENCY_HEADER&&(headers[key]=value);return idempotencyKey!==null&&(headers["Idempotency-Key"]=idempotencyKey),{...req,headers:headers}}function defaultIdempotencyKeyFactory(){let counter=0;return()=>`efk_${Date.now().toString(36)}_${(counter++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}var POLICY_MAX_ATTEMPTS_CAP=10;function decideRetry(error,attempt,ctx){if(ctx.aborted)return{retry:false,reason:"aborted"};let throttle=throttleKind(error);if(throttle==="quota")return{retry:false,reason:"daily-quota-exhausted"};if(throttle!=="burst"&&!isAutoRetryable(error.code))return{retry:false,reason:"terminal-code"};let reason=throttle==="burst"?"burst-throttle":"retryable-code";if((()=>{if(ctx.policy===void 0)return false;try{return!ctx.policy.shouldRetry(error.code,attempt)}catch{return false}})())return{retry:false,reason:"terminal-code"};let policyCeiling=()=>{if(ctx.policy===void 0)return null;let raw;try{raw=ctx.policy.maxAttempts(error.code)}catch{return null}return typeof raw!="number"||!Number.isFinite(raw)?null:Math.max(1,Math.min(POLICY_MAX_ATTEMPTS_CAP,Math.floor(raw)))},ceiling=ctx.perCallMaxAttempts??policyCeiling()??ctx.maxAttempts;if(attempt+1>=ceiling)return{retry:false,reason:"attempts-exhausted"};let override=retryOverrideMs(error,ctx.now);return override!==null?override>RETRY_OVERRIDE_MAX_MS?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:reason,delayMs:override}:{retry:true,reason:reason,delayMs:backoffDelayMs(attempt,ctx.rng)}}function throttleKind(error){let code=error.code==="unknown"?fromWire(rawWireCode(error.raw)):error.code;return code==="quotaExceeded"?"quota":code==="rateLimited"||error.httpStatus===429?"burst":null}function retryOverrideMs(error,now){let at=findResetsAt(error.raw);if(at!==null){let delta=at-now;return delta>0?delta:0}let wait=findRetryAfterSeconds(error.raw);return wait===null?null:Math.round(wait*1e3)}function findRetryAfterSeconds(raw){for(let scope of candidateScopes(raw)){let value=scope.retry_after_seconds;if(typeof value=="number"&&Number.isFinite(value)&&value>=0)return value}return null}function findResetsAt(raw){for(let scope of candidateScopes(raw)){let value=scope.resets_at,parsed=parseInstantMs(value);if(parsed!==null)return parsed}return null}function candidateScopes(raw){if(!isRecord(raw))return[];let out=[raw];for(let nested of["error","detail"]){let value=raw[nested];isRecord(value)&&out.push(value)}return out}function parseInstantMs(value){if(typeof value=="number"&&Number.isFinite(value))return value<1e11?Math.round(value*1e3):Math.round(value);if(typeof value=="string"&&value.trim().length>0){let parsed=Date.parse(value);return Number.isFinite(parsed)?parsed:null}return null}function rawWireCode(raw){for(let scope of candidateScopes(raw)){let code=scope.code;if(typeof code=="string"&&code.length>0)return code}return null}function isRecord(value){return typeof value=="object"&&value!==null}async function resolveDeviceAuth(auth){return auth.mode==="anonymous"?{mode:"anonymous",publishableKey:auth.publishableKey,userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}:{mode:"personalized",token:await auth.identity.currentToken(),userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}}function boundedSignal(ms,timers){let ctrl=new AbortController,handle=timers.setTimeout(()=>ctrl.abort(),ms);return{signal:ctrl.signal,cancel:()=>timers.clearTimeout(handle)}}function mergeSignals(deadline,caller){let noop=()=>{};if(!caller)return{signal:deadline,dispose:noop};let ctrl=new AbortController;if(deadline.aborted||caller.aborted)return ctrl.abort(),{signal:ctrl.signal,dispose:noop};let onAbort=()=>ctrl.abort();return deadline.addEventListener("abort",onAbort,{once:true}),caller.addEventListener("abort",onAbort,{once:true}),{signal:ctrl.signal,dispose:()=>{deadline.removeEventListener("abort",onAbort),caller.removeEventListener("abort",onAbort)}}}function delayAbortable(ms,timers,signal){return ms<=0||signal?.aborted===true?Promise.resolve():new Promise(resolve=>{let handle=timers.setTimeout(()=>{signal?.removeEventListener("abort",onAbort),resolve()},ms),onAbort=()=>{timers.clearTimeout(handle),resolve()};signal?.addEventListener("abort",onAbort,{once:true})})}var noopTelemetry=/* @__PURE__ */Object.freeze({track(){},trackExpectedFailure(){}});function fileHandleFromMedia(source){let handle={uri:source.uri,mimeType:source.mimeType},size=mediaByteSize(source);return size!==null&&(handle.sizeBytes=size),/* @__PURE__ */Object.freeze(handle)}function mediaByteSize(source){let candidate=source.byteSize??source.sizeBytes;return typeof candidate=="number"&&Number.isFinite(candidate)&&candidate>=0?candidate:null}function captureOptionsFor(mode,maxDurationSeconds){/* @__PURE__ */
101
- return Object.freeze({mode:mode})}function isCaptureAvailable(camera){return camera!=null&&camera.isAvailable===true}var defaultTimers=/* @__PURE__ */Object.freeze({setTimeout:(handler,ms)=>setTimeout(handler,ms),clearTimeout:handle=>clearTimeout(handle),now:()=>Date.now()});function delayAbortable2(ms,signal,timers){return new Promise(resolve=>{if(signal.aborted){resolve();return}let holder={handle:void 0},done=()=>{timers.clearTimeout(holder.handle),signal.removeEventListener("abort",done),resolve()};holder.handle=timers.setTimeout(done,ms),signal.addEventListener("abort",done,{once:true})})}function mergeSignals2(a,b){if(!b)return a;let ctrl=new AbortController;if(a.aborted||b.aborted)return ctrl.abort(),ctrl.signal;let onAbort=()=>ctrl.abort();return a.addEventListener("abort",onAbort,{once:true}),b.addEventListener("abort",onAbort,{once:true}),ctrl.signal}var MediaStore=class{constructor(initial){this.listeners=/* @__PURE__ */new Set;this.epoch=0;this.inFlight=null;this.snapshot=/* @__PURE__ */Object.freeze({...initial})}subscribe(listener){return this.listeners.add(listener),()=>{this.listeners.delete(listener)}}getSnapshot(){return this.snapshot}patch(partial){this.snapshot=/* @__PURE__ */Object.freeze({...this.snapshot,...partial});for(let listener of this.listeners)listener()}beginOperation(external){this.inFlight?.abort();let ctrl=new AbortController;this.inFlight=ctrl;let epoch=this.epoch;return{signal:external?mergeSignals2(ctrl.signal,external):ctrl.signal,epoch:epoch,settle:()=>{this.inFlight===ctrl&&(this.inFlight=null)}}}alive(epoch){return epoch===this.epoch}rescope(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null}dispose(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null,this.listeners.clear()}};function hasLoneSurrogate(value){for(let i=0;i<value.length;i+=1){let code=value.charCodeAt(i);if(code>=55296&&code<=56319){let low=value.charCodeAt(i+1);if(!(low>=56320&&low<=57343))return true;i+=1}else if(code>=56320&&code<=57343)return true}return false}var CONSUMER_SAFE_DETECTION_KEYS=/* @__PURE__ */Object.freeze(["primary_label","primary_confidence","subtype_label","subtype_display","subtype_confidence","risk_tier","confidence_tier","copy_short","disease_name","disease_framing","model_version","skin_v2","eye_v2","llm_checkup"]),OPERATOR_INTERNAL_KEYS=/* @__PURE__ */Object.freeze(["decision_audit","decision_thresholds","per_class_auroc","ood_layers","gate1_score","possible_conditions","top_class"]),BOOLEAN_KEYS=/* @__PURE__ */new Set(["skin_v2","eye_v2","llm_checkup"]),CONFIDENCE_KEYS=/* @__PURE__ */new Set(["primary_confidence","subtype_confidence"]),RISK_TIER_VALUES=/* @__PURE__ */new Set(["low_risk","concern","uncertain"]),CONFIDENCE_TIER_VALUES=/* @__PURE__ */new Set(["possible","probable"]),STRING_LIMITS=/* @__PURE__ */Object.freeze({primary_label:64,subtype_label:64,subtype_display:128,copy_short:512,disease_name:128,disease_framing:512,model_version:64});function projectDetectionMetadata(raw){let source=isRecord2(raw)?raw:{},out={};for(let key of CONSUMER_SAFE_DETECTION_KEYS){if(!(key in source))continue;let value=source[key],accepted=acceptKey(key,value);accepted!==DROP&&(out[key]=accepted)}let dropped=0;for(let key of OPERATOR_INTERNAL_KEYS)key in source&&(dropped+=1);/* @__PURE__ */
102
- return Object.freeze({metadata:/* @__PURE__ */Object.freeze(out),droppedOperatorKeys:dropped})}var DROP=/* @__PURE__ */Symbol("drop");function acceptKey(key,value){if(BOOLEAN_KEYS.has(key))return typeof value=="boolean"?value:DROP;if(CONFIDENCE_KEYS.has(key))return isUnitConfidence(value)?value:DROP;if(key==="risk_tier")return typeof value=="string"&&RISK_TIER_VALUES.has(value)?value:DROP;if(key==="confidence_tier")return typeof value=="string"&&CONFIDENCE_TIER_VALUES.has(value)?value:DROP;if(typeof value!="string")return DROP;let limit=STRING_LIMITS[key]??256;return value.length>limit?value.slice(0,limit):value}function isUnitConfidence(value){return typeof value=="number"&&Number.isFinite(value)&&value>=0&&value<=1}function parseInterpretation(raw){if(!isRecord2(raw))return null;let summary=asString(raw.summary),disclaimer=asString(raw.disclaimer),recommendations=asStringList(raw.recommendations??raw.recommendation);return summary===null&&disclaimer===null&&recommendations.length===0?null:/* @__PURE__ */Object.freeze({summary:summary??"",recommendations:/* @__PURE__ */Object.freeze(recommendations),disclaimer:disclaimer??""})}function locateDetectionMetadata(body){if(!isRecord2(body))return{};if(isRecord2(body.metadata))return body.metadata;let detections=body.detections;if(Array.isArray(detections)&&detections.length>0){let first=detections[0];if(isRecord2(first)&&isRecord2(first.metadata))return first.metadata;if(isRecord2(first))return first}return body}function locateInterpretation(body){return isRecord2(body)?isRecord2(body.interpretation)?body.interpretation:body:null}function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function asString(value){return typeof value=="string"&&value.length>0?value:null}function asStringList(value){return typeof value=="string"?value.length>0?[value]:[]:Array.isArray(value)?value.filter(entry=>typeof entry=="string"&&entry.length>0):[]}function asUnitNumber(value){return isUnitConfidence(value)?value:null}function asFiniteNumber(value){return typeof value=="number"&&Number.isFinite(value)?value:null}var ENDPOINTS=/* @__PURE__ */Object.freeze({initiate:"/widget/v1/uploads/initiate",precheck:"/widget/v1/photo/precheck",photoAnalyze:"/widget/v1/photo/analyze",videoAnalyze:"/widget/v1/video/analyze",job:jobId=>hasLoneSurrogate(jobId)?null:`/widget/v1/analysis/jobs/${encodeURIComponent(jobId)}`});async function initiateUpload(funnel,params){let body={purpose:params.purpose,content_type:params.contentType};params.byteSize!==null&&(body.byte_size=params.byteSize);let req={method:"POST",path:ENDPOINTS.initiate,body:body,...params.signal?{signal:params.signal}:{}},res=await funnel.send("media.initiateUpload",req);if(!res.ok)return err(res.error);let policy=parsePresigned(res.value);return policy===null?err(makeEverfurError("mediaUploadFailed",{retryable:false})):ok(policy)}function parsePresigned(raw){if(!isRecord2(raw))return null;let url=asString(raw.url),s3Key=asString(raw.s3_key);if(url===null||s3Key===null)return null;let fieldsRaw=raw.fields,fields={};if(isRecord2(fieldsRaw))for(let[key,value]of Object.entries(fieldsRaw))typeof value=="string"&&(fields[key]=value);/* @__PURE__ */
101
+ return Object.freeze({mode:mode})}function isCaptureAvailable(camera){return camera!=null&&camera.isAvailable===true}var defaultTimers=/* @__PURE__ */Object.freeze({setTimeout:(handler,ms)=>setTimeout(handler,ms),clearTimeout:handle=>clearTimeout(handle),now:()=>Date.now()});function delayAbortable2(ms,signal,timers){return new Promise(resolve=>{if(signal.aborted){resolve();return}let holder={handle:void 0},done=()=>{timers.clearTimeout(holder.handle),signal.removeEventListener("abort",done),resolve()};holder.handle=timers.setTimeout(done,ms),signal.addEventListener("abort",done,{once:true})})}function mergeSignals2(a,b){if(!b)return a;let ctrl=new AbortController;if(a.aborted||b.aborted)return ctrl.abort(),ctrl.signal;let onAbort=()=>ctrl.abort();return a.addEventListener("abort",onAbort,{once:true}),b.addEventListener("abort",onAbort,{once:true}),ctrl.signal}var MediaStore=class{constructor(initial){this.listeners=/* @__PURE__ */new Set;this.epoch=0;this.inFlight=null;this.snapshot=/* @__PURE__ */Object.freeze({...initial})}subscribe(listener){return this.listeners.add(listener),()=>{this.listeners.delete(listener)}}getSnapshot(){return this.snapshot}patch(partial){this.snapshot=/* @__PURE__ */Object.freeze({...this.snapshot,...partial});for(let listener of this.listeners)listener()}beginOperation(external){this.inFlight?.abort();let ctrl=new AbortController;this.inFlight=ctrl;let epoch=this.epoch;return{signal:external?mergeSignals2(ctrl.signal,external):ctrl.signal,epoch:epoch,settle:()=>{this.inFlight===ctrl&&(this.inFlight=null)}}}alive(epoch){return epoch===this.epoch}rescope(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null}dispose(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null,this.listeners.clear()}};function hasLoneSurrogate(value){for(let i=0;i<value.length;i+=1){let code=value.charCodeAt(i);if(code>=55296&&code<=56319){let low=value.charCodeAt(i+1);if(!(low>=56320&&low<=57343))return true;i+=1}else if(code>=56320&&code<=57343)return true}return false}function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var CONSUMER_SAFE_DETECTION_KEYS=/* @__PURE__ */Object.freeze(["primary_label","primary_confidence","subtype_label","subtype_display","subtype_confidence","risk_tier","confidence_tier","copy_short","disease_name","disease_framing","model_version","skin_v2","eye_v2","llm_checkup"]),OPERATOR_INTERNAL_KEYS=/* @__PURE__ */Object.freeze(["decision_audit","decision_thresholds","per_class_auroc","ood_layers","gate1_score","possible_conditions","top_class"]),BOOLEAN_KEYS=/* @__PURE__ */new Set(["skin_v2","eye_v2","llm_checkup"]),CONFIDENCE_KEYS=/* @__PURE__ */new Set(["primary_confidence","subtype_confidence"]),RISK_TIER_VALUES=/* @__PURE__ */new Set(["low_risk","concern","uncertain"]),CONFIDENCE_TIER_VALUES=/* @__PURE__ */new Set(["possible","probable"]),STRING_LIMITS=/* @__PURE__ */Object.freeze({primary_label:64,subtype_label:64,subtype_display:128,copy_short:512,disease_name:128,disease_framing:512,model_version:64});function projectDetectionMetadata(raw){let source=isRecord2(raw)?raw:{},out={};for(let key of CONSUMER_SAFE_DETECTION_KEYS){if(!(key in source))continue;let value=source[key],accepted=acceptKey(key,value);accepted!==DROP&&(out[key]=accepted)}let dropped=0;for(let key of OPERATOR_INTERNAL_KEYS)key in source&&(dropped+=1);/* @__PURE__ */
102
+ return Object.freeze({metadata:/* @__PURE__ */Object.freeze(out),droppedOperatorKeys:dropped})}var DROP=/* @__PURE__ */Symbol("drop");function acceptKey(key,value){if(BOOLEAN_KEYS.has(key))return typeof value=="boolean"?value:DROP;if(CONFIDENCE_KEYS.has(key))return isUnitConfidence(value)?value:DROP;if(key==="risk_tier")return typeof value=="string"&&RISK_TIER_VALUES.has(value)?value:DROP;if(key==="confidence_tier")return typeof value=="string"&&CONFIDENCE_TIER_VALUES.has(value)?value:DROP;if(typeof value!="string")return DROP;let limit=STRING_LIMITS[key]??256;return value.length>limit?value.slice(0,limit):value}function isUnitConfidence(value){return typeof value=="number"&&Number.isFinite(value)&&value>=0&&value<=1}function parseInterpretation(raw){if(!isRecord2(raw))return null;let summary=asString(raw.summary),disclaimer=asString(raw.disclaimer),recommendations=asStringList(raw.recommendations??raw.recommendation);return summary===null&&disclaimer===null&&recommendations.length===0?null:/* @__PURE__ */Object.freeze({summary:summary??"",recommendations:/* @__PURE__ */Object.freeze(recommendations),disclaimer:disclaimer??""})}function locateDetectionMetadata(body){if(!isRecord2(body))return{};if(isRecord2(body.metadata))return body.metadata;let detections=body.detections;if(Array.isArray(detections)&&detections.length>0){let first=detections[0];if(isRecord2(first)&&isRecord2(first.metadata))return first.metadata;if(isRecord2(first))return first}return body}function locateInterpretation(body){return isRecord2(body)?isRecord2(body.interpretation)?body.interpretation:body:null}function asString(value){return typeof value=="string"&&value.length>0?value:null}function asStringList(value){return typeof value=="string"?value.length>0?[value]:[]:Array.isArray(value)?value.filter(entry=>typeof entry=="string"&&entry.length>0):[]}function asUnitNumber(value){return isUnitConfidence(value)?value:null}function asFiniteNumber(value){return typeof value=="number"&&Number.isFinite(value)?value:null}var ENDPOINTS=/* @__PURE__ */Object.freeze({initiate:"/widget/v1/uploads/initiate",precheck:"/widget/v1/photo/precheck",photoAnalyze:"/widget/v1/photo/analyze",videoAnalyze:"/widget/v1/video/analyze",job:jobId=>hasLoneSurrogate(jobId)?null:`/widget/v1/analysis/jobs/${encodeURIComponent(jobId)}`});async function initiateUpload(funnel,params){let body={purpose:params.purpose,content_type:params.contentType};params.byteSize!==null&&(body.byte_size=params.byteSize);let req={method:"POST",path:ENDPOINTS.initiate,body:body,...params.signal?{signal:params.signal}:{}},res=await funnel.send("media.initiateUpload",req);if(!res.ok)return err(res.error);let policy=parsePresigned(res.value);return policy===null?err(makeEverfurError("mediaUploadFailed",{retryable:false})):ok(policy)}function parsePresigned(raw){if(!isRecord2(raw))return null;let url=asString(raw.url),s3Key=asString(raw.s3_key);if(url===null||s3Key===null)return null;let fieldsRaw=raw.fields,fields={};if(isRecord2(fieldsRaw))for(let[key,value]of Object.entries(fieldsRaw))typeof value=="string"&&(fields[key]=value);/* @__PURE__ */
103
103
  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 runPrecheck(funnel,params){let req={method:"POST",path:ENDPOINTS.precheck,body:{s3_key:params.s3Key,type:params.type},...params.signal?{signal:params.signal}:{}},res=await funnel.send("media.precheck",req);return res.ok?parsePrecheck(res.value):{verdict:"proceed",reasonCodes:[],precheckToken:null}}function parsePrecheck(raw){if(!isRecord2(raw))return{verdict:"proceed",reasonCodes:[],precheckToken:null};let verdictRaw=asString(raw.verdict),verdict=verdictRaw==="retake"||verdictRaw==="reject"?verdictRaw:"proceed",reasonCodes=Array.isArray(raw.reason_codes)?raw.reason_codes.filter(c=>typeof c=="string"):[];/* @__PURE__ */
104
104
  return Object.freeze({verdict:verdict,reasonCodes:/* @__PURE__ */Object.freeze(reasonCodes),precheckToken:asString(raw.precheck_token)})}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 detectPhotoGate(httpStatus,_error){return httpStatus===422?{kind:"species_unsupported",species:"cat"}:httpStatus===400?{kind:"pet_context_required"}: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}var ACCEPTED=/* @__PURE__ */Object.freeze({kind:"accepted"});function createPhotoController(deps){return new PhotoController(deps)}var PhotoController=class extends MediaStore{constructor(deps){super({status:"idle",region:deps.region??"skin",result:null,gate:ACCEPTED,error:null,isCaptureAvailable:isCaptureAvailable(deps.camera)}),this.funnel=deps.funnel??createRequestFunnel({auth:deps.auth,...deps.errorPolicy?{errorPolicy:deps.errorPolicy}:{}}),this.camera=deps.camera,this.upload=deps.upload,this.telemetry=deps.telemetry??noopTelemetry,this.timers=deps.timers??defaultTimers,this.makeIdempotencyKey=deps.makeIdempotencyKey??defaultIdempotencyFactory()}async capture(region,opts){if(!isCaptureAvailable(this.camera))return err(makeEverfurError("unknown",{retryable:false}));let source;try{source=await this.camera.capture(captureOptionsFor("photo"))}catch{return this.snapshot.status!=="idle"&&this.patch({status:"idle"}),err(makeEverfurError("unknown",{retryable:false}))}return this.analyze(source,region,opts)}async analyze(source,region,opts){let op=this.beginOperation(opts.signal),idempotencyKey=this.makeIdempotencyKey(),startedAt=this.timers.now();this.patch({status:"capturing",region:region,error:null,result:null,gate:ACCEPTED});try{let initiated=await initiateUpload(this.funnel,{purpose:"skin_scan",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.fail(op,staged.error);let precheck=await runPrecheck(this.funnel,{s3Key:initiated.value.s3Key,type:region,signal:op.signal});if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();if(precheck.verdict!=="proceed")return this.gateRetake(op,region,precheck.reasonCodes);this.patch({status:"analyzing"});let outcome=await submitAnalyze(this.funnel,ENDPOINTS.photoAnalyze,analyzeBody(initiated.value.s3Key,{type:region,petRef:opts.petRef,precheckToken:precheck.precheckToken}),detectPhotoGate,op.signal);if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();switch(outcome.kind){case"error":return this.fail(op,outcome.error);case"gate":return this.gateDomain(op,region,outcome.gate);case"sync":return this.complete(op,outcome.body,region,null,startedAt);case"async":{let poll=await pollJob(this.funnel,outcome.job.jobId,{timers:this.timers,signal:op.signal,alive:()=>this.alive(op.epoch),estimatedSeconds:outcome.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,region,outcome.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.fail(op,makeEverfurError("conversationNotFound",{retryable:!1,httpStatus:404}));default:return this.fail(op,makeEverfurError("internalError",{retryable:!1}))}}default:return this.fail(op,makeEverfurError("internalError",{retryable:!1}))}}finally{op.settle()}}reset(){this.inFlight?.abort(),this.inFlight=null,this.patch({status:"idle",result:null,gate:ACCEPTED,error:null})}complete(op,body,region,jobId,startedAt){if(!this.alive(op.epoch))return abortedResult();let mapped=mapPhotoResult(body,region,jobId);return mapped.droppedOperatorKeys>0&&this.telemetry.track("analysis.metadata_leak_guard",{droppedKeyCount:mapped.droppedOperatorKeys}),this.patch({status:"complete",result:mapped.result,gate:ACCEPTED,error:null}),this.telemetry.track("analysis.species_gate",{outcome:"accepted",region:region}),this.telemetry.track("analysis.result",{capability:"photo",region:region,riskTier:mapped.result.riskTier??"",confidenceTier:mapped.result.confidenceTier??"",modelVersion:mapped.result.modelVersion??"",timeToResultMs:this.timers.now()-startedAt}),ok(mapped.result)}gateDomain(op,region,gate){if(!this.alive(op.epoch))return abortedResult();let outcome=gate.kind==="species_unsupported"?/* @__PURE__ */Object.freeze({kind:"species_unsupported",species:"cat"}):/* @__PURE__ */Object.freeze({kind:"pet_context_required"});return this.patch({status:"idle",gate:outcome,error:null,result:null}),this.telemetry.track("analysis.species_gate",{outcome:gate.kind,region:region,...gate.kind==="species_unsupported"?{species:"cat"}:{}}),err(makeEverfurError("unknown",{retryable:false}))}gateRetake(op,region,reasons){if(!this.alive(op.epoch))return abortedResult();this.patch({status:"idle",gate:/* @__PURE__ */Object.freeze({kind:"retake",reasons:/* @__PURE__ */Object.freeze([...reasons])}),error:null,result:null}),this.telemetry.track("analysis.quality_gate",{usable:false,reasons:reasons});let outcome=reasons.includes("wrong_species")?"species_unsupported":"retake";return this.telemetry.track("analysis.species_gate",{outcome:outcome,region:region}),err(makeEverfurError("unknown",{retryable:false}))}fail(op,error){return this.alive(op.epoch)?(this.patch({status:"error",error:error,gate:ACCEPTED}),this.telemetry.trackExpectedFailure("analysis.error",{code:error.code,...error.httpStatus!==void 0?{httpStatus:error.httpStatus}:{}}),err(error)):abortedResult()}};function mapPhotoResult(body,region,jobId){let projection=projectDetectionMetadata(locateDetectionMetadata(body)),meta=projection.metadata,interpretation=parseInterpretation(locateInterpretation(body));return{result:/* @__PURE__ */Object.freeze({jobId:jobId,analysisType:region,primaryLabel:asString(meta.primary_label)??"Uncertain",riskTier:asRiskTier(meta.risk_tier),confidence:asUnitNumber(meta.primary_confidence),subtypeDisplay:asString(meta.subtype_display),confidenceTier:asConfidenceTier(meta.confidence_tier),diseaseName:asString(meta.disease_name),diseaseFraming:asString(meta.disease_framing),copyShort:asString(meta.copy_short),interpretation:interpretation,modelVersion:asString(meta.model_version)??(isRecord2(body)?asString(body.model_version):null)}),droppedOperatorKeys:projection.droppedOperatorKeys}}function asRiskTier(value){return value==="low_risk"||value==="concern"||value==="uncertain"?value:null}function asConfidenceTier(value){return value==="possible"||value==="probable"?value:null}function abortedResult(){return err(makeEverfurError("unknown",{retryable:false}))}function defaultIdempotencyFactory(){let counter=0;return()=>`photo-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]=react.createContext(null));EverfurContext.displayName??="EverfurContext";function useEverfurContext(){let ctx=react.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",region:"skin",result:null,gate:/* @__PURE__ */Object.freeze({kind:"accepted"}),error:null,isCaptureAvailable:false}),NOOP_UNSUBSCRIBE=()=>{};function usePhotoCheckup(opts){let{runtime:runtime,userRef:userRef,scopeEpoch:scopeEpoch}=useEverfurContext(),petRef=opts.petRef,[controller,setController]=react.useState(null);react.useEffect(()=>{let{services:services}=runtime.registry,acquired=runtime.registry.acquire("photo",`${userRef??""}|${petRef}`,()=>createPhotoController({...services.errorPolicy?{errorPolicy:services.errorPolicy}:{},auth:services.authFor(userRef),camera:services.camera,upload:services.upload,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=react.useCallback(onChange=>controller?controller.subscribe(onChange):NOOP_UNSUBSCRIBE,[controller]),getSnapshot=react.useCallback(()=>controller?controller.getSnapshot():BOOTSTRAP_SNAPSHOT,[controller]),snapshot=react.useSyncExternalStore(subscribe,getSnapshot,getSnapshot),analyze=react.useCallback((source,region)=>controller?controller.analyze(source,region,{petRef:petRef}):Promise.resolve(notReadyError()),[controller,petRef]),capture=react.useCallback(region=>controller?controller.capture(region,{petRef:petRef}):Promise.resolve(notReadyError()),[controller,petRef]),reset=react.useCallback(()=>{controller?.reset()},[controller]);return react.useMemo(()=>({status:snapshot.status,region:snapshot.region,result:snapshot.result,gate:snapshot.gate,error:snapshot.error,isCaptureAvailable:snapshot.isCaptureAvailable,isBootstrapping:controller===null,analyze:analyze,capture:capture,reset:reset}),[snapshot,controller,analyze,capture,reset])}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]=react.createContext(EVERFUR_LIGHT));EverfurThemeContext.displayName??="EverfurThemeContext";function useEverfurTheme(){return react.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 react.createElement(reactNative.Text,cap===void 0?props:{maxFontSizeMultiplier:cap,...props})}react.forwardRef(function(props,ref){return react.createElement(reactNative.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 react.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 react.createElement(HostRenderBoundary,{fallback:fallback,resetKey:resetKey,children:react.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__ */
105
105
  return Object.freeze({reason:explicit.reason,level:explicit.level,recoverable:explicit.recoverable})}/* @__PURE__ */
@@ -98,8 +98,8 @@ return Object.freeze({ok:false,error:error})}var EverfurConfigError=class _Everf
98
98
  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
99
  /* @__PURE__ */Object.freeze({call:call,phase:"stream.open",method:req.method,path:req.path,attempt:0}));try{yield*deps.auth.transport.stream(req,signal)}catch{yield errorFrame({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null})}}/* @__PURE__ */
100
100
  return Object.freeze({send:send,authorize:authorize,stream:stream})}function assembleHeaders(req,idempotencyKey){let headers={};for(let[key,value]of Object.entries(req.headers??{}))key.toLowerCase()!==IDEMPOTENCY_HEADER&&(headers[key]=value);return idempotencyKey!==null&&(headers["Idempotency-Key"]=idempotencyKey),{...req,headers:headers}}function defaultIdempotencyKeyFactory(){let counter=0;return()=>`efk_${Date.now().toString(36)}_${(counter++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}var POLICY_MAX_ATTEMPTS_CAP=10;function decideRetry(error,attempt,ctx){if(ctx.aborted)return{retry:false,reason:"aborted"};let throttle=throttleKind(error);if(throttle==="quota")return{retry:false,reason:"daily-quota-exhausted"};if(throttle!=="burst"&&!isAutoRetryable(error.code))return{retry:false,reason:"terminal-code"};let reason=throttle==="burst"?"burst-throttle":"retryable-code";if((()=>{if(ctx.policy===void 0)return false;try{return!ctx.policy.shouldRetry(error.code,attempt)}catch{return false}})())return{retry:false,reason:"terminal-code"};let policyCeiling=()=>{if(ctx.policy===void 0)return null;let raw;try{raw=ctx.policy.maxAttempts(error.code)}catch{return null}return typeof raw!="number"||!Number.isFinite(raw)?null:Math.max(1,Math.min(POLICY_MAX_ATTEMPTS_CAP,Math.floor(raw)))},ceiling=ctx.perCallMaxAttempts??policyCeiling()??ctx.maxAttempts;if(attempt+1>=ceiling)return{retry:false,reason:"attempts-exhausted"};let override=retryOverrideMs(error,ctx.now);return override!==null?override>RETRY_OVERRIDE_MAX_MS?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:reason,delayMs:override}:{retry:true,reason:reason,delayMs:backoffDelayMs(attempt,ctx.rng)}}function throttleKind(error){let code=error.code==="unknown"?fromWire(rawWireCode(error.raw)):error.code;return code==="quotaExceeded"?"quota":code==="rateLimited"||error.httpStatus===429?"burst":null}function retryOverrideMs(error,now){let at=findResetsAt(error.raw);if(at!==null){let delta=at-now;return delta>0?delta:0}let wait=findRetryAfterSeconds(error.raw);return wait===null?null:Math.round(wait*1e3)}function findRetryAfterSeconds(raw){for(let scope of candidateScopes(raw)){let value=scope.retry_after_seconds;if(typeof value=="number"&&Number.isFinite(value)&&value>=0)return value}return null}function findResetsAt(raw){for(let scope of candidateScopes(raw)){let value=scope.resets_at,parsed=parseInstantMs(value);if(parsed!==null)return parsed}return null}function candidateScopes(raw){if(!isRecord(raw))return[];let out=[raw];for(let nested of["error","detail"]){let value=raw[nested];isRecord(value)&&out.push(value)}return out}function parseInstantMs(value){if(typeof value=="number"&&Number.isFinite(value))return value<1e11?Math.round(value*1e3):Math.round(value);if(typeof value=="string"&&value.trim().length>0){let parsed=Date.parse(value);return Number.isFinite(parsed)?parsed:null}return null}function rawWireCode(raw){for(let scope of candidateScopes(raw)){let code=scope.code;if(typeof code=="string"&&code.length>0)return code}return null}function isRecord(value){return typeof value=="object"&&value!==null}async function resolveDeviceAuth(auth){return auth.mode==="anonymous"?{mode:"anonymous",publishableKey:auth.publishableKey,userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}:{mode:"personalized",token:await auth.identity.currentToken(),userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}}function boundedSignal(ms,timers){let ctrl=new AbortController,handle=timers.setTimeout(()=>ctrl.abort(),ms);return{signal:ctrl.signal,cancel:()=>timers.clearTimeout(handle)}}function mergeSignals(deadline,caller){let noop=()=>{};if(!caller)return{signal:deadline,dispose:noop};let ctrl=new AbortController;if(deadline.aborted||caller.aborted)return ctrl.abort(),{signal:ctrl.signal,dispose:noop};let onAbort=()=>ctrl.abort();return deadline.addEventListener("abort",onAbort,{once:true}),caller.addEventListener("abort",onAbort,{once:true}),{signal:ctrl.signal,dispose:()=>{deadline.removeEventListener("abort",onAbort),caller.removeEventListener("abort",onAbort)}}}function delayAbortable(ms,timers,signal){return ms<=0||signal?.aborted===true?Promise.resolve():new Promise(resolve=>{let handle=timers.setTimeout(()=>{signal?.removeEventListener("abort",onAbort),resolve()},ms),onAbort=()=>{timers.clearTimeout(handle),resolve()};signal?.addEventListener("abort",onAbort,{once:true})})}var noopTelemetry=/* @__PURE__ */Object.freeze({track(){},trackExpectedFailure(){}});function fileHandleFromMedia(source){let handle={uri:source.uri,mimeType:source.mimeType},size=mediaByteSize(source);return size!==null&&(handle.sizeBytes=size),/* @__PURE__ */Object.freeze(handle)}function mediaByteSize(source){let candidate=source.byteSize??source.sizeBytes;return typeof candidate=="number"&&Number.isFinite(candidate)&&candidate>=0?candidate:null}function captureOptionsFor(mode,maxDurationSeconds){/* @__PURE__ */
101
- return Object.freeze({mode:mode})}function isCaptureAvailable(camera){return camera!=null&&camera.isAvailable===true}var defaultTimers=/* @__PURE__ */Object.freeze({setTimeout:(handler,ms)=>setTimeout(handler,ms),clearTimeout:handle=>clearTimeout(handle),now:()=>Date.now()});function delayAbortable2(ms,signal,timers){return new Promise(resolve=>{if(signal.aborted){resolve();return}let holder={handle:void 0},done=()=>{timers.clearTimeout(holder.handle),signal.removeEventListener("abort",done),resolve()};holder.handle=timers.setTimeout(done,ms),signal.addEventListener("abort",done,{once:true})})}function mergeSignals2(a,b){if(!b)return a;let ctrl=new AbortController;if(a.aborted||b.aborted)return ctrl.abort(),ctrl.signal;let onAbort=()=>ctrl.abort();return a.addEventListener("abort",onAbort,{once:true}),b.addEventListener("abort",onAbort,{once:true}),ctrl.signal}var MediaStore=class{constructor(initial){this.listeners=/* @__PURE__ */new Set;this.epoch=0;this.inFlight=null;this.snapshot=/* @__PURE__ */Object.freeze({...initial})}subscribe(listener){return this.listeners.add(listener),()=>{this.listeners.delete(listener)}}getSnapshot(){return this.snapshot}patch(partial){this.snapshot=/* @__PURE__ */Object.freeze({...this.snapshot,...partial});for(let listener of this.listeners)listener()}beginOperation(external){this.inFlight?.abort();let ctrl=new AbortController;this.inFlight=ctrl;let epoch=this.epoch;return{signal:external?mergeSignals2(ctrl.signal,external):ctrl.signal,epoch:epoch,settle:()=>{this.inFlight===ctrl&&(this.inFlight=null)}}}alive(epoch){return epoch===this.epoch}rescope(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null}dispose(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null,this.listeners.clear()}};function hasLoneSurrogate(value){for(let i=0;i<value.length;i+=1){let code=value.charCodeAt(i);if(code>=55296&&code<=56319){let low=value.charCodeAt(i+1);if(!(low>=56320&&low<=57343))return true;i+=1}else if(code>=56320&&code<=57343)return true}return false}var CONSUMER_SAFE_DETECTION_KEYS=/* @__PURE__ */Object.freeze(["primary_label","primary_confidence","subtype_label","subtype_display","subtype_confidence","risk_tier","confidence_tier","copy_short","disease_name","disease_framing","model_version","skin_v2","eye_v2","llm_checkup"]),OPERATOR_INTERNAL_KEYS=/* @__PURE__ */Object.freeze(["decision_audit","decision_thresholds","per_class_auroc","ood_layers","gate1_score","possible_conditions","top_class"]),BOOLEAN_KEYS=/* @__PURE__ */new Set(["skin_v2","eye_v2","llm_checkup"]),CONFIDENCE_KEYS=/* @__PURE__ */new Set(["primary_confidence","subtype_confidence"]),RISK_TIER_VALUES=/* @__PURE__ */new Set(["low_risk","concern","uncertain"]),CONFIDENCE_TIER_VALUES=/* @__PURE__ */new Set(["possible","probable"]),STRING_LIMITS=/* @__PURE__ */Object.freeze({primary_label:64,subtype_label:64,subtype_display:128,copy_short:512,disease_name:128,disease_framing:512,model_version:64});function projectDetectionMetadata(raw){let source=isRecord2(raw)?raw:{},out={};for(let key of CONSUMER_SAFE_DETECTION_KEYS){if(!(key in source))continue;let value=source[key],accepted=acceptKey(key,value);accepted!==DROP&&(out[key]=accepted)}let dropped=0;for(let key of OPERATOR_INTERNAL_KEYS)key in source&&(dropped+=1);/* @__PURE__ */
102
- return Object.freeze({metadata:/* @__PURE__ */Object.freeze(out),droppedOperatorKeys:dropped})}var DROP=/* @__PURE__ */Symbol("drop");function acceptKey(key,value){if(BOOLEAN_KEYS.has(key))return typeof value=="boolean"?value:DROP;if(CONFIDENCE_KEYS.has(key))return isUnitConfidence(value)?value:DROP;if(key==="risk_tier")return typeof value=="string"&&RISK_TIER_VALUES.has(value)?value:DROP;if(key==="confidence_tier")return typeof value=="string"&&CONFIDENCE_TIER_VALUES.has(value)?value:DROP;if(typeof value!="string")return DROP;let limit=STRING_LIMITS[key]??256;return value.length>limit?value.slice(0,limit):value}function isUnitConfidence(value){return typeof value=="number"&&Number.isFinite(value)&&value>=0&&value<=1}function parseInterpretation(raw){if(!isRecord2(raw))return null;let summary=asString(raw.summary),disclaimer=asString(raw.disclaimer),recommendations=asStringList(raw.recommendations??raw.recommendation);return summary===null&&disclaimer===null&&recommendations.length===0?null:/* @__PURE__ */Object.freeze({summary:summary??"",recommendations:/* @__PURE__ */Object.freeze(recommendations),disclaimer:disclaimer??""})}function locateDetectionMetadata(body){if(!isRecord2(body))return{};if(isRecord2(body.metadata))return body.metadata;let detections=body.detections;if(Array.isArray(detections)&&detections.length>0){let first=detections[0];if(isRecord2(first)&&isRecord2(first.metadata))return first.metadata;if(isRecord2(first))return first}return body}function locateInterpretation(body){return isRecord2(body)?isRecord2(body.interpretation)?body.interpretation:body:null}function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function asString(value){return typeof value=="string"&&value.length>0?value:null}function asStringList(value){return typeof value=="string"?value.length>0?[value]:[]:Array.isArray(value)?value.filter(entry=>typeof entry=="string"&&entry.length>0):[]}function asUnitNumber(value){return isUnitConfidence(value)?value:null}function asFiniteNumber(value){return typeof value=="number"&&Number.isFinite(value)?value:null}var ENDPOINTS=/* @__PURE__ */Object.freeze({initiate:"/widget/v1/uploads/initiate",precheck:"/widget/v1/photo/precheck",photoAnalyze:"/widget/v1/photo/analyze",videoAnalyze:"/widget/v1/video/analyze",job:jobId=>hasLoneSurrogate(jobId)?null:`/widget/v1/analysis/jobs/${encodeURIComponent(jobId)}`});async function initiateUpload(funnel,params){let body={purpose:params.purpose,content_type:params.contentType};params.byteSize!==null&&(body.byte_size=params.byteSize);let req={method:"POST",path:ENDPOINTS.initiate,body:body,...params.signal?{signal:params.signal}:{}},res=await funnel.send("media.initiateUpload",req);if(!res.ok)return err(res.error);let policy=parsePresigned(res.value);return policy===null?err(makeEverfurError("mediaUploadFailed",{retryable:false})):ok(policy)}function parsePresigned(raw){if(!isRecord2(raw))return null;let url=asString(raw.url),s3Key=asString(raw.s3_key);if(url===null||s3Key===null)return null;let fieldsRaw=raw.fields,fields={};if(isRecord2(fieldsRaw))for(let[key,value]of Object.entries(fieldsRaw))typeof value=="string"&&(fields[key]=value);/* @__PURE__ */
101
+ return Object.freeze({mode:mode})}function isCaptureAvailable(camera){return camera!=null&&camera.isAvailable===true}var defaultTimers=/* @__PURE__ */Object.freeze({setTimeout:(handler,ms)=>setTimeout(handler,ms),clearTimeout:handle=>clearTimeout(handle),now:()=>Date.now()});function delayAbortable2(ms,signal,timers){return new Promise(resolve=>{if(signal.aborted){resolve();return}let holder={handle:void 0},done=()=>{timers.clearTimeout(holder.handle),signal.removeEventListener("abort",done),resolve()};holder.handle=timers.setTimeout(done,ms),signal.addEventListener("abort",done,{once:true})})}function mergeSignals2(a,b){if(!b)return a;let ctrl=new AbortController;if(a.aborted||b.aborted)return ctrl.abort(),ctrl.signal;let onAbort=()=>ctrl.abort();return a.addEventListener("abort",onAbort,{once:true}),b.addEventListener("abort",onAbort,{once:true}),ctrl.signal}var MediaStore=class{constructor(initial){this.listeners=/* @__PURE__ */new Set;this.epoch=0;this.inFlight=null;this.snapshot=/* @__PURE__ */Object.freeze({...initial})}subscribe(listener){return this.listeners.add(listener),()=>{this.listeners.delete(listener)}}getSnapshot(){return this.snapshot}patch(partial){this.snapshot=/* @__PURE__ */Object.freeze({...this.snapshot,...partial});for(let listener of this.listeners)listener()}beginOperation(external){this.inFlight?.abort();let ctrl=new AbortController;this.inFlight=ctrl;let epoch=this.epoch;return{signal:external?mergeSignals2(ctrl.signal,external):ctrl.signal,epoch:epoch,settle:()=>{this.inFlight===ctrl&&(this.inFlight=null)}}}alive(epoch){return epoch===this.epoch}rescope(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null}dispose(){this.epoch+=1,this.inFlight?.abort(),this.inFlight=null,this.listeners.clear()}};function hasLoneSurrogate(value){for(let i=0;i<value.length;i+=1){let code=value.charCodeAt(i);if(code>=55296&&code<=56319){let low=value.charCodeAt(i+1);if(!(low>=56320&&low<=57343))return true;i+=1}else if(code>=56320&&code<=57343)return true}return false}function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var CONSUMER_SAFE_DETECTION_KEYS=/* @__PURE__ */Object.freeze(["primary_label","primary_confidence","subtype_label","subtype_display","subtype_confidence","risk_tier","confidence_tier","copy_short","disease_name","disease_framing","model_version","skin_v2","eye_v2","llm_checkup"]),OPERATOR_INTERNAL_KEYS=/* @__PURE__ */Object.freeze(["decision_audit","decision_thresholds","per_class_auroc","ood_layers","gate1_score","possible_conditions","top_class"]),BOOLEAN_KEYS=/* @__PURE__ */new Set(["skin_v2","eye_v2","llm_checkup"]),CONFIDENCE_KEYS=/* @__PURE__ */new Set(["primary_confidence","subtype_confidence"]),RISK_TIER_VALUES=/* @__PURE__ */new Set(["low_risk","concern","uncertain"]),CONFIDENCE_TIER_VALUES=/* @__PURE__ */new Set(["possible","probable"]),STRING_LIMITS=/* @__PURE__ */Object.freeze({primary_label:64,subtype_label:64,subtype_display:128,copy_short:512,disease_name:128,disease_framing:512,model_version:64});function projectDetectionMetadata(raw){let source=isRecord2(raw)?raw:{},out={};for(let key of CONSUMER_SAFE_DETECTION_KEYS){if(!(key in source))continue;let value=source[key],accepted=acceptKey(key,value);accepted!==DROP&&(out[key]=accepted)}let dropped=0;for(let key of OPERATOR_INTERNAL_KEYS)key in source&&(dropped+=1);/* @__PURE__ */
102
+ return Object.freeze({metadata:/* @__PURE__ */Object.freeze(out),droppedOperatorKeys:dropped})}var DROP=/* @__PURE__ */Symbol("drop");function acceptKey(key,value){if(BOOLEAN_KEYS.has(key))return typeof value=="boolean"?value:DROP;if(CONFIDENCE_KEYS.has(key))return isUnitConfidence(value)?value:DROP;if(key==="risk_tier")return typeof value=="string"&&RISK_TIER_VALUES.has(value)?value:DROP;if(key==="confidence_tier")return typeof value=="string"&&CONFIDENCE_TIER_VALUES.has(value)?value:DROP;if(typeof value!="string")return DROP;let limit=STRING_LIMITS[key]??256;return value.length>limit?value.slice(0,limit):value}function isUnitConfidence(value){return typeof value=="number"&&Number.isFinite(value)&&value>=0&&value<=1}function parseInterpretation(raw){if(!isRecord2(raw))return null;let summary=asString(raw.summary),disclaimer=asString(raw.disclaimer),recommendations=asStringList(raw.recommendations??raw.recommendation);return summary===null&&disclaimer===null&&recommendations.length===0?null:/* @__PURE__ */Object.freeze({summary:summary??"",recommendations:/* @__PURE__ */Object.freeze(recommendations),disclaimer:disclaimer??""})}function locateDetectionMetadata(body){if(!isRecord2(body))return{};if(isRecord2(body.metadata))return body.metadata;let detections=body.detections;if(Array.isArray(detections)&&detections.length>0){let first=detections[0];if(isRecord2(first)&&isRecord2(first.metadata))return first.metadata;if(isRecord2(first))return first}return body}function locateInterpretation(body){return isRecord2(body)?isRecord2(body.interpretation)?body.interpretation:body:null}function asString(value){return typeof value=="string"&&value.length>0?value:null}function asStringList(value){return typeof value=="string"?value.length>0?[value]:[]:Array.isArray(value)?value.filter(entry=>typeof entry=="string"&&entry.length>0):[]}function asUnitNumber(value){return isUnitConfidence(value)?value:null}function asFiniteNumber(value){return typeof value=="number"&&Number.isFinite(value)?value:null}var ENDPOINTS=/* @__PURE__ */Object.freeze({initiate:"/widget/v1/uploads/initiate",precheck:"/widget/v1/photo/precheck",photoAnalyze:"/widget/v1/photo/analyze",videoAnalyze:"/widget/v1/video/analyze",job:jobId=>hasLoneSurrogate(jobId)?null:`/widget/v1/analysis/jobs/${encodeURIComponent(jobId)}`});async function initiateUpload(funnel,params){let body={purpose:params.purpose,content_type:params.contentType};params.byteSize!==null&&(body.byte_size=params.byteSize);let req={method:"POST",path:ENDPOINTS.initiate,body:body,...params.signal?{signal:params.signal}:{}},res=await funnel.send("media.initiateUpload",req);if(!res.ok)return err(res.error);let policy=parsePresigned(res.value);return policy===null?err(makeEverfurError("mediaUploadFailed",{retryable:false})):ok(policy)}function parsePresigned(raw){if(!isRecord2(raw))return null;let url=asString(raw.url),s3Key=asString(raw.s3_key);if(url===null||s3Key===null)return null;let fieldsRaw=raw.fields,fields={};if(isRecord2(fieldsRaw))for(let[key,value]of Object.entries(fieldsRaw))typeof value=="string"&&(fields[key]=value);/* @__PURE__ */
103
103
  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 runPrecheck(funnel,params){let req={method:"POST",path:ENDPOINTS.precheck,body:{s3_key:params.s3Key,type:params.type},...params.signal?{signal:params.signal}:{}},res=await funnel.send("media.precheck",req);return res.ok?parsePrecheck(res.value):{verdict:"proceed",reasonCodes:[],precheckToken:null}}function parsePrecheck(raw){if(!isRecord2(raw))return{verdict:"proceed",reasonCodes:[],precheckToken:null};let verdictRaw=asString(raw.verdict),verdict=verdictRaw==="retake"||verdictRaw==="reject"?verdictRaw:"proceed",reasonCodes=Array.isArray(raw.reason_codes)?raw.reason_codes.filter(c=>typeof c=="string"):[];/* @__PURE__ */
104
104
  return Object.freeze({verdict:verdict,reasonCodes:/* @__PURE__ */Object.freeze(reasonCodes),precheckToken:asString(raw.precheck_token)})}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 detectPhotoGate(httpStatus,_error){return httpStatus===422?{kind:"species_unsupported",species:"cat"}:httpStatus===400?{kind:"pet_context_required"}: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}var ACCEPTED=/* @__PURE__ */Object.freeze({kind:"accepted"});function createPhotoController(deps){return new PhotoController(deps)}var PhotoController=class extends MediaStore{constructor(deps){super({status:"idle",region:deps.region??"skin",result:null,gate:ACCEPTED,error:null,isCaptureAvailable:isCaptureAvailable(deps.camera)}),this.funnel=deps.funnel??createRequestFunnel({auth:deps.auth,...deps.errorPolicy?{errorPolicy:deps.errorPolicy}:{}}),this.camera=deps.camera,this.upload=deps.upload,this.telemetry=deps.telemetry??noopTelemetry,this.timers=deps.timers??defaultTimers,this.makeIdempotencyKey=deps.makeIdempotencyKey??defaultIdempotencyFactory()}async capture(region,opts){if(!isCaptureAvailable(this.camera))return err(makeEverfurError("unknown",{retryable:false}));let source;try{source=await this.camera.capture(captureOptionsFor("photo"))}catch{return this.snapshot.status!=="idle"&&this.patch({status:"idle"}),err(makeEverfurError("unknown",{retryable:false}))}return this.analyze(source,region,opts)}async analyze(source,region,opts){let op=this.beginOperation(opts.signal),idempotencyKey=this.makeIdempotencyKey(),startedAt=this.timers.now();this.patch({status:"capturing",region:region,error:null,result:null,gate:ACCEPTED});try{let initiated=await initiateUpload(this.funnel,{purpose:"skin_scan",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.fail(op,staged.error);let precheck=await runPrecheck(this.funnel,{s3Key:initiated.value.s3Key,type:region,signal:op.signal});if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();if(precheck.verdict!=="proceed")return this.gateRetake(op,region,precheck.reasonCodes);this.patch({status:"analyzing"});let outcome=await submitAnalyze(this.funnel,ENDPOINTS.photoAnalyze,analyzeBody(initiated.value.s3Key,{type:region,petRef:opts.petRef,precheckToken:precheck.precheckToken}),detectPhotoGate,op.signal);if(op.signal.aborted||!this.alive(op.epoch))return abortedResult();switch(outcome.kind){case"error":return this.fail(op,outcome.error);case"gate":return this.gateDomain(op,region,outcome.gate);case"sync":return this.complete(op,outcome.body,region,null,startedAt);case"async":{let poll=await pollJob(this.funnel,outcome.job.jobId,{timers:this.timers,signal:op.signal,alive:()=>this.alive(op.epoch),estimatedSeconds:outcome.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,region,outcome.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.fail(op,makeEverfurError("conversationNotFound",{retryable:!1,httpStatus:404}));default:return this.fail(op,makeEverfurError("internalError",{retryable:!1}))}}default:return this.fail(op,makeEverfurError("internalError",{retryable:!1}))}}finally{op.settle()}}reset(){this.inFlight?.abort(),this.inFlight=null,this.patch({status:"idle",result:null,gate:ACCEPTED,error:null})}complete(op,body,region,jobId,startedAt){if(!this.alive(op.epoch))return abortedResult();let mapped=mapPhotoResult(body,region,jobId);return mapped.droppedOperatorKeys>0&&this.telemetry.track("analysis.metadata_leak_guard",{droppedKeyCount:mapped.droppedOperatorKeys}),this.patch({status:"complete",result:mapped.result,gate:ACCEPTED,error:null}),this.telemetry.track("analysis.species_gate",{outcome:"accepted",region:region}),this.telemetry.track("analysis.result",{capability:"photo",region:region,riskTier:mapped.result.riskTier??"",confidenceTier:mapped.result.confidenceTier??"",modelVersion:mapped.result.modelVersion??"",timeToResultMs:this.timers.now()-startedAt}),ok(mapped.result)}gateDomain(op,region,gate){if(!this.alive(op.epoch))return abortedResult();let outcome=gate.kind==="species_unsupported"?/* @__PURE__ */Object.freeze({kind:"species_unsupported",species:"cat"}):/* @__PURE__ */Object.freeze({kind:"pet_context_required"});return this.patch({status:"idle",gate:outcome,error:null,result:null}),this.telemetry.track("analysis.species_gate",{outcome:gate.kind,region:region,...gate.kind==="species_unsupported"?{species:"cat"}:{}}),err(makeEverfurError("unknown",{retryable:false}))}gateRetake(op,region,reasons){if(!this.alive(op.epoch))return abortedResult();this.patch({status:"idle",gate:/* @__PURE__ */Object.freeze({kind:"retake",reasons:/* @__PURE__ */Object.freeze([...reasons])}),error:null,result:null}),this.telemetry.track("analysis.quality_gate",{usable:false,reasons:reasons});let outcome=reasons.includes("wrong_species")?"species_unsupported":"retake";return this.telemetry.track("analysis.species_gate",{outcome:outcome,region:region}),err(makeEverfurError("unknown",{retryable:false}))}fail(op,error){return this.alive(op.epoch)?(this.patch({status:"error",error:error,gate:ACCEPTED}),this.telemetry.trackExpectedFailure("analysis.error",{code:error.code,...error.httpStatus!==void 0?{httpStatus:error.httpStatus}:{}}),err(error)):abortedResult()}};function mapPhotoResult(body,region,jobId){let projection=projectDetectionMetadata(locateDetectionMetadata(body)),meta=projection.metadata,interpretation=parseInterpretation(locateInterpretation(body));return{result:/* @__PURE__ */Object.freeze({jobId:jobId,analysisType:region,primaryLabel:asString(meta.primary_label)??"Uncertain",riskTier:asRiskTier(meta.risk_tier),confidence:asUnitNumber(meta.primary_confidence),subtypeDisplay:asString(meta.subtype_display),confidenceTier:asConfidenceTier(meta.confidence_tier),diseaseName:asString(meta.disease_name),diseaseFraming:asString(meta.disease_framing),copyShort:asString(meta.copy_short),interpretation:interpretation,modelVersion:asString(meta.model_version)??(isRecord2(body)?asString(body.model_version):null)}),droppedOperatorKeys:projection.droppedOperatorKeys}}function asRiskTier(value){return value==="low_risk"||value==="concern"||value==="uncertain"?value:null}function asConfidenceTier(value){return value==="possible"||value==="probable"?value:null}function abortedResult(){return err(makeEverfurError("unknown",{retryable:false}))}function defaultIdempotencyFactory(){let counter=0;return()=>`photo-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",region:"skin",result:null,gate:/* @__PURE__ */Object.freeze({kind:"accepted"}),error:null,isCaptureAvailable:false}),NOOP_UNSUBSCRIBE=()=>{};function usePhotoCheckup(opts){let{runtime:runtime,userRef:userRef,scopeEpoch:scopeEpoch}=useEverfurContext(),petRef=opts.petRef,[controller,setController]=useState(null);useEffect(()=>{let{services:services}=runtime.registry,acquired=runtime.registry.acquire("photo",`${userRef??""}|${petRef}`,()=>createPhotoController({...services.errorPolicy?{errorPolicy:services.errorPolicy}:{},auth:services.authFor(userRef),camera:services.camera,upload:services.upload,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),analyze=useCallback((source,region)=>controller?controller.analyze(source,region,{petRef:petRef}):Promise.resolve(notReadyError()),[controller,petRef]),capture=useCallback(region=>controller?controller.capture(region,{petRef:petRef}):Promise.resolve(notReadyError()),[controller,petRef]),reset=useCallback(()=>{controller?.reset()},[controller]);return useMemo(()=>({status:snapshot.status,region:snapshot.region,result:snapshot.result,gate:snapshot.gate,error:snapshot.error,isCaptureAvailable:snapshot.isCaptureAvailable,isBootstrapping:controller===null,analyze:analyze,capture:capture,reset:reset}),[snapshot,controller,analyze,capture,reset])}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__ */
105
105
  return Object.freeze({reason:explicit.reason,level:explicit.level,recoverable:explicit.recoverable})}/* @__PURE__ */
@@ -1,11 +1,11 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
- import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository.d-C__BnffJ.js';
3
- import { A as AuthContext } from './identity.d-Be2Es9Td.js';
2
+ import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository.d-BW8DTYeN.js';
3
+ import { A as AuthContext } from './identity.d-BEJcHY-5.js';
4
4
  import { E as EverfurError } from './EverfurError.d-8NHtlgzA.js';
5
5
  import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
6
- import { R as RequestFunnel } from './requestFunnel.d-YabU6G-Z.js';
6
+ import { R as RequestFunnel } from './requestFunnel.d-BPsCHJWf.js';
7
7
  import { P as PetRef, C as ConversationId, b as ResponseId } from './ids.d-B2GAAifq.js';
8
- import { i as UrgencyLevel, F as Frame } from './config.d-XSMThgVj.js';
8
+ import { i as UrgencyLevel, F as Frame } from './config.d-jTVsAeky.js';
9
9
  import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-68yrE3BE.js';
10
10
  import { T as TelemetryPort } from './TelemetryPort.d-BDNr00hu.js';
11
11
  import { F as FileHandle } from './ports.d-BX4f4UsB.js';
@@ -1,11 +1,11 @@
1
1
  /*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
2
- import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository.d-BMOnT1fg.cjs';
3
- import { A as AuthContext } from './identity.d-HbwYQ4-z.cjs';
2
+ import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository.d-_0AO2YrL.cjs';
3
+ import { A as AuthContext } from './identity.d-COcNGuCJ.cjs';
4
4
  import { E as EverfurError } from './EverfurError.d-8NHtlgzA.cjs';
5
5
  import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
6
- import { R as RequestFunnel } from './requestFunnel.d-JoqddYSx.cjs';
6
+ import { R as RequestFunnel } from './requestFunnel.d-BdpL7gwg.cjs';
7
7
  import { P as PetRef, C as ConversationId, b as ResponseId } from './ids.d-B2GAAifq.cjs';
8
- import { i as UrgencyLevel, F as Frame } from './config.d-BQgrIDdu.cjs';
8
+ import { i as UrgencyLevel, F as Frame } from './config.d-D1xcxALX.cjs';
9
9
  import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-DirW9hgO.cjs';
10
10
  import { T as TelemetryPort } from './TelemetryPort.d-BDNr00hu.cjs';
11
11
  import { F as FileHandle } from './ports.d-BX4f4UsB.cjs';