@everfur/sdk 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +182 -0
- package/README.md +9 -8
- package/dist/{Chat-BZZ-Py5l.d.ts → Chat-BOX-03ho.d.ts} +17 -3
- package/dist/{Chat-Dq4fffIO.d.cts → Chat-TA-aTcVF.d.cts} +17 -3
- package/dist/{DepthViews-CkYri51q.d.ts → DepthViews-CgjX2AJ5.d.ts} +1 -1
- package/dist/{DepthViews-CL75jyRA.d.cts → DepthViews-Cviea-ri.d.cts} +1 -1
- package/dist/{DepthViews-BG3E25MD.d.ts → DepthViews-D2dRqWRq.d.ts} +1 -1
- package/dist/{DepthViews-B_hIypI6.d.cts → DepthViews-DSFyaSeL.d.cts} +1 -1
- package/dist/{ErrorPolicyPort-CwbfmxzJ.d.ts → ErrorPolicyPort-D22LUVrK.d.ts} +1 -1
- package/dist/{ErrorPolicyPort-CNf4uQZP.d.cts → ErrorPolicyPort-D6CybiqJ.d.cts} +1 -1
- package/dist/{EverfurResult-DN9pL2Ab.d.cts → EverfurError-DmELDpXp.d.cts} +1 -67
- package/dist/{EverfurResult-DN9pL2Ab.d.ts → EverfurError-DmELDpXp.d.ts} +1 -67
- package/dist/EverfurResult-SGvHKsCB.d.ts +69 -0
- package/dist/EverfurResult-ZtH-YV1h.d.cts +69 -0
- package/dist/animations/index.d.cts +6 -5
- package/dist/animations/index.d.ts +6 -5
- package/dist/{attachments-BrUWQYNK.d.ts → attachments-C_vtFu2f.d.ts} +7 -6
- package/dist/{attachments-D_SECjr1.d.cts → attachments-DHvnITuE.d.cts} +7 -6
- package/dist/{attachments-DpldrvIW.d.ts → attachments-oD5U2fXI.d.ts} +3 -3
- package/dist/{attachments-BorG422I.d.cts → attachments-pIdGOQfm.d.cts} +3 -3
- package/dist/{bookingCopy-CqtDYvCR.d.ts → bookingCopy-CJir9mjb.d.ts} +417 -14
- package/dist/{bookingCopy-SREvkG19.d.cts → bookingCopy-DfuA13dh.d.cts} +417 -14
- package/dist/branding-Xb_wL8N1.d.cts +212 -0
- package/dist/branding-xpQ056sM.d.ts +212 -0
- package/dist/callCopy-rDH9JTFo.d.cts +45 -0
- package/dist/callCopy-rDH9JTFo.d.ts +45 -0
- package/dist/callRoom-7wrE3RP2.d.ts +62 -0
- package/dist/callRoom-B_EqaUzx.d.cts +62 -0
- package/dist/{casesRepository-DwtZVsbj.d.cts → casesRepository-B-Eg8ZJ3.d.cts} +14 -2
- package/dist/{casesRepository-v6QczS9N.d.ts → casesRepository-DHgIYKN9.d.ts} +14 -2
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.d.cts +12 -11
- package/dist/chat/index.d.ts +12 -11
- package/dist/chat/index.js +1 -1
- package/dist/client/index.cjs +5 -5
- package/dist/client/index.d.cts +14 -12
- package/dist/client/index.d.ts +14 -12
- package/dist/client/index.js +5 -5
- package/dist/{config--Wu1Umhd.d.cts → config-ClI7QxB0.d.ts} +3 -2
- package/dist/{config-C7eb_IMD.d.ts → config-DAFbf721.d.cts} +3 -2
- package/dist/consent/index.d.cts +9 -8
- package/dist/consent/index.d.ts +9 -8
- package/dist/{context-CL3lyuy1.d.cts → context-B-dUM1Qf.d.cts} +9 -8
- package/dist/{context-CahAEha8.d.ts → context-CZbgF_OH.d.ts} +9 -8
- package/dist/{copy-DdVFDL01.d.ts → copy-CeRH3NXy.d.ts} +5 -4
- package/dist/{copy-UeUJVk8X.d.cts → copy-CneuYdrO.d.cts} +5 -4
- package/dist/core/index.cjs +9 -9
- package/dist/core/index.d.cts +19 -17
- package/dist/core/index.d.ts +19 -17
- package/dist/core/index.js +9 -9
- package/dist/{depth-D5HwcvKC.d.cts → depth-B3NFKlF9.d.cts} +6 -5
- package/dist/{depth-DvPwPuT_.d.ts → depth-DO3Ko_qs.d.ts} +6 -5
- package/dist/{entitlementRepository-B7egEdW6.d.ts → entitlementRepository-74kW5mK0.d.ts} +4 -4
- package/dist/{entitlementRepository-BpJ7tiwl.d.cts → entitlementRepository-m6zLUmiB.d.cts} +4 -4
- package/dist/{identity-C2-08BZW.d.cts → identity-C7uxGwfT.d.cts} +2 -2
- package/dist/{identity-CEi9GRFZ.d.ts → identity-CLAUq-K4.d.ts} +2 -2
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +19 -17
- package/dist/index.d.ts +19 -17
- package/dist/index.js +6 -6
- package/dist/{models-D2EUxPZY.d.cts → models-Bn2z0NNo.d.cts} +1 -1
- package/dist/{models-B-Uh2LTf.d.ts → models-DSqA5Ahs.d.ts} +1 -1
- package/dist/notifications/index.d.cts +5 -4
- package/dist/notifications/index.d.ts +5 -4
- package/dist/{pets-JVCXgRgR.d.cts → pets-BoB5B7kp.d.cts} +2 -2
- package/dist/{pets-DJv2sj2H.d.ts → pets-w4M9d-Dn.d.ts} +2 -2
- package/dist/{petsRepository-Bk6GDwLs.d.ts → petsRepository-BjKJ8UsN.d.ts} +2 -2
- package/dist/{petsRepository-B_gKbAzJ.d.cts → petsRepository-DZZoEG3r.d.cts} +2 -2
- package/dist/photo/index.d.cts +3 -2
- package/dist/photo/index.d.ts +3 -2
- package/dist/{ports-D7YW8qz9.d.ts → ports-BO3bzTJg.d.ts} +13 -6
- package/dist/{ports-BY2ph0_y.d.cts → ports-C2EVK416.d.cts} +13 -6
- package/dist/records/depth/index.d.cts +11 -10
- package/dist/records/depth/index.d.ts +11 -10
- package/dist/records/index.cjs +3 -3
- package/dist/records/index.d.cts +25 -14
- package/dist/records/index.d.ts +25 -14
- package/dist/records/index.js +3 -3
- package/dist/{requestFunnel-DFMGcluw.d.ts → requestFunnel-D7ipek3e.d.ts} +5 -4
- package/dist/{requestFunnel-BjDpqqvm.d.cts → requestFunnel-Djjwgoe9.d.cts} +5 -4
- package/dist/{runtimeTypes-w5KqBMcs.d.ts → runtimeTypes-CTL3yToK.d.ts} +7 -7
- package/dist/{runtimeTypes-gZEJu-da.d.cts → runtimeTypes-D2C9uD85.d.cts} +7 -7
- package/dist/server/events/index.cjs +1 -1
- package/dist/server/events/index.d.cts +4 -3
- package/dist/server/events/index.d.ts +4 -3
- package/dist/server/events/index.js +1 -1
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.d.cts +5 -4
- package/dist/server/index.d.ts +5 -4
- package/dist/server/index.js +1 -1
- package/dist/televet/booking/index.cjs +1 -1
- package/dist/televet/booking/index.d.cts +303 -31
- package/dist/televet/booking/index.d.ts +303 -31
- package/dist/televet/booking/index.js +1 -1
- package/dist/televet/call/index.cjs +1 -1
- package/dist/televet/call/index.d.cts +25 -5
- package/dist/televet/call/index.d.ts +25 -5
- package/dist/televet/call/index.js +1 -1
- package/dist/televet/index.cjs +1 -1
- package/dist/televet/index.d.cts +41 -71
- package/dist/televet/index.d.ts +41 -71
- package/dist/televet/index.js +1 -1
- package/dist/televetGlobal-CEk0_cW9.d.cts +34 -0
- package/dist/televetGlobal-Cs9Wbqsy.d.ts +34 -0
- package/dist/testing/index.cjs +4 -4
- package/dist/testing/index.d.cts +3 -2
- package/dist/testing/index.d.ts +3 -2
- package/dist/testing/index.js +4 -4
- package/dist/testing/rn/index.cjs +1 -1
- package/dist/testing/rn/index.d.cts +13 -11
- package/dist/testing/rn/index.d.ts +13 -11
- package/dist/testing/rn/index.js +1 -1
- package/dist/testing/web/index.d.cts +14 -13
- package/dist/testing/web/index.d.ts +14 -13
- package/dist/{timelineRows-C15jxFFH.d.ts → timelineRows-7yFNK_rU.d.ts} +1 -1
- package/dist/{timelineRows-odO8g9r2.d.cts → timelineRows-CzR1T2DR.d.cts} +1 -1
- package/dist/{branding-CsRdeNwK.d.cts → tokens-CIngRkvt.d.cts} +7 -211
- package/dist/{branding-CsRdeNwK.d.ts → tokens-CIngRkvt.d.ts} +7 -211
- package/dist/{typeStyle-DmoyacDG.d.ts → typeStyle-DHJzDaUo.d.cts} +2 -1
- package/dist/{typeStyle-CKqVYD6L.d.cts → typeStyle-YPS_MXeI.d.ts} +2 -1
- package/dist/{useRecordsDepth-C6rjEaLn.d.cts → useRecordsDepth-Bnw36jPr.d.cts} +24 -5
- package/dist/{useRecordsDepth-crhBllQK.d.ts → useRecordsDepth-DFF7Faxx.d.ts} +24 -5
- package/dist/{useVetVisit-CjmMa896.d.ts → useVetVisit-BsjoDO-n.d.ts} +21 -6
- package/dist/{useVetVisit-Bc84hWUU.d.cts → useVetVisit-Ds8f1peV.d.cts} +21 -6
- package/dist/video/index.d.cts +3 -2
- package/dist/video/index.d.ts +3 -2
- package/dist/{view-Bxwxp4xD.d.ts → view-BqcOYFTr.d.ts} +5 -4
- package/dist/{view-DyitEO0m.d.cts → view-CaJs8WFH.d.cts} +5 -4
- package/dist/web/consent/index.d.cts +9 -8
- package/dist/web/consent/index.d.ts +9 -8
- package/dist/web/index.cjs +10 -10
- package/dist/web/index.d.cts +42 -19
- package/dist/web/index.d.ts +42 -19
- package/dist/web/index.js +10 -10
- package/dist/web/notifications/index.d.cts +7 -6
- package/dist/web/notifications/index.d.ts +7 -6
- package/dist/web/records/depth/index.cjs +2 -2
- package/dist/web/records/depth/index.d.cts +11 -10
- package/dist/web/records/depth/index.d.ts +11 -10
- package/dist/web/records/depth/index.js +2 -2
- package/dist/web/records/index.cjs +3 -3
- package/dist/web/records/index.d.cts +53 -35
- package/dist/web/records/index.d.ts +53 -35
- package/dist/web/records/index.js +3 -3
- package/dist/web/televet/booking/index.cjs +2 -1
- package/dist/web/televet/booking/index.d.cts +453 -32
- package/dist/web/televet/booking/index.d.ts +453 -32
- package/dist/web/televet/booking/index.js +2 -1
- package/dist/web/televet/call/index.cjs +1 -1
- package/dist/web/televet/call/index.d.cts +3 -1
- package/dist/web/televet/call/index.d.ts +3 -1
- package/dist/web/televet/call/index.js +1 -1
- package/dist/web/televet/index.cjs +1 -1
- package/dist/web/televet/index.d.cts +40 -74
- package/dist/web/televet/index.d.ts +40 -74
- package/dist/web/televet/index.js +1 -1
- package/package.json +3 -2
- package/dist/callCopy-DoQKG3-L.d.cts +0 -40
- package/dist/callCopy-DoQKG3-L.d.ts +0 -40
|
@@ -1,75 +1,47 @@
|
|
|
1
|
+
import { E as EverfurTelevetFlowRequest, a as EverfurTelevetFlowPresenter } from '../../televetGlobal-CEk0_cW9.cjs';
|
|
2
|
+
import { ReactNode, CSSProperties } from 'react';
|
|
3
|
+
import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-Ds8f1peV.cjs';
|
|
4
|
+
export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-Ds8f1peV.cjs';
|
|
5
|
+
import { E as EverfurError } from '../../EverfurError-DmELDpXp.cjs';
|
|
6
|
+
export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../../EverfurError-DmELDpXp.cjs';
|
|
1
7
|
import { P as PetRef } from '../../ids-B2GAAifq.cjs';
|
|
2
8
|
export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.cjs';
|
|
3
|
-
import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-Bc84hWUU.cjs';
|
|
4
|
-
export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-Bc84hWUU.cjs';
|
|
5
|
-
import { ReactNode, CSSProperties } from 'react';
|
|
6
|
-
import { E as EverfurError } from '../../EverfurResult-DN9pL2Ab.cjs';
|
|
7
|
-
export { a as EverfurErrorCategory, b as EverfurErrorCode, c as EverfurResult } from '../../EverfurResult-DN9pL2Ab.cjs';
|
|
8
9
|
import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.cjs';
|
|
9
10
|
export { a as VET_VISIT_INTENTS, i as isVetVisitIntent } from '../../visitIntent-D7_yVp1I.cjs';
|
|
11
|
+
export { E as EverfurResult } from '../../EverfurResult-ZtH-YV1h.cjs';
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* Deliberately the scoping the BUTTON was given and nothing more. The host already holds the session, the
|
|
15
|
-
* theme and the router; what it cannot know is which pet and which state this particular button was placed
|
|
16
|
-
* for, so that, and only that, travels. Identical to the RN twin's request, so one host-side presenter
|
|
17
|
-
* satisfies both.
|
|
18
|
-
*/
|
|
19
|
-
interface EverfurTelevetFlowRequest {
|
|
20
|
-
/** The pet this button was scoped to, when it was scoped to one. */
|
|
21
|
-
readonly petRef?: PetRef | null | undefined;
|
|
22
|
-
/** The member's US state, when the host gave one. The booking screens preflight availability with it. */
|
|
23
|
-
readonly usState?: string | null | undefined;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* The host's presenter: show the Everfur booking flow. Called on click, and expected to route or present.
|
|
27
|
-
*
|
|
28
|
-
* It returns nothing. The button is not waiting on it and has nothing to do with the result: presenting a
|
|
29
|
-
* screen is the host's business, and a presenter that throws is contained (see `presentEverfurTelevetFlow`)
|
|
30
|
-
* rather than allowed to break the click.
|
|
31
|
-
*/
|
|
32
|
-
type EverfurTelevetFlowPresenter = (request: EverfurTelevetFlowRequest) => void;
|
|
33
|
-
/**
|
|
34
|
-
* Register how this site presents the in-page vet visit. Call it ONCE, in your app entry:
|
|
14
|
+
* Register how this site presents a vet visit. Call it ONCE, in your app entry, only if you want to own the
|
|
15
|
+
* destination:
|
|
35
16
|
*
|
|
36
17
|
* ```ts
|
|
37
18
|
* import { registerEverfurTelevetFlow } from '@everfur/sdk/web/televet';
|
|
38
|
-
* registerEverfurTelevetFlow(() => router.push('/vet/book'));
|
|
19
|
+
* registerEverfurTelevetFlow((request) => router.push(request.visitRef ? '/vet/visit' : '/vet/book'));
|
|
39
20
|
* ```
|
|
40
21
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* partner does to go back to the hosted visit everywhere at once.
|
|
22
|
+
* Without it every vet entry opens the in-page experience Everfur provides. Passing `null` unregisters it,
|
|
23
|
+
* which is what a test does between cases.
|
|
44
24
|
*/
|
|
45
25
|
declare function registerEverfurTelevetFlow(next: EverfurTelevetFlowPresenter | null): void;
|
|
46
|
-
/** Is
|
|
26
|
+
/** Is a presenter registered? */
|
|
47
27
|
declare function hasEverfurTelevetFlow(): boolean;
|
|
48
28
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* A THROWING PRESENTER IS NOT A DEAD BUTTON. A host router can throw (a route that was renamed, a modal
|
|
53
|
-
* controller that unmounted), and the member clicking the button has no idea any of that happened. So a throw
|
|
54
|
-
* is caught and reported as "not handed over", and the caller then mints and opens the hosted visit: the
|
|
55
|
-
* member reaches a vet either way, which is the floor this whole file is built around.
|
|
56
|
-
*
|
|
57
|
-
* THE THROW IS NOT SWALLOWED. It is re-surfaced to the partner's engineer through the console, because a
|
|
58
|
-
* router that throws on every click is a defect in their site that they need to see. The message is
|
|
59
|
-
* developer-facing and is never rendered: end-user copy is not authored in this repository.
|
|
60
|
-
*
|
|
61
|
-
* ONE COST OF THE FALL-THROUGH, STATED PLAINLY. The hosted path needs the click's own task to open its tab
|
|
62
|
-
* (see useVetVisit.ts), and a presenter that throws has already spent part of that task. The synchronous
|
|
63
|
-
* `window.open` still runs in the same task, so the fall-through keeps the gesture; what it cannot keep is a
|
|
64
|
-
* gesture a presenter consumed by awaiting something. A presenter is documented as synchronous for that
|
|
65
|
-
* reason: it routes, it does not fetch.
|
|
29
|
+
* Hand a request to the registered presenter. Answers whether it PRESENTED: false when nothing is registered,
|
|
30
|
+
* when the presenter declined (returned false), and when it threw (reported to the console, never rendered).
|
|
66
31
|
*/
|
|
67
32
|
declare function presentEverfurTelevetFlow(request: EverfurTelevetFlowRequest): boolean;
|
|
68
33
|
|
|
34
|
+
/** Renders the in-page vet visit Everfur provides, while one is open. Renders nothing otherwise. */
|
|
35
|
+
declare function EverfurTelevetHost(): ReactNode;
|
|
36
|
+
|
|
69
37
|
/**
|
|
70
38
|
* The vet visit hook for a web page. Render your own control and call `open()` directly from its click
|
|
71
39
|
* handler; `available` is false (render nothing) unless Everfur grants vet visits to this signed-in user.
|
|
72
40
|
* Requires a signed session: pass `user` with a `getToken` backed by your server's session mint.
|
|
41
|
+
*
|
|
42
|
+
* The visit opens IN YOUR PAGE: your registered presenter, else the in-page experience rendered by a mounted
|
|
43
|
+
* `EverfurTelevetHost` (mount one once if no `VetVisitButton` or `EverfurChat` is on the page). Pass
|
|
44
|
+
* `prefer: 'redirect'` for the hosted visit in a new tab instead.
|
|
73
45
|
*/
|
|
74
46
|
declare function useVetVisit(opts?: UseVetVisitOptions): UseVetVisitState;
|
|
75
47
|
|
|
@@ -78,9 +50,12 @@ interface VetVisitButtonProps {
|
|
|
78
50
|
readonly petRef?: PetRef | null | undefined;
|
|
79
51
|
/** The button label. Defaults to Everfur's label. */
|
|
80
52
|
readonly children?: ReactNode;
|
|
81
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* `prefer="redirect"` only: called after the new tab is navigated to the hosted visit, with the return flow
|
|
55
|
+
* id when `returnTo` was given.
|
|
56
|
+
*/
|
|
82
57
|
readonly onOpened?: ((flowId: string | null) => void) | undefined;
|
|
83
|
-
/**
|
|
58
|
+
/** `prefer="redirect"` only: the KEY of a return destination your tenant registered with Everfur. */
|
|
84
59
|
readonly returnTo?: string | null | undefined;
|
|
85
60
|
/** The user's US state. When set, the button renders only once Everfur confirms a visit is available there. */
|
|
86
61
|
readonly usState?: string | null | undefined;
|
|
@@ -88,7 +63,8 @@ interface VetVisitButtonProps {
|
|
|
88
63
|
readonly entry?: VetVisitEntry | null | undefined;
|
|
89
64
|
/**
|
|
90
65
|
* TV-01. A visit this member already has. The button then OPENS that visit rather than starting a booking:
|
|
91
|
-
* put the `visitRef` a tapped push carries here.
|
|
66
|
+
* put the `visitRef` a tapped push carries here. It opens in your page like a booking does, carried to your
|
|
67
|
+
* destination as `request.visitRef`; only `prefer="redirect"` sends it to the hosted visit.
|
|
92
68
|
*/
|
|
93
69
|
readonly visitRef?: string | null | undefined;
|
|
94
70
|
/** What to open for `visitRef`: `visit` (the default), `join`, `summary` or `messages`. */
|
|
@@ -96,31 +72,21 @@ interface VetVisitButtonProps {
|
|
|
96
72
|
/** Called when the visit could not be opened. `error` is null for a browser-side failure (a blocked tab). */
|
|
97
73
|
readonly onError?: ((reason: VetVisitErrorReason, error: EverfurError | null) => void) | undefined;
|
|
98
74
|
/**
|
|
99
|
-
*
|
|
100
|
-
* visit.
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* owns no router, so the host is the only thing that can say where it lives: which is why this is a
|
|
104
|
-
* callback and not a `mode` flag the button could not honour. Use it for one button that routes somewhere
|
|
105
|
-
* of its own; use `registerEverfurTelevetFlow` for the site-wide default.
|
|
106
|
-
*
|
|
107
|
-
* `visitRef` still wins over it: a click that names an existing visit opens THAT visit, and there is no
|
|
108
|
-
* in-page surface for one yet. Sending an owner into a fresh booking funnel because they followed a
|
|
109
|
-
* reminder for the visit they already have is the wrong screen, loudly.
|
|
75
|
+
* Your own destination for THIS button, called with the request (the pet, the state and, for an existing
|
|
76
|
+
* visit, `visitRef` and `intent`). It wins over the registry and over the SDK's own experience: a host that
|
|
77
|
+
* threaded a callback into one button said where that button goes. Omit it and the click opens your
|
|
78
|
+
* registered presenter, else the in-page experience Everfur provides.
|
|
110
79
|
*/
|
|
111
|
-
readonly onStartInApp?: (() => void) | undefined;
|
|
80
|
+
readonly onStartInApp?: ((request: EverfurTelevetFlowRequest) => void) | undefined;
|
|
112
81
|
/**
|
|
113
82
|
* Which destination a click takes. Defaults to `'in-app'`.
|
|
114
83
|
*
|
|
115
|
-
* `'in-app'`
|
|
116
|
-
*
|
|
117
|
-
* before. That is the floor: a site that upgrades and changes nothing keeps a working button, and the
|
|
118
|
-
* member always reaches a vet.
|
|
119
|
-
*
|
|
120
|
-
* `'redirect'` is the explicit opt-in back to the hosted handoff. It ignores the registry entirely, which
|
|
121
|
-
* is what a partner wants for a surface they deliberately keep hosted.
|
|
84
|
+
* `'in-app'` keeps the member in your page: `onStartInApp`, else your registered presenter, else the
|
|
85
|
+
* in-page experience Everfur provides. Nothing is minted and nothing opens a tab.
|
|
122
86
|
*
|
|
123
|
-
* `
|
|
87
|
+
* `'redirect'` is the explicit opt-in to the hosted Everfur visit in a new tab, opened in the click's own
|
|
88
|
+
* task. It ignores `onStartInApp` and the registry, which is what a partner wants for a surface they
|
|
89
|
+
* deliberately keep hosted.
|
|
124
90
|
*/
|
|
125
91
|
readonly prefer?: 'in-app' | 'redirect' | undefined;
|
|
126
92
|
/** Merged over the button's own style. */
|
|
@@ -133,4 +99,4 @@ interface VetVisitButtonProps {
|
|
|
133
99
|
/** Opens the Everfur vet visit, in the partner's own page by default. Renders nothing unless it is granted. */
|
|
134
100
|
declare function VetVisitButton(props: VetVisitButtonProps): ReactNode;
|
|
135
101
|
|
|
136
|
-
export { EverfurError,
|
|
102
|
+
export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, useVetVisit };
|
|
@@ -1,75 +1,47 @@
|
|
|
1
|
+
import { E as EverfurTelevetFlowRequest, a as EverfurTelevetFlowPresenter } from '../../televetGlobal-Cs9Wbqsy.js';
|
|
2
|
+
import { ReactNode, CSSProperties } from 'react';
|
|
3
|
+
import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-BsjoDO-n.js';
|
|
4
|
+
export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-BsjoDO-n.js';
|
|
5
|
+
import { E as EverfurError } from '../../EverfurError-DmELDpXp.js';
|
|
6
|
+
export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../../EverfurError-DmELDpXp.js';
|
|
1
7
|
import { P as PetRef } from '../../ids-B2GAAifq.js';
|
|
2
8
|
export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.js';
|
|
3
|
-
import { U as UseVetVisitOptions, a as UseVetVisitState, V as VetVisitEntry, b as VetVisitErrorReason, c as VetVisitController } from '../../useVetVisit-CjmMa896.js';
|
|
4
|
-
export { d as VetVisitAvailability, e as VetVisitHandoff, f as VetVisitHandoffOptions, g as VetVisitHandoffVisit, h as VetVisitOpenResult, i as VetVisitReturn, j as VetVisitStatus, p as parseVetVisitReturn, v as vetVisitErrorReasonOf } from '../../useVetVisit-CjmMa896.js';
|
|
5
|
-
import { ReactNode, CSSProperties } from 'react';
|
|
6
|
-
import { E as EverfurError } from '../../EverfurResult-DN9pL2Ab.js';
|
|
7
|
-
export { a as EverfurErrorCategory, b as EverfurErrorCode, c as EverfurResult } from '../../EverfurResult-DN9pL2Ab.js';
|
|
8
9
|
import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
|
|
9
10
|
export { a as VET_VISIT_INTENTS, i as isVetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
|
|
11
|
+
export { E as EverfurResult } from '../../EverfurResult-SGvHKsCB.js';
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* Deliberately the scoping the BUTTON was given and nothing more. The host already holds the session, the
|
|
15
|
-
* theme and the router; what it cannot know is which pet and which state this particular button was placed
|
|
16
|
-
* for, so that, and only that, travels. Identical to the RN twin's request, so one host-side presenter
|
|
17
|
-
* satisfies both.
|
|
18
|
-
*/
|
|
19
|
-
interface EverfurTelevetFlowRequest {
|
|
20
|
-
/** The pet this button was scoped to, when it was scoped to one. */
|
|
21
|
-
readonly petRef?: PetRef | null | undefined;
|
|
22
|
-
/** The member's US state, when the host gave one. The booking screens preflight availability with it. */
|
|
23
|
-
readonly usState?: string | null | undefined;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* The host's presenter: show the Everfur booking flow. Called on click, and expected to route or present.
|
|
27
|
-
*
|
|
28
|
-
* It returns nothing. The button is not waiting on it and has nothing to do with the result: presenting a
|
|
29
|
-
* screen is the host's business, and a presenter that throws is contained (see `presentEverfurTelevetFlow`)
|
|
30
|
-
* rather than allowed to break the click.
|
|
31
|
-
*/
|
|
32
|
-
type EverfurTelevetFlowPresenter = (request: EverfurTelevetFlowRequest) => void;
|
|
33
|
-
/**
|
|
34
|
-
* Register how this site presents the in-page vet visit. Call it ONCE, in your app entry:
|
|
14
|
+
* Register how this site presents a vet visit. Call it ONCE, in your app entry, only if you want to own the
|
|
15
|
+
* destination:
|
|
35
16
|
*
|
|
36
17
|
* ```ts
|
|
37
18
|
* import { registerEverfurTelevetFlow } from '@everfur/sdk/web/televet';
|
|
38
|
-
* registerEverfurTelevetFlow(() => router.push('/vet/book'));
|
|
19
|
+
* registerEverfurTelevetFlow((request) => router.push(request.visitRef ? '/vet/visit' : '/vet/book'));
|
|
39
20
|
* ```
|
|
40
21
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* partner does to go back to the hosted visit everywhere at once.
|
|
22
|
+
* Without it every vet entry opens the in-page experience Everfur provides. Passing `null` unregisters it,
|
|
23
|
+
* which is what a test does between cases.
|
|
44
24
|
*/
|
|
45
25
|
declare function registerEverfurTelevetFlow(next: EverfurTelevetFlowPresenter | null): void;
|
|
46
|
-
/** Is
|
|
26
|
+
/** Is a presenter registered? */
|
|
47
27
|
declare function hasEverfurTelevetFlow(): boolean;
|
|
48
28
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* A THROWING PRESENTER IS NOT A DEAD BUTTON. A host router can throw (a route that was renamed, a modal
|
|
53
|
-
* controller that unmounted), and the member clicking the button has no idea any of that happened. So a throw
|
|
54
|
-
* is caught and reported as "not handed over", and the caller then mints and opens the hosted visit: the
|
|
55
|
-
* member reaches a vet either way, which is the floor this whole file is built around.
|
|
56
|
-
*
|
|
57
|
-
* THE THROW IS NOT SWALLOWED. It is re-surfaced to the partner's engineer through the console, because a
|
|
58
|
-
* router that throws on every click is a defect in their site that they need to see. The message is
|
|
59
|
-
* developer-facing and is never rendered: end-user copy is not authored in this repository.
|
|
60
|
-
*
|
|
61
|
-
* ONE COST OF THE FALL-THROUGH, STATED PLAINLY. The hosted path needs the click's own task to open its tab
|
|
62
|
-
* (see useVetVisit.ts), and a presenter that throws has already spent part of that task. The synchronous
|
|
63
|
-
* `window.open` still runs in the same task, so the fall-through keeps the gesture; what it cannot keep is a
|
|
64
|
-
* gesture a presenter consumed by awaiting something. A presenter is documented as synchronous for that
|
|
65
|
-
* reason: it routes, it does not fetch.
|
|
29
|
+
* Hand a request to the registered presenter. Answers whether it PRESENTED: false when nothing is registered,
|
|
30
|
+
* when the presenter declined (returned false), and when it threw (reported to the console, never rendered).
|
|
66
31
|
*/
|
|
67
32
|
declare function presentEverfurTelevetFlow(request: EverfurTelevetFlowRequest): boolean;
|
|
68
33
|
|
|
34
|
+
/** Renders the in-page vet visit Everfur provides, while one is open. Renders nothing otherwise. */
|
|
35
|
+
declare function EverfurTelevetHost(): ReactNode;
|
|
36
|
+
|
|
69
37
|
/**
|
|
70
38
|
* The vet visit hook for a web page. Render your own control and call `open()` directly from its click
|
|
71
39
|
* handler; `available` is false (render nothing) unless Everfur grants vet visits to this signed-in user.
|
|
72
40
|
* Requires a signed session: pass `user` with a `getToken` backed by your server's session mint.
|
|
41
|
+
*
|
|
42
|
+
* The visit opens IN YOUR PAGE: your registered presenter, else the in-page experience rendered by a mounted
|
|
43
|
+
* `EverfurTelevetHost` (mount one once if no `VetVisitButton` or `EverfurChat` is on the page). Pass
|
|
44
|
+
* `prefer: 'redirect'` for the hosted visit in a new tab instead.
|
|
73
45
|
*/
|
|
74
46
|
declare function useVetVisit(opts?: UseVetVisitOptions): UseVetVisitState;
|
|
75
47
|
|
|
@@ -78,9 +50,12 @@ interface VetVisitButtonProps {
|
|
|
78
50
|
readonly petRef?: PetRef | null | undefined;
|
|
79
51
|
/** The button label. Defaults to Everfur's label. */
|
|
80
52
|
readonly children?: ReactNode;
|
|
81
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* `prefer="redirect"` only: called after the new tab is navigated to the hosted visit, with the return flow
|
|
55
|
+
* id when `returnTo` was given.
|
|
56
|
+
*/
|
|
82
57
|
readonly onOpened?: ((flowId: string | null) => void) | undefined;
|
|
83
|
-
/**
|
|
58
|
+
/** `prefer="redirect"` only: the KEY of a return destination your tenant registered with Everfur. */
|
|
84
59
|
readonly returnTo?: string | null | undefined;
|
|
85
60
|
/** The user's US state. When set, the button renders only once Everfur confirms a visit is available there. */
|
|
86
61
|
readonly usState?: string | null | undefined;
|
|
@@ -88,7 +63,8 @@ interface VetVisitButtonProps {
|
|
|
88
63
|
readonly entry?: VetVisitEntry | null | undefined;
|
|
89
64
|
/**
|
|
90
65
|
* TV-01. A visit this member already has. The button then OPENS that visit rather than starting a booking:
|
|
91
|
-
* put the `visitRef` a tapped push carries here.
|
|
66
|
+
* put the `visitRef` a tapped push carries here. It opens in your page like a booking does, carried to your
|
|
67
|
+
* destination as `request.visitRef`; only `prefer="redirect"` sends it to the hosted visit.
|
|
92
68
|
*/
|
|
93
69
|
readonly visitRef?: string | null | undefined;
|
|
94
70
|
/** What to open for `visitRef`: `visit` (the default), `join`, `summary` or `messages`. */
|
|
@@ -96,31 +72,21 @@ interface VetVisitButtonProps {
|
|
|
96
72
|
/** Called when the visit could not be opened. `error` is null for a browser-side failure (a blocked tab). */
|
|
97
73
|
readonly onError?: ((reason: VetVisitErrorReason, error: EverfurError | null) => void) | undefined;
|
|
98
74
|
/**
|
|
99
|
-
*
|
|
100
|
-
* visit.
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* owns no router, so the host is the only thing that can say where it lives: which is why this is a
|
|
104
|
-
* callback and not a `mode` flag the button could not honour. Use it for one button that routes somewhere
|
|
105
|
-
* of its own; use `registerEverfurTelevetFlow` for the site-wide default.
|
|
106
|
-
*
|
|
107
|
-
* `visitRef` still wins over it: a click that names an existing visit opens THAT visit, and there is no
|
|
108
|
-
* in-page surface for one yet. Sending an owner into a fresh booking funnel because they followed a
|
|
109
|
-
* reminder for the visit they already have is the wrong screen, loudly.
|
|
75
|
+
* Your own destination for THIS button, called with the request (the pet, the state and, for an existing
|
|
76
|
+
* visit, `visitRef` and `intent`). It wins over the registry and over the SDK's own experience: a host that
|
|
77
|
+
* threaded a callback into one button said where that button goes. Omit it and the click opens your
|
|
78
|
+
* registered presenter, else the in-page experience Everfur provides.
|
|
110
79
|
*/
|
|
111
|
-
readonly onStartInApp?: (() => void) | undefined;
|
|
80
|
+
readonly onStartInApp?: ((request: EverfurTelevetFlowRequest) => void) | undefined;
|
|
112
81
|
/**
|
|
113
82
|
* Which destination a click takes. Defaults to `'in-app'`.
|
|
114
83
|
*
|
|
115
|
-
* `'in-app'`
|
|
116
|
-
*
|
|
117
|
-
* before. That is the floor: a site that upgrades and changes nothing keeps a working button, and the
|
|
118
|
-
* member always reaches a vet.
|
|
119
|
-
*
|
|
120
|
-
* `'redirect'` is the explicit opt-in back to the hosted handoff. It ignores the registry entirely, which
|
|
121
|
-
* is what a partner wants for a surface they deliberately keep hosted.
|
|
84
|
+
* `'in-app'` keeps the member in your page: `onStartInApp`, else your registered presenter, else the
|
|
85
|
+
* in-page experience Everfur provides. Nothing is minted and nothing opens a tab.
|
|
122
86
|
*
|
|
123
|
-
* `
|
|
87
|
+
* `'redirect'` is the explicit opt-in to the hosted Everfur visit in a new tab, opened in the click's own
|
|
88
|
+
* task. It ignores `onStartInApp` and the registry, which is what a partner wants for a surface they
|
|
89
|
+
* deliberately keep hosted.
|
|
124
90
|
*/
|
|
125
91
|
readonly prefer?: 'in-app' | 'redirect' | undefined;
|
|
126
92
|
/** Merged over the button's own style. */
|
|
@@ -133,4 +99,4 @@ interface VetVisitButtonProps {
|
|
|
133
99
|
/** Opens the Everfur vet visit, in the partner's own page by default. Renders nothing unless it is granted. */
|
|
134
100
|
declare function VetVisitButton(props: VetVisitButtonProps): ReactNode;
|
|
135
101
|
|
|
136
|
-
export { EverfurError,
|
|
102
|
+
export { EverfurError, EverfurTelevetFlowPresenter, EverfurTelevetFlowRequest, EverfurTelevetHost, PetRef, UseVetVisitOptions, UseVetVisitState, VetVisitButton, type VetVisitButtonProps, VetVisitController, VetVisitEntry, VetVisitErrorReason, VetVisitIntent, hasEverfurTelevetFlow, presentEverfurTelevetFlow, registerEverfurTelevetFlow, useVetVisit };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {createContext,useMemo,useRef,useContext,useSyncExternalStore,useState,useEffect,useCallback}from'react';import {jsx}from'react/jsx-runtime';var yr=Object.defineProperty;var n=(e,r)=>yr(e,"name",{value:r,configurable:true});var $=null;function mr(e){$=e;}n(mr,"registerEverfurTelevetFlow");function Q(){return $!==null}n(Q,"hasEverfurTelevetFlow");function X(e){let r=$;if(r===null)return false;try{return r(e),!0}catch(t){return console.warn("[everfur] The in-page vet visit presenter registered with registerEverfurTelevetFlow threw, so this click fell back to the hosted visit in a new tab. The member reached a vet, but your routing did not run: check the destination you registered.",t),false}}n(X,"presentEverfurTelevetFlow");var Z=Object.freeze([Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"DAILY_QUOTA_EXCEEDED",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"FILE_TOO_LARGE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_IN_FLIGHT",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"INVALID_CONTENT_TYPE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"InternalFailureException",envelope:"http_envelope",httpStatus:500,retryable:true}),Object.freeze({wireCode:"MethodNotAllowedException",envelope:"http_envelope",httpStatus:405,retryable:false}),Object.freeze({wireCode:"NotImplementedException",envelope:"http_envelope",httpStatus:501,retryable:false}),Object.freeze({wireCode:"PaymentRequiredException",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ResourceNotFoundException",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"ServiceUnavailableException",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"TIER_UPGRADE_REQUIRED",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ThrottlingException",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"ValidationException",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"accessDenied",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"access_denied",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"device_cipher_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"email_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"event_cursor_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_payload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_not_available",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_unknown",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_required",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_reused",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"insufficientCapability",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"insufficient_scope",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"internal_error",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"invalidRequest",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_client",envelope:"oauth_error",httpStatus:401,retryable:false}),Object.freeze({wireCode:"invalid_client_metadata",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_grant",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_redirect_uri",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),Object.freeze({wireCode:"mcp_request_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"not_found",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"partner_visit_link_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"partner_visit_owner_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"partner_visit_pet_already_mapped",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"payload_too_large",envelope:"http_envelope",httpStatus:413,retryable:false}),Object.freeze({wireCode:"petRefInUse",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"pet_health_list_removals_unconfirmed",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_health_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_not_registered",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"provider_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"rateLimited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"record_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"record_subject_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"record_upload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"records_consent_required",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"sandbox_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"session_required",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"share_limit_reached",envelope:"http_envelope",httpStatus:429,retryable:false}),Object.freeze({wireCode:"slow_down",envelope:"oauth_error",httpStatus:429,retryable:true}),Object.freeze({wireCode:"species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"tenant_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"tenant_has_no_capabilities",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"tenant_resource_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"tenant_surface_not_enabled",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"timeout",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"token_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"unavailable",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);Object.freeze(Z.map(e=>e.wireCode));var vr=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"}),Ee=Object.freeze(Z.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:vr[e.wireCode]}))),br=new Map(Ee.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),Er=Object.freeze(["http_envelope",...[...new Set(Ee.map(e=>e.envelope))].filter(e=>e!=="http_envelope").sort()]);function N(e,r){if(typeof e!="string")return;let t=e.trim().toUpperCase();if(t.length!==0)for(let o of [r??"http_envelope",...Er]){let i=br.get(o+t);if(i)return i}}n(N,"contractErrorFor");function gr(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}n(gr,"contractDocUrl");function ge(e){return null}n(ge,"publishedDocUrl");var hr=Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function he(e){return hr[e]}n(he,"categoryFor");function _e(e){let r=N(e);if(r)return r.normalized;let t=(e??"").trim().toUpperCase(),o=t.replace(/[^A-Z0-9]/g,"");if(o==="AUTHREJECTED")return "authRejected";if(t.startsWith("AUTH"))return "authExpired";switch(o){case "DAILYQUOTAEXCEEDED":case "QUOTAEXCEEDED":return "quotaExceeded";case "RATELIMITED":case "TOOMANYREQUESTS":return "rateLimited";case "IDEMPOTENCYKEYCONFLICT":case "IDEMPOTENCYCONFLICT":return "idempotencyConflict";case "ACCESSDENIED":case "FORBIDDEN":return "accessDenied";case "NOTFOUND":case "CONVERSATIONNOTFOUND":return "conversationNotFound";case "PETNOTFOUND":return "petNotFound";case "TIMEOUT":case "STREAMTIMEOUT":return "streamTimeout";case "MEDIAUPLOADFAILED":case "UNRECOGNIZEDVIDEOFORMAT":case "FILETOOSMALL":return "mediaUploadFailed";case "MODERATIONBLOCKED":return "moderationBlocked";case "UPSTREAMLLMTIMEOUT":return "upstreamLlmTimeout";case "INTERNALERROR":case "INTERNALSERVERERROR":return "internalError";case "STREAMINCOMPLETE":case "CHATSTREAMINCOMPLETE":return "streamIncomplete";case "INVALIDANALYSISTYPE":case "INVALIDUPLOADPURPOSE":return "unknown";default:return "unknown"}}n(_e,"fromWire");var _r=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function J(e){return _r.has(e)}n(J,"isAutoRetryable");var Rr=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function Re(e){return J(e)||Rr.has(e)}n(Re,"isRetryableCode");var Tr=500,ee=8e3,Te=4;function Ce(e,r=Math.random){let t=Math.max(0,e),o=Math.min(Tr*2**t,ee);return Math.floor(r()*o)}n(Ce,"backoffDelayMs");var Cr=Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:"This feature isn't available on your account right now.",paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",unknown:"Something went wrong. Please try again."});function re(e){return Cr[e]}n(re,"userFacingError");function we(e,r,t){Object.defineProperty(e,r,{value:t,enumerable:false,writable:false,configurable:false});}n(we,"defineHidden");var wr=/^[a-z][a-z0-9_]{0,63}$/;function F(e,r){let t=N(r?.wireCode,r?.wireEnvelope),o={code:e,category:he(e),retryable:r?.retryable??Re(e),displayMessage:re(e)};if(r?.httpStatus!==void 0&&(o.httpStatus=r.httpStatus),r?.requestId&&(o.requestId=r.requestId),typeof r?.reasonCode=="string"&&wr.test(r.reasonCode)&&(o.reasonCode=r.reasonCode),t);return r?.wireMessage&&we(o,"wireMessage",r.wireMessage),r?.raw!==void 0&&r.raw!==null&&we(o,"raw",r.raw),Object.freeze(o)}n(F,"makeEverfurError");function te(e,r){return Object.freeze(r===void 0?{ok:true,value:e}:{ok:true,value:e,warning:r})}n(te,"ok");function _(e){return Object.freeze({ok:false,error:e})}n(_,"err");var M=class M extends Error{constructor(r,t){super(t),this.name="EverfurConfigError",this.kind=r,Object.setPrototypeOf(this,M.prototype);}};n(M,"EverfurConfigError");var z=M;function Se(e){return Object.freeze({kind:"error",terminal:true,code:e.code,retryable:e.retryable,wireMessage:e.wireMessage,synthesized:e.synthesized,lastEventId:e.lastEventId,serverRequestId:e.serverRequestId??null})}n(Se,"errorFrame");function Fr(e){let r={};return e.mode==="personalized"?r.authorization=`Bearer ${e.token}`:r["x-everfur-partner-key"]=e.publishableKey,e.userRef&&(r["x-everfur-user-ref"]=e.userRef),e.sessionId&&(r["x-everfur-session-id"]=e.sessionId),r}n(Fr,"authHeaders");function j(e,r){return {...e,headers:{...kr(e.headers),...Fr(r)}}}n(j,"withAuthHeaders");function kr(e){if(!e)return {};let r={};for(let[t,o]of Object.entries(e)){let i=t.toLowerCase();i==="authorization"||i==="x-everfur-partner-key"||(r[t]=o);}return r}n(kr,"stripAuthHeaders");async function xe(e,r){if(r.mode==="anonymous")return r.transport.request(j(e,{mode:"anonymous",publishableKey:r.publishableKey,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));let t;try{t=await r.identity.currentToken();}catch{return _(ne())}let o=await r.transport.request(j(e,{mode:"personalized",token:t,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));if(o.ok||o.error.httpStatus!==401)return o;let i;try{i=await r.identity.currentToken({forceRefresh:!0});}catch{return _(ne())}let a=await r.transport.request(j(e,{mode:"personalized",token:i,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));return !a.ok&&a.error.httpStatus===401?_(ne(a.error.httpStatus)):a}n(xe,"authedSend");function ne(e){return F("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}n(ne,"authRejectedError");function Fe(e){return F("internalError",{retryable:true,wireMessage:Or(e)})}n(Fe,"networkError");function Or(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}n(Or,"describeCause");var Vr=3e4,Ir=ee*2,Ar="idempotency-key",Pr=new Set(["POST","PUT","PATCH","DELETE"]),zr=Object.freeze({onEvent(){}}),jr=Object.freeze({setTimeout:n((e,r)=>setTimeout(e,r),"setTimeout"),clearTimeout:n(e=>clearTimeout(e),"clearTimeout"),now:n(()=>Date.now(),"now")});function Dr(e){let r=e.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return r.length===0?null:`efs_${r}`.slice(0,128)}n(Dr,"seededIdempotencyKey");function Oe(e){let r=e.observer??zr,t=e.timers??jr,o=e.rng??Math.random,i=e.sleep??((y,d)=>Qr(y,t,d)),a=e.maxAttempts??Te,u=e.unaryTimeoutMs??Vr,l=e.newIdempotencyKey??Mr(),s=n(y=>{try{r.onEvent(y);}catch{}},"emit");async function c(y,d,m){let g=m?.maxAttempts,p=Math.max(1,g??a),k=m?.idempotent??Pr.has(d.method),C=m?.idempotencyKey===void 0?null:Dr(m.idempotencyKey),R=k?C??l():null,V=Nr(d,R),x=0;for(;;){let h=n(O=>Object.freeze({call:y,method:d.method,path:d.path,attempt:x,...R?{idempotencyKey:R}:{},...O}),"stamp");s(h({phase:"attempt"}));let I=Gr(u,t),A=$r(I.signal,d.signal),f;try{f=await xe({...V,signal:A.signal},e.auth);}catch(O){f=_(Fe(O));}finally{A.dispose(),I.cancel();}if(f.ok)return s(h({phase:"settled",ok:true,reason:"ok"})),f;let b=f.error,w=Ur(b,x,{maxAttempts:p,rng:o,now:t.now(),aborted:d.signal?.aborted===true,...g!==void 0?{perCallMaxAttempts:g}:{},...e.errorPolicy!==void 0?{policy:e.errorPolicy}:{}}),S={ok:false,code:b.code,reason:w.reason,...b.httpStatus!==void 0?{httpStatus:b.httpStatus}:{},...b.requestId!==void 0?{requestId:b.requestId}:{}};if(!w.retry)return s(h({phase:"settled",...S})),_(b);if(s(h({phase:"retry",...S,delayMs:w.delayMs})),await i(w.delayMs,d.signal),d.signal?.aborted===true)return s(h({phase:"settled",...S,reason:"aborted"})),_(b);x+=1;}}n(c,"send");async function E(y){return j(y,await Kr(e.auth))}n(E,"authorize");async function*v(y,d,m){s(Object.freeze({call:y,phase:"stream.open",method:d.method,path:d.path,attempt:0}));try{yield*e.auth.transport.stream(d,m);}catch{yield Se({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:null});}}return n(v,"stream"),Object.freeze({send:c,authorize:E,stream:v})}n(Oe,"createRequestFunnel");function Nr(e,r){let t={};for(let[o,i]of Object.entries(e.headers??{}))o.toLowerCase()!==Ar&&(t[o]=i);return r!==null&&(t["Idempotency-Key"]=r),{...e,headers:t}}n(Nr,"assembleHeaders");function Mr(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}n(Mr,"defaultIdempotencyKeyFactory");var Lr=10;function Ur(e,r,t){if(t.aborted)return {retry:false,reason:"aborted"};let o=Br(e);if(o==="quota")return {retry:false,reason:"daily-quota-exhausted"};if(o!=="burst"&&!J(e.code))return {retry:false,reason:"terminal-code"};let i=o==="burst"?"burst-throttle":"retryable-code";if(n(()=>{if(t.policy===void 0)return false;try{return !t.policy.shouldRetry(e.code,r)}catch{return false}},"policyVetoedRetry")())return {retry:false,reason:"terminal-code"};let u=n(()=>{if(t.policy===void 0)return null;let c;try{c=t.policy.maxAttempts(e.code);}catch{return null}return typeof c!="number"||!Number.isFinite(c)?null:Math.max(1,Math.min(Lr,Math.floor(c)))},"policyCeiling"),l=t.perCallMaxAttempts??u()??t.maxAttempts;if(r+1>=l)return {retry:false,reason:"attempts-exhausted"};let s=qr(e,t.now);return s!==null?s>Ir?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:s}:{retry:true,reason:i,delayMs:Ce(r,t.rng)}}n(Ur,"decideRetry");function Br(e){let r=e.code==="unknown"?_e(Yr(e.raw)):e.code;return r==="quotaExceeded"?"quota":r==="rateLimited"||e.httpStatus===429?"burst":null}n(Br,"throttleKind");function qr(e,r){let t=Hr(e.raw);if(t===null)return null;let o=t-r;return o>0?o:0}n(qr,"retryOverrideMs");function Hr(e){for(let r of Ve(e)){let t=r.resets_at,o=Wr(t);if(o!==null)return o}return null}n(Hr,"findResetsAt");function Ve(e){if(!ke(e))return [];let r=[e];for(let t of ["error","detail"]){let o=e[t];ke(o)&&r.push(o);}return r}n(Ve,"candidateScopes");function Wr(e){if(typeof e=="number"&&Number.isFinite(e))return e<1e11?Math.round(e*1e3):Math.round(e);if(typeof e=="string"&&e.trim().length>0){let r=Date.parse(e);return Number.isFinite(r)?r:null}return null}n(Wr,"parseInstantMs");function Yr(e){for(let r of Ve(e)){let t=r.code;if(typeof t=="string"&&t.length>0)return t}return null}n(Yr,"rawWireCode");function ke(e){return typeof e=="object"&&e!==null}n(ke,"isRecord");async function Kr(e){return e.mode==="anonymous"?{mode:"anonymous",publishableKey:e.publishableKey,userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}:{mode:"personalized",token:await e.identity.currentToken(),userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}}n(Kr,"resolveDeviceAuth");function Gr(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(Gr,"boundedSignal");function $r(e,r){let t=n(()=>{},"noop");if(!r)return {signal:e,dispose:t};let o=new AbortController;if(e.aborted||r.aborted)return o.abort(),{signal:o.signal,dispose:t};let i=n(()=>o.abort(),"onAbort");return e.addEventListener("abort",i,{once:true}),r.addEventListener("abort",i,{once:true}),{signal:o.signal,dispose:n(()=>{e.removeEventListener("abort",i),r.removeEventListener("abort",i);},"dispose")}}n($r,"mergeSignals");function Qr(e,r,t){return e<=0||t?.aborted===true?Promise.resolve():new Promise(o=>{let i=r.setTimeout(()=>{t?.removeEventListener("abort",a),o();},e),a=n(()=>{r.clearTimeout(i),o();},"onAbort");t?.addEventListener("abort",a,{once:true});})}n(Qr,"delayAbortable");var L=Object.freeze(["visit","join","summary","messages"]);function U(e){return typeof e=="string"&&L.includes(e)}n(U,"isVetVisitIntent");var Xr="/widget/v1/televet/handoffs",Zr="/widget/v1/televet/availability",Jr="/widget/v1/televet/chat-entry",et=/^[a-z0-9][a-z0-9_-]{0,39}$/,Ne=/^[A-Za-z0-9_-]{22}$/,Ie="everfur_flow",Ae=32,Pe=128,ze=64;function B(e){let r=e.httpStatus;switch(e.code){case "sessionRequired":return "sessionRequired";case "authExpired":case "authRejected":return "authRejected";case "sdkUpdateRequired":return "sdkUpdateRequired";case "validationFailed":return "invalidRequest";case "rateLimited":case "quotaExceeded":return "rateLimited";}return r===void 0?e.code==="internalError"?"network":"unknown":r===429?"rateLimited":r===404?"unavailable":r===403?"accessDenied":r===401?"authRejected":r===400||r===422?"invalidRequest":r>=500?"serverError":"unknown"}n(B,"vetVisitErrorReasonOf");function je(e){return _(F("validationFailed",{retryable:false,wireMessage:e}))}n(je,"invalid");function oe(e){return _(F("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}n(oe,"unusable");function rt(e,r){let t={};e!==void 0&&(t.pet_ref=e);let o=r?.returnTo;if(o!=null){if(typeof o!="string"||!et.test(o))return {ok:false,message:"returnTo must be a registered return destination key"};t.return_to=o;}let i=r?.entry;if(i!=null){if(i!=="chat"||e===void 0)return {ok:false,message:"entry 'chat' needs the pet the chat is about"};t.entry=i;}let a=r?.visitRef,u=r?.intent,l=a!=null;if(l){let s=typeof a=="string"?a.trim():"";if(s.length<1||[...s].length>ze)return {ok:false,message:`visitRef must be 1..${ze} characters`};t.visit_ref=s;}if(u!=null){if(!l)return {ok:false,message:"intent needs the visitRef it opens"};if(!U(u))return {ok:false,message:`intent must be one of ${L.join(", ")}`};t.intent=u;}return {ok:true,body:t}}n(rt,"handoffBody");function tt(e){if(typeof e!="object"||e===null)return null;let{visit_ref:r,intent:t}=e;return typeof r!="string"||r.length===0||!U(t)?null:Object.freeze({visitRef:r,intent:t})}n(tt,"parseVisitEcho");function Me(e){let r=e.funnel??Oe({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),t=e.telemetry,o=n(i=>(De(t,"televet.visit.handoff_failed",{reason:B(i)}),_(i)),"failed");return {async createHandoff(i,a){let u;if(i!=null){let p=typeof i=="string"?[...i].length:0;if(p<1||p>Pe)return o(F("validationFailed",{retryable:false,wireMessage:`pet_ref must be 1..${Pe} characters`}));u=i;}let l=rt(u,a);if(!l.ok){let p=je(l.message);return p.ok?p:o(p.error)}let s=l.body,c=await r.send("televet.visit.handoff",{method:"POST",path:Xr,body:s},{idempotent:false,maxAttempts:1});if(!c.ok)return o(c.error);let E=ot(c.value),v=s.return_to!==void 0,y=v?c.value?.flow_id:void 0;if(v&&(typeof y!="string"||!Ne.test(y))){let p=oe("the handoff response carried no usable return flow id");return p.ok?p:o(p.error)}let d=s.visit_ref!==void 0,m=d?tt(c.value?.visit):null;if(d&&m===null){let p=oe("the handoff response did not confirm the visit it opens");return p.ok?p:o(p.error)}let g=E===null?null:Object.freeze({...E,...v?{flowId:y}:{},...m!==null?{visit:m}:{}});return g===null?o(F("internalError",{retryable:false,httpStatus:502,wireMessage:"the handoff response carried no usable visit url"})):(De(t,"televet.visit.handoff_created",{pet_scoped:s.pet_ref!==void 0}),te(g))},async checkAvailability(i){if(typeof i!="string"||i.length>Ae)return je(`state must be at most ${Ae} characters`);let a=await r.send("televet.visit.availability",{method:"POST",path:Zr,body:{state:i}},{idempotent:false,maxAttempts:1});if(!a.ok)return _(a.error);let u=a.value?.available;return typeof u!="boolean"?oe("the availability response carried no usable answer"):te(Object.freeze({available:u}))},async chatEntryOpen(){try{let i=await r.send("televet.visit.chat_entry",{method:"GET",path:Jr},{maxAttempts:1});return i.ok&&i.value?.open===!0}catch{return false}}}}n(Me,"createVetVisitController");function nt(e){if(typeof e!="string")return null;let r=e.indexOf("#"),t=r<0?e:e.slice(0,r),o=t.indexOf("?");if(o<0)return null;let i=t.slice(o+1).split("&").filter(a=>a.startsWith(`${Ie}=`)).map(a=>a.slice(Ie.length+1));return i.length!==1||!Ne.test(i[0]??"")?null:Object.freeze({flowId:i[0]})}n(nt,"parseVetVisitReturn");function ot(e){if(typeof e!="object"||e===null)return null;let{url:r,expires_at:t}=e;return typeof r!="string"||typeof t!="string"||t.length===0||!lt(r)?null:Object.freeze({url:r,expiresAt:t})}n(ot,"parseHandoff");var it=new Set(["localhost","127.0.0.1","[::1]"]),at=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/,st=/[\s\u0000-\u001f\u007f]/;function lt(e){if(st.test(e))return false;let r=at.exec(e);if(r===null)return false;let t=(r[1]??"").toLowerCase(),o=r[2]??"";if(o.length===0||o.includes("@"))return false;let i=o.replace(/:\d+$/,"").toLowerCase(),a=t==="https",u=t==="http"&&it.has(i);if(!a&&!u)return false;let l=e.indexOf("#");if(l<0)return false;let s=e.slice(l);return s.startsWith("#h=")&&s.length>3}n(lt,"isOpenableVisitUrl");function De(e,r,t){if(e)try{e.track(r,t);}catch{}}n(De,"safeTrack");var Le=Symbol.for("@everfur/sdk#EverfurContext@v1"),Ue=globalThis,Be=Ue[Le]??(Ue[Le]=createContext(null));Be.displayName??="EverfurContext";function q(){let e=useContext(Be);if(e===null)throw new z("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}n(q,"useEverfurContext");var ct=Object.freeze({chat:Object.freeze(["chat.message.create"]),records:Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:Object.freeze(["records.clinic.create"]),video:Object.freeze(["video.gait.execute"]),photo:Object.freeze(["photo.checkup.execute"]),animations:Object.freeze(["animations.state.read"]),televet:Object.freeze(["televet.visit.create"])});function ft(e){return ct[e]}n(ft,"requires");function qe(e,r,t){let o=ft(e),i=new Map;for(let l of r)i.set(l.resource,l);if(t?.isPending===true&&o.some(l=>!i.has(l)))return ie({name:e,enabled:false,isPending:true,limits:{}});let a=pt(o,i);return o.filter(l=>i.get(l)?.granted!==true).length===0?ie({name:e,enabled:true,isPending:false,limits:a}):ie({name:e,enabled:false,isPending:false,limits:a,disabled:yt(o,i)})}n(qe,"decideCapability");function pt(e,r){let t={};for(let o of e){let i=r.get(o)?.limits;if(i)for(let[a,u]of Object.entries(i)){let l=t[a];t[a]=l===void 0?u:Math.min(l,u);}}return t}n(pt,"mergeLimits");function yt(e,r){for(let t of e){let o=r.get(t)?.disabled;if(o)return Object.freeze({reason:o.reason,level:o.level,recoverable:o.recoverable})}return Object.freeze({reason:re("accessDenied"),level:"user_entitlement",recoverable:false})}n(yt,"disabledFor");function ie(e){let r={name:e.name,enabled:e.enabled,isPending:e.isPending,limits:Object.freeze({...e.limits})};return e.disabled!==void 0&&(r.disabled=e.disabled),Object.freeze(r)}n(ie,"freezeDecision");function He(e){let{runtime:r}=q(),t=r.entitlements,o=useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return useMemo(()=>qe(e,o.decisions,{isPending:o.isPending}),[e,o])}n(He,"useCapability");var Ye=Object.freeze({status:"idle",error:null,errorReason:null});function Et(e,r,t){let{usState:o,chat:i,scope:a}=t,u=r&&(o!==null||i),l=`${o??""}|${i?"chat":""}`,[s,c]=useState(null);if(useEffect(()=>{if(!u)return;let v=true,y=e.current;return c(null),n(async()=>{try{if(i&&!(y.chatEntryOpen&&await y.chatEntryOpen()))return !1;if(o===null)return !0;if(!y.checkAvailability)return !1;let m=await y.checkAvailability(o);return m.ok&&m.value.available}catch{return false}},"ask")().then(m=>{v&&c({key:l,open:m});}),()=>{v=false;}},[u,l,o,i,a,e]),!u)return null;let E=s!==null&&s.key===l;return {open:E&&s.open,pending:!E}}n(Et,"usePreflight");var gt=Object.freeze({status:"opening",error:null,errorReason:null});function Ge(e,r={}){let{runtime:t,userRef:o,scopeEpoch:i}=q(),a=He("televet"),u=a.enabled&&o!==null,l=r.usState??null,s=r.entry==="chat",c=r.petRef??null,E=useMemo(()=>{if(r.controller)return r.controller;let{services:f}=t.registry;return Me({auth:f.authFor(o),telemetry:f.telemetry,...f.errorPolicy?{errorPolicy:f.errorPolicy}:{}})},[t,o,i,r.controller]),v=useRef(E);v.current=E;let y=useMemo(()=>({runtime:t,userRef:o,scopeEpoch:i}),[t,o,i]),d=Et(v,u,{usState:l,chat:s,scope:y}),m=u&&(d===null||d.open)&&(!s||c!==null),g=r.returnTo??null,[p,k]=useState(Ye),C=useRef(null),R=useRef({runtime:t,userRef:o,scopeEpoch:i});R.current={runtime:t,userRef:o,scopeEpoch:i};let V=useRef(E);V.current=E;let x=useRef(m);x.current=m;let h=useCallback((f,b)=>{if(C.current)return C.current;let w=n((T,P)=>(k({status:T==="cancelled"?"idle":"error",error:P,errorReason:T==="cancelled"?null:T}),Object.freeze({opened:false,reason:T,error:P})),"fail");if(!x.current)return Promise.resolve(w("unavailable",null));let S=e.prepare();if(!S.ok)return Promise.resolve(w(S.reason,null));let O=R.current,pe=V.current;k(gt);let K=(async()=>{let T,P={...g!==null?{returnTo:g}:{},...s?{entry:"chat"}:{},...b!==null?{visitRef:b.visitRef}:{},...b!==null&&b.intent!==null&&b.intent!==void 0?{intent:b.intent}:{}},ye=Object.keys(P).length===0?void 0:P,me=f===void 0?c:f;try{T=await(ye===void 0?pe.createHandoff(me):pe.createHandoff(me,ye));}catch{return e.abandon(S.value),w("unknown",null)}let G=R.current;if(G.runtime!==O.runtime||G.userRef!==O.userRef||G.scopeEpoch!==O.scopeEpoch)return e.abandon(S.value),w("cancelled",null);if(!T.ok)return e.abandon(S.value),w(B(T.error),T.error);let ve=await e.finish(S.value,T.value);return ve!==null?w(ve,null):(k(Ye),Object.freeze(T.value.flowId===void 0?{opened:true}:{opened:true,flowId:T.value.flowId}))})().finally(()=>{C.current===K&&(C.current=null);});return C.current=K,K},[e,c,g,s]),I=useCallback(f=>h(f,null),[h]),A=useCallback((f,b)=>h(void 0,{visitRef:f,intent:b??null}),[h]);return {available:m,isPending:a.isPending||(d?.pending??false),status:p.status,error:p.error,errorReason:p.errorReason,open:I,openVisit:A}}n(Ge,"useVetVisitWith");function $e(e){try{e.closed||e.close();}catch{}}n($e,"closeQuietly");var ht=Object.freeze({prepare(){let e=null;try{e=typeof window>"u"?null:window.open("about:blank","_blank");}catch{e=null;}if(e===null)return {ok:false,reason:"popupBlocked"};try{e.opener=null;}catch{}return {ok:true,value:{tab:e}}},async finish({tab:e},r){if(e.closed)return "cancelled";try{return e.location.replace(r.url),null}catch{return $e(e),"popupBlocked"}},abandon({tab:e}){$e(e);}});function se(e){return Ge(ht,e)}n(se,"useVetVisit");function _t(e,r){if(e===void 0)return {};let t={};return e.backgroundColor!==void 0&&(t.backgroundColor=e.backgroundColor),e.borderColor!==void 0&&(t.borderColor=e.borderColor,t.borderWidth=r??1),e.borderRadius!==void 0&&(t.borderRadius=e.borderRadius),t}n(_t,"slotBox");function Qe(e){return e?.textColor===void 0?{}:{color:e.textColor}}n(Qe,"slotText");function Xe(e,r){let t=_t(e,r),o={};return t.backgroundColor!==void 0&&(o.backgroundColor=t.backgroundColor),t.borderColor!==void 0&&(o.border=`${t.borderWidth??1}px solid ${t.borderColor}`),t.borderRadius!==void 0&&(o.borderRadius=t.borderRadius),o}n(Xe,"slotBoxCss");function Ze(e){let r=globalThis.console;try{r?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}n(Ze,"reportHostFailure");function Rt(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}n(Rt,"isThenable");function H(e,...r){if(typeof e=="function")try{let t=e(...r);return Rt(t)&&Promise.resolve(t).then(void 0,Ze),t}catch(t){Ze(t);return}}n(H,"callHost");var Je=Object.freeze({visitButton:"Talk to a vet"});function de(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let r of Object.keys(e))de(e[r]);}return e}n(de,"deepFreeze");var Tt=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),rr={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},tr={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},er={nano:8,small:9,micro:10,tiny:11,caption:12,bodyTight:13,body:14,subtitle:16,heading:18,verdict:24},Ct={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},wt={regular:"400",medium:"500",bold:"700"},St={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},xt=0,W="System",Y="monospace",Ft=["content","heading","control","compact","badge"];function kt(e){let r={};for(let t of Ft)r[t]=e;return r}n(kt,"authoredTierSizes");function nr(){return {family:W,mono:Y,fontUrl:null,families:{regular:W,medium:W,bold:W,mono:Y,monoMedium:Y,monoBold:Y},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:er,tierSizes:kt(er),lineHeight:Ct,weight:wt,letterSpacing:St,scale:1,maxScale:xt,scaleCaps:Tt}}n(nr,"baseType");var or={},le=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function ue(e){return `cubic-bezier(${e.join(", ")})`}n(ue,"cssCubicBezier");var ir={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:ue(le.standard),emphasized:ue(le.emphasized),exit:ue(le.exit)},reducedMotion:false},Ot={brand:"#10462E",brandSoft:"rgba(16,70,46,0.10)",brandSofter:"rgba(16,70,46,0.15)",brandBorder:"rgba(16,70,46,0.18)",borderHairlineGreen:"rgba(16,70,46,0.25)",brandBorderStrong:"rgba(16,70,46,0.55)",brandInk:"#10462E",linkInk:"#10462E",surface:"#FFFFFF",surfaceCream:"#FDFBF8",surfaceSubtle:"#EFE9E3",background:"#FFFFFF",borderRingCream:"#D8D2C8",chatGround:"#FFFFFF",composerFill:"#FDFBF8",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#111111",secondary:"#0E462E",muted:"#6E6660",placeholder:"rgba(61,61,61,0.75)",onBrand:"#FFFFFF",metaCool:"#3D3D3D",timestamp:"rgba(61,61,61,0.75)"},primary:"#10462E",onPrimary:"#FFFFFF",accent:"#10462E",onAccent:"#FFFFFF",accentEdge:"#07C168",success:"#07C168",danger:"#B91C1C",errorRed:"#FF1B00",warningStrong:"#A45610",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.12)",badgeBgCaution:"rgba(217,130,29,0.14)",badgeBgCritical:"rgba(185,28,28,0.12)",badgeBgNeutral:"rgba(110,102,96,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",skeleton:"#EFE9E3",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)"},ar=de({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:Ot,space:rr,radius:tr,type:nr(),motion:ir,slots:or}),Vt={brand:"#6BD39A",brandSoft:"rgba(107,211,154,0.12)",brandSofter:"rgba(107,211,154,0.18)",brandBorder:"rgba(107,211,154,0.22)",borderHairlineGreen:"rgba(107,211,154,0.28)",brandBorderStrong:"rgba(107,211,154,0.55)",brandInk:"#6BD39A",linkInk:"#6BD39A",surface:"#1C1F23",surfaceCream:"#23272C",surfaceSubtle:"#23272C",background:"#15171A",borderRingCream:"#3A3F45",chatGround:"#1C1F23",composerFill:"#23272C",composerBorder:"rgba(107,211,154,0.75)",shadow:"#000000",text:{primary:"#F5F3F0",secondary:"#A9E4C4",muted:"#9A938C",placeholder:"rgba(255,255,255,0.55)",onBrand:"#0E1F17",metaCool:"#C9C9C9",timestamp:"rgba(245,243,240,0.7)"},primary:"#6BD39A",onPrimary:"#0E1F17",accent:"#6BD39A",onAccent:"#0E1F17",accentEdge:"#34D888",success:"#07C168",danger:"#F87171",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",skeleton:"#23272C",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)"};de({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:Vt,space:rr,radius:tr,type:nr(),motion:ir,slots:or});var sr=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),lr=globalThis,ce=lr[sr]??(lr[sr]=createContext(ar));ce.displayName??="EverfurThemeContext";function fe(){return useContext(ce)}n(fe,"useEverfurTheme");var ur=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});var dr='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',Pt="System";function zt(e){let r=e.trim();return r.length===0||r===Pt?dr:`${cr(r)}, ${dr}`}n(zt,"cssFontFamily");function jt(e){let r=e.trim();return r.length===0||r==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${cr(r)}, ui-monospace, Menlo, Consolas, monospace`}n(jt,"cssMonoFamily");function cr(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}n(cr,"quote");function fr(e,r){let t=e.type,o=t.families[r];return {fontFamily:r==="mono"||r==="monoMedium"||r==="monoBold"?jt(o):zt(o),fontWeight:t.namedFaces[r]?t.weight.regular:t.weight[ur[r]]}}n(fr,"faceCss");var pr=44,Mt=.6;function Lt(e){let{petRef:r,children:t,onOpened:o,onError:i,style:a,className:u,controller:l,returnTo:s,usState:c,entry:E,visitRef:v,intent:y,onStartInApp:d,prefer:m}=e,g=se({...s!==void 0?{returnTo:s}:{},...c!==void 0?{usState:c}:{},...E!==void 0?{entry:E}:{},...r!==void 0?{petRef:r}:{},...l!==void 0?{controller:l}:{}}),p=fe(),k=useMemo(()=>Ut(p),[p]),C=useRef(false);if(!g.available)return null;let R=g.status==="opening",V=v!=null,x=m==="redirect"||V,h=!x&&d!==void 0,I=!x&&!h&&Q();return jsx("button",{type:"button",onClick:n(()=>{if(!(R||C.current)){if(h){H(d);return}I&&X({...r!==void 0?{petRef:r}:{},...c!==void 0?{usState:c}:{}})||(C.current=true,(v==null?g.open():g.openVisit(v,y??null)).then(f=>{f.opened?H(o,f.flowId??null):f.reason!=="cancelled"&&H(i,f.reason,f.error);}).finally(()=>{C.current=false;}));}},"onClick"),"aria-busy":R,"aria-disabled":R,className:u,style:{...k,...R?{opacity:Mt,cursor:"progress"}:null,...a},children:t??Je.visitButton})}n(Lt,"VetVisitButton");function Ut(e){let{color:r,space:t,radius:o,type:i,slots:a}=e;return {boxSizing:"border-box",minHeight:pr,minWidth:pr,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,border:0,cursor:"pointer",padding:`${t.sm}px ${t.xl}px`,borderRadius:o.pill,backgroundColor:r.primary,color:r.onPrimary,...fr(e,"medium"),fontSize:i.size.body,...Xe(a.vetVisitButton),...Qe(a.vetVisitButton)}}n(Ut,"buttonStyle");export{L as VET_VISIT_INTENTS,Lt as VetVisitButton,Q as hasEverfurTelevetFlow,U as isVetVisitIntent,nt as parseVetVisitReturn,X as presentEverfurTelevetFlow,mr as registerEverfurTelevetFlow,se as useVetVisit,B as vetVisitErrorReasonOf};
|
|
1
|
+
import {createContext,useMemo,useRef,useState,useEffect,useSyncExternalStore,useContext,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var zr=Object.defineProperty;var n=(e,r)=>zr(e,"name",{value:r,configurable:true});var we=Symbol.for("@everfur/sdk/televet");function w(){let e=globalThis,r=e[we];if(r!==void 0)return r;let t={presenter:null,snapshot:Object.freeze({request:null,serial:0,activeHost:null}),hosts:[],nextHost:1,listeners:new Set,dailyRegistered:false};return e[we]=t,t}n(w,"televetGlobal");function U(e){let r=w();r.snapshot=Object.freeze({...r.snapshot,...e});for(let t of [...r.listeners])try{t();}catch{}}n(U,"publish");function xe(e){w().presenter=e;}n(xe,"setTelevetPresenter");function Se(){return w().presenter!==null}n(Se,"hasTelevetPresenter");function q(e){let r=w().presenter;if(r===null)return "absent";try{return r(e)===!1?"declined":"presented"}catch(t){return console.warn("[everfur] Your registerEverfurTelevetFlow presenter threw; the in-app visit opened instead.",t),"threw"}}n(q,"callTelevetPresenter");function Fe(e){let r=w();return r.listeners.add(e),()=>{r.listeners.delete(e);}}n(Fe,"subscribeTelevetExperience");function ne(){return w().snapshot}n(ne,"televetExperienceSnapshot");function jr(){return w().hosts.length>0}n(jr,"hasTelevetHost");function ke(e){if(!jr())return false;let r=Object.freeze({...e});return U({request:r,serial:w().snapshot.serial+1}),true}n(ke,"presentTelevetExperience");function oe(){w().snapshot.request!==null&&U({request:null});}n(oe,"dismissTelevetExperience");function Oe(){let e=w(),r=e.nextHost;return e.nextHost+=1,e.hosts=[...e.hosts,r],U({activeHost:e.hosts[0]??null}),r}n(Oe,"claimTelevetHost");function Ve(e){let r=w();r.hosts=r.hosts.filter(o=>o!==e);let t=r.hosts[0]??null;U(t===null?{activeHost:t,request:null}:{activeHost:t});}n(Ve,"releaseTelevetHost");function Dr(e){xe(e);}n(Dr,"registerEverfurTelevetFlow");function Mr(){return Se()}n(Mr,"hasEverfurTelevetFlow");function Nr(e){return q(e)==="presented"}n(Nr,"presentEverfurTelevetFlow");function Pe(e){let r=null;return ()=>{if(r!==null)return r;let t=e();return r=t,t.then(void 0,()=>{r===t&&(r=null);}),t}}n(Pe,"memoizeTelevetLoader");function ze(e){let[r,t]=useState(null);useEffect(()=>{let d=Oe();return t(d),()=>{Ve(d);}},[]);let o=useSyncExternalStore(Fe,ne,ne),a=r!==null&&o.activeHost===r?o.request:null,[u,s]=useState(null),l=a!==null&&u===null;return useEffect(()=>{if(!l)return;let d=true;return e().then(b=>{d&&s(()=>b);},b=>{d&&(console.warn("[everfur] The in-app vet visit could not load its screens.",b),oe());}),()=>{d=false;}},[l,e]),a===null||u===null?null:{module:u,request:a,serial:o.serial,dismiss:oe}}n(ze,"useTelevetExperienceHost");var Ur=Pe(()=>import('@everfur/sdk/web/televet/booking'));function B(){let e=ze(Ur);if(e===null)return null;let{EverfurTelevetDialog:r}=e.module;return jsx(r,{request:e.request,onClose:e.dismiss},e.serial)}n(B,"EverfurTelevetHost");var ie=Object.freeze([Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"DAILY_QUOTA_EXCEEDED",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"FILE_TOO_LARGE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_IN_FLIGHT",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"INVALID_CONTENT_TYPE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"InternalFailureException",envelope:"http_envelope",httpStatus:500,retryable:true}),Object.freeze({wireCode:"MethodNotAllowedException",envelope:"http_envelope",httpStatus:405,retryable:false}),Object.freeze({wireCode:"NotImplementedException",envelope:"http_envelope",httpStatus:501,retryable:false}),Object.freeze({wireCode:"PaymentRequiredException",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ResourceNotFoundException",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"ServiceUnavailableException",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"TIER_UPGRADE_REQUIRED",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ThrottlingException",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"ValidationException",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"accessDenied",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"access_denied",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"device_cipher_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"email_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"event_cursor_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_payload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_not_available",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_unknown",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_required",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_reused",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"insufficientCapability",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"insufficient_scope",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"internal_error",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"invalidRequest",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_client",envelope:"oauth_error",httpStatus:401,retryable:false}),Object.freeze({wireCode:"invalid_client_metadata",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_grant",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_redirect_uri",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),Object.freeze({wireCode:"mcp_request_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"not_found",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"partner_visit_link_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"partner_visit_owner_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"partner_visit_pet_already_mapped",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"payload_too_large",envelope:"http_envelope",httpStatus:413,retryable:false}),Object.freeze({wireCode:"petRefInUse",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"pet_health_list_removals_unconfirmed",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_health_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_not_registered",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"provider_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"rateLimited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"record_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"record_subject_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"record_upload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"records_consent_required",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"sandbox_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"session_required",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"share_limit_reached",envelope:"http_envelope",httpStatus:429,retryable:false}),Object.freeze({wireCode:"slow_down",envelope:"oauth_error",httpStatus:429,retryable:true}),Object.freeze({wireCode:"species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"tenant_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"tenant_has_no_capabilities",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"tenant_resource_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"tenant_surface_not_enabled",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"timeout",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"token_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"unavailable",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);Object.freeze(ie.map(e=>e.wireCode));var Br=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"}),De=Object.freeze(ie.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:Br[e.wireCode]}))),Hr=new Map(De.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),Wr=Object.freeze(["http_envelope",...[...new Set(De.map(e=>e.envelope))].filter(e=>e!=="http_envelope").sort()]);function H(e,r){if(typeof e!="string")return;let t=e.trim().toUpperCase();if(t.length!==0)for(let o of [r??"http_envelope",...Wr]){let i=Hr.get(o+t);if(i)return i}}n(H,"contractErrorFor");function Yr(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}n(Yr,"contractDocUrl");function Me(e){return null}n(Me,"publishedDocUrl");var Kr=Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function Ne(e){return Kr[e]}n(Ne,"categoryFor");function Le(e){let r=H(e);if(r)return r.normalized;let t=(e??"").trim().toUpperCase(),o=t.replace(/[^A-Z0-9]/g,"");if(o==="AUTHREJECTED")return "authRejected";if(t.startsWith("AUTH"))return "authExpired";switch(o){case "DAILYQUOTAEXCEEDED":case "QUOTAEXCEEDED":return "quotaExceeded";case "RATELIMITED":case "TOOMANYREQUESTS":return "rateLimited";case "IDEMPOTENCYKEYCONFLICT":case "IDEMPOTENCYCONFLICT":return "idempotencyConflict";case "ACCESSDENIED":case "FORBIDDEN":return "accessDenied";case "NOTFOUND":case "CONVERSATIONNOTFOUND":return "conversationNotFound";case "PETNOTFOUND":return "petNotFound";case "TIMEOUT":case "STREAMTIMEOUT":return "streamTimeout";case "MEDIAUPLOADFAILED":case "UNRECOGNIZEDVIDEOFORMAT":case "FILETOOSMALL":return "mediaUploadFailed";case "MODERATIONBLOCKED":return "moderationBlocked";case "UPSTREAMLLMTIMEOUT":return "upstreamLlmTimeout";case "INTERNALERROR":case "INTERNALSERVERERROR":return "internalError";case "STREAMINCOMPLETE":case "CHATSTREAMINCOMPLETE":return "streamIncomplete";case "INVALIDANALYSISTYPE":case "INVALIDUPLOADPURPOSE":return "unknown";default:return "unknown"}}n(Le,"fromWire");var Gr=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function ae(e){return Gr.has(e)}n(ae,"isAutoRetryable");var $r=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function Ue(e){return ae(e)||$r.has(e)}n(Ue,"isRetryableCode");var Qr=500,se=8e3,qe=4;function Be(e,r=Math.random){let t=Math.max(0,e),o=Math.min(Qr*2**t,se);return Math.floor(r()*o)}n(Be,"backoffDelayMs");var Xr=Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:"This feature isn't available on your account right now.",paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",unknown:"Something went wrong. Please try again."});function le(e){return Xr[e]}n(le,"userFacingError");function He(e,r,t){Object.defineProperty(e,r,{value:t,enumerable:false,writable:false,configurable:false});}n(He,"defineHidden");var Zr=/^[a-z][a-z0-9_]{0,63}$/;function k(e,r){let t=H(r?.wireCode,r?.wireEnvelope),o={code:e,category:Ne(e),retryable:r?.retryable??Ue(e),displayMessage:le(e)};if(r?.httpStatus!==void 0&&(o.httpStatus=r.httpStatus),r?.requestId&&(o.requestId=r.requestId),typeof r?.reasonCode=="string"&&Zr.test(r.reasonCode)&&(o.reasonCode=r.reasonCode),t);return r?.wireMessage&&He(o,"wireMessage",r.wireMessage),r?.raw!==void 0&&r.raw!==null&&He(o,"raw",r.raw),Object.freeze(o)}n(k,"makeEverfurError");function ue(e,r){return Object.freeze(r===void 0?{ok:true,value:e}:{ok:true,value:e,warning:r})}n(ue,"ok");function T(e){return Object.freeze({ok:false,error:e})}n(T,"err");var W=class W extends Error{constructor(r,t){super(t),this.name="EverfurConfigError",this.kind=r,Object.setPrototypeOf(this,W.prototype);}};n(W,"EverfurConfigError");var M=W;function We(e){return Object.freeze({kind:"error",terminal:true,code:e.code,retryable:e.retryable,wireMessage:e.wireMessage,synthesized:e.synthesized,lastEventId:e.lastEventId,serverRequestId:e.serverRequestId??null})}n(We,"errorFrame");function rt(e){let r={};return e.mode==="personalized"?r.authorization=`Bearer ${e.token}`:r["x-everfur-partner-key"]=e.publishableKey,e.userRef&&(r["x-everfur-user-ref"]=e.userRef),e.sessionId&&(r["x-everfur-session-id"]=e.sessionId),r}n(rt,"authHeaders");function N(e,r){return {...e,headers:{...tt(e.headers),...rt(r)}}}n(N,"withAuthHeaders");function tt(e){if(!e)return {};let r={};for(let[t,o]of Object.entries(e)){let i=t.toLowerCase();i==="authorization"||i==="x-everfur-partner-key"||(r[t]=o);}return r}n(tt,"stripAuthHeaders");async function Ye(e,r){if(r.mode==="anonymous")return r.transport.request(N(e,{mode:"anonymous",publishableKey:r.publishableKey,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));let t;try{t=await r.identity.currentToken();}catch{return T(de())}let o=await r.transport.request(N(e,{mode:"personalized",token:t,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));if(o.ok||o.error.httpStatus!==401)return o;let i;try{i=await r.identity.currentToken({forceRefresh:!0});}catch{return T(de())}let a=await r.transport.request(N(e,{mode:"personalized",token:i,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));return !a.ok&&a.error.httpStatus===401?T(de(a.error.httpStatus)):a}n(Ye,"authedSend");function de(e){return k("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}n(de,"authRejectedError");function Ke(e){return k("internalError",{retryable:true,wireMessage:nt(e)})}n(Ke,"networkError");function nt(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}n(nt,"describeCause");var ot=3e4,it=se*2,at="idempotency-key",st=new Set(["POST","PUT","PATCH","DELETE"]),lt=Object.freeze({onEvent(){}}),ut=Object.freeze({setTimeout:n((e,r)=>setTimeout(e,r),"setTimeout"),clearTimeout:n(e=>clearTimeout(e),"clearTimeout"),now:n(()=>Date.now(),"now")});function dt(e){let r=e.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return r.length===0?null:`efs_${r}`.slice(0,128)}n(dt,"seededIdempotencyKey");function $e(e){let r=e.observer??lt,t=e.timers??ut,o=e.rng??Math.random,i=e.sleep??((f,p)=>Tt(f,t,p)),a=e.maxAttempts??qe,u=e.unaryTimeoutMs??ot,s=e.newIdempotencyKey??ft(),l=n(f=>{try{r.onEvent(f);}catch{}},"emit");async function d(f,p,y){let h=y?.maxAttempts,c=Math.max(1,h??a),O=y?.idempotent??st.has(p.method),x=y?.idempotencyKey===void 0?null:dt(y.idempotencyKey),_=O?x??s():null,S=ct(p,_),I=0;for(;;){let E=n(R=>Object.freeze({call:f,method:p.method,path:p.path,attempt:I,..._?{idempotencyKey:_}:{},...R}),"stamp");l(E({phase:"attempt"}));let A=_t(u,t),P=Rt(A.signal,p.signal),z;try{z=await Ye({...S,signal:P.signal},e.auth);}catch(R){z=T(Ke(R));}finally{P.dispose(),A.cancel();}if(z.ok)return l(E({phase:"settled",ok:true,reason:"ok"})),z;let F=z.error,m=yt(F,I,{maxAttempts:c,rng:o,now:t.now(),aborted:p.signal?.aborted===true,...h!==void 0?{perCallMaxAttempts:h}:{},...e.errorPolicy!==void 0?{policy:e.errorPolicy}:{}}),g={ok:false,code:F.code,reason:m.reason,...F.httpStatus!==void 0?{httpStatus:F.httpStatus}:{},...F.requestId!==void 0?{requestId:F.requestId}:{}};if(!m.retry)return l(E({phase:"settled",...g})),T(F);if(l(E({phase:"retry",...g,delayMs:m.delayMs})),await i(m.delayMs,p.signal),p.signal?.aborted===true)return l(E({phase:"settled",...g,reason:"aborted"})),T(F);I+=1;}}n(d,"send");async function b(f){return N(f,await ht(e.auth))}n(b,"authorize");async function*v(f,p,y){l(Object.freeze({call:f,phase:"stream.open",method:p.method,path:p.path,attempt:0}));try{yield*e.auth.transport.stream(p,y);}catch{yield We({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:null});}}return n(v,"stream"),Object.freeze({send:d,authorize:b,stream:v})}n($e,"createRequestFunnel");function ct(e,r){let t={};for(let[o,i]of Object.entries(e.headers??{}))o.toLowerCase()!==at&&(t[o]=i);return r!==null&&(t["Idempotency-Key"]=r),{...e,headers:t}}n(ct,"assembleHeaders");function ft(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}n(ft,"defaultIdempotencyKeyFactory");var pt=10;function yt(e,r,t){if(t.aborted)return {retry:false,reason:"aborted"};let o=mt(e);if(o==="quota")return {retry:false,reason:"daily-quota-exhausted"};if(o!=="burst"&&!ae(e.code))return {retry:false,reason:"terminal-code"};let i=o==="burst"?"burst-throttle":"retryable-code";if(n(()=>{if(t.policy===void 0)return false;try{return !t.policy.shouldRetry(e.code,r)}catch{return false}},"policyVetoedRetry")())return {retry:false,reason:"terminal-code"};let u=n(()=>{if(t.policy===void 0)return null;let d;try{d=t.policy.maxAttempts(e.code);}catch{return null}return typeof d!="number"||!Number.isFinite(d)?null:Math.max(1,Math.min(pt,Math.floor(d)))},"policyCeiling"),s=t.perCallMaxAttempts??u()??t.maxAttempts;if(r+1>=s)return {retry:false,reason:"attempts-exhausted"};let l=vt(e,t.now);return l!==null?l>it?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:l}:{retry:true,reason:i,delayMs:Be(r,t.rng)}}n(yt,"decideRetry");function mt(e){let r=e.code==="unknown"?Le(gt(e.raw)):e.code;return r==="quotaExceeded"?"quota":r==="rateLimited"||e.httpStatus===429?"burst":null}n(mt,"throttleKind");function vt(e,r){let t=bt(e.raw);if(t===null)return null;let o=t-r;return o>0?o:0}n(vt,"retryOverrideMs");function bt(e){for(let r of Qe(e)){let t=r.resets_at,o=Et(t);if(o!==null)return o}return null}n(bt,"findResetsAt");function Qe(e){if(!Ge(e))return [];let r=[e];for(let t of ["error","detail"]){let o=e[t];Ge(o)&&r.push(o);}return r}n(Qe,"candidateScopes");function Et(e){if(typeof e=="number"&&Number.isFinite(e))return e<1e11?Math.round(e*1e3):Math.round(e);if(typeof e=="string"&&e.trim().length>0){let r=Date.parse(e);return Number.isFinite(r)?r:null}return null}n(Et,"parseInstantMs");function gt(e){for(let r of Qe(e)){let t=r.code;if(typeof t=="string"&&t.length>0)return t}return null}n(gt,"rawWireCode");function Ge(e){return typeof e=="object"&&e!==null}n(Ge,"isRecord");async function ht(e){return e.mode==="anonymous"?{mode:"anonymous",publishableKey:e.publishableKey,userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}:{mode:"personalized",token:await e.identity.currentToken(),userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}}n(ht,"resolveDeviceAuth");function _t(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(_t,"boundedSignal");function Rt(e,r){let t=n(()=>{},"noop");if(!r)return {signal:e,dispose:t};let o=new AbortController;if(e.aborted||r.aborted)return o.abort(),{signal:o.signal,dispose:t};let i=n(()=>o.abort(),"onAbort");return e.addEventListener("abort",i,{once:true}),r.addEventListener("abort",i,{once:true}),{signal:o.signal,dispose:n(()=>{e.removeEventListener("abort",i),r.removeEventListener("abort",i);},"dispose")}}n(Rt,"mergeSignals");function Tt(e,r,t){return e<=0||t?.aborted===true?Promise.resolve():new Promise(o=>{let i=r.setTimeout(()=>{t?.removeEventListener("abort",a),o();},e),a=n(()=>{r.clearTimeout(i),o();},"onAbort");t?.addEventListener("abort",a,{once:true});})}n(Tt,"delayAbortable");var Y=Object.freeze(["visit","join","summary","messages"]);function K(e){return typeof e=="string"&&Y.includes(e)}n(K,"isVetVisitIntent");var Ct="/widget/v1/televet/handoffs",wt="/widget/v1/televet/availability",xt="/widget/v1/televet/chat-entry",St=/^[a-z0-9][a-z0-9_-]{0,39}$/,nr=/^[A-Za-z0-9_-]{22}$/,Xe="everfur_flow",Ze=32,Je=128,er=64;function G(e){let r=e.httpStatus;switch(e.code){case "sessionRequired":return "sessionRequired";case "authExpired":case "authRejected":return "authRejected";case "sdkUpdateRequired":return "sdkUpdateRequired";case "validationFailed":return "invalidRequest";case "rateLimited":case "quotaExceeded":return "rateLimited";}return r===void 0?e.code==="internalError"?"network":"unknown":r===429?"rateLimited":r===404?"unavailable":r===403?"accessDenied":r===401?"authRejected":r===400||r===422?"invalidRequest":r>=500?"serverError":"unknown"}n(G,"vetVisitErrorReasonOf");function rr(e){return T(k("validationFailed",{retryable:false,wireMessage:e}))}n(rr,"invalid");function ce(e){return T(k("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}n(ce,"unusable");function Ft(e,r){let t={};e!==void 0&&(t.pet_ref=e);let o=r?.returnTo;if(o!=null){if(typeof o!="string"||!St.test(o))return {ok:false,message:"returnTo must be a registered return destination key"};t.return_to=o;}let i=r?.entry;if(i!=null){if(i!=="chat"||e===void 0)return {ok:false,message:"entry 'chat' needs the pet the chat is about"};t.entry=i;}let a=r?.visitRef,u=r?.intent,s=a!=null;if(s){let l=typeof a=="string"?a.trim():"";if(l.length<1||[...l].length>er)return {ok:false,message:`visitRef must be 1..${er} characters`};t.visit_ref=l;}if(u!=null){if(!s)return {ok:false,message:"intent needs the visitRef it opens"};if(!K(u))return {ok:false,message:`intent must be one of ${Y.join(", ")}`};t.intent=u;}return {ok:true,body:t}}n(Ft,"handoffBody");function kt(e){if(typeof e!="object"||e===null)return null;let{visit_ref:r,intent:t}=e;return typeof r!="string"||r.length===0||!K(t)?null:Object.freeze({visitRef:r,intent:t})}n(kt,"parseVisitEcho");function or(e){let r=e.funnel??$e({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),t=e.telemetry,o=n(i=>(tr(t,"televet.visit.handoff_failed",{reason:G(i)}),T(i)),"failed");return {async createHandoff(i,a){let u;if(i!=null){let c=typeof i=="string"?[...i].length:0;if(c<1||c>Je)return o(k("validationFailed",{retryable:false,wireMessage:`pet_ref must be 1..${Je} characters`}));u=i;}let s=Ft(u,a);if(!s.ok){let c=rr(s.message);return c.ok?c:o(c.error)}let l=s.body,d=await r.send("televet.visit.handoff",{method:"POST",path:Ct,body:l},{idempotent:false,maxAttempts:1});if(!d.ok)return o(d.error);let b=Vt(d.value),v=l.return_to!==void 0,f=v?d.value?.flow_id:void 0;if(v&&(typeof f!="string"||!nr.test(f))){let c=ce("the handoff response carried no usable return flow id");return c.ok?c:o(c.error)}let p=l.visit_ref!==void 0,y=p?kt(d.value?.visit):null;if(p&&y===null){let c=ce("the handoff response did not confirm the visit it opens");return c.ok?c:o(c.error)}let h=b===null?null:Object.freeze({...b,...v?{flowId:f}:{},...y!==null?{visit:y}:{}});return h===null?o(k("internalError",{retryable:false,httpStatus:502,wireMessage:"the handoff response carried no usable visit url"})):(tr(t,"televet.visit.handoff_created",{pet_scoped:l.pet_ref!==void 0}),ue(h))},async checkAvailability(i){if(typeof i!="string"||i.length>Ze)return rr(`state must be at most ${Ze} characters`);let a=await r.send("televet.visit.availability",{method:"POST",path:wt,body:{state:i}},{idempotent:false,maxAttempts:1});if(!a.ok)return T(a.error);let u=a.value?.available;return typeof u!="boolean"?ce("the availability response carried no usable answer"):ue(Object.freeze({available:u}))},async chatEntryOpen(){try{let i=await r.send("televet.visit.chat_entry",{method:"GET",path:xt},{maxAttempts:1});return i.ok&&i.value?.open===!0}catch{return false}}}}n(or,"createVetVisitController");function Ot(e){if(typeof e!="string")return null;let r=e.indexOf("#"),t=r<0?e:e.slice(0,r),o=t.indexOf("?");if(o<0)return null;let i=t.slice(o+1).split("&").filter(a=>a.startsWith(`${Xe}=`)).map(a=>a.slice(Xe.length+1));return i.length!==1||!nr.test(i[0]??"")?null:Object.freeze({flowId:i[0]})}n(Ot,"parseVetVisitReturn");function Vt(e){if(typeof e!="object"||e===null)return null;let{url:r,expires_at:t}=e;return typeof r!="string"||typeof t!="string"||t.length===0||!zt(r)?null:Object.freeze({url:r,expiresAt:t})}n(Vt,"parseHandoff");var It=new Set(["localhost","127.0.0.1","[::1]"]),At=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/,Pt=/[\s\u0000-\u001f\u007f]/;function zt(e){if(Pt.test(e))return false;let r=At.exec(e);if(r===null)return false;let t=(r[1]??"").toLowerCase(),o=r[2]??"";if(o.length===0||o.includes("@"))return false;let i=o.replace(/:\d+$/,"").toLowerCase(),a=t==="https",u=t==="http"&&It.has(i);if(!a&&!u)return false;let s=e.indexOf("#");if(s<0)return false;let l=e.slice(s);return l.startsWith("#h=")&&l.length>3}n(zt,"isOpenableVisitUrl");function tr(e,r,t){if(e)try{e.track(r,t);}catch{}}n(tr,"safeTrack");var ir=Symbol.for("@everfur/sdk#EverfurContext@v1"),ar=globalThis,sr=ar[ir]??(ar[ir]=createContext(null));sr.displayName??="EverfurContext";function $(){let e=useContext(sr);if(e===null)throw new M("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}n($,"useEverfurContext");var Mt=Object.freeze({chat:Object.freeze(["chat.message.create"]),records:Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:Object.freeze(["records.clinic.create"]),video:Object.freeze(["video.gait.execute"]),photo:Object.freeze(["photo.checkup.execute"]),animations:Object.freeze(["animations.state.read"]),televet:Object.freeze(["televet.visit.create"])});function Nt(e){return Mt[e]}n(Nt,"requires");function lr(e,r,t){let o=Nt(e),i=new Map;for(let s of r)i.set(s.resource,s);if(t?.isPending===true&&o.some(s=>!i.has(s)))return fe({name:e,enabled:false,isPending:true,limits:{}});let a=Lt(o,i);return o.filter(s=>i.get(s)?.granted!==true).length===0?fe({name:e,enabled:true,isPending:false,limits:a}):fe({name:e,enabled:false,isPending:false,limits:a,disabled:Ut(o,i)})}n(lr,"decideCapability");function Lt(e,r){let t={};for(let o of e){let i=r.get(o)?.limits;if(i)for(let[a,u]of Object.entries(i)){let s=t[a];t[a]=s===void 0?u:Math.min(s,u);}}return t}n(Lt,"mergeLimits");function Ut(e,r){for(let t of e){let o=r.get(t)?.disabled;if(o)return Object.freeze({reason:o.reason,level:o.level,recoverable:o.recoverable})}return Object.freeze({reason:le("accessDenied"),level:"user_entitlement",recoverable:false})}n(Ut,"disabledFor");function fe(e){let r={name:e.name,enabled:e.enabled,isPending:e.isPending,limits:Object.freeze({...e.limits})};return e.disabled!==void 0&&(r.disabled=e.disabled),Object.freeze(r)}n(fe,"freezeDecision");function ur(e){let{runtime:r}=$(),t=r.entitlements,o=useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);return useMemo(()=>lr(e,o.decisions,{isPending:o.isPending}),[e,o])}n(ur,"useCapability");function dr(e){let r=globalThis.console;try{r?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}n(dr,"reportHostFailure");function Ht(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}n(Ht,"isThenable");function j(e,...r){if(typeof e=="function")try{let t=e(...r);return Ht(t)&&Promise.resolve(t).then(void 0,dr),t}catch(t){dr(t);return}}n(j,"callHost");var cr=false;function Q(e,r){return r!==void 0?(j(r,e),"onStartInApp"):q(e)==="presented"?"presenter":ke(e)?"experience":(cr||(cr=true,console.warn("[everfur] A vet visit had nowhere to open: mount <EverfurTelevetHost /> in your EverfurProvider, or pass prefer: 'redirect'.")),null)}n(Q,"openVetVisitInApp");var pe=Object.freeze({status:"idle",error:null,errorReason:null});function Yt(e,r,t){let{usState:o,chat:i,scope:a}=t,u=r&&(o!==null||i),s=`${o??""}|${i?"chat":""}`,[l,d]=useState(null);if(useEffect(()=>{if(!u)return;let v=true,f=e.current;return d(null),n(async()=>{try{if(i&&!(f.chatEntryOpen&&await f.chatEntryOpen()))return !1;if(o===null)return !0;if(!f.checkAvailability)return !1;let y=await f.checkAvailability(o);return y.ok&&y.value.available}catch{return false}},"ask")().then(y=>{v&&d({key:s,open:y});}),()=>{v=false;}},[u,s,o,i,a,e]),!u)return null;let b=l!==null&&l.key===s;return {open:b&&l.open,pending:!b}}n(Yt,"usePreflight");var Kt=Object.freeze({status:"opening",error:null,errorReason:null});function yr(e,r={}){let{runtime:t,userRef:o,scopeEpoch:i}=$(),a=ur("televet"),u=a.enabled&&o!==null,s=r.usState??null,l=r.entry==="chat",d=r.petRef??null,b=r.prefer==="redirect",v=useMemo(()=>{if(r.controller)return r.controller;let{services:m}=t.registry;return or({auth:m.authFor(o),telemetry:m.telemetry,...m.errorPolicy?{errorPolicy:m.errorPolicy}:{}})},[t,o,i,r.controller]),f=useRef(v);f.current=v;let p=useMemo(()=>({runtime:t,userRef:o,scopeEpoch:i}),[t,o,i]),y=Yt(f,u,{usState:s,chat:l,scope:p}),h=u&&(y===null||y.open)&&(!l||d!==null),c=r.returnTo??null,[O,x]=useState(pe),_=useRef(null),S=useRef({runtime:t,userRef:o,scopeEpoch:i});S.current={runtime:t,userRef:o,scopeEpoch:i};let I=useRef(v);I.current=v;let E=useRef(h);E.current=h;let A=useCallback((m,g)=>{if(_.current)return _.current;let R=n((C,D)=>(x({status:C==="cancelled"?"idle":"error",error:D,errorReason:C==="cancelled"?null:C}),Object.freeze({opened:false,reason:C,error:D})),"fail");if(!E.current)return Promise.resolve(R("unavailable",null));let V=e.prepare();if(!V.ok)return Promise.resolve(R(V.reason,null));let ee=S.current,_e=I.current;x(Kt);let re=(async()=>{let C,D={...c!==null?{returnTo:c}:{},...l?{entry:"chat"}:{},...g!==null?{visitRef:g.visitRef}:{},...g!==null&&g.intent!==null&&g.intent!==void 0?{intent:g.intent}:{}},Re=Object.keys(D).length===0?void 0:D,Te=m===void 0?d:m;try{C=await(Re===void 0?_e.createHandoff(Te):_e.createHandoff(Te,Re));}catch{return e.abandon(V.value),R("unknown",null)}let te=S.current;if(te.runtime!==ee.runtime||te.userRef!==ee.userRef||te.scopeEpoch!==ee.scopeEpoch)return e.abandon(V.value),R("cancelled",null);if(!C.ok)return e.abandon(V.value),R(G(C.error),C.error);let Ce=await e.finish(V.value,C.value);return Ce!==null?R(Ce,null):(x(pe),Object.freeze(C.value.flowId===void 0?{opened:true}:{opened:true,flowId:C.value.flowId}))})().finally(()=>{_.current===re&&(_.current=null);});return _.current=re,re},[e,d,c,l]),P=useCallback((m,g)=>{if(!E.current)return x({status:"error",error:null,errorReason:"unavailable"}),Promise.resolve(Object.freeze({opened:false,reason:"unavailable",error:null}));let R=m===void 0?d:m,V={...R!==null?{petRef:R}:{},...s!==null?{usState:s}:{},...g!==null?{visitRef:g.visitRef,intent:g.intent}:{}};return Q(V)===null?(x({status:"error",error:null,errorReason:"unavailable"}),Promise.resolve(Object.freeze({opened:false,reason:"unavailable",error:null}))):(x(pe),Promise.resolve(Object.freeze({opened:true})))},[d,s]),z=useCallback(m=>b?A(m,null):P(m,null),[b,A,P]),F=useCallback((m,g)=>b?A(void 0,{visitRef:m,intent:g??null}):P(void 0,{visitRef:m,intent:g??null}),[b,A,P]);return {available:h,isPending:a.isPending||(y?.pending??false),status:O.status,error:O.error,errorReason:O.errorReason,open:z,openVisit:F}}n(yr,"useVetVisitWith");function mr(e){try{e.closed||e.close();}catch{}}n(mr,"closeQuietly");var Gt=Object.freeze({prepare(){let e=null;try{e=typeof window>"u"?null:window.open("about:blank","_blank");}catch{e=null;}if(e===null)return {ok:false,reason:"popupBlocked"};try{e.opener=null;}catch{}return {ok:true,value:{tab:e}}},async finish({tab:e},r){if(e.closed)return "cancelled";try{return e.location.replace(r.url),null}catch{return mr(e),"popupBlocked"}},abandon({tab:e}){mr(e);}});function ye(e){return yr(Gt,e)}n(ye,"useVetVisit");function $t(e,r){if(e===void 0)return {};let t={};return e.backgroundColor!==void 0&&(t.backgroundColor=e.backgroundColor),e.borderColor!==void 0&&(t.borderColor=e.borderColor,t.borderWidth=r??1),e.borderRadius!==void 0&&(t.borderRadius=e.borderRadius),t}n($t,"slotBox");function vr(e){return e?.textColor===void 0?{}:{color:e.textColor}}n(vr,"slotText");function br(e,r){let t=$t(e,r),o={};return t.backgroundColor!==void 0&&(o.backgroundColor=t.backgroundColor),t.borderColor!==void 0&&(o.border=`${t.borderWidth??1}px solid ${t.borderColor}`),t.borderRadius!==void 0&&(o.borderRadius=t.borderRadius),o}n(br,"slotBoxCss");var Er=Object.freeze({visitButton:"Talk to a vet"});function be(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let r of Object.keys(e))be(e[r]);}return e}n(be,"deepFreeze");var Qt=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),hr={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},_r={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},gr={nano:8,small:9,micro:10,tiny:11,caption:12,bodyTight:13,body:14,subtitle:16,heading:18,verdict:24},Xt={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},Zt={regular:"400",medium:"500",bold:"700"},Jt={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},en=0,Z="System",J="monospace",rn=["content","heading","control","compact","badge"];function tn(e){let r={};for(let t of rn)r[t]=e;return r}n(tn,"authoredTierSizes");function Rr(){return {family:Z,mono:J,fontUrl:null,families:{regular:Z,medium:Z,bold:Z,mono:J,monoMedium:J,monoBold:J},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:gr,tierSizes:tn(gr),lineHeight:Xt,weight:Zt,letterSpacing:Jt,scale:1,maxScale:en,scaleCaps:Qt}}n(Rr,"baseType");var Tr={},me=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function ve(e){return `cubic-bezier(${e.join(", ")})`}n(ve,"cssCubicBezier");var Cr={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:ve(me.standard),emphasized:ve(me.emphasized),exit:ve(me.exit)},reducedMotion:false},nn={brand:"#10462E",brandSoft:"rgba(16,70,46,0.10)",brandSofter:"rgba(16,70,46,0.15)",brandBorder:"rgba(16,70,46,0.18)",borderHairlineGreen:"rgba(16,70,46,0.25)",brandBorderStrong:"rgba(16,70,46,0.55)",brandInk:"#10462E",linkInk:"#10462E",surface:"#FFFFFF",surfaceCream:"#FDFBF8",surfaceSubtle:"#EFE9E3",background:"#FFFFFF",borderRingCream:"#D8D2C8",chatGround:"#FFFFFF",composerFill:"#FDFBF8",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#111111",secondary:"#0E462E",muted:"#6E6660",placeholder:"rgba(61,61,61,0.75)",onBrand:"#FFFFFF",metaCool:"#3D3D3D",timestamp:"rgba(61,61,61,0.75)"},primary:"#10462E",onPrimary:"#FFFFFF",accent:"#10462E",onAccent:"#FFFFFF",accentEdge:"#07C168",success:"#07C168",danger:"#B91C1C",errorRed:"#FF1B00",warningStrong:"#A45610",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.12)",badgeBgCaution:"rgba(217,130,29,0.14)",badgeBgCritical:"rgba(185,28,28,0.12)",badgeBgNeutral:"rgba(110,102,96,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",skeleton:"#EFE9E3",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)"},wr=be({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:nn,space:hr,radius:_r,type:Rr(),motion:Cr,slots:Tr}),on={brand:"#6BD39A",brandSoft:"rgba(107,211,154,0.12)",brandSofter:"rgba(107,211,154,0.18)",brandBorder:"rgba(107,211,154,0.22)",borderHairlineGreen:"rgba(107,211,154,0.28)",brandBorderStrong:"rgba(107,211,154,0.55)",brandInk:"#6BD39A",linkInk:"#6BD39A",surface:"#1C1F23",surfaceCream:"#23272C",surfaceSubtle:"#23272C",background:"#15171A",borderRingCream:"#3A3F45",chatGround:"#1C1F23",composerFill:"#23272C",composerBorder:"rgba(107,211,154,0.75)",shadow:"#000000",text:{primary:"#F5F3F0",secondary:"#A9E4C4",muted:"#9A938C",placeholder:"rgba(255,255,255,0.55)",onBrand:"#0E1F17",metaCool:"#C9C9C9",timestamp:"rgba(245,243,240,0.7)"},primary:"#6BD39A",onPrimary:"#0E1F17",accent:"#6BD39A",onAccent:"#0E1F17",accentEdge:"#34D888",success:"#07C168",danger:"#F87171",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",skeleton:"#23272C",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)"};be({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:on,space:hr,radius:_r,type:Rr(),motion:Cr,slots:Tr});var xr=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),Sr=globalThis,Ee=Sr[xr]??(Sr[xr]=createContext(wr));Ee.displayName??="EverfurThemeContext";function ge(){return useContext(Ee)}n(ge,"useEverfurTheme");var Fr=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});var kr='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',ln="System";function un(e){let r=e.trim();return r.length===0||r===ln?kr:`${Or(r)}, ${kr}`}n(un,"cssFontFamily");function dn(e){let r=e.trim();return r.length===0||r==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${Or(r)}, ui-monospace, Menlo, Consolas, monospace`}n(dn,"cssMonoFamily");function Or(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}n(Or,"quote");function Vr(e,r){let t=e.type,o=t.families[r];return {fontFamily:r==="mono"||r==="monoMedium"||r==="monoBold"?dn(o):un(o),fontWeight:t.namedFaces[r]?t.weight.regular:t.weight[Fr[r]]}}n(Vr,"faceCss");var Ir=44,pn=.6;function yn(e){let{petRef:r,children:t,onOpened:o,onError:i,style:a,className:u,controller:s,returnTo:l,usState:d,entry:b,visitRef:v,intent:f,onStartInApp:p,prefer:y}=e,h=y==="redirect",c=ye({...l!==void 0?{returnTo:l}:{},...d!==void 0?{usState:d}:{},...b!==void 0?{entry:b}:{},...r!==void 0?{petRef:r}:{},...s!==void 0?{controller:s}:{},prefer:h?"redirect":"in-app"}),O=ge(),x=useMemo(()=>mn(O),[O]),_=useRef(false);if(!c.available)return jsxs(Fragment,{children:[null,jsx(B,{})]});let S=c.status==="opening";return jsxs(Fragment,{children:[jsx("button",{type:"button",onClick:n(()=>{if(!(S||_.current)){if(!h){let E={...r!==void 0?{petRef:r}:{},...d!==void 0?{usState:d}:{},...v!=null?{visitRef:v,intent:f??null}:{}};Q(E,p)===null&&j(i,"unavailable",null);return}_.current=true,(v==null?c.open():c.openVisit(v,f??null)).then(E=>{E.opened?j(o,E.flowId??null):E.reason!=="cancelled"&&j(i,E.reason,E.error);}).finally(()=>{_.current=false;});}},"onClick"),"aria-busy":S,"aria-disabled":S,className:u,style:{...x,...S?{opacity:pn,cursor:"progress"}:null,...a},children:t??Er.visitButton}),jsx(B,{})]})}n(yn,"VetVisitButton");function mn(e){let{color:r,space:t,radius:o,type:i,slots:a}=e;return {boxSizing:"border-box",minHeight:Ir,minWidth:Ir,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,border:0,cursor:"pointer",padding:`${t.sm}px ${t.xl}px`,borderRadius:o.pill,backgroundColor:r.primary,color:r.onPrimary,...Vr(e,"medium"),fontSize:i.size.body,...br(a.vetVisitButton),...vr(a.vetVisitButton)}}n(mn,"buttonStyle");export{B as EverfurTelevetHost,Y as VET_VISIT_INTENTS,yn as VetVisitButton,Mr as hasEverfurTelevetFlow,K as isVetVisitIntent,Ot as parseVetVisitReturn,Nr as presentEverfurTelevetFlow,Dr as registerEverfurTelevetFlow,ye as useVetVisit,G as vetVisitErrorReasonOf};
|