@everfur/sdk 0.1.0 → 0.3.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 +648 -1
- package/README.md +58 -23
- package/consent/package.json +8 -0
- package/dist/Chat-DPUD6dnc.d.cts +128 -0
- package/dist/Chat-DwAC2vhB.d.ts +128 -0
- package/dist/DepthViews-DNEM96Se.d.ts +16 -0
- package/dist/DepthViews-DP0R-DhB.d.cts +19 -0
- package/dist/DepthViews-D_3hl4xk.d.ts +19 -0
- package/dist/DepthViews-DbFhR4Du.d.cts +16 -0
- package/dist/ErrorPolicyPort-CNf4uQZP.d.cts +22 -0
- package/dist/ErrorPolicyPort-CwbfmxzJ.d.ts +22 -0
- package/dist/{EverfurResult-D92-uL82.d.cts → EverfurResult-DN9pL2Ab.d.cts} +11 -10
- package/dist/{EverfurResult-D92-uL82.d.ts → EverfurResult-DN9pL2Ab.d.ts} +11 -10
- package/dist/{PhotoController-BItt5M7u.d.cts → PhotoController-3l7MT9jA.d.cts} +1 -1
- package/dist/{PhotoController-D8zMTdcW.d.ts → PhotoController-vzY5bfY_.d.ts} +1 -1
- package/dist/animations/index.cjs +1 -1997
- package/dist/animations/index.d.cts +35 -35
- package/dist/animations/index.d.ts +35 -35
- package/dist/animations/index.js +1 -1972
- package/dist/attachments-5NeobOCd.d.ts +256 -0
- package/dist/attachments-Bw3iMQgu.d.ts +146 -0
- package/dist/attachments-CQgFrEQ7.d.cts +146 -0
- package/dist/attachments-D8T5re7e.d.cts +256 -0
- package/dist/casesRepository-ClLv6qMl.d.ts +188 -0
- package/dist/casesRepository-DHwtGRYY.d.cts +188 -0
- package/dist/chat/index.cjs +1 -1170
- package/dist/chat/index.d.cts +31 -53
- package/dist/chat/index.d.ts +31 -53
- package/dist/chat/index.js +1 -1167
- package/dist/client/index.cjs +9 -2315
- package/dist/client/index.d.cts +77 -15
- package/dist/client/index.d.ts +77 -15
- package/dist/client/index.js +9 -2215
- package/dist/{config-CiJ0PVBB.d.ts → config-CzTZGlfF.d.cts} +63 -25
- package/dist/{config-BSjBdxrZ.d.cts → config-DW60uRb9.d.ts} +63 -25
- package/dist/consent/index.cjs +1 -0
- package/dist/consent/index.d.cts +33 -0
- package/dist/consent/index.d.ts +33 -0
- package/dist/consent/index.js +1 -0
- package/dist/context-DXhqHlPU.d.ts +159 -0
- package/dist/context-XvTzq1tE.d.cts +159 -0
- package/dist/copy-Mjoo91aS.d.ts +198 -0
- package/dist/copy-bKDNigLb.d.cts +198 -0
- package/dist/core/index.cjs +13 -3175
- package/dist/core/index.d.cts +58 -12
- package/dist/core/index.d.ts +58 -12
- package/dist/core/index.js +13 -3163
- package/dist/depth-CErXCU8J.d.cts +502 -0
- package/dist/depth-DjDcJ6kH.d.ts +502 -0
- package/dist/entitlementRepository-DKdXFgTo.d.cts +698 -0
- package/dist/entitlementRepository-DSbzuyAW.d.ts +698 -0
- package/dist/{identity-DK9zORrG.d.ts → identity-BMx2SUOM.d.ts} +19 -6
- package/dist/{identity-Brl-lDd6.d.cts → identity-DI4eVx9S.d.cts} +19 -6
- package/dist/{ids-CJ1S6adf.d.cts → ids-B2GAAifq.d.cts} +1 -1
- package/dist/{ids-CJ1S6adf.d.ts → ids-B2GAAifq.d.ts} +1 -1
- package/dist/index.cjs +12 -4488
- package/dist/index.d.cts +29 -121
- package/dist/index.d.ts +29 -121
- package/dist/index.js +12 -4464
- package/dist/models-B-Uh2LTf.d.ts +214 -0
- package/dist/models-D2EUxPZY.d.cts +214 -0
- package/dist/notifications/index.cjs +2 -0
- package/dist/notifications/index.d.cts +17 -0
- package/dist/notifications/index.d.ts +17 -0
- package/dist/notifications/index.js +2 -0
- package/dist/pets-CtQdRpWo.d.ts +92 -0
- package/dist/pets-aB8q0JyX.d.cts +92 -0
- package/dist/photo/index.cjs +1 -2189
- package/dist/photo/index.d.cts +6 -6
- package/dist/photo/index.d.ts +6 -6
- package/dist/photo/index.js +1 -2186
- package/dist/ports-BN6RHF9W.d.cts +48 -0
- package/dist/ports-BN6RHF9W.d.ts +48 -0
- package/dist/ports-DEBzEhbp.d.cts +386 -0
- package/dist/ports-DMolTRzU.d.ts +386 -0
- package/dist/profile-CSs1wlXT.d.cts +93 -0
- package/dist/profile-CSs1wlXT.d.ts +93 -0
- package/dist/records/depth/index.cjs +2 -0
- package/dist/records/depth/index.d.cts +13 -0
- package/dist/records/depth/index.d.ts +13 -0
- package/dist/records/depth/index.js +2 -0
- package/dist/records/index.cjs +3 -2839
- package/dist/records/index.d.cts +137 -203
- package/dist/records/index.d.ts +137 -203
- package/dist/records/index.js +3 -2833
- package/dist/requestFunnel-CjW7uDuA.d.ts +87 -0
- package/dist/requestFunnel-L-BQfi0z.d.cts +87 -0
- package/dist/{resolve-Dq_4_agU.d.ts → resolve-D4Ywz5OS.d.cts} +10 -4
- package/dist/{resolve-Dq_4_agU.d.cts → resolve-D4Ywz5OS.d.ts} +10 -4
- package/dist/{runtime-BgQnA594.d.cts → runtime-B8s-_hv8.d.cts} +134 -59
- package/dist/{runtime-CBA-LvdM.d.ts → runtime-BR9ysG0J.d.ts} +134 -59
- package/dist/server/events/index.cjs +2 -0
- package/dist/server/events/index.d.cts +550 -0
- package/dist/server/events/index.d.ts +550 -0
- package/dist/server/events/index.js +2 -0
- package/dist/server/index.cjs +2 -533
- package/dist/server/index.d.cts +73 -18
- package/dist/server/index.d.ts +73 -18
- package/dist/server/index.js +2 -530
- package/dist/species-BXAIMh7I.d.cts +9 -0
- package/dist/species-BXAIMh7I.d.ts +9 -0
- package/dist/televet/index.cjs +1 -0
- package/dist/televet/index.d.cts +60 -0
- package/dist/televet/index.d.ts +60 -0
- package/dist/televet/index.js +1 -0
- package/dist/testing/index.cjs +5 -823
- package/dist/testing/index.d.cts +17 -3
- package/dist/testing/index.d.ts +17 -3
- package/dist/testing/index.js +5 -820
- package/dist/testing/rn/index.cjs +1 -449
- package/dist/testing/rn/index.d.cts +17 -29
- package/dist/testing/rn/index.d.ts +17 -29
- package/dist/testing/rn/index.js +1 -444
- package/dist/testing/web/index.cjs +1 -0
- package/dist/testing/web/index.d.cts +131 -0
- package/dist/testing/web/index.d.ts +131 -0
- package/dist/testing/web/index.js +1 -0
- package/dist/timelineRows-CaohZzXS.d.cts +19 -0
- package/dist/timelineRows-DZed6dAM.d.ts +19 -0
- package/dist/typeStyle-0TydiZ1w.d.cts +19 -0
- package/dist/typeStyle-CWMsoe6b.d.ts +19 -0
- package/dist/uploadTransport-D0M0T4hN.d.ts +38 -0
- package/dist/uploadTransport-DKJHs3Yj.d.cts +38 -0
- package/dist/useRecordsDepth-BHBzJ76R.d.cts +237 -0
- package/dist/useRecordsDepth-BU-OhzH6.d.ts +237 -0
- package/dist/useVetVisit-Bc84hWUU.d.cts +187 -0
- package/dist/useVetVisit-CjmMa896.d.ts +187 -0
- package/dist/video/index.cjs +1 -1941
- package/dist/video/index.d.cts +4 -4
- package/dist/video/index.d.ts +4 -4
- package/dist/video/index.js +1 -1938
- package/dist/view-C3qPIXGX.d.cts +310 -0
- package/dist/view-DtSPYpKa.d.ts +310 -0
- package/dist/visitIntent-D7_yVp1I.d.cts +8 -0
- package/dist/visitIntent-D7_yVp1I.d.ts +8 -0
- package/dist/web/consent/index.cjs +1 -0
- package/dist/web/consent/index.d.cts +34 -0
- package/dist/web/consent/index.d.ts +34 -0
- package/dist/web/consent/index.js +1 -0
- package/dist/web/index.cjs +14 -0
- package/dist/web/index.d.cts +217 -0
- package/dist/web/index.d.ts +217 -0
- package/dist/web/index.js +14 -0
- package/dist/web/notifications/index.cjs +2 -0
- package/dist/web/notifications/index.d.cts +213 -0
- package/dist/web/notifications/index.d.ts +213 -0
- package/dist/web/notifications/index.js +2 -0
- package/dist/web/records/depth/index.cjs +2 -0
- package/dist/web/records/depth/index.d.cts +12 -0
- package/dist/web/records/depth/index.d.ts +12 -0
- package/dist/web/records/depth/index.js +2 -0
- package/dist/web/records/index.cjs +4 -0
- package/dist/web/records/index.d.cts +194 -0
- package/dist/web/records/index.d.ts +194 -0
- package/dist/web/records/index.js +4 -0
- package/dist/web/televet/index.cjs +1 -0
- package/dist/web/televet/index.d.cts +50 -0
- package/dist/web/televet/index.d.ts +50 -0
- package/dist/web/televet/index.js +1 -0
- package/notifications/package.json +8 -0
- package/package.json +197 -9
- package/records/depth/package.json +8 -0
- package/server/events/device-blocked.cjs +15 -0
- package/server/events/package.json +9 -0
- package/televet/package.json +8 -0
- package/testing/web/native-blocked.cjs +12 -0
- package/testing/web/package.json +8 -0
- package/web/consent/native-blocked.cjs +12 -0
- package/web/consent/package.json +8 -0
- package/web/native-blocked.cjs +12 -0
- package/web/notifications/native-blocked.cjs +12 -0
- package/web/notifications/package.json +8 -0
- package/web/package.json +8 -0
- package/web/records/depth/native-blocked.cjs +12 -0
- package/web/records/depth/package.json +8 -0
- package/web/records/native-blocked.cjs +12 -0
- package/web/records/package.json +8 -0
- package/web/televet/native-blocked.cjs +12 -0
- package/web/televet/package.json +8 -0
- package/dist/ChatController-CKdBvPj2.d.ts +0 -146
- package/dist/ChatController-CpUMvvZf.d.cts +0 -146
- package/dist/FilePort-BabWrv7I.d.cts +0 -22
- package/dist/FilePort-BabWrv7I.d.ts +0 -22
- package/dist/petsRepository-BEGb97M9.d.cts +0 -326
- package/dist/petsRepository-Bu18r2kK.d.ts +0 -326
- package/dist/requestFunnel-DuUH-kAe.d.cts +0 -28
- package/dist/requestFunnel-dio5OmR9.d.ts +0 -28
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {createContext,useMemo,useEffect,useContext,useState,useRef,useCallback}from'react';import {AppState}from'react-native';var Ke=Object.defineProperty;var n=(e,r)=>Ke(e,"name",{value:r,configurable:true});function T(e,r){return Object.freeze(r===void 0?{ok:true,value:e}:{ok:true,value:e,warning:r})}n(T,"ok");function u(e){return Object.freeze({ok:false,error:e})}n(u,"err");var A=class A extends Error{constructor(r,t){super(t),this.name="EverfurConfigError",this.kind=r,Object.setPrototypeOf(this,A.prototype);}};n(A,"EverfurConfigError");var x=A;var q=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(q.map(e=>e.wireCode));var He=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"}),ie=Object.freeze(q.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:He[e.wireCode]}))),We=new Map(ie.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),Ge=Object.freeze(["http_envelope",...[...new Set(ie.map(e=>e.envelope))].filter(e=>e!=="http_envelope").sort()]);function D(e,r){if(typeof e!="string")return;let t=e.trim().toUpperCase();if(t.length!==0)for(let o of [r??"http_envelope",...Ge]){let i=We.get(o+t);if(i)return i}}n(D,"contractErrorFor");function $e(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}n($e,"contractDocUrl");function ae(e){return null}n(ae,"publishedDocUrl");var Qe=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 se(e){return Qe[e]}n(se,"categoryFor");function le(e){let r=D(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 Xe=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function V(e){return Xe.has(e)}n(V,"isAutoRetryable");var Je=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function ue(e){return V(e)||Je.has(e)}n(ue,"isRetryableCode");var Ze=500,B=8e3,de=4;function ce(e,r=Math.random){let t=Math.max(0,e),o=Math.min(Ze*2**t,B);return Math.floor(r()*o)}n(ce,"backoffDelayMs");var er=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 rr(e){return er[e]}n(rr,"userFacingError");function fe(e,r,t){Object.defineProperty(e,r,{value:t,enumerable:false,writable:false,configurable:false});}n(fe,"defineHidden");var tr=/^[a-z][a-z0-9_]{0,63}$/;function _(e,r){let t=D(r?.wireCode,r?.wireEnvelope),o={code:e,category:se(e),retryable:r?.retryable??ue(e),displayMessage:rr(e)};if(r?.httpStatus!==void 0&&(o.httpStatus=r.httpStatus),r?.requestId&&(o.requestId=r.requestId),typeof r?.reasonCode=="string"&&tr.test(r.reasonCode)&&(o.reasonCode=r.reasonCode),t);return r?.wireMessage&&fe(o,"wireMessage",r.wireMessage),r?.raw!==void 0&&r.raw!==null&&fe(o,"raw",r.raw),Object.freeze(o)}n(_,"makeEverfurError");function pe(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(pe,"errorFrame");function ir(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(ir,"authHeaders");function F(e,r){return {...e,headers:{...ar(e.headers),...ir(r)}}}n(F,"withAuthHeaders");function ar(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(ar,"stripAuthHeaders");async function ve(e,r){if(r.mode==="anonymous")return r.transport.request(F(e,{mode:"anonymous",publishableKey:r.publishableKey,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));let t;try{t=await r.identity.currentToken();}catch{return u(Y())}let o=await r.transport.request(F(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 u(Y())}let a=await r.transport.request(F(e,{mode:"personalized",token:i,userRef:r.userRef,...r.sessionId?{sessionId:r.sessionId}:{}}));return !a.ok&&a.error.httpStatus===401?u(Y(a.error.httpStatus)):a}n(ve,"authedSend");function Y(e){return _("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}n(Y,"authRejectedError");function ye(e){return _("internalError",{retryable:true,wireMessage:sr(e)})}n(ye,"networkError");function sr(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}n(sr,"describeCause");var lr=3e4,ur=B*2,dr="idempotency-key",cr=new Set(["POST","PUT","PATCH","DELETE"]),fr=Object.freeze({onEvent(){}}),pr=Object.freeze({setTimeout:n((e,r)=>setTimeout(e,r),"setTimeout"),clearTimeout:n(e=>clearTimeout(e),"clearTimeout"),now:n(()=>Date.now(),"now")});function j(e){let r=e.observer??fr,t=e.timers??pr,o=e.rng??Math.random,i=e.sleep??((v,c)=>Sr(v,t,c)),a=e.maxAttempts??de,s=e.unaryTimeoutMs??lr,l=e.newIdempotencyKey??yr(),d=n(v=>{try{r.onEvent(v);}catch{}},"emit");async function h(v,c,C){let S=C?.maxAttempts,P=Math.max(1,S??a),f=C?.idempotent??cr.has(c.method)?l():null,p=vr(c,f),y=0;for(;;){let E=n(L=>Object.freeze({call:v,method:c.method,path:c.path,attempt:y,...f?{idempotencyKey:f}:{},...L}),"stamp");d(E({phase:"attempt"}));let te=Cr(s,t),ne=Tr(te.signal,c.signal),k;try{k=await ve({...p,signal:ne.signal},e.auth);}catch(L){k=u(ye(L));}finally{ne.dispose(),te.cancel();}if(k.ok)return d(E({phase:"settled",ok:true,reason:"ok"})),k;let R=k.error,N=Er(R,y,{maxAttempts:P,rng:o,now:t.now(),aborted:c.signal?.aborted===true,...S!==void 0?{perCallMaxAttempts:S}:{},...e.errorPolicy!==void 0?{policy:e.errorPolicy}:{}}),U={ok:false,code:R.code,reason:N.reason,...R.httpStatus!==void 0?{httpStatus:R.httpStatus}:{},...R.requestId!==void 0?{requestId:R.requestId}:{}};if(!N.retry)return d(E({phase:"settled",...U})),u(R);if(d(E({phase:"retry",...U,delayMs:N.delayMs})),await i(N.delayMs,c.signal),c.signal?.aborted===true)return d(E({phase:"settled",...U,reason:"aborted"})),u(R);y+=1;}}n(h,"send");async function w(v){return F(v,await wr(e.auth))}n(w,"authorize");async function*g(v,c,C){d(Object.freeze({call:v,phase:"stream.open",method:c.method,path:c.path,attempt:0}));try{yield*e.auth.transport.stream(c,C);}catch{yield pe({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:null});}}return n(g,"stream"),Object.freeze({send:h,authorize:w,stream:g})}n(j,"createRequestFunnel");function vr(e,r){let t={};for(let[o,i]of Object.entries(e.headers??{}))o.toLowerCase()!==dr&&(t[o]=i);return r!==null&&(t["Idempotency-Key"]=r),{...e,headers:t}}n(vr,"assembleHeaders");function yr(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}n(yr,"defaultIdempotencyKeyFactory");var mr=10;function Er(e,r,t){if(t.aborted)return {retry:false,reason:"aborted"};let o=_r(e);if(o==="quota")return {retry:false,reason:"daily-quota-exhausted"};if(o!=="burst"&&!V(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 s=n(()=>{if(t.policy===void 0)return null;let h;try{h=t.policy.maxAttempts(e.code);}catch{return null}return typeof h!="number"||!Number.isFinite(h)?null:Math.max(1,Math.min(mr,Math.floor(h)))},"policyCeiling"),l=t.perCallMaxAttempts??s()??t.maxAttempts;if(r+1>=l)return {retry:false,reason:"attempts-exhausted"};let d=gr(e,t.now);return d!==null?d>ur?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:d}:{retry:true,reason:i,delayMs:ce(r,t.rng)}}n(Er,"decideRetry");function _r(e){let r=e.code==="unknown"?le(Rr(e.raw)):e.code;return r==="quotaExceeded"?"quota":r==="rateLimited"||e.httpStatus===429?"burst":null}n(_r,"throttleKind");function gr(e,r){let t=hr(e.raw);if(t===null)return null;let o=t-r;return o>0?o:0}n(gr,"retryOverrideMs");function hr(e){for(let r of Ee(e)){let t=r.resets_at,o=br(t);if(o!==null)return o}return null}n(hr,"findResetsAt");function Ee(e){if(!me(e))return [];let r=[e];for(let t of ["error","detail"]){let o=e[t];me(o)&&r.push(o);}return r}n(Ee,"candidateScopes");function br(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(br,"parseInstantMs");function Rr(e){for(let r of Ee(e)){let t=r.code;if(typeof t=="string"&&t.length>0)return t}return null}n(Rr,"rawWireCode");function me(e){return typeof e=="object"&&e!==null}n(me,"isRecord");async function wr(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(wr,"resolveDeviceAuth");function Cr(e,r){let t=new AbortController,o=r.setTimeout(()=>t.abort(),e);return {signal:t.signal,cancel:n(()=>r.clearTimeout(o),"cancel")}}n(Cr,"boundedSignal");function Tr(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(Tr,"mergeSignals");function Sr(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(Sr,"delayAbortable");function Ir(e){let r=e.raw;if(typeof r!="object"||r===null)return null;let t=r.code;return typeof t=="string"&&t.length>0?t:null}n(Ir,"wireCodeOf");function _e(e,r){let t=Ir(e);if(t===null)return e;let o=r[t];return o===void 0?e:_(o.code,{retryable:o.retryable,...e.httpStatus!==void 0?{httpStatus:e.httpStatus}:{},...e.requestId!==void 0?{requestId:e.requestId}:{},wireCode:t,reasonCode:t,...e.wireMessage!==void 0?{wireMessage:e.wireMessage}:{},raw:e.raw})}n(_e,"foldWireReason");var we=Object.freeze({provider_unsupported:"Everfur does not send through this push provider yet. Register an Expo push token (provider expo) or an FCM registration token (provider fcm); APNs direct is not available in this version.",token_invalid:"The token is not a push token of the given provider. Expo tokens look like ExponentPushToken[...]; FCM registration tokens are long opaque strings. Pass the token exactly as your notification library printed it.",device_cipher_unavailable:"Everfur could not seal the token at rest, so nothing was stored. Retry the registration later; the SDK retries it on the next launch and login.",credentials_missing:"Everfur holds no push credential for this provider on your tenant, so deliveries to it are skipped. Expo needs nothing unless you enabled push security (then your Expo access token). A bare app using FCM supplies its Firebase service-account JSON to Everfur; push credentials are set by Everfur on your tenant, never through the SDK."}),Or=new Set(["provider_unsupported","token_invalid","device_cipher_unavailable","credentials_missing"]);function kr(e){let r=e.reasonCode;return r!==void 0&&Or.has(r)?we[r]:null}n(kr,"explainNotificationsReason");var Ce=new Set(["expo","fcm","apns"]),Te=new Set(["ios","android"]),ge=4096,he=128,be=64,Se=/[- ]/;function b(e,r){return _("validationFailed",{retryable:false,wireMessage:e,...r?{reasonCode:r}:{}})}n(b,"invalid");function xr(e){if(typeof e!="object"||e===null)return b("registerDevice needs an input object");let{token:r,provider:t,platform:o,installationId:i}=e;return typeof t!="string"||!Ce.has(t)?b("provider must be expo, fcm or apns"):typeof o!="string"||!Te.has(o)?b("platform must be ios or android"):typeof r!="string"||r.trim().length===0||r.length>ge||Se.test(r)?b(`token must be a push token of 1..${ge} characters with no whitespace`,"token_invalid"):i!==void 0&&(typeof i!="string"||i.length===0||i.length>he)?b(`installationId must be 1..${he} characters`):null}n(xr,"validateRegister");function Fr(e){return typeof e!="string"||e.length===0||e.length>be?b(`deviceId must be 1..${be} characters`):Se.test(e)||e.includes("/")||e==="."||e===".."?b("deviceId is not a device id"):null}n(Fr,"validateDeviceId");function Pr(e){if(typeof e!="object"||e===null)return b("setPreferences needs an input object");let{pushEnabled:r,emailEnabled:t}=e;return typeof r!="boolean"||typeof t!="boolean"?b("pushEnabled and emailEnabled must both be booleans: the route replaces both switches"):null}n(Pr,"validatePreferences");function I(e){return typeof e=="string"&&e.length>0?e:null}n(I,"str");function Nr(e){if(typeof e!="object"||e===null)return null;let r=e,t=I(r.device_id),o=I(r.provider),i=I(r.platform),a=I(r.registered_at),s=I(r.last_seen_at);if(t===null||o===null||i===null||a===null||s===null||!Ce.has(o)||!Te.has(i))return null;let l=r.installation_id;return Object.freeze({deviceId:t,provider:o,platform:i,installationId:typeof l=="string"&&l.length>0?l:null,registeredAt:a,lastSeenAt:s})}n(Nr,"parseDevice");function Ar(e){if(typeof e!="object"||e===null)return null;let r=e,t=I(r.updated_at);return typeof r.push_enabled!="boolean"||typeof r.email_enabled!="boolean"||t===null?null:Object.freeze({pushEnabled:r.push_enabled,emailEnabled:r.email_enabled,updatedAt:t})}n(Ar,"parsePreferences");function Re(e){return _("internalError",{retryable:false,wireMessage:`${e}: the response was not the documented shape`})}n(Re,"malformed");var Dr=Object.freeze({provider_unsupported:{code:"validationFailed",retryable:false},token_invalid:{code:"validationFailed",retryable:false},device_cipher_unavailable:{code:"serviceUnavailable",retryable:true}});function K(e){return _e(e,Dr)}n(K,"refine");function H(e){return _("validationFailed",{retryable:false,wireMessage:`the Everfur runtime is disposed; ${e} was called after unmount`})}n(H,"disposed");function W(e){let r=n(()=>{let{services:t}=e.registry;return G({auth:t.authFor(null),...t.errorPolicy?{errorPolicy:t.errorPolicy}:{}})},"over");return {registerDevice:n((t,o)=>e.isDisposed?Promise.resolve(u(H("registerDevice"))):r().registerDevice(t,o),"registerDevice"),unregisterDevice:n((t,o)=>e.isDisposed?Promise.resolve(u(H("unregisterDevice"))):r().unregisterDevice(t,o),"unregisterDevice"),setPreferences:n((t,o)=>e.isDisposed?Promise.resolve(u(H("setPreferences"))):r().setPreferences(t,o),"setPreferences")}}n(W,"createNotificationsClient");function G(e){let r=e.funnel??j({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),t=n((o,i)=>i?{...o,signal:i}:o,"withSignal");return {async registerDevice(o,i){let a=xr(o);if(a!==null)return u(a);let s={token:o.token,provider:o.provider,platform:o.platform};o.installationId!==void 0&&(s.installation_id=o.installationId);let l=await r.send("notifications.registerDevice",t({method:"POST",path:"/widget/v1/me/devices",body:s},i?.signal));if(!l.ok)return u(K(l.error));let d=Nr(l.value);return d===null?u(Re("registerDevice")):T(d)},async unregisterDevice(o,i){let a=Fr(o);if(a!==null)return u(a);let s=await r.send("notifications.unregisterDevice",t({method:"DELETE",path:`/widget/v1/me/devices/${encodeURIComponent(o)}`},i?.signal));return s.ok?T(void 0):u(K(s.error))},async setPreferences(o,i){let a=Pr(o);if(a!==null)return u(a);let s=await r.send("notifications.setPreferences",t({method:"PUT",path:"/widget/v1/me/notification-preferences",body:{push_enabled:o.pushEnabled,email_enabled:o.emailEnabled}},i?.signal));if(!s.ok)return u(K(s.error));let l=Ar(s.value);return l===null?u(Re("setPreferences")):T(l)}}}n(G,"createNotificationsClientOver");var z="everfur.notifications.device";var Ie=Symbol.for("@everfur/sdk#EverfurContext@v1"),Oe=globalThis,ke=Oe[Ie]??(Oe[Ie]=createContext(null));ke.displayName??="EverfurContext";function $(){let e=useContext(ke);if(e===null)throw new x("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}n($,"useEverfurContext");var De=1;async function X(e){try{let r=await e.getItem(z);if(r===null)return null;let t=JSON.parse(r);if(typeof t!="object"||t===null)return null;let{v:o,userRef:i,deviceId:a}=t;return o!==De||typeof i!="string"||typeof a!="string"||a.length===0?null:{userRef:i,deviceId:a}}catch{return null}}n(X,"readStored");async function Ur(e,r){try{await e.setItem(z,JSON.stringify({v:De,...r}));}catch{}}n(Ur,"writeStored");async function Fe(e){try{await e.removeItem(z);}catch{}}n(Fe,"clearStored");var Pe=Object.freeze({status:"signed_out",device:null,error:null}),Ne=Object.freeze({status:"no_token",device:null,error:null});function J(){return _("sessionRequired",{retryable:false,wireMessage:"notifications need a signed-in user on the provider"})}n(J,"noUser");function je(){let{runtime:e}=$();return useMemo(()=>W(e),[e])}n(je,"useEverfurNotificationsClient");function ze(e){let{runtime:r,userRef:t}=$(),{token:o,provider:i,platform:a,installationId:s}=e,l=r.registry.services.kv,d=je(),[h,w]=useState(t===null?Pe:Ne),g=useRef(null),v=useRef(0);useEffect(()=>{if(v.current+=1,g.current=null,w(t===null?Pe:Ne),t===null)return;let m=true;return X(l).then(f=>{if(!m||f===null||f.userRef!==t)return;let p=g.current;if(p===null){g.current=f;return}p.deviceId!==f.deviceId&&d.unregisterDevice(f.deviceId);}),()=>{m=false;}},[d,l,t]);let c=useCallback(async(m,f)=>{let p=v.current+=1;w({status:"registering",device:null,error:null});let y=await d.registerDevice({token:f,provider:i,platform:a,...s===void 0?{}:{installationId:s}});if(p!==v.current)return y;if(!y.ok)return w({status:y.error.httpStatus===404?"unavailable":"failed",device:null,error:y.error}),y;let E=g.current;return g.current={userRef:m,deviceId:y.value.deviceId},w({status:"registered",device:y.value,error:null}),await Ur(l,g.current),E!==null&&E.userRef===m&&E.deviceId!==y.value.deviceId&&d.unregisterDevice(E.deviceId),y},[d,l,i,a,s]);useEffect(()=>{t===null||o===null||c(t,o);},[c,t,o]),useEffect(()=>r.onBeforeLogout(async({userRef:m,auth:f})=>{let p=g.current??await X(l);if(p===null||p.userRef!==m)return;g.current=null;let y=j({auth:f,maxAttempts:1,unaryTimeoutMs:3e3,...r.registry.services.errorPolicy?{errorPolicy:r.registry.services.errorPolicy}:{}}),E=await G({auth:f,funnel:y}).unregisterDevice(p.deviceId);(E.ok||E.error.httpStatus===404)&&await Fe(l);}),[r,l]);let C=useCallback(async()=>t===null?u(J()):o===null?u(_("validationFailed",{retryable:false,reasonCode:"token_invalid",wireMessage:"no push token was given"})):c(t,o),[c,t,o]),S=useCallback(async()=>{if(t===null)return u(J());let m=g.current??await X(l);if(m===null||m.userRef!==t)return T(void 0);let f=v.current+=1,p=await d.unregisterDevice(m.deviceId);return p.ok||p.error.httpStatus===404?(g.current=null,await Fe(l),f===v.current&&w({status:"unregistered",device:null,error:null}),p.ok?p:T(void 0)):p},[d,l,t]),P=useCallback(m=>t===null?Promise.resolve(u(J())):d.setPreferences(m),[d,t]);return useMemo(()=>({status:h.status,device:h.device,error:h.error,register:C,unregister:S,setPreferences:P}),[h,C,S,P])}n(ze,"useEverfurNotifications");function Vr(e){let r=ze(e),{status:t,error:o,register:i}=r,a=t==="failed"&&o!==null&&o.retryable;return useEffect(()=>{if(!a)return;let s=AppState.addEventListener("change",l=>{l==="active"&&i();});return ()=>{s.remove();}},[a,i]),r}n(Vr,"useEverfurNotifications");var Me=Object.freeze({"visit.booked":"visit","visit.reminder":"join","visit.rescheduled":"visit","visit.followup_sent":"messages","visit.message_received":"messages","visit.completed":"summary","visit.ended":"visit","visit.cancelled":null,"visit.no_show":null});function Ue(e){return Object.prototype.hasOwnProperty.call(Me,e)?Me[e]:"visit"}n(Ue,"vetVisitIntentForEvent");var qe=1,Ve=Object.freeze(["record_request","pet","visit","case"]),Be=Object.freeze(["record_request.updated","record.ready","pet.vaccination.due","visit.booked","visit.cancelled","visit.completed","visit.no_show","visit.rescheduled","visit.reminder","visit.followup_sent","visit.message_received","visit.ended","chat.follow_up_due","chat.reminder_due","record.activation"]),ee=["v","event_id","event_type","target"],Br=new Set(["kind","conversation_id","request_id","visit_ref","case_ref","pet_ref"]),Yr=new Set(Be),Kr=new Set(Ve),Hr=128,Wr=4096,Gr=/^evt_[A-Za-z0-9]{1,64}$/,$r=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Qr=/[-]/;function O(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}n(O,"isRecord");function Ye(e){return Object.keys(e)}n(Ye,"keysOf");function Xr(e){if(O(e))return e;if(typeof e!="string"||e.length===0||e.length>Wr)return null;let r=JSON.parse(e);return O(r)?r:null}n(Xr,"decodeBlock");function Jr(e,r){let t=e;for(let o of r){if(!O(t))return;t=t[o];}return t}n(Jr,"at");var Zr=[[],["data"],["request","content","data"],["notification","request","content","data"]];function et(e){if(!O(e))return null;for(let r of Zr){let t=Jr(e,r);if(O(t)&&"everfur"in t)return t.everfur}return ee.every(r=>r in e)?e:null}n(et,"locateBlock");function re(e){return typeof e!="string"||e.length===0||e.length>Hr||Qr.test(e)||e.includes("://")||e.toLowerCase().startsWith("everfur")?null:e}n(re,"opaqueString");function Le(e,r){if(!(r in e))return {ok:true,value:null};let t=re(e[r]);return t===null?{ok:false}:{ok:true,value:t}}n(Le,"optional");function Z(e,r){return r in e?re(e[r]):null}n(Z,"required");function rt(e,r){if(!O(e))return null;let t=Ye(e);if(!t.includes("kind")||t.some(s=>!Br.has(s)))return null;let o=e.kind;if(typeof o!="string"||!Kr.has(o))return null;for(let s of t)if(s!=="kind"&&re(e[s])===null)return null;let i=Le(e,"pet_ref");if(!i.ok)return null;let a=i.value;switch(o){case "record_request":{let s=Z(e,"request_id");return s===null?null:Object.freeze({kind:"record_request",requestId:s,petRef:a})}case "pet":return a===null?null:Object.freeze({kind:"pet",petRef:a});case "visit":{let s=Z(e,"visit_ref");return s===null?null:Object.freeze({kind:"visit",visitRef:s,petRef:a,intent:Ue(r)})}case "case":{let s=Z(e,"case_ref");if(s===null)return null;let l=Le(e,"conversation_id");return !l.ok||l.value!==null&&!$r.test(l.value)?null:Object.freeze({kind:"case",caseRef:s,conversationId:l.value,petRef:a})}default:return null}}n(rt,"parseTarget");function tt(e){let r=Ye(e);if(r.length!==ee.length||ee.some(a=>!r.includes(a))||e.v!==qe)return null;let t=e.event_id;if(typeof t!="string"||!Gr.test(t))return null;let o=e.event_type;if(typeof o!="string"||!Yr.has(o))return null;let i=rt(e.target,o);return i===null?null:Object.freeze({eventId:t,eventType:o,target:i})}n(tt,"parseBlock");function nt(e){try{let r=Xr(et(e));return r===null?null:tt(r)}catch{return null}}n(nt,"parseEverfurNotification");
|
|
2
|
+
export{Be as EVERFUR_NOTIFICATION_EVENT_TYPES,Ve as EVERFUR_NOTIFICATION_TARGET_KINDS,qe as EVERFUR_NOTIFICATION_VERSION,we as NOTIFICATIONS_REASON_MESSAGES,W as createNotificationsClient,kr as explainNotificationsReason,nt as parseEverfurNotification,Vr as useEverfurNotifications,je as useEverfurNotificationsClient};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { c as EverfurResult } from './EverfurResult-DN9pL2Ab.js';
|
|
2
|
+
import { j as FetchLike } from './config-DW60uRb9.js';
|
|
3
|
+
import { P as PetHealthProfileInput, a as PetHealthProfile } from './profile-CSs1wlXT.js';
|
|
4
|
+
|
|
5
|
+
/** How your backend reaches Everfur for pet writes. Build it once and reuse it. */
|
|
6
|
+
interface PartnerServerClient {
|
|
7
|
+
/** The Everfur API base URL, for example `https://api.everfur.com/api/v1`. https only (loopback excepted). */
|
|
8
|
+
readonly apiBaseUrl: string;
|
|
9
|
+
/**
|
|
10
|
+
* `sk_partner_...`, or an `rk_partner_...` restricted key carrying `pets.profile.update`, `pets.health.update` to
|
|
11
|
+
* write or read the health profile, and `pets.profile.delete` to delete. Never shipped to a device.
|
|
12
|
+
*/
|
|
13
|
+
readonly partnerSecretKey: string;
|
|
14
|
+
readonly contractVersion?: string;
|
|
15
|
+
readonly fetchImpl?: FetchLike;
|
|
16
|
+
}
|
|
17
|
+
/** Which pet: your member's id and your pet's id. */
|
|
18
|
+
interface PartnerPetTarget {
|
|
19
|
+
/** Your stable member id; the session mint's user_ref rule (1 to 128 characters, no '@', printable). */
|
|
20
|
+
readonly userRef: string;
|
|
21
|
+
/** Your stable pet id, 1 to 128 characters. */
|
|
22
|
+
readonly petRef: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The profile fields, the body every partner pet write path shares. On `upsertPartnerPet` an absent or `null`
|
|
26
|
+
* identity field leaves the stored value unchanged. On `updatePartnerPet` `null` clears `name`, `species`, `breed`,
|
|
27
|
+
* `ageYears` or `weightKg`, and an empty `partnerLabelInstructions` retracts the label text.
|
|
28
|
+
*
|
|
29
|
+
* The health fields (`PetHealthProfileInput`) take the same rule on both: absent is unchanged and an explicit null
|
|
30
|
+
* clears a scalar. A health LIST you send is the complete set you hold for the pet (set-replace): items match your
|
|
31
|
+
* earlier rows by `ref`, else by name, rows you no longer name are removed, and `[]` clears your rows. Rows the
|
|
32
|
+
* member entered themselves are never touched. Any health field needs `pets.health.update` and a dog or a cat.
|
|
33
|
+
*/
|
|
34
|
+
interface PartnerPetProfile extends PetHealthProfileInput {
|
|
35
|
+
/** Up to 100 characters. */
|
|
36
|
+
readonly name?: string | null;
|
|
37
|
+
/** Up to 50 characters. Records needs `dog` or `cat`. */
|
|
38
|
+
readonly species?: string | null;
|
|
39
|
+
/** Up to 100 characters. */
|
|
40
|
+
readonly breed?: string | null;
|
|
41
|
+
/** 0 to 50. */
|
|
42
|
+
readonly ageYears?: number | null;
|
|
43
|
+
/** 0 to 500. */
|
|
44
|
+
readonly weightKg?: number | null;
|
|
45
|
+
/** Your own label text, stored verbatim and never interpreted by Everfur. */
|
|
46
|
+
readonly partnerLabelInstructions?: string | null;
|
|
47
|
+
}
|
|
48
|
+
/** A pet profile as Everfur stored it. */
|
|
49
|
+
interface PartnerPet {
|
|
50
|
+
readonly petId: string;
|
|
51
|
+
readonly petRef: string;
|
|
52
|
+
readonly name: string | null;
|
|
53
|
+
readonly species: string | null;
|
|
54
|
+
readonly breed: string | null;
|
|
55
|
+
readonly ageYears: number | null;
|
|
56
|
+
readonly weightKg: number | null;
|
|
57
|
+
/** ISO 8601. */
|
|
58
|
+
readonly updatedAt: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A pet read back with its health profile (`getPartnerPet`). The scalars are the pet's one shared profile, whoever
|
|
62
|
+
* set them last; the lists are the rows YOUR integration wrote, with your refs, never the member's own or another
|
|
63
|
+
* partner's. `profileVersion` moves on every accepted write from any path (yours, the member's device, an inbound
|
|
64
|
+
* `pet.profile.updated`), so one integer tells you whether anything changed since you last looked.
|
|
65
|
+
*/
|
|
66
|
+
interface PartnerPetWithProfile extends PartnerPet, PetHealthProfile {
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a member's pet profile, or merge fields into it (`PUT`). Creates the member on first use.
|
|
70
|
+
*
|
|
71
|
+
* Settles to an `EverfurResult` for HTTP and network failures. Throws `EverfurConfigError` for a request that can
|
|
72
|
+
* never be accepted: a malformed key, `userRef` or `petRef`.
|
|
73
|
+
*/
|
|
74
|
+
declare function upsertPartnerPet(client: PartnerServerClient, target: PartnerPetTarget, profile: PartnerPetProfile): Promise<EverfurResult<PartnerPet>>;
|
|
75
|
+
/**
|
|
76
|
+
* Change fields of an existing pet profile (`PATCH`). Never creates a member or a pet: either unknown settles to the
|
|
77
|
+
* not-found error. At least one field is required.
|
|
78
|
+
*/
|
|
79
|
+
declare function updatePartnerPet(client: PartnerServerClient, target: PartnerPetTarget, changes: PartnerPetProfile): Promise<EverfurResult<PartnerPet>>;
|
|
80
|
+
/**
|
|
81
|
+
* Read a member's pet back with its health profile (`GET`, PF-14), to reconcile what you hold against what Everfur
|
|
82
|
+
* holds. Needs `pets.health.update` on a restricted key. Never creates anything: an unknown member or pet settles to
|
|
83
|
+
* the not-found error.
|
|
84
|
+
*
|
|
85
|
+
* Settles to an `EverfurResult` for HTTP and network failures. Throws `EverfurConfigError` for a malformed key,
|
|
86
|
+
* `userRef` or `petRef`.
|
|
87
|
+
*/
|
|
88
|
+
declare function getPartnerPet(client: PartnerServerClient, target: PartnerPetTarget): Promise<EverfurResult<PartnerPetWithProfile>>;
|
|
89
|
+
/** Delete a pet profile (`DELETE`). An unknown member or pet settles to the not-found error. */
|
|
90
|
+
declare function deletePartnerPet(client: PartnerServerClient, target: PartnerPetTarget): Promise<EverfurResult<void>>;
|
|
91
|
+
|
|
92
|
+
export { type PartnerServerClient as P, type PartnerPet as a, type PartnerPetProfile as b, type PartnerPetTarget as c, type PartnerPetWithProfile as d, deletePartnerPet as e, upsertPartnerPet as f, getPartnerPet as g, updatePartnerPet as u };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { c as EverfurResult } from './EverfurResult-DN9pL2Ab.cjs';
|
|
2
|
+
import { j as FetchLike } from './config-CzTZGlfF.cjs';
|
|
3
|
+
import { P as PetHealthProfileInput, a as PetHealthProfile } from './profile-CSs1wlXT.cjs';
|
|
4
|
+
|
|
5
|
+
/** How your backend reaches Everfur for pet writes. Build it once and reuse it. */
|
|
6
|
+
interface PartnerServerClient {
|
|
7
|
+
/** The Everfur API base URL, for example `https://api.everfur.com/api/v1`. https only (loopback excepted). */
|
|
8
|
+
readonly apiBaseUrl: string;
|
|
9
|
+
/**
|
|
10
|
+
* `sk_partner_...`, or an `rk_partner_...` restricted key carrying `pets.profile.update`, `pets.health.update` to
|
|
11
|
+
* write or read the health profile, and `pets.profile.delete` to delete. Never shipped to a device.
|
|
12
|
+
*/
|
|
13
|
+
readonly partnerSecretKey: string;
|
|
14
|
+
readonly contractVersion?: string;
|
|
15
|
+
readonly fetchImpl?: FetchLike;
|
|
16
|
+
}
|
|
17
|
+
/** Which pet: your member's id and your pet's id. */
|
|
18
|
+
interface PartnerPetTarget {
|
|
19
|
+
/** Your stable member id; the session mint's user_ref rule (1 to 128 characters, no '@', printable). */
|
|
20
|
+
readonly userRef: string;
|
|
21
|
+
/** Your stable pet id, 1 to 128 characters. */
|
|
22
|
+
readonly petRef: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The profile fields, the body every partner pet write path shares. On `upsertPartnerPet` an absent or `null`
|
|
26
|
+
* identity field leaves the stored value unchanged. On `updatePartnerPet` `null` clears `name`, `species`, `breed`,
|
|
27
|
+
* `ageYears` or `weightKg`, and an empty `partnerLabelInstructions` retracts the label text.
|
|
28
|
+
*
|
|
29
|
+
* The health fields (`PetHealthProfileInput`) take the same rule on both: absent is unchanged and an explicit null
|
|
30
|
+
* clears a scalar. A health LIST you send is the complete set you hold for the pet (set-replace): items match your
|
|
31
|
+
* earlier rows by `ref`, else by name, rows you no longer name are removed, and `[]` clears your rows. Rows the
|
|
32
|
+
* member entered themselves are never touched. Any health field needs `pets.health.update` and a dog or a cat.
|
|
33
|
+
*/
|
|
34
|
+
interface PartnerPetProfile extends PetHealthProfileInput {
|
|
35
|
+
/** Up to 100 characters. */
|
|
36
|
+
readonly name?: string | null;
|
|
37
|
+
/** Up to 50 characters. Records needs `dog` or `cat`. */
|
|
38
|
+
readonly species?: string | null;
|
|
39
|
+
/** Up to 100 characters. */
|
|
40
|
+
readonly breed?: string | null;
|
|
41
|
+
/** 0 to 50. */
|
|
42
|
+
readonly ageYears?: number | null;
|
|
43
|
+
/** 0 to 500. */
|
|
44
|
+
readonly weightKg?: number | null;
|
|
45
|
+
/** Your own label text, stored verbatim and never interpreted by Everfur. */
|
|
46
|
+
readonly partnerLabelInstructions?: string | null;
|
|
47
|
+
}
|
|
48
|
+
/** A pet profile as Everfur stored it. */
|
|
49
|
+
interface PartnerPet {
|
|
50
|
+
readonly petId: string;
|
|
51
|
+
readonly petRef: string;
|
|
52
|
+
readonly name: string | null;
|
|
53
|
+
readonly species: string | null;
|
|
54
|
+
readonly breed: string | null;
|
|
55
|
+
readonly ageYears: number | null;
|
|
56
|
+
readonly weightKg: number | null;
|
|
57
|
+
/** ISO 8601. */
|
|
58
|
+
readonly updatedAt: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A pet read back with its health profile (`getPartnerPet`). The scalars are the pet's one shared profile, whoever
|
|
62
|
+
* set them last; the lists are the rows YOUR integration wrote, with your refs, never the member's own or another
|
|
63
|
+
* partner's. `profileVersion` moves on every accepted write from any path (yours, the member's device, an inbound
|
|
64
|
+
* `pet.profile.updated`), so one integer tells you whether anything changed since you last looked.
|
|
65
|
+
*/
|
|
66
|
+
interface PartnerPetWithProfile extends PartnerPet, PetHealthProfile {
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a member's pet profile, or merge fields into it (`PUT`). Creates the member on first use.
|
|
70
|
+
*
|
|
71
|
+
* Settles to an `EverfurResult` for HTTP and network failures. Throws `EverfurConfigError` for a request that can
|
|
72
|
+
* never be accepted: a malformed key, `userRef` or `petRef`.
|
|
73
|
+
*/
|
|
74
|
+
declare function upsertPartnerPet(client: PartnerServerClient, target: PartnerPetTarget, profile: PartnerPetProfile): Promise<EverfurResult<PartnerPet>>;
|
|
75
|
+
/**
|
|
76
|
+
* Change fields of an existing pet profile (`PATCH`). Never creates a member or a pet: either unknown settles to the
|
|
77
|
+
* not-found error. At least one field is required.
|
|
78
|
+
*/
|
|
79
|
+
declare function updatePartnerPet(client: PartnerServerClient, target: PartnerPetTarget, changes: PartnerPetProfile): Promise<EverfurResult<PartnerPet>>;
|
|
80
|
+
/**
|
|
81
|
+
* Read a member's pet back with its health profile (`GET`, PF-14), to reconcile what you hold against what Everfur
|
|
82
|
+
* holds. Needs `pets.health.update` on a restricted key. Never creates anything: an unknown member or pet settles to
|
|
83
|
+
* the not-found error.
|
|
84
|
+
*
|
|
85
|
+
* Settles to an `EverfurResult` for HTTP and network failures. Throws `EverfurConfigError` for a malformed key,
|
|
86
|
+
* `userRef` or `petRef`.
|
|
87
|
+
*/
|
|
88
|
+
declare function getPartnerPet(client: PartnerServerClient, target: PartnerPetTarget): Promise<EverfurResult<PartnerPetWithProfile>>;
|
|
89
|
+
/** Delete a pet profile (`DELETE`). An unknown member or pet settles to the not-found error. */
|
|
90
|
+
declare function deletePartnerPet(client: PartnerServerClient, target: PartnerPetTarget): Promise<EverfurResult<void>>;
|
|
91
|
+
|
|
92
|
+
export { type PartnerServerClient as P, type PartnerPet as a, type PartnerPetProfile as b, type PartnerPetTarget as c, type PartnerPetWithProfile as d, deletePartnerPet as e, upsertPartnerPet as f, getPartnerPet as g, updatePartnerPet as u };
|