@everfur/sdk 0.9.0 → 0.9.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 (169) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +1 -1
  3. package/dist/{Chat-ClhB_8sp.d.ts → Chat-BoVmqEeF.d.ts} +3 -3
  4. package/dist/{Chat-Cb3Y8VwS.d.cts → Chat-DbHkTbqz.d.cts} +3 -3
  5. package/dist/{DepthViews-CSCS-tZg.d.ts → DepthViews-BzwflaJ3.d.ts} +1 -1
  6. package/dist/{DepthViews-CW1z8pnl.d.cts → DepthViews-Chyp69Ue.d.cts} +1 -1
  7. package/dist/{DepthViews-DDiPxyzg.d.cts → DepthViews-DK7EJ6Hp.d.cts} +1 -1
  8. package/dist/{DepthViews-BSkuUGBB.d.ts → DepthViews-yO1H371y.d.ts} +1 -1
  9. package/dist/{ErrorPolicyPort-NFDPe-5w.d.cts → ErrorPolicyPort-10s3HJCt.d.cts} +1 -1
  10. package/dist/{ErrorPolicyPort-DwSnmGcX.d.ts → ErrorPolicyPort-C3nNSS_j.d.ts} +1 -1
  11. package/dist/{EverfurError-pEXDbUJ1.d.cts → EverfurError-DeBqRpQV.d.cts} +1 -1
  12. package/dist/{EverfurError-pEXDbUJ1.d.ts → EverfurError-DeBqRpQV.d.ts} +1 -1
  13. package/dist/{EverfurResult-dtl8ERAw.d.cts → EverfurResult-COlXj1wq.d.cts} +1 -1
  14. package/dist/{EverfurResult-sKkoXew0.d.ts → EverfurResult-ClPTS0P2.d.ts} +1 -1
  15. package/dist/{IntakeMedia-BFZfBLjB.d.cts → IntakeMedia-B-_vA9ZB.d.cts} +2 -1
  16. package/dist/{IntakeMedia-C8GlN_GK.d.ts → IntakeMedia-CIoTXAWs.d.ts} +2 -1
  17. package/dist/animations/index.cjs +1 -1
  18. package/dist/animations/index.d.cts +6 -6
  19. package/dist/animations/index.d.ts +6 -6
  20. package/dist/animations/index.js +1 -1
  21. package/dist/{attachments-BD70jZZL.d.cts → attachments-B7TrtyfH.d.cts} +3 -3
  22. package/dist/{attachments-CC7aHpwZ.d.ts → attachments-BmMrn9tU.d.ts} +7 -7
  23. package/dist/{attachments-DAUy3vPR.d.ts → attachments-Dcb19rMP.d.ts} +3 -3
  24. package/dist/{attachments-DaOaIBNf.d.cts → attachments-Dnpqk1Gl.d.cts} +7 -7
  25. package/dist/{bookingCopy-oEjqkiNA.d.cts → bookingCopy-C153FHEC.d.cts} +7 -6
  26. package/dist/{bookingCopy-CUW9Gdzc.d.ts → bookingCopy-DR0-SmqH.d.ts} +7 -6
  27. package/dist/{branding-ctD0B2Th.d.cts → branding-BCfwLj0h.d.cts} +1 -1
  28. package/dist/{branding-aGleD_ki.d.ts → branding-DJf4h12Q.d.ts} +1 -1
  29. package/dist/{callRoom-B1qq_D-4.d.ts → callRoom-B92eH_ij.d.ts} +1 -1
  30. package/dist/{callRoom-DfZTWFXh.d.cts → callRoom-BhIdadyV.d.cts} +1 -1
  31. package/dist/{casesRepository-CywqL6mj.d.ts → casesRepository-BXdwCWQF.d.ts} +2 -2
  32. package/dist/{casesRepository-Bzs7aw4t.d.cts → casesRepository-DC9lEQez.d.cts} +2 -2
  33. package/dist/chat/index.cjs +9 -9
  34. package/dist/chat/index.d.cts +12 -12
  35. package/dist/chat/index.d.ts +12 -12
  36. package/dist/chat/index.js +9 -9
  37. package/dist/client/index.cjs +4 -4
  38. package/dist/client/index.d.cts +14 -14
  39. package/dist/client/index.d.ts +14 -14
  40. package/dist/client/index.js +4 -4
  41. package/dist/{config-EZzEyS-c.d.cts → config-BRyNmzhx.d.cts} +3 -3
  42. package/dist/{config-BysLVhku.d.ts → config-DdK2czhD.d.ts} +3 -3
  43. package/dist/consent/index.cjs +2 -2
  44. package/dist/consent/index.d.cts +9 -9
  45. package/dist/consent/index.d.ts +9 -9
  46. package/dist/consent/index.js +2 -2
  47. package/dist/{context-DpfgbnOU.d.ts → context-_EyjBNKI.d.ts} +9 -9
  48. package/dist/{context-DUwYArkM.d.cts → context-jaONuHXM.d.cts} +9 -9
  49. package/dist/{copy-LxZGnFXJ.d.ts → copy-BJpRsqK-.d.ts} +5 -5
  50. package/dist/{copy-DK4r9oGz.d.cts → copy-D8iSBQE6.d.cts} +5 -5
  51. package/dist/core/index.cjs +4 -4
  52. package/dist/core/index.d.cts +19 -19
  53. package/dist/core/index.d.ts +19 -19
  54. package/dist/core/index.js +4 -4
  55. package/dist/{depth-DAd77kRe.d.cts → depth-DJ1KGMww.d.cts} +6 -6
  56. package/dist/{depth-Mk7quUNa.d.ts → depth-bKpg3L9r.d.ts} +6 -6
  57. package/dist/{entitlementRepository-Dra_4FU_.d.cts → entitlementRepository-4x_tBE73.d.cts} +4 -4
  58. package/dist/{entitlementRepository-CrD0O7VR.d.ts → entitlementRepository-CojBLazH.d.ts} +4 -4
  59. package/dist/{identity-BiyMDMrR.d.ts → identity-A8fVB518.d.ts} +2 -2
  60. package/dist/{identity-75whJXyP.d.cts → identity-CmxZ4GR0.d.cts} +2 -2
  61. package/dist/index.cjs +14 -14
  62. package/dist/index.d.cts +19 -19
  63. package/dist/index.d.ts +19 -19
  64. package/dist/index.js +14 -14
  65. package/dist/{models-DzvqEjMm.d.cts → models-A4A5S7AG.d.cts} +1 -1
  66. package/dist/{models-CrbUwbuS.d.ts → models-CnXY5LuO.d.ts} +1 -1
  67. package/dist/notifications/index.cjs +1 -1
  68. package/dist/notifications/index.d.cts +5 -5
  69. package/dist/notifications/index.d.ts +5 -5
  70. package/dist/notifications/index.js +1 -1
  71. package/dist/{pets-DoXxTw4x.d.cts → pets-DjBlY7yg.d.cts} +2 -2
  72. package/dist/{pets-W2BuLYko.d.ts → pets-e5RjSP6O.d.ts} +2 -2
  73. package/dist/{petsRepository-ByMzq1Z9.d.ts → petsRepository-CQh8paML.d.ts} +2 -2
  74. package/dist/{petsRepository-yyoo0k2I.d.cts → petsRepository-DkQ2fwZY.d.cts} +2 -2
  75. package/dist/photo/index.cjs +1 -1
  76. package/dist/photo/index.d.cts +3 -3
  77. package/dist/photo/index.d.ts +3 -3
  78. package/dist/photo/index.js +1 -1
  79. package/dist/{ports-BeVJYP0_.d.cts → ports-2voZkqty.d.cts} +7 -7
  80. package/dist/{ports-zYl8S_lI.d.ts → ports-CzVBbI_A.d.ts} +7 -7
  81. package/dist/records/depth/index.cjs +1 -1
  82. package/dist/records/depth/index.d.cts +11 -11
  83. package/dist/records/depth/index.d.ts +11 -11
  84. package/dist/records/depth/index.js +1 -1
  85. package/dist/records/index.cjs +5 -5
  86. package/dist/records/index.d.cts +14 -14
  87. package/dist/records/index.d.ts +14 -14
  88. package/dist/records/index.js +5 -5
  89. package/dist/{requestFunnel-DHeSzCT6.d.cts → requestFunnel-CA0ANsWj.d.cts} +5 -5
  90. package/dist/{requestFunnel-BPeBZdKp.d.ts → requestFunnel-CQ42Kf9G.d.ts} +5 -5
  91. package/dist/{runtimeTypes-DgMizQKz.d.cts → runtimeTypes-BxtQXaYi.d.cts} +7 -7
  92. package/dist/{runtimeTypes-Cc207nbn.d.ts → runtimeTypes-C0tI7s-V.d.ts} +7 -7
  93. package/dist/server/events/index.cjs +2 -2
  94. package/dist/server/events/index.d.cts +4 -4
  95. package/dist/server/events/index.d.ts +4 -4
  96. package/dist/server/events/index.js +2 -2
  97. package/dist/server/index.cjs +2 -2
  98. package/dist/server/index.d.cts +5 -5
  99. package/dist/server/index.d.ts +5 -5
  100. package/dist/server/index.js +2 -2
  101. package/dist/televet/booking/index.cjs +9 -8
  102. package/dist/televet/booking/index.d.cts +12 -12
  103. package/dist/televet/booking/index.d.ts +12 -12
  104. package/dist/televet/booking/index.js +9 -8
  105. package/dist/televet/call/index.d.cts +2 -2
  106. package/dist/televet/call/index.d.ts +2 -2
  107. package/dist/televet/index.cjs +2 -2
  108. package/dist/televet/index.d.cts +7 -7
  109. package/dist/televet/index.d.ts +7 -7
  110. package/dist/televet/index.js +2 -2
  111. package/dist/testing/index.cjs +2 -2
  112. package/dist/testing/index.d.cts +3 -3
  113. package/dist/testing/index.d.ts +3 -3
  114. package/dist/testing/index.js +2 -2
  115. package/dist/testing/rn/index.cjs +2 -2
  116. package/dist/testing/rn/index.d.cts +13 -13
  117. package/dist/testing/rn/index.d.ts +13 -13
  118. package/dist/testing/rn/index.js +2 -2
  119. package/dist/testing/web/index.cjs +1 -1
  120. package/dist/testing/web/index.d.cts +14 -14
  121. package/dist/testing/web/index.d.ts +14 -14
  122. package/dist/testing/web/index.js +1 -1
  123. package/dist/{timelineRows-D22vGN9t.d.ts → timelineRows-GSpzKLla.d.ts} +1 -1
  124. package/dist/{timelineRows-DUQIWSjc.d.cts → timelineRows-WFv_3EOi.d.cts} +1 -1
  125. package/dist/{tokens-RAKZj7M8.d.cts → tokens-DLj8OnLH.d.cts} +4 -2
  126. package/dist/{tokens-RAKZj7M8.d.ts → tokens-DLj8OnLH.d.ts} +4 -2
  127. package/dist/{typeStyle-DVj8iCC1.d.ts → typeStyle-BxVyF71R.d.ts} +2 -2
  128. package/dist/{typeStyle-Nt7w0rhE.d.cts → typeStyle-DJedEu14.d.cts} +2 -2
  129. package/dist/{useRecordsDepth-Mbysp548.d.cts → useRecordsDepth-BL5Pf3oK.d.cts} +4 -4
  130. package/dist/{useRecordsDepth-C0Qfoghi.d.ts → useRecordsDepth-BQF0Zynl.d.ts} +4 -4
  131. package/dist/{useVetVisit-RPBOabl8.d.ts → useVetVisit-DmWa7lt1.d.ts} +2 -2
  132. package/dist/{useVetVisit-BQX_aTJs.d.cts → useVetVisit-PtBjNwZr.d.cts} +2 -2
  133. package/dist/video/index.cjs +1 -1
  134. package/dist/video/index.d.cts +3 -3
  135. package/dist/video/index.d.ts +3 -3
  136. package/dist/video/index.js +1 -1
  137. package/dist/{view-CskIgOFV.d.cts → view-D3kOelPL.d.cts} +5 -5
  138. package/dist/{view-DqKXtxEZ.d.ts → view-rgB1iqWO.d.ts} +5 -5
  139. package/dist/web/consent/index.cjs +2 -2
  140. package/dist/web/consent/index.d.cts +9 -9
  141. package/dist/web/consent/index.d.ts +9 -9
  142. package/dist/web/consent/index.js +2 -2
  143. package/dist/web/index.cjs +10 -10
  144. package/dist/web/index.d.cts +22 -22
  145. package/dist/web/index.d.ts +22 -22
  146. package/dist/web/index.js +10 -10
  147. package/dist/web/notifications/index.cjs +1 -1
  148. package/dist/web/notifications/index.d.cts +7 -7
  149. package/dist/web/notifications/index.d.ts +7 -7
  150. package/dist/web/notifications/index.js +1 -1
  151. package/dist/web/records/depth/index.cjs +1 -1
  152. package/dist/web/records/depth/index.d.cts +11 -11
  153. package/dist/web/records/depth/index.d.ts +11 -11
  154. package/dist/web/records/depth/index.js +1 -1
  155. package/dist/web/records/index.cjs +4 -3
  156. package/dist/web/records/index.d.cts +15 -15
  157. package/dist/web/records/index.d.ts +15 -15
  158. package/dist/web/records/index.js +4 -3
  159. package/dist/web/televet/booking/index.cjs +5 -5
  160. package/dist/web/televet/booking/index.d.cts +14 -11
  161. package/dist/web/televet/booking/index.d.ts +14 -11
  162. package/dist/web/televet/booking/index.js +5 -5
  163. package/dist/web/televet/call/index.d.cts +2 -2
  164. package/dist/web/televet/call/index.d.ts +2 -2
  165. package/dist/web/televet/index.cjs +1 -1
  166. package/dist/web/televet/index.d.cts +5 -5
  167. package/dist/web/televet/index.d.ts +5 -5
  168. package/dist/web/televet/index.js +1 -1
  169. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,58 @@ changes that has not been earned by any production integration yet.
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.9.1] - 2026-10-04
14
+
15
+ ### Added
16
+
17
+ - **The emergency warnings say "Go to the nearest emergency vet now." when you pass no vet finder (web and React
18
+ Native).** The booking warning's exits box (in place of Describe, on the step-5 emergency check and at Confirm)
19
+ offered ASPCA Animal Poison Control alone when the host passed no `onFindEmergencyVet`, so a member in an
20
+ emergency was never told to go to an emergency vet. The line is now the box's first row: plain text, not a button
21
+ or a link, read in order. With `onFindEmergencyVet`, the `Find an emergency vet near you` row is drawn in its
22
+ place, as before. The chat's `Call a vet now` banner draws the same line under the server's reason when the host
23
+ passes no `onFindVet`, so an emergency never points only at a scheduled video visit. Owner-approved wording
24
+ (2026-10-04), held once in `src/react/emergencyLine.ts`; new keys `TELEVET_BOOKING_COPY.emergency.exitGoToErTitle`,
25
+ `TELEVET_EMERGENCY_EXITS_WEB.goToEmergencyVet` and `CHAT_COPY.goToNearestEmergencyVet`.
26
+
27
+ - **`runtimeDisposed` is a named error code.** A verb on a runtime whose `EverfurProvider` has unmounted (or whose
28
+ config changed), and a consent read or write on one, settled as `validationFailed` ("the Everfur runtime is
29
+ disposed; registerPet was called after unmount"). It now settles as `runtimeDisposed` (category `invalidRequest`,
30
+ as before, not retryable, the same end-user sentence as before), so a caller can tell it apart and ignore it. The
31
+ meaning of `validationFailed` is unchanged. Documented in 11-ERRORS.
32
+
33
+ ### Fixed
34
+
35
+ - **The theme guard keeps the partner's decorative borders (web and React Native).** A slot `borderColor` was pushed
36
+ to 3:1 whatever it bounded, so a theme built from Tailwind's slate and indigo had 16 of its 21 guard changes on
37
+ borders: an edge equal to its own fill (`slots.sendButton.border_color #4F46E5 -> #B0ACF3`) became a lavender ring,
38
+ and the slate-200 hairline of the cards, dialogs, header, banners and booking steps
39
+ (`slots.card.border_color #E2E8F0 -> #888B90`) a heavy grey line (partner integration test, 2026-10-04). WCAG
40
+ 1.4.11 asks that a control be identifiable, so a slot border is now kept as given when it is the fill's own colour,
41
+ when the slot's opaque fill already reads at 3:1 on the ground around it, and always on the containers (`card`,
42
+ `recordCard`, `banner`, `header`, `dialog`, `bookingStep`). The edge of a fill that melts into its surround, of a
43
+ control with no fill, and of a text field (`input`, `composerInput`) is still guarded at 3:1, and every text and
44
+ status colour still is. The same theme now reports 9 changes. One guard serves both platforms.
45
+ - **A booking header box has rounded corners (web and React Native).** A `header` slot with a fill or an edge and no
46
+ `borderRadius` drew a square box inside the rounded booking dialog, beside the rounded step and review cards. On
47
+ the booking bar and the visit screens' back row it now takes the booking cards' corner (`radius.lg`) unless the
48
+ slot names its own radius.
49
+ - **No disposed runtime under React StrictMode.** The provider disposed its runtime in its unmount cleanup, and
50
+ StrictMode's development double-mount re-runs the children's mount effects before anything rebuilt it, so a
51
+ `registerPet` from a child's mount effect failed on every development load. The disposal now waits one microtask
52
+ and is cancelled by the simulated remount; a real unmount still disposes the runtime.
53
+ - **The first press of VetVisitButton no longer reloads an Expo development build (React Native).** The in-app
54
+ visit reached `@everfur/sdk/televet/booking` (and the booking screens `@everfur/sdk/televet/call`) through a
55
+ dynamic `import()`. Expo's development server served it as a separate lazy bundle, and on the first press the
56
+ app restarted on its first screen (hosted-MCP mobile test, Expo SDK 57; the second press worked). On React
57
+ Native both are now static imports. A release bundle is one file, so this changes nothing in a release build's
58
+ size; the web entries keep their dynamic imports.
59
+ - **Return sends in the React Native chat composer, and the sent text is trimmed.** The multiline composer typed a
60
+ line break on Return (its `send` key), and the next Send carried it as a blank line in the bubble.
61
+ - **The React Native records consent ask is a neutral heading.** "Consent required" was drawn in the danger colour.
62
+ - **The `chip` slot paints the records "What's on file" category chips (web and React Native).** A category at
63
+ rest wears the slot; one on file keeps its positive tone and takes the slot's corner.
64
+
13
65
  ## [0.9.0] - 2026-10-02
14
66
 
15
67
  ### Changed
package/README.md CHANGED
@@ -10,7 +10,7 @@ features without shipping an app update.
10
10
  a blank screen, and cannot be force-enabled client-side.
11
11
  - The app never holds a secret. See [The security model](#the-security-model).
12
12
 
13
- > `0.9.0`, MIT licensed, public on npm. Requires React Native `>=0.74` (or React `>=18` with `react-dom`
13
+ > `0.9.1`, MIT licensed, public on npm. Requires React Native `>=0.74` (or React `>=18` with `react-dom`
14
14
  > for the web entry), and Node `>=18` on the backend that mints sessions.
15
15
 
16
16
  <!-- DRAFT COPY slot PD1-2 (owner): the README's invitation to get started (self-serve sandbox sign-up), in the owner's words. The factual paragraph below stands without it. -->
@@ -2,9 +2,9 @@ import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
3
  import { P as PetRef, C as ConversationId } from './ids-B2GAAifq.js';
4
4
  import { F as FileHandle } from './ports-BN6RHF9W.js';
5
- import { a as ChatCheckinTarget } from './ports-zYl8S_lI.js';
6
- import { W as WidgetPet, P as PetProfileInput } from './petsRepository-ByMzq1Z9.js';
7
- import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-CC7aHpwZ.js';
5
+ import { a as ChatCheckinTarget } from './ports-CzVBbI_A.js';
6
+ import { W as WidgetPet, P as PetProfileInput } from './petsRepository-CQh8paML.js';
7
+ import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-BmMrn9tU.js';
8
8
 
9
9
  /** Where a picked image comes from: the host's photo library, or its camera. */
10
10
  type AttachmentSource = 'photo' | 'camera';
@@ -2,9 +2,9 @@ import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
3
  import { P as PetRef, C as ConversationId } from './ids-B2GAAifq.cjs';
4
4
  import { F as FileHandle } from './ports-BN6RHF9W.cjs';
5
- import { a as ChatCheckinTarget } from './ports-BeVJYP0_.cjs';
6
- import { W as WidgetPet, P as PetProfileInput } from './petsRepository-yyoo0k2I.cjs';
7
- import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-DaOaIBNf.cjs';
5
+ import { a as ChatCheckinTarget } from './ports-2voZkqty.cjs';
6
+ import { W as WidgetPet, P as PetProfileInput } from './petsRepository-DkQ2fwZY.cjs';
7
+ import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-Dnpqk1Gl.cjs';
8
8
 
9
9
  /** Where a picked image comes from: the host's photo library, or its camera. */
10
10
  type AttachmentSource = 'photo' | 'camera';
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-C0Qfoghi.js';
3
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-BQF0Zynl.js';
4
4
 
5
5
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
6
6
  readonly style?: StyleProp<ViewStyle>;
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-Mbysp548.cjs';
3
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-BL5Pf3oK.cjs';
4
4
 
5
5
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
6
6
  readonly style?: StyleProp<ViewStyle>;
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-Mbysp548.cjs';
2
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-BL5Pf3oK.cjs';
3
3
 
4
4
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
5
5
  readonly style?: CSSProperties;
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-C0Qfoghi.js';
2
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-BQF0Zynl.js';
3
3
 
4
4
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
5
5
  readonly style?: CSSProperties;
@@ -1,4 +1,4 @@
1
- import { b as EverfurErrorCode, E as EverfurError } from './EverfurError-pEXDbUJ1.cjs';
1
+ import { b as EverfurErrorCode, E as EverfurError } from './EverfurError-DeBqRpQV.cjs';
2
2
 
3
3
  /**
4
4
  * Recovery policy. A host may narrow retry ceilings (e.g. a metered plan) but can never widen the SDK's
@@ -1,4 +1,4 @@
1
- import { b as EverfurErrorCode, E as EverfurError } from './EverfurError-pEXDbUJ1.js';
1
+ import { b as EverfurErrorCode, E as EverfurError } from './EverfurError-DeBqRpQV.js';
2
2
 
3
3
  /**
4
4
  * Recovery policy. A host may narrow retry ceilings (e.g. a metered plan) but can never widen the SDK's
@@ -1,5 +1,5 @@
1
1
  /** The frozen error taxonomy. Additive-only under the dated-contract policy. */
2
- type EverfurErrorCode = 'authExpired' | 'authRejected' | 'sessionRequired' | 'accessDenied' | 'paymentRequired' | 'quotaExceeded' | 'rateLimited' | 'validationFailed' | 'sdkUpdateRequired' | 'conflict' | 'idempotencyConflict' | 'idempotencyInFlight' | 'conversationNotFound' | 'petNotFound' | 'resourceNotFound' | 'streamTimeout' | 'mediaUploadFailed' | 'moderationBlocked' | 'upstreamLlmTimeout' | 'internalError' | 'notImplemented' | 'serviceUnavailable' | 'streamIncomplete' | 'identitySignatureRequired' | 'unknown';
2
+ type EverfurErrorCode = 'authExpired' | 'authRejected' | 'sessionRequired' | 'accessDenied' | 'paymentRequired' | 'quotaExceeded' | 'rateLimited' | 'validationFailed' | 'sdkUpdateRequired' | 'conflict' | 'idempotencyConflict' | 'idempotencyInFlight' | 'conversationNotFound' | 'petNotFound' | 'resourceNotFound' | 'streamTimeout' | 'mediaUploadFailed' | 'moderationBlocked' | 'upstreamLlmTimeout' | 'internalError' | 'notImplemented' | 'serviceUnavailable' | 'streamIncomplete' | 'identitySignatureRequired' | 'runtimeDisposed' | 'unknown';
3
3
  /** Every code, frozen, for iteration in conformance / property tests. */
4
4
  declare const EVERFUR_ERROR_CODES: readonly EverfurErrorCode[];
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /** The frozen error taxonomy. Additive-only under the dated-contract policy. */
2
- type EverfurErrorCode = 'authExpired' | 'authRejected' | 'sessionRequired' | 'accessDenied' | 'paymentRequired' | 'quotaExceeded' | 'rateLimited' | 'validationFailed' | 'sdkUpdateRequired' | 'conflict' | 'idempotencyConflict' | 'idempotencyInFlight' | 'conversationNotFound' | 'petNotFound' | 'resourceNotFound' | 'streamTimeout' | 'mediaUploadFailed' | 'moderationBlocked' | 'upstreamLlmTimeout' | 'internalError' | 'notImplemented' | 'serviceUnavailable' | 'streamIncomplete' | 'identitySignatureRequired' | 'unknown';
2
+ type EverfurErrorCode = 'authExpired' | 'authRejected' | 'sessionRequired' | 'accessDenied' | 'paymentRequired' | 'quotaExceeded' | 'rateLimited' | 'validationFailed' | 'sdkUpdateRequired' | 'conflict' | 'idempotencyConflict' | 'idempotencyInFlight' | 'conversationNotFound' | 'petNotFound' | 'resourceNotFound' | 'streamTimeout' | 'mediaUploadFailed' | 'moderationBlocked' | 'upstreamLlmTimeout' | 'internalError' | 'notImplemented' | 'serviceUnavailable' | 'streamIncomplete' | 'identitySignatureRequired' | 'runtimeDisposed' | 'unknown';
3
3
  /** Every code, frozen, for iteration in conformance / property tests. */
4
4
  declare const EVERFUR_ERROR_CODES: readonly EverfurErrorCode[];
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.cjs';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.cjs';
2
2
 
3
3
  /**
4
4
  * The settle type. An async public operation returns this instead of throwing for an EXPECTED failure.
@@ -1,4 +1,4 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.js';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.js';
2
2
 
3
3
  /**
4
4
  * The settle type. An async public operation returns this instead of throwing for an EXPECTED failure.
@@ -25,7 +25,8 @@ interface TelevetPrimaryVet {
25
25
  }
26
26
  /**
27
27
  * THE EXIT ROWS, on both places the warning is drawn: in place of Describe and at Confirm, in the artifacts' order
28
- * (`vet-book-emergency`): find an emergency vet (only with the host's own locator), ASPCA Animal Poison Control
28
+ * (`vet-book-emergency`): find an emergency vet (only with the host's own locator; without one, the plain
29
+ * owner-approved line "Go to the nearest emergency vet now." in its place), ASPCA Animal Poison Control
29
30
  * (dialled from its own number), then the pet's own clinic (only when the host holds it). One white box of rows
30
31
  * split by hairlines, inside the panel's alert wash.
31
32
  */
@@ -25,7 +25,8 @@ interface TelevetPrimaryVet {
25
25
  }
26
26
  /**
27
27
  * THE EXIT ROWS, on both places the warning is drawn: in place of Describe and at Confirm, in the artifacts' order
28
- * (`vet-book-emergency`): find an emergency vet (only with the host's own locator), ASPCA Animal Poison Control
28
+ * (`vet-book-emergency`): find an emergency vet (only with the host's own locator; without one, the plain
29
+ * owner-approved line "Go to the nearest emergency vet now." in its place), ASPCA Animal Poison Control
29
30
  * (dialled from its own number), then the pet's own clinic (only when the host holds it). One white box of rows
30
31
  * split by hairlines, inside the panel's alert wash.
31
32
  */
@@ -86,7 +86,7 @@ return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fiel
86
86
  /* @__PURE__ */Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
87
87
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),
88
88
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
89
- /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row=>row.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row=BY_KEY.get(candidate+key);if(row)return row}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){case"DAILYQUOTAEXCEEDED":case"QUOTAEXCEEDED":return"quotaExceeded";case"RATELIMITED":case"TOOMANYREQUESTS":case"TELEVETRATELIMITED":return"rateLimited";case"IDEMPOTENCYKEYCONFLICT":case"IDEMPOTENCYCONFLICT":return"idempotencyConflict";case"ACCESSDENIED":case"FORBIDDEN":return"accessDenied";case"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"NOTFOUND":case"CONVERSATIONNOTFOUND":return"conversationNotFound";case"PETNOTFOUND":return"petNotFound";case"TIMEOUT":case"STREAMTIMEOUT":return"streamTimeout";case"MEDIAUPLOADFAILED":case"UNRECOGNIZEDVIDEOFORMAT":case"FILETOOSMALL":return"mediaUploadFailed";case"MODERATIONBLOCKED":return"moderationBlocked";case"UPSTREAMLLMTIMEOUT":return"upstreamLlmTimeout";case"INTERNALERROR":case"INTERNALSERVERERROR":return"internalError";case"STREAMINCOMPLETE":case"CHATSTREAMINCOMPLETE":return"streamIncomplete";case"INVALIDANALYSISTYPE":case"INVALIDUPLOADPURPOSE":return"unknown";default:return"unknown"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,unknown:"Something went wrong. Please try again."});function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),error={code:code,category:categoryFor(code),retryable:opts?.retryable??isRetryableCode(code),displayMessage:userFacingError(code)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}var REQUIRES=/* @__PURE__ */Object.freeze({chat:/* @__PURE__ */Object.freeze(["chat.message.create"]),records:/* @__PURE__ */Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:/* @__PURE__ */Object.freeze(["records.clinic.create"]),video:/* @__PURE__ */Object.freeze(["video.gait.execute"]),photo:/* @__PURE__ */Object.freeze(["photo.checkup.execute"]),animations:/* @__PURE__ */Object.freeze(["animations.state.read"]),televet:/* @__PURE__ */Object.freeze(["televet.visit.create"])});function requires(name){return REQUIRES[name]}function decideCapability(name,decisions,opts){let keys=requires(name),byResource=/* @__PURE__ */new Map;for(let decision of decisions)byResource.set(decision.resource,decision);if(opts?.isPending===true&&keys.some(key=>!byResource.has(key)))return freezeDecision({name:name,enabled:false,isPending:true,limits:{}});let limits=mergeLimits(keys,byResource);return keys.filter(key=>byResource.get(key)?.granted!==true).length===0?freezeDecision({name:name,enabled:true,isPending:false,limits:limits}):freezeDecision({name:name,enabled:false,isPending:false,limits:limits,disabled:disabledFor(keys,byResource)})}function mergeLimits(keys,byResource){let out={};for(let key of keys){let decisionLimits=byResource.get(key)?.limits;if(decisionLimits)for(let[limitKey,limitValue]of Object.entries(decisionLimits)){let existing=out[limitKey];out[limitKey]=existing===void 0?limitValue:Math.min(existing,limitValue)}}return out}function disabledFor(keys,byResource){for(let key of keys){let explicit=byResource.get(key)?.disabled;if(explicit)/* @__PURE__ */
89
+ /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row=>row.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row=BY_KEY.get(candidate+key);if(row)return row}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",runtimeDisposed:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){case"DAILYQUOTAEXCEEDED":case"QUOTAEXCEEDED":return"quotaExceeded";case"RATELIMITED":case"TOOMANYREQUESTS":case"TELEVETRATELIMITED":return"rateLimited";case"IDEMPOTENCYKEYCONFLICT":case"IDEMPOTENCYCONFLICT":return"idempotencyConflict";case"ACCESSDENIED":case"FORBIDDEN":return"accessDenied";case"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"RUNTIMEDISPOSED":return"runtimeDisposed";case"NOTFOUND":case"CONVERSATIONNOTFOUND":return"conversationNotFound";case"PETNOTFOUND":return"petNotFound";case"TIMEOUT":case"STREAMTIMEOUT":return"streamTimeout";case"MEDIAUPLOADFAILED":case"UNRECOGNIZEDVIDEOFORMAT":case"FILETOOSMALL":return"mediaUploadFailed";case"MODERATIONBLOCKED":return"moderationBlocked";case"UPSTREAMLLMTIMEOUT":return"upstreamLlmTimeout";case"INTERNALERROR":case"INTERNALSERVERERROR":return"internalError";case"STREAMINCOMPLETE":case"CHATSTREAMINCOMPLETE":return"streamIncomplete";case"INVALIDANALYSISTYPE":case"INVALIDUPLOADPURPOSE":return"unknown";default:return"unknown"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:VALIDATION_FAILED_COPY,sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."});function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),error={code:code,category:categoryFor(code),retryable:opts?.retryable??isRetryableCode(code),displayMessage:userFacingError(code)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}var REQUIRES=/* @__PURE__ */Object.freeze({chat:/* @__PURE__ */Object.freeze(["chat.message.create"]),records:/* @__PURE__ */Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:/* @__PURE__ */Object.freeze(["records.clinic.create"]),video:/* @__PURE__ */Object.freeze(["video.gait.execute"]),photo:/* @__PURE__ */Object.freeze(["photo.checkup.execute"]),animations:/* @__PURE__ */Object.freeze(["animations.state.read"]),televet:/* @__PURE__ */Object.freeze(["televet.visit.create"])});function requires(name){return REQUIRES[name]}function decideCapability(name,decisions,opts){let keys=requires(name),byResource=/* @__PURE__ */new Map;for(let decision of decisions)byResource.set(decision.resource,decision);if(opts?.isPending===true&&keys.some(key=>!byResource.has(key)))return freezeDecision({name:name,enabled:false,isPending:true,limits:{}});let limits=mergeLimits(keys,byResource);return keys.filter(key=>byResource.get(key)?.granted!==true).length===0?freezeDecision({name:name,enabled:true,isPending:false,limits:limits}):freezeDecision({name:name,enabled:false,isPending:false,limits:limits,disabled:disabledFor(keys,byResource)})}function mergeLimits(keys,byResource){let out={};for(let key of keys){let decisionLimits=byResource.get(key)?.limits;if(decisionLimits)for(let[limitKey,limitValue]of Object.entries(decisionLimits)){let existing=out[limitKey];out[limitKey]=existing===void 0?limitValue:Math.min(existing,limitValue)}}return out}function disabledFor(keys,byResource){for(let key of keys){let explicit=byResource.get(key)?.disabled;if(explicit)/* @__PURE__ */
90
90
  return Object.freeze({reason:explicit.reason,level:explicit.level,recoverable:explicit.recoverable})}/* @__PURE__ */
91
91
  return Object.freeze({reason:userFacingError("accessDenied"),level:"user_entitlement",recoverable:false})}function freezeDecision(d){let base={name:d.name,enabled:d.enabled,isPending:d.isPending,limits:/* @__PURE__ */Object.freeze({...d.limits})};return d.disabled!==void 0&&(base.disabled=d.disabled),/* @__PURE__ */Object.freeze(base)}function ok(value,warning){/* @__PURE__ */
92
92
  return Object.freeze({ok:true,value:value})}function err(error){/* @__PURE__ */
@@ -1,19 +1,19 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { E as EverfurResult } from '../EverfurResult-dtl8ERAw.cjs';
4
- import { A as AuthContext } from '../identity-75whJXyP.cjs';
5
- export { I as IdentityProvider, n as newSessionId } from '../identity-75whJXyP.cjs';
3
+ import { E as EverfurResult } from '../EverfurResult-COlXj1wq.cjs';
4
+ import { A as AuthContext } from '../identity-CmxZ4GR0.cjs';
5
+ export { I as IdentityProvider, n as newSessionId } from '../identity-CmxZ4GR0.cjs';
6
6
  import { P as PetRef } from '../ids-B2GAAifq.cjs';
7
7
  export { B as Brand, U as UserRef, _ as __brand } from '../ids-B2GAAifq.cjs';
8
8
  import { z } from 'zod';
9
9
  import { K as KvPort, C as CacheEpochGuard, I as ImageCachePort } from '../cacheEpoch-DknKn3S0.cjs';
10
10
  export { a as CACHE_EPOCH_STORAGE_KEY, c as createCacheEpochGuard } from '../cacheEpoch-DknKn3S0.cjs';
11
11
  import { T as TelemetryPort } from '../TelemetryPort-BDNr00hu.cjs';
12
- import { E as EverfurError } from '../EverfurError-pEXDbUJ1.cjs';
13
- export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError-pEXDbUJ1.cjs';
12
+ import { E as EverfurError } from '../EverfurError-DeBqRpQV.cjs';
13
+ export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError-DeBqRpQV.cjs';
14
14
  import { D as DisabledLevel, a as CapabilityDecision } from '../resolve-D4Ywz5OS.cjs';
15
15
  export { b as CapabilityDisabled, C as CapabilityName } from '../resolve-D4Ywz5OS.cjs';
16
- 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-EZzEyS-c.cjs';
16
+ 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-BRyNmzhx.cjs';
17
17
 
18
18
  /**
19
19
  * The full /state payload. `degraded` + `cache_epoch` + `cache_key` are additive fields an older backend
@@ -1,19 +1,19 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { E as EverfurResult } from '../EverfurResult-sKkoXew0.js';
4
- import { A as AuthContext } from '../identity-BiyMDMrR.js';
5
- export { I as IdentityProvider, n as newSessionId } from '../identity-BiyMDMrR.js';
3
+ import { E as EverfurResult } from '../EverfurResult-ClPTS0P2.js';
4
+ import { A as AuthContext } from '../identity-A8fVB518.js';
5
+ export { I as IdentityProvider, n as newSessionId } from '../identity-A8fVB518.js';
6
6
  import { P as PetRef } from '../ids-B2GAAifq.js';
7
7
  export { B as Brand, U as UserRef, _ as __brand } from '../ids-B2GAAifq.js';
8
8
  import { z } from 'zod';
9
9
  import { K as KvPort, C as CacheEpochGuard, I as ImageCachePort } from '../cacheEpoch-DknKn3S0.js';
10
10
  export { a as CACHE_EPOCH_STORAGE_KEY, c as createCacheEpochGuard } from '../cacheEpoch-DknKn3S0.js';
11
11
  import { T as TelemetryPort } from '../TelemetryPort-BDNr00hu.js';
12
- import { E as EverfurError } from '../EverfurError-pEXDbUJ1.js';
13
- export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError-pEXDbUJ1.js';
12
+ import { E as EverfurError } from '../EverfurError-DeBqRpQV.js';
13
+ export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError-DeBqRpQV.js';
14
14
  import { D as DisabledLevel, a as CapabilityDecision } from '../resolve-D4Ywz5OS.js';
15
15
  export { b as CapabilityDisabled, C as CapabilityName } from '../resolve-D4Ywz5OS.js';
16
- 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-BysLVhku.js';
16
+ 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-DdK2czhD.js';
17
17
 
18
18
  /**
19
19
  * The full /state payload. `degraded` + `cache_epoch` + `cache_key` are additive fields an older backend
@@ -86,7 +86,7 @@ return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fiel
86
86
  /* @__PURE__ */Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
87
87
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),
88
88
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
89
- /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row=>row.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row=BY_KEY.get(candidate+key);if(row)return row}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){case"DAILYQUOTAEXCEEDED":case"QUOTAEXCEEDED":return"quotaExceeded";case"RATELIMITED":case"TOOMANYREQUESTS":case"TELEVETRATELIMITED":return"rateLimited";case"IDEMPOTENCYKEYCONFLICT":case"IDEMPOTENCYCONFLICT":return"idempotencyConflict";case"ACCESSDENIED":case"FORBIDDEN":return"accessDenied";case"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"NOTFOUND":case"CONVERSATIONNOTFOUND":return"conversationNotFound";case"PETNOTFOUND":return"petNotFound";case"TIMEOUT":case"STREAMTIMEOUT":return"streamTimeout";case"MEDIAUPLOADFAILED":case"UNRECOGNIZEDVIDEOFORMAT":case"FILETOOSMALL":return"mediaUploadFailed";case"MODERATIONBLOCKED":return"moderationBlocked";case"UPSTREAMLLMTIMEOUT":return"upstreamLlmTimeout";case"INTERNALERROR":case"INTERNALSERVERERROR":return"internalError";case"STREAMINCOMPLETE":case"CHATSTREAMINCOMPLETE":return"streamIncomplete";case"INVALIDANALYSISTYPE":case"INVALIDUPLOADPURPOSE":return"unknown";default:return"unknown"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,unknown:"Something went wrong. Please try again."});function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),error={code:code,category:categoryFor(code),retryable:opts?.retryable??isRetryableCode(code),displayMessage:userFacingError(code)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}var REQUIRES=/* @__PURE__ */Object.freeze({chat:/* @__PURE__ */Object.freeze(["chat.message.create"]),records:/* @__PURE__ */Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:/* @__PURE__ */Object.freeze(["records.clinic.create"]),video:/* @__PURE__ */Object.freeze(["video.gait.execute"]),photo:/* @__PURE__ */Object.freeze(["photo.checkup.execute"]),animations:/* @__PURE__ */Object.freeze(["animations.state.read"]),televet:/* @__PURE__ */Object.freeze(["televet.visit.create"])});function requires(name){return REQUIRES[name]}function decideCapability(name,decisions,opts){let keys=requires(name),byResource=/* @__PURE__ */new Map;for(let decision of decisions)byResource.set(decision.resource,decision);if(opts?.isPending===true&&keys.some(key=>!byResource.has(key)))return freezeDecision({name:name,enabled:false,isPending:true,limits:{}});let limits=mergeLimits(keys,byResource);return keys.filter(key=>byResource.get(key)?.granted!==true).length===0?freezeDecision({name:name,enabled:true,isPending:false,limits:limits}):freezeDecision({name:name,enabled:false,isPending:false,limits:limits,disabled:disabledFor(keys,byResource)})}function mergeLimits(keys,byResource){let out={};for(let key of keys){let decisionLimits=byResource.get(key)?.limits;if(decisionLimits)for(let[limitKey,limitValue]of Object.entries(decisionLimits)){let existing=out[limitKey];out[limitKey]=existing===void 0?limitValue:Math.min(existing,limitValue)}}return out}function disabledFor(keys,byResource){for(let key of keys){let explicit=byResource.get(key)?.disabled;if(explicit)/* @__PURE__ */
89
+ /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row=>row.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row=BY_KEY.get(candidate+key);if(row)return row}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",runtimeDisposed:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){case"DAILYQUOTAEXCEEDED":case"QUOTAEXCEEDED":return"quotaExceeded";case"RATELIMITED":case"TOOMANYREQUESTS":case"TELEVETRATELIMITED":return"rateLimited";case"IDEMPOTENCYKEYCONFLICT":case"IDEMPOTENCYCONFLICT":return"idempotencyConflict";case"ACCESSDENIED":case"FORBIDDEN":return"accessDenied";case"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"RUNTIMEDISPOSED":return"runtimeDisposed";case"NOTFOUND":case"CONVERSATIONNOTFOUND":return"conversationNotFound";case"PETNOTFOUND":return"petNotFound";case"TIMEOUT":case"STREAMTIMEOUT":return"streamTimeout";case"MEDIAUPLOADFAILED":case"UNRECOGNIZEDVIDEOFORMAT":case"FILETOOSMALL":return"mediaUploadFailed";case"MODERATIONBLOCKED":return"moderationBlocked";case"UPSTREAMLLMTIMEOUT":return"upstreamLlmTimeout";case"INTERNALERROR":case"INTERNALSERVERERROR":return"internalError";case"STREAMINCOMPLETE":case"CHATSTREAMINCOMPLETE":return"streamIncomplete";case"INVALIDANALYSISTYPE":case"INVALIDUPLOADPURPOSE":return"unknown";default:return"unknown"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:VALIDATION_FAILED_COPY,sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."});function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),error={code:code,category:categoryFor(code),retryable:opts?.retryable??isRetryableCode(code),displayMessage:userFacingError(code)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}var REQUIRES=/* @__PURE__ */Object.freeze({chat:/* @__PURE__ */Object.freeze(["chat.message.create"]),records:/* @__PURE__ */Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:/* @__PURE__ */Object.freeze(["records.clinic.create"]),video:/* @__PURE__ */Object.freeze(["video.gait.execute"]),photo:/* @__PURE__ */Object.freeze(["photo.checkup.execute"]),animations:/* @__PURE__ */Object.freeze(["animations.state.read"]),televet:/* @__PURE__ */Object.freeze(["televet.visit.create"])});function requires(name){return REQUIRES[name]}function decideCapability(name,decisions,opts){let keys=requires(name),byResource=/* @__PURE__ */new Map;for(let decision of decisions)byResource.set(decision.resource,decision);if(opts?.isPending===true&&keys.some(key=>!byResource.has(key)))return freezeDecision({name:name,enabled:false,isPending:true,limits:{}});let limits=mergeLimits(keys,byResource);return keys.filter(key=>byResource.get(key)?.granted!==true).length===0?freezeDecision({name:name,enabled:true,isPending:false,limits:limits}):freezeDecision({name:name,enabled:false,isPending:false,limits:limits,disabled:disabledFor(keys,byResource)})}function mergeLimits(keys,byResource){let out={};for(let key of keys){let decisionLimits=byResource.get(key)?.limits;if(decisionLimits)for(let[limitKey,limitValue]of Object.entries(decisionLimits)){let existing=out[limitKey];out[limitKey]=existing===void 0?limitValue:Math.min(existing,limitValue)}}return out}function disabledFor(keys,byResource){for(let key of keys){let explicit=byResource.get(key)?.disabled;if(explicit)/* @__PURE__ */
90
90
  return Object.freeze({reason:explicit.reason,level:explicit.level,recoverable:explicit.recoverable})}/* @__PURE__ */
91
91
  return Object.freeze({reason:userFacingError("accessDenied"),level:"user_entitlement",recoverable:false})}function freezeDecision(d){let base={name:d.name,enabled:d.enabled,isPending:d.isPending,limits:/* @__PURE__ */Object.freeze({...d.limits})};return d.disabled!==void 0&&(base.disabled=d.disabled),/* @__PURE__ */Object.freeze(base)}function ok(value,warning){/* @__PURE__ */
92
92
  return Object.freeze({ok:true,value:value})}function err(error){/* @__PURE__ */
@@ -1,7 +1,7 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.cjs';
2
- import { R as RequestFunnel } from './requestFunnel-DHeSzCT6.cjs';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.cjs';
2
+ import { R as RequestFunnel } from './requestFunnel-CA0ANsWj.cjs';
3
3
  import { F as FileHandle, U as UploadTransport, a as UploadPolicyWire } from './ports-BN6RHF9W.cjs';
4
- import { R as ReadableStore, T as Timers } from './ports-BeVJYP0_.cjs';
4
+ import { R as ReadableStore, T as Timers } from './ports-2voZkqty.cjs';
5
5
 
6
6
  /** The image MIME types the chat accepts (the server's `CHAT_ATTACHMENT` rule, plus the `image/jpg` alias). */
7
7
  declare const ATTACHMENT_MIME_TYPES: readonly string[];
@@ -1,12 +1,12 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.js';
2
- import { E as EverfurResult } from './EverfurResult-sKkoXew0.js';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.js';
2
+ import { E as EverfurResult } from './EverfurResult-ClPTS0P2.js';
3
3
  import { C as ConversationId, P as PetRef, b as ResponseId } from './ids-B2GAAifq.js';
4
- import { f as ChatFeedbackType, l as ChatStatus, i as ChatMessage, c as ChatConversationListOptions, d as ChatConversationPage, g as ChatHistoryOptions, h as ChatMessagePage, a as ChatCheckinTarget, e as ChatFeedbackReceipt } from './ports-zYl8S_lI.js';
5
- import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository-CywqL6mj.js';
6
- import { i as UrgencyLevel } from './config-BysLVhku.js';
7
- import { W as WidgetPet } from './petsRepository-ByMzq1Z9.js';
4
+ import { f as ChatFeedbackType, l as ChatStatus, i as ChatMessage, c as ChatConversationListOptions, d as ChatConversationPage, g as ChatHistoryOptions, h as ChatMessagePage, a as ChatCheckinTarget, e as ChatFeedbackReceipt } from './ports-CzVBbI_A.js';
5
+ import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository-BXdwCWQF.js';
6
+ import { i as UrgencyLevel } from './config-DdK2czhD.js';
7
+ import { W as WidgetPet } from './petsRepository-CQh8paML.js';
8
8
  import { U as UploadTransport, F as FileHandle } from './ports-BN6RHF9W.js';
9
- import { c as AttachmentQueue, d as AttachmentState, A as AttachmentError, b as AttachmentOutcome } from './attachments-DAUy3vPR.js';
9
+ import { c as AttachmentQueue, d as AttachmentState, A as AttachmentError, b as AttachmentOutcome } from './attachments-Dcb19rMP.js';
10
10
 
11
11
  /** The three thumbs. `'neutral'` is the app's rotated thumbs-down glyph. */
12
12
  type ChatSentiment = 'up' | 'neutral' | 'down';
@@ -1,7 +1,7 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.js';
2
- import { R as RequestFunnel } from './requestFunnel-BPeBZdKp.js';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.js';
2
+ import { R as RequestFunnel } from './requestFunnel-CQ42Kf9G.js';
3
3
  import { F as FileHandle, U as UploadTransport, a as UploadPolicyWire } from './ports-BN6RHF9W.js';
4
- import { R as ReadableStore, T as Timers } from './ports-zYl8S_lI.js';
4
+ import { R as ReadableStore, T as Timers } from './ports-CzVBbI_A.js';
5
5
 
6
6
  /** The image MIME types the chat accepts (the server's `CHAT_ATTACHMENT` rule, plus the `image/jpg` alias). */
7
7
  declare const ATTACHMENT_MIME_TYPES: readonly string[];
@@ -1,12 +1,12 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.cjs';
2
- import { E as EverfurResult } from './EverfurResult-dtl8ERAw.cjs';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.cjs';
2
+ import { E as EverfurResult } from './EverfurResult-COlXj1wq.cjs';
3
3
  import { C as ConversationId, P as PetRef, b as ResponseId } from './ids-B2GAAifq.cjs';
4
- import { f as ChatFeedbackType, l as ChatStatus, i as ChatMessage, c as ChatConversationListOptions, d as ChatConversationPage, g as ChatHistoryOptions, h as ChatMessagePage, a as ChatCheckinTarget, e as ChatFeedbackReceipt } from './ports-BeVJYP0_.cjs';
5
- import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository-Bzs7aw4t.cjs';
6
- import { i as UrgencyLevel } from './config-EZzEyS-c.cjs';
7
- import { W as WidgetPet } from './petsRepository-yyoo0k2I.cjs';
4
+ import { f as ChatFeedbackType, l as ChatStatus, i as ChatMessage, c as ChatConversationListOptions, d as ChatConversationPage, g as ChatHistoryOptions, h as ChatMessagePage, a as ChatCheckinTarget, e as ChatFeedbackReceipt } from './ports-2voZkqty.cjs';
5
+ import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository-DC9lEQez.cjs';
6
+ import { i as UrgencyLevel } from './config-BRyNmzhx.cjs';
7
+ import { W as WidgetPet } from './petsRepository-DkQ2fwZY.cjs';
8
8
  import { U as UploadTransport, F as FileHandle } from './ports-BN6RHF9W.cjs';
9
- import { c as AttachmentQueue, d as AttachmentState, A as AttachmentError, b as AttachmentOutcome } from './attachments-BD70jZZL.cjs';
9
+ import { c as AttachmentQueue, d as AttachmentState, A as AttachmentError, b as AttachmentOutcome } from './attachments-B7TrtyfH.cjs';
10
10
 
11
11
  /** The three thumbs. `'neutral'` is the app's rotated thumbs-down glyph. */
12
12
  type ChatSentiment = 'up' | 'neutral' | 'down';
@@ -1,11 +1,11 @@
1
1
  import { o as TelevetStatePolicy, k as TelevetBookingEntitlement, l as TelevetCancellationPolicy, m as TelevetClinician, c as TelevetSlot, n as TelevetSlotHold, j as TelevetBookingBody, T as TelevetConsult, b as TelevetCancelReceipt, p as TelevetTriageVerdict, h as ConsultStatus } from './televetGlobal-C5dTUACe.cjs';
2
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.cjs';
3
- import { E as EverfurResult } from './EverfurResult-dtl8ERAw.cjs';
4
- import { R as RequestFunnel } from './requestFunnel-DHeSzCT6.cjs';
5
- import { A as AuthContext } from './identity-75whJXyP.cjs';
6
- import { E as ErrorPolicyPort } from './ErrorPolicyPort-NFDPe-5w.cjs';
2
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.cjs';
3
+ import { E as EverfurResult } from './EverfurResult-COlXj1wq.cjs';
4
+ import { R as RequestFunnel } from './requestFunnel-CA0ANsWj.cjs';
5
+ import { A as AuthContext } from './identity-CmxZ4GR0.cjs';
6
+ import { E as ErrorPolicyPort } from './ErrorPolicyPort-10s3HJCt.cjs';
7
7
  import { T as TelemetryPort } from './TelemetryPort-BDNr00hu.cjs';
8
- import { b as VetCallCredential, c as VetCallJoinRefusal } from './callRoom-DfZTWFXh.cjs';
8
+ import { b as VetCallCredential, c as VetCallJoinRefusal } from './callRoom-BhIdadyV.cjs';
9
9
 
10
10
  /** What the presign is asked for. The route refuses any other field. */
11
11
  interface TelevetAttachmentMeta {
@@ -1265,6 +1265,7 @@ declare const TELEVET_BOOKING_COPY: Readonly<{
1265
1265
  exitPrimaryVetTitle: string;
1266
1266
  /** everfur-mobile copy.ts:734 `emergency.exitFindErTitle`, the consumer web's `findEmergencyVet` word for word. */
1267
1267
  exitFindErTitle: string;
1268
+ exitGoToErTitle: string;
1268
1269
  startCallHint: string;
1269
1270
  poisonControl: string;
1270
1271
  poisonControlDetail: string;
@@ -1,11 +1,11 @@
1
1
  import { o as TelevetStatePolicy, k as TelevetBookingEntitlement, l as TelevetCancellationPolicy, m as TelevetClinician, c as TelevetSlot, n as TelevetSlotHold, j as TelevetBookingBody, T as TelevetConsult, b as TelevetCancelReceipt, p as TelevetTriageVerdict, h as ConsultStatus } from './televetGlobal-CnjrfhT4.js';
2
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.js';
3
- import { E as EverfurResult } from './EverfurResult-sKkoXew0.js';
4
- import { R as RequestFunnel } from './requestFunnel-BPeBZdKp.js';
5
- import { A as AuthContext } from './identity-BiyMDMrR.js';
6
- import { E as ErrorPolicyPort } from './ErrorPolicyPort-DwSnmGcX.js';
2
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.js';
3
+ import { E as EverfurResult } from './EverfurResult-ClPTS0P2.js';
4
+ import { R as RequestFunnel } from './requestFunnel-CQ42Kf9G.js';
5
+ import { A as AuthContext } from './identity-A8fVB518.js';
6
+ import { E as ErrorPolicyPort } from './ErrorPolicyPort-C3nNSS_j.js';
7
7
  import { T as TelemetryPort } from './TelemetryPort-BDNr00hu.js';
8
- import { b as VetCallCredential, c as VetCallJoinRefusal } from './callRoom-B1qq_D-4.js';
8
+ import { b as VetCallCredential, c as VetCallJoinRefusal } from './callRoom-B92eH_ij.js';
9
9
 
10
10
  /** What the presign is asked for. The route refuses any other field. */
11
11
  interface TelevetAttachmentMeta {
@@ -1265,6 +1265,7 @@ declare const TELEVET_BOOKING_COPY: Readonly<{
1265
1265
  exitPrimaryVetTitle: string;
1266
1266
  /** everfur-mobile copy.ts:734 `emergency.exitFindErTitle`, the consumer web's `findEmergencyVet` word for word. */
1267
1267
  exitFindErTitle: string;
1268
+ exitGoToErTitle: string;
1268
1269
  startCallHint: string;
1269
1270
  poisonControl: string;
1270
1271
  poisonControlDetail: string;
@@ -1,4 +1,4 @@
1
- import { d as EverfurFontWeight, q as EverfurThemeSlotName, a as EverfurFontFaceKey, r as EverfurThemeSlots, c as EverfurFontSource } from './tokens-RAKZj7M8.cjs';
1
+ import { d as EverfurFontWeight, q as EverfurThemeSlotName, a as EverfurFontFaceKey, r as EverfurThemeSlots, c as EverfurFontSource } from './tokens-DLj8OnLH.cjs';
2
2
 
3
3
  /** The presets an appearance may start from. `everfur` is the compiled default. */
4
4
  declare const APPEARANCE_PRESET_NAMES: readonly ["everfur", "minimal", "night"];
@@ -1,4 +1,4 @@
1
- import { d as EverfurFontWeight, q as EverfurThemeSlotName, a as EverfurFontFaceKey, r as EverfurThemeSlots, c as EverfurFontSource } from './tokens-RAKZj7M8.js';
1
+ import { d as EverfurFontWeight, q as EverfurThemeSlotName, a as EverfurFontFaceKey, r as EverfurThemeSlots, c as EverfurFontSource } from './tokens-DLj8OnLH.js';
2
2
 
3
3
  /** The presets an appearance may start from. `everfur` is the compiled default. */
4
4
  declare const APPEARANCE_PRESET_NAMES: readonly ["everfur", "minimal", "night"];
@@ -1,4 +1,4 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.js';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.js';
2
2
 
3
3
  /** The phases the in-app call surface moves through. The consumer app's `CallPhase`, verbatim. */
4
4
  type VetCallPhase = 'joining' | 'joined' | 'left' | 'error';
@@ -1,4 +1,4 @@
1
- import { E as EverfurError } from './EverfurError-pEXDbUJ1.cjs';
1
+ import { E as EverfurError } from './EverfurError-DeBqRpQV.cjs';
2
2
 
3
3
  /** The phases the in-app call surface moves through. The consumer app's `CallPhase`, verbatim. */
4
4
  type VetCallPhase = 'joining' | 'joined' | 'left' | 'error';
@@ -1,5 +1,5 @@
1
- import { E as EverfurResult } from './EverfurResult-sKkoXew0.js';
2
- import { A as AuthContext } from './identity-BiyMDMrR.js';
1
+ import { E as EverfurResult } from './EverfurResult-ClPTS0P2.js';
2
+ import { A as AuthContext } from './identity-A8fVB518.js';
3
3
  import { P as PetRef } from './ids-B2GAAifq.js';
4
4
 
5
5
  /** The owner's answer to a check-in, the wire values of the consumer `CheckinResponse` enum. */
@@ -1,5 +1,5 @@
1
- import { E as EverfurResult } from './EverfurResult-dtl8ERAw.cjs';
2
- import { A as AuthContext } from './identity-75whJXyP.cjs';
1
+ import { E as EverfurResult } from './EverfurResult-COlXj1wq.cjs';
2
+ import { A as AuthContext } from './identity-CmxZ4GR0.cjs';
3
3
  import { P as PetRef } from './ids-B2GAAifq.cjs';
4
4
 
5
5
  /** The owner's answer to a check-in, the wire values of the consumer `CheckinResponse` enum. */