@everfur/sdk 0.12.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/CHANGELOG.md +292 -0
  2. package/README.md +12 -10
  3. package/dist/{Chat-CgYQdfqi.d.ts → Chat.d-aycmX1CA.d.cts} +178 -8
  4. package/dist/{Chat-CbyZ1vAX.d.cts → Chat.d-puminpyi.d.ts} +178 -8
  5. package/dist/{DepthViews-CCz4ig0u.d.ts → DepthViews.d-BdvFZgPs.d.cts} +1 -1
  6. package/dist/{DepthViews-CaQUyCHK.d.ts → DepthViews.d-DIvxzLDf.d.ts} +1 -1
  7. package/dist/{DepthViews-iGZi4_WK.d.cts → DepthViews.d-Dy0Zl-s-.d.ts} +1 -1
  8. package/dist/{DepthViews-D3OiIK_x.d.cts → DepthViews.d-wLNkzk9f.d.cts} +1 -1
  9. package/dist/{ErrorPolicyPort-10s3HJCt.d.cts → ErrorPolicyPort.d-68yrE3BE.d.ts} +1 -1
  10. package/dist/{ErrorPolicyPort-C3nNSS_j.d.ts → ErrorPolicyPort.d-DirW9hgO.d.cts} +1 -1
  11. package/dist/{EverfurError-DeBqRpQV.d.cts → EverfurError.d-8NHtlgzA.d.cts} +11 -1
  12. package/dist/{EverfurError-DeBqRpQV.d.ts → EverfurError.d-8NHtlgzA.d.ts} +11 -1
  13. package/dist/{EverfurResult-ClPTS0P2.d.ts → EverfurResult.d-BFH-3s6E.d.cts} +1 -1
  14. package/dist/{EverfurResult-COlXj1wq.d.cts → EverfurResult.d-D_-254ZY.d.ts} +1 -1
  15. package/dist/{IntakeMedia-BH0fYDT2.d.cts → IntakeMedia.d-4a89XrP7.d.ts} +1 -1
  16. package/dist/{IntakeMedia-B-_vA9ZB.d.cts → IntakeMedia.d-DGxrhgIW.d.ts} +1 -1
  17. package/dist/{IntakeMedia-CIoTXAWs.d.ts → IntakeMedia.d-DUPR4lVM.d.cts} +1 -1
  18. package/dist/{IntakeMedia-Bavl7E4Z.d.ts → IntakeMedia.d-JJCUvQu7.d.cts} +1 -1
  19. package/dist/LifecyclePort.d-Cr1p33a7.d.cts +23 -0
  20. package/dist/LifecyclePort.d-Cr1p33a7.d.ts +23 -0
  21. package/dist/{PhotoController-vzY5bfY_.d.ts → PhotoController.d-BzCJOE7e.d.cts} +2 -2
  22. package/dist/{PhotoController-3l7MT9jA.d.cts → PhotoController.d-D0XiUUOl.d.ts} +2 -2
  23. package/dist/RecordsPage.d-9Ank15PT.d.ts +93 -0
  24. package/dist/RecordsPage.d-DMKU0IKc.d.cts +93 -0
  25. package/dist/animations/index.cjs +4 -1
  26. package/dist/animations/index.d.cts +24 -24
  27. package/dist/animations/index.d.ts +24 -24
  28. package/dist/animations/index.js +4 -1
  29. package/dist/{attachments-CTJK0jQ4.d.ts → attachments.d--sIsfk6e.d.ts} +4 -4
  30. package/dist/{attachments-DkMrKCIU.d.ts → attachments.d-DNUCiyy5.d.cts} +10 -32
  31. package/dist/{attachments-DXBETOrV.d.cts → attachments.d-ZEpTUeWN.d.cts} +4 -4
  32. package/dist/{attachments-BOk3hEAM.d.cts → attachments.d-rp3xs-Q3.d.ts} +10 -32
  33. package/dist/{bookingCopy-C_a45T4-.d.ts → bookingCopy.d-D0uIIFAJ.d.ts} +24 -9
  34. package/dist/{bookingCopy-CHYGYHe0.d.cts → bookingCopy.d-DUrmVcLs.d.cts} +24 -9
  35. package/dist/{branding-DJf4h12Q.d.ts → branding.d-CTXTUg_8.d.cts} +9 -2
  36. package/dist/{branding-BCfwLj0h.d.cts → branding.d-DxJSoFce.d.ts} +9 -2
  37. package/dist/{callRoom-BhIdadyV.d.cts → callRoom.d-B1DoYdJe.d.cts} +1 -1
  38. package/dist/{callRoom-B92eH_ij.d.ts → callRoom.d-Dqm1rUqT.d.ts} +1 -1
  39. package/dist/{casesRepository-C8KJmlxE.d.cts → casesRepository.d-DCnix2pT.d.cts} +3 -3
  40. package/dist/{casesRepository-iAi5qWnx.d.ts → casesRepository.d-DbirgbyH.d.ts} +3 -3
  41. package/dist/chat/index.cjs +139 -63
  42. package/dist/chat/index.d.cts +34 -19
  43. package/dist/chat/index.d.ts +34 -19
  44. package/dist/chat/index.js +139 -63
  45. package/dist/client/index.cjs +14 -10
  46. package/dist/client/index.d.cts +19 -18
  47. package/dist/client/index.d.ts +19 -18
  48. package/dist/client/index.js +14 -10
  49. package/dist/clinicBatch.d-Ccmrngcu.d.cts +71 -0
  50. package/dist/clinicBatch.d-D9Ci7IpP.d.ts +71 -0
  51. package/dist/clinicModels.d-BXgKZqDb.d.cts +68 -0
  52. package/dist/clinicModels.d-CaS64-P-.d.ts +68 -0
  53. package/dist/clinicRequestProps.d-1dCtouGA.d.cts +65 -0
  54. package/dist/clinicRequestProps.d-CjsMg_OD.d.ts +65 -0
  55. package/dist/{config-C9zhanL-.d.cts → config.d-DJ4mvf_w.d.cts} +3 -3
  56. package/dist/{config-C5iPNKDj.d.ts → config.d-MX7IKP2f.d.ts} +3 -3
  57. package/dist/consent/index.cjs +4 -1
  58. package/dist/consent/index.d.cts +10 -10
  59. package/dist/consent/index.d.ts +10 -10
  60. package/dist/consent/index.js +4 -1
  61. package/dist/{context-D_bcpHDA.d.cts → context.d-BdnBe8Oe.d.ts} +15 -15
  62. package/dist/{context-BUIrC20Z.d.ts → context.d-C6MJsMpN.d.cts} +15 -15
  63. package/dist/{copy-KbCU9fen.d.ts → copy.d-BIfQOoDB.d.ts} +6 -6
  64. package/dist/{copy-BE31T2jR.d.cts → copy.d-C_u7shha.d.cts} +6 -6
  65. package/dist/core/index.cjs +16 -13
  66. package/dist/core/index.d.cts +35 -29
  67. package/dist/core/index.d.ts +35 -29
  68. package/dist/core/index.js +16 -13
  69. package/dist/{depth-DDKGfFaB.d.ts → depth.d-COFxYWLU.d.ts} +9 -242
  70. package/dist/{depth-DNxDieoO.d.cts → depth.d-D2e5WZuE.d.cts} +9 -242
  71. package/dist/{entitlementRepository-C1_wXIE3.d.cts → entitlementRepository.d-BP15dFbe.d.cts} +10 -5
  72. package/dist/{entitlementRepository-CYtdIGfH.d.ts → entitlementRepository.d-DLuxnGi5.d.ts} +10 -5
  73. package/dist/features.d-DrQxTw3-.d.cts +108 -0
  74. package/dist/features.d-DrQxTw3-.d.ts +108 -0
  75. package/dist/focus.d-C0Tr0oVJ.d.ts +939 -0
  76. package/dist/focus.d-jQWp0hdK.d.cts +939 -0
  77. package/dist/health-plan/index.cjs +384 -0
  78. package/dist/health-plan/index.d.cts +293 -0
  79. package/dist/health-plan/index.d.ts +293 -0
  80. package/dist/health-plan/index.js +384 -0
  81. package/dist/idempotency.d-DXb1BN2A.d.ts +1055 -0
  82. package/dist/idempotency.d-HF6fyRt2.d.cts +1055 -0
  83. package/dist/{identity-gjurBi7m.d.cts → identity.d-BePPZ7Uv.d.ts} +3 -3
  84. package/dist/{identity-BqeaN8An.d.ts → identity.d-CJfnWOdH.d.cts} +3 -3
  85. package/dist/index.cjs +148 -72
  86. package/dist/index.d.cts +32 -29
  87. package/dist/index.d.ts +32 -29
  88. package/dist/index.js +148 -72
  89. package/dist/introEvents.d-BkGDT_kG.d.cts +175 -0
  90. package/dist/introEvents.d-DHlMvmC7.d.ts +175 -0
  91. package/dist/introEvents.d-dS3fJCH1.d.cts +5 -0
  92. package/dist/introEvents.d-dS3fJCH1.d.ts +5 -0
  93. package/dist/{models-CnXY5LuO.d.ts → models.d-BSqvbTE1.d.cts} +15 -3
  94. package/dist/{models-A4A5S7AG.d.cts → models.d-DOwnr8fi.d.ts} +15 -3
  95. package/dist/notifications/index.cjs +4 -1
  96. package/dist/notifications/index.d.cts +9 -9
  97. package/dist/notifications/index.d.ts +9 -9
  98. package/dist/notifications/index.js +4 -1
  99. package/dist/optInView.d-0iI5JoAf.d.cts +441 -0
  100. package/dist/optInView.d-s-w4aGN3.d.ts +441 -0
  101. package/dist/parse.d-COt1qVA6.d.ts +210 -0
  102. package/dist/parse.d-EmsgOUMQ.d.cts +210 -0
  103. package/dist/{pets-CfutxNs9.d.cts → pets.d-BFT_b53y.d.ts} +3 -3
  104. package/dist/{pets-LIGadUtr.d.ts → pets.d-nNAVnw7f.d.cts} +3 -3
  105. package/dist/{petsRepository-CoRa3C_U.d.ts → petsRepository.d-B2TpRE7r.d.cts} +4 -4
  106. package/dist/{petsRepository-Cqpd3hLU.d.cts → petsRepository.d-RGwSZcYl.d.ts} +4 -4
  107. package/dist/photo/index.cjs +5 -2
  108. package/dist/photo/index.d.cts +9 -9
  109. package/dist/photo/index.d.ts +9 -9
  110. package/dist/photo/index.js +5 -2
  111. package/dist/planSignals.d-BDbp2e-k.d.cts +126 -0
  112. package/dist/planSignals.d-DSnxKoWe.d.ts +126 -0
  113. package/dist/{ports-BN6RHF9W.d.cts → ports.d-BX4f4UsB.d.cts} +14 -1
  114. package/dist/{ports-BN6RHF9W.d.ts → ports.d-BX4f4UsB.d.ts} +14 -1
  115. package/dist/{ports-CVi3n0re.d.ts → ports.d-D2n4HRUy.d.ts} +16 -10
  116. package/dist/{ports-gJ3faaWz.d.cts → ports.d-DBA_gsq5.d.cts} +16 -10
  117. package/dist/presentation.d-vy8kTGfR.d.cts +96 -0
  118. package/dist/presentation.d-vy8kTGfR.d.ts +96 -0
  119. package/dist/quickPrompts.d-NM_81Jc1.d.cts +19 -0
  120. package/dist/quickPrompts.d-NM_81Jc1.d.ts +19 -0
  121. package/dist/records/depth/index.cjs +10 -7
  122. package/dist/records/depth/index.d.cts +18 -12
  123. package/dist/records/depth/index.d.ts +18 -12
  124. package/dist/records/depth/index.js +10 -7
  125. package/dist/records/index.cjs +350 -74
  126. package/dist/records/index.d.cts +225 -21
  127. package/dist/records/index.d.ts +225 -21
  128. package/dist/records/index.js +351 -75
  129. package/dist/recordsAsk.d-C5CGSi3j.d.cts +14 -0
  130. package/dist/recordsAsk.d-C5CGSi3j.d.ts +14 -0
  131. package/dist/{requestFunnel-BYzlyaC0.d.ts → requestFunnel.d-D9edIEjZ.d.ts} +5 -5
  132. package/dist/{requestFunnel-DLZpiFD3.d.cts → requestFunnel.d-RZex94XX.d.cts} +5 -5
  133. package/dist/{resolve-D4Ywz5OS.d.ts → resolve.d-CoQWUy1Y.d.cts} +2 -2
  134. package/dist/{resolve-D4Ywz5OS.d.cts → resolve.d-CoQWUy1Y.d.ts} +2 -2
  135. package/dist/{runtimeTypes-BxxCKMn8.d.cts → runtimeTypes.d-BYq38b17.d.ts} +20 -13
  136. package/dist/{runtimeTypes-Doa_xxSa.d.ts → runtimeTypes.d-LkwZaF7z.d.cts} +20 -13
  137. package/dist/screenProps.d-BVzRzowC.d.ts +159 -0
  138. package/dist/screenProps.d-CQ0qZJkr.d.cts +159 -0
  139. package/dist/server/events/index.cjs +6 -3
  140. package/dist/server/events/index.d.cts +51 -9
  141. package/dist/server/events/index.d.ts +51 -9
  142. package/dist/server/events/index.js +6 -3
  143. package/dist/server/index.cjs +11 -6
  144. package/dist/server/index.d.cts +152 -8
  145. package/dist/server/index.d.ts +152 -8
  146. package/dist/server/index.js +11 -6
  147. package/dist/sheetCopy.d-CAhLOxjc.d.cts +4 -0
  148. package/dist/sheetCopy.d-CAhLOxjc.d.ts +4 -0
  149. package/dist/sheetSeam.d-B09jf4YC.d.ts +49 -0
  150. package/dist/sheetSeam.d-BBuEIVsa.d.cts +49 -0
  151. package/dist/shop/index.cjs +428 -0
  152. package/dist/shop/index.d.cts +211 -0
  153. package/dist/shop/index.d.ts +211 -0
  154. package/dist/shop/index.js +428 -0
  155. package/dist/tabs/index.cjs +195 -0
  156. package/dist/tabs/index.d.cts +174 -0
  157. package/dist/tabs/index.d.ts +174 -0
  158. package/dist/tabs/index.js +195 -0
  159. package/dist/tabsModel.d-BfIQg6yS.d.cts +31 -0
  160. package/dist/tabsModel.d-BfIQg6yS.d.ts +31 -0
  161. package/dist/televet/booking/index.cjs +15 -12
  162. package/dist/televet/booking/index.d.cts +36 -22
  163. package/dist/televet/booking/index.d.ts +36 -22
  164. package/dist/televet/booking/index.js +15 -12
  165. package/dist/televet/call/index.d.cts +5 -5
  166. package/dist/televet/call/index.d.ts +5 -5
  167. package/dist/televet/index.cjs +6 -3
  168. package/dist/televet/index.d.cts +12 -12
  169. package/dist/televet/index.d.ts +12 -12
  170. package/dist/televet/index.js +6 -3
  171. package/dist/{televetGlobal-C5dTUACe.d.cts → televetGlobal.d-CC-DrqkQ.d.ts} +7 -2
  172. package/dist/{televetGlobal-CnjrfhT4.d.ts → televetGlobal.d-CKwDCbmN.d.cts} +7 -2
  173. package/dist/testing/index.cjs +6 -3
  174. package/dist/testing/index.d.cts +3 -3
  175. package/dist/testing/index.d.ts +3 -3
  176. package/dist/testing/index.js +6 -3
  177. package/dist/testing/rn/index.cjs +5 -2
  178. package/dist/testing/rn/index.d.cts +23 -22
  179. package/dist/testing/rn/index.d.ts +23 -22
  180. package/dist/testing/rn/index.js +5 -2
  181. package/dist/testing/web/index.cjs +4 -1
  182. package/dist/testing/web/index.d.cts +23 -22
  183. package/dist/testing/web/index.d.ts +23 -22
  184. package/dist/testing/web/index.js +4 -1
  185. package/dist/texting/index.cjs +193 -0
  186. package/dist/texting/index.d.cts +69 -0
  187. package/dist/texting/index.d.ts +69 -0
  188. package/dist/texting/index.js +193 -0
  189. package/dist/threadOptions.d-9r4Csa7k.d.cts +458 -0
  190. package/dist/threadOptions.d-B6GA09aM.d.ts +458 -0
  191. package/dist/{timelineRows-Beun96e2.d.cts → timelineRows.d-Bes8ip2v.d.ts} +1 -1
  192. package/dist/{timelineRows-CGOlC_Q9.d.ts → timelineRows.d-BvM2A7_G.d.cts} +1 -1
  193. package/dist/{tokens-DLj8OnLH.d.cts → tokens.d-DarDaV39.d.cts} +10 -2
  194. package/dist/{tokens-DLj8OnLH.d.ts → tokens.d-DarDaV39.d.ts} +10 -2
  195. package/dist/{typeStyle-DJedEu14.d.cts → typeStyle.d-Co5KF0up.d.ts} +2 -2
  196. package/dist/{typeStyle-BxVyF71R.d.ts → typeStyle.d-xIZj02Ru.d.cts} +2 -2
  197. package/dist/{uploadTransport-C6kGP1Kd.d.ts → uploadTransport.d-CWL7CdWP.d.cts} +1 -1
  198. package/dist/{uploadTransport-BM_pnEWj.d.cts → uploadTransport.d-EGoUl7gX.d.ts} +1 -1
  199. package/dist/useIntroSeen.d-CTWFUthO.d.cts +35 -0
  200. package/dist/useIntroSeen.d-CTWFUthO.d.ts +35 -0
  201. package/dist/usePresentation.d-BGz32Vlm.d.ts +285 -0
  202. package/dist/usePresentation.d-DYTF_ZGf.d.cts +285 -0
  203. package/dist/useRecords.d-BYNX01El.d.cts +121 -0
  204. package/dist/useRecords.d-DWk61a4c.d.ts +121 -0
  205. package/dist/useRecordsDepth.d--LLA_4ga.d.cts +32 -0
  206. package/dist/useRecordsDepth.d-BQRL0Hez.d.ts +32 -0
  207. package/dist/{useVetVisit-DmWa7lt1.d.ts → useVetVisit.d-BtdwhmgD.d.cts} +15 -4
  208. package/dist/{useVetVisit-PtBjNwZr.d.cts → useVetVisit.d-DoYQimyt.d.ts} +15 -4
  209. package/dist/video/index.cjs +5 -2
  210. package/dist/video/index.d.cts +7 -7
  211. package/dist/video/index.d.ts +7 -7
  212. package/dist/video/index.js +5 -2
  213. package/dist/{view-VvLEdXP4.d.cts → view.d-0yBjLTV3.d.cts} +12 -122
  214. package/dist/{view-C_B5U04g.d.ts → view.d-DqbCADFa.d.ts} +12 -122
  215. package/dist/web/consent/index.cjs +4 -1
  216. package/dist/web/consent/index.d.cts +10 -10
  217. package/dist/web/consent/index.d.ts +10 -10
  218. package/dist/web/consent/index.js +4 -1
  219. package/dist/web/health-plan/index.cjs +421 -0
  220. package/dist/web/health-plan/index.d.cts +189 -0
  221. package/dist/web/health-plan/index.d.ts +189 -0
  222. package/dist/web/health-plan/index.js +421 -0
  223. package/dist/web/index.cjs +170 -87
  224. package/dist/web/index.d.cts +292 -38
  225. package/dist/web/index.d.ts +292 -38
  226. package/dist/web/index.js +170 -87
  227. package/dist/web/intro/index.cjs +167 -0
  228. package/dist/web/intro/index.d.cts +79 -0
  229. package/dist/web/intro/index.d.ts +79 -0
  230. package/dist/web/intro/index.js +167 -0
  231. package/dist/web/notifications/index.cjs +15 -3
  232. package/dist/web/notifications/index.d.cts +39 -209
  233. package/dist/web/notifications/index.d.ts +39 -209
  234. package/dist/web/notifications/index.js +15 -3
  235. package/dist/web/records/depth/index.cjs +10 -7
  236. package/dist/web/records/depth/index.d.cts +18 -12
  237. package/dist/web/records/depth/index.d.ts +18 -12
  238. package/dist/web/records/depth/index.js +10 -7
  239. package/dist/web/records/index.cjs +94 -68
  240. package/dist/web/records/index.d.cts +39 -55
  241. package/dist/web/records/index.d.ts +39 -55
  242. package/dist/web/records/index.js +94 -68
  243. package/dist/web/records/upload/index.d.cts +2 -2
  244. package/dist/web/records/upload/index.d.ts +2 -2
  245. package/dist/web/records-sheet/index.cjs +332 -0
  246. package/dist/web/records-sheet/index.d.cts +104 -0
  247. package/dist/web/records-sheet/index.d.ts +104 -0
  248. package/dist/web/records-sheet/index.js +332 -0
  249. package/dist/web/shop/index.cjs +416 -0
  250. package/dist/web/shop/index.d.cts +59 -0
  251. package/dist/web/shop/index.d.ts +59 -0
  252. package/dist/web/shop/index.js +416 -0
  253. package/dist/web/televet/booking/index.cjs +15 -12
  254. package/dist/web/televet/booking/index.d.cts +37 -23
  255. package/dist/web/televet/booking/index.d.ts +37 -23
  256. package/dist/web/televet/booking/index.js +15 -12
  257. package/dist/web/televet/call/index.d.cts +4 -4
  258. package/dist/web/televet/call/index.d.ts +4 -4
  259. package/dist/web/televet/index.cjs +6 -3
  260. package/dist/web/televet/index.d.cts +12 -12
  261. package/dist/web/televet/index.d.ts +12 -12
  262. package/dist/web/televet/index.js +6 -3
  263. package/dist/web/texting/index.cjs +188 -0
  264. package/dist/web/texting/index.d.cts +69 -0
  265. package/dist/web/texting/index.d.ts +69 -0
  266. package/dist/web/texting/index.js +188 -0
  267. package/health-plan/package.json +8 -0
  268. package/package.json +138 -5
  269. package/shop/package.json +8 -0
  270. package/tabs/package.json +8 -0
  271. package/texting/package.json +8 -0
  272. package/web/health-plan/native-blocked.cjs +12 -0
  273. package/web/health-plan/package.json +8 -0
  274. package/web/intro/native-blocked.cjs +12 -0
  275. package/web/intro/package.json +8 -0
  276. package/web/records-sheet/native-blocked.cjs +12 -0
  277. package/web/records-sheet/package.json +8 -0
  278. package/web/shop/native-blocked.cjs +12 -0
  279. package/web/shop/package.json +8 -0
  280. package/web/texting/native-blocked.cjs +12 -0
  281. package/web/texting/package.json +8 -0
  282. package/dist/useRecordsDepth-DRrJntjt.d.cts +0 -257
  283. package/dist/useRecordsDepth-hR94debv.d.ts +0 -257
  284. /package/dist/{CameraPort-Cv31Pz7g.d.cts → CameraPort.d-Cv31Pz7g.d.cts} +0 -0
  285. /package/dist/{CameraPort-Cv31Pz7g.d.ts → CameraPort.d-Cv31Pz7g.d.ts} +0 -0
  286. /package/dist/{TelemetryPort-BDNr00hu.d.cts → TelemetryPort.d-BDNr00hu.d.cts} +0 -0
  287. /package/dist/{TelemetryPort-BDNr00hu.d.ts → TelemetryPort.d-BDNr00hu.d.ts} +0 -0
  288. /package/dist/{cacheEpoch-DknKn3S0.d.cts → cacheEpoch.d-DknKn3S0.d.cts} +0 -0
  289. /package/dist/{cacheEpoch-DknKn3S0.d.ts → cacheEpoch.d-DknKn3S0.d.ts} +0 -0
  290. /package/dist/{callCopy-Bw6oZT54.d.cts → callCopy.d-Bw6oZT54.d.cts} +0 -0
  291. /package/dist/{callCopy-Bw6oZT54.d.ts → callCopy.d-Bw6oZT54.d.ts} +0 -0
  292. /package/dist/{ids-B2GAAifq.d.cts → ids.d-B2GAAifq.d.cts} +0 -0
  293. /package/dist/{ids-B2GAAifq.d.ts → ids.d-B2GAAifq.d.ts} +0 -0
  294. /package/dist/{optionalModule-DbJmsq5f.d.cts → optionalModule.d-DbJmsq5f.d.cts} +0 -0
  295. /package/dist/{optionalModule-DbJmsq5f.d.ts → optionalModule.d-DbJmsq5f.d.ts} +0 -0
  296. /package/dist/{profile-CSs1wlXT.d.cts → profile.d-CSs1wlXT.d.cts} +0 -0
  297. /package/dist/{profile-CSs1wlXT.d.ts → profile.d-CSs1wlXT.d.ts} +0 -0
  298. /package/dist/{projection-CeIUsbSk.d.cts → projection.d-CeIUsbSk.d.cts} +0 -0
  299. /package/dist/{projection-CeIUsbSk.d.ts → projection.d-CeIUsbSk.d.ts} +0 -0
  300. /package/dist/{species-BXAIMh7I.d.cts → species.d-BXAIMh7I.d.cts} +0 -0
  301. /package/dist/{species-BXAIMh7I.d.ts → species.d-BXAIMh7I.d.ts} +0 -0
  302. /package/dist/{visitIntent-D7_yVp1I.d.cts → visitIntent.d-D7_yVp1I.d.cts} +0 -0
  303. /package/dist/{visitIntent-D7_yVp1I.d.ts → visitIntent.d-D7_yVp1I.d.ts} +0 -0
@@ -0,0 +1,441 @@
1
+ import { E as EverfurError } from './EverfurError.d-8NHtlgzA.js';
2
+ import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
3
+ import { R as RequestFunnel } from './requestFunnel.d-D9edIEjZ.js';
4
+ import { A as AuthContext } from './identity.d-BePPZ7Uv.js';
5
+ import { P as PetRef, U as UserRef } from './ids.d-B2GAAifq.js';
6
+ import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-68yrE3BE.js';
7
+
8
+ /** The marker a placeholder string carries, so a test (and a reviewer) can find every one. */
9
+ declare const COPY_PLACEHOLDER_PREFIX = "[copy needed: ";
10
+ declare const TEXTING_COPY: Readonly<{
11
+ loading: "Loading";
12
+ retry: "Try again";
13
+ signedOut: "Sign in required";
14
+ close: "Close";
15
+ phoneLabel: "Mobile number";
16
+ phoneHint: "We'll text a 6-digit code to confirm it's you.";
17
+ phoneInvalid: "That doesn't look like a valid number. Check it and the country, then try again.";
18
+ consentRequired: "Please agree to receive SMS messages to continue.";
19
+ sendCode: "Send code";
20
+ sendingCode: "Sending code";
21
+ codeTitle: "Enter your code";
22
+ /** Followed by the number, which is data, not copy. */
23
+ codeSentTo: "We texted a 6-digit code to";
24
+ codeLabel: "6-digit code";
25
+ codeInvalidFormat: "Enter all 6 digits of the code.";
26
+ confirmCode: "Verify";
27
+ confirmingCode: "Verifying";
28
+ verificationInvalid: "That code is no longer valid. Request a new one.";
29
+ /** everfur-frontend app/product/sms-chat/copy.ts:73, for a code refused after its `expires_at`. */
30
+ codeExpired: "This code has expired. Request a new one.";
31
+ requestNewCode: "Request a new code";
32
+ /** everfur-frontend app/product/sms-chat/copy.ts:74, for 429 `verification_phone_limit` (this number's daily codes). */
33
+ noResendsLeft: "You've requested the maximum number of codes. Please try again later or contact support.";
34
+ changeNumber: "Use a different number";
35
+ defaultPetLabel: "Default pet for SMS";
36
+ noPetSelected: "Choose a pet";
37
+ savePet: "Save";
38
+ savingPet: "Saving";
39
+ petSaved: "Saved";
40
+ petIneligible: "That pet can't be selected anymore. Please choose another.";
41
+ optedOutTitle: "SMS paused";
42
+ verifiedTitle: "SMS Chat is on";
43
+ disable: "Turn off SMS Chat";
44
+ disabling: "Turning off";
45
+ disableConfirmTitle: "Turn off SMS Chat?";
46
+ disableConfirmBody: "We'll stop texting this number. You can turn it back on anytime.";
47
+ disableConfirm: "Turn off";
48
+ disableCancel: "Keep it on";
49
+ unavailableTitle: "SMS Chat isn't available yet";
50
+ unavailableBody: "We're still setting it up. Check back soon.";
51
+ phoneAlreadyLinked: "This number is already linked to another Everfur account. Contact support and we'll move it for you.";
52
+ providerFailed: "We couldn't send the text. Please try again.";
53
+ genericFailure: "That didn't go through. Please try again.";
54
+ /** Followed by the request id, for a support conversation. */
55
+ supportReference: "Support reference:";
56
+ /**
57
+ * The ask (the in-chat line's two chips and the app-open pop-up, `EverfurTextingPrompt`): the consumer's invitation
58
+ * card (`promptBody` / `promptAccept` / `promptDismiss`, Aman 2026-09-15; everfur-mobile copy.ts:120-122). The
59
+ * in-chat line's chips are the same two words, as in both consumer apps.
60
+ */
61
+ promptBody: "Ask questions about your pet by text message, anytime. No app needed.";
62
+ promptAccept: "Turn on SMS Chat";
63
+ promptDismiss: "Not now";
64
+ /**
65
+ * 403 `phone_country_not_allowed`, a valid number from a country the tenant does not text. The consumer screen
66
+ * refuses a valid number whose own country is outside its list (everfur-frontend app/product/sms-chat/phone.ts:36)
67
+ * with this line (`phoneInvalid`, copy.ts:60, via SmsChatEnrollment.tsx:78-80), which points at the country.
68
+ */
69
+ phoneCountryNotAllowed: "That doesn't look like a valid number. Check it and the country, then try again.";
70
+ /**
71
+ * 429 `verification_tenant_limit`, the tenant's hourly ceiling on codes: not the member's doing, and it clears.
72
+ * everfur-frontend app/product/sms-chat/copy.ts:109 `temporarilyUnavailable` (everfur-mobile copy.ts:108).
73
+ */
74
+ verificationBusy: "SMS Chat is temporarily unavailable. Please try again in a few minutes.";
75
+ /**
76
+ * The label in front of the tenant profile's help contact, so the line reads "Help: hello@everfur.com" exactly as
77
+ * the owner-approved HELP reply does (EFBackend sms_chat_reply_copy.py:262 and :276, and the partner default
78
+ * partner_sms_profile.py:101).
79
+ */
80
+ helpContactLabel: "Help:";
81
+ /**
82
+ * The button that starts a new opt-in after a member opted out. The consumer's own "start SMS Chat" control:
83
+ * everfur-frontend copy.ts:118 `promptAccept`, the /sms page call to action (SmsOptInPage.tsx:75), everfur-mobile
84
+ * copy.ts:121.
85
+ */
86
+ reenroll: "Turn on SMS Chat";
87
+ /**
88
+ * The opted-out body for a member who turned texts off in the app (not by texting STOP, which keeps the brand STOP
89
+ * line). The consumer's approved words for that same choice: everfur-frontend copy.ts:98 `disableConfirmBody`
90
+ * (everfur-mobile copy.ts:102).
91
+ */
92
+ optedOutByMemberBody: "We'll stop texting this number. You can turn it back on anytime.";
93
+ codeWrong: "That code didn't work. Check it and try again.";
94
+ }>;
95
+ /** ADAPTED from the consumer deck: "Everfur" becomes the tenant's brand name. Listed for approval. */
96
+ declare const TEXTING_BRAND_COPY: Readonly<{
97
+ /** consumer `introTitle`: 'Chat with Everfur by text' */
98
+ introTitle: (brand: string) => string;
99
+ /** consumer `introBody` */
100
+ introBody: (brand: string) => string;
101
+ /** consumer `statusActive`: 'You can text Everfur anytime from this number.' */
102
+ statusActive: (brand: string) => string;
103
+ /** consumer `optedOutBody` */
104
+ optedOutBody: (brand: string) => string;
105
+ /** consumer `promptTitle`: 'Ask Everfur by text, for every pet' (the app-open pop-up's title). */
106
+ promptTitle: (brand: string) => string;
107
+ /**
108
+ * consumer `chatAskLine`: 'Want answers by text too? Add your mobile number and you can text Everfur about your pet
109
+ * anytime.' (owner approved 2026-09-30; everfur-mobile copy.ts:128). The in-chat ask's line.
110
+ */
111
+ chatAskLine: (brand: string) => string;
112
+ /** consumer `statusUnrecorded`: "Verified. You're all set to text Everfur." The in-chat ask's closing line. */
113
+ chatAskVerified: (brand: string) => string;
114
+ }>;
115
+ /** Every placeholder key in `TEXTING_COPY`, so the list a reviewer approves cannot drift from the file. */
116
+ declare const TEXTING_COPY_PLACEHOLDERS: readonly (keyof typeof TEXTING_COPY)[];
117
+ /** Every string the texting opt-in shows that a partner may reword (`EverfurTextingOptIn copy=`). */
118
+ type TextingCopy = {
119
+ readonly [K in keyof typeof TEXTING_COPY]: string;
120
+ };
121
+ /** The brand-named lines (`EverfurTextingOptIn brandCopy=`): each takes the tenant's brand name. */
122
+ type TextingBrandCopy = {
123
+ readonly [K in keyof typeof TEXTING_BRAND_COPY]: (brand: string) => string;
124
+ };
125
+
126
+ /** The tenant's public texting profile, exactly as the console published it. */
127
+ interface EverfurTextingProfile {
128
+ /** The name the texts, the consent words and the STOP/HELP replies use. */
129
+ readonly brandName: string;
130
+ /** The consent words the member ticks, verbatim. The server stores a digest of exactly these words. */
131
+ readonly consentText: string;
132
+ /** The version of `consentText`; sent back with the verification so the grant names what the member saw. */
133
+ readonly consentVersion: string;
134
+ /** Where a member gets help (a phone, an address or a URL as the tenant set it), or null. */
135
+ readonly helpContact: string | null;
136
+ /**
137
+ * EFBackend's `status_is_live`. There is no tester-only stage any more: a draft or live tenant admits every member,
138
+ * and only a tenant staff suspended refuses each number with `sms_not_live`, which the surface words as SMS Chat
139
+ * not being available. The surface draws no banner of its own for this flag.
140
+ */
141
+ readonly isLive: boolean;
142
+ }
143
+ /**
144
+ * Parse an untrusted `sms_profile_public` blob. Null when it is absent or carries no brand, consent words or
145
+ * consent version (the three things an opt-in cannot do without). `status_is_live` reads true only for the
146
+ * literal `true`: a missing flag is the not-live side, which refuses more, never less. Never throws.
147
+ */
148
+ declare function parseTextingProfile(raw: unknown): EverfurTextingProfile | null;
149
+ /**
150
+ * A +1 (United States or Canada) number as E.164, or null. Takes what a member types: `(415) 555-0134`,
151
+ * `415.555.0134`, `1 415 555 0134` or `+1 415 555 0134`. A North American number is ten digits whose area code and
152
+ * exchange both start 2 to 9; anything else (another country code, too few digits, letters) is null, so the
153
+ * surface refuses it before the wire instead of spending a verification on it.
154
+ */
155
+ declare function toTextingE164(input: string): string | null;
156
+ /** True for a string already in E.164 form (`+` and 8 to 15 digits). */
157
+ declare function isE164(value: unknown): value is string;
158
+
159
+ /** The identity states the server reports. An unknown value reads as `none`: nothing on record we can explain. */
160
+ declare const EVERFUR_TEXTING_STATUSES: readonly ["none", "pending", "verified", "opted_out"];
161
+ type EverfurTextingStatus = (typeof EVERFUR_TEXTING_STATUSES)[number];
162
+ /** The member's texting identity. The raw number never comes back; `phoneMasked` is what Everfur shows anywhere. */
163
+ interface EverfurTextingIdentity {
164
+ readonly status: EverfurTextingStatus;
165
+ readonly phoneMasked: string | null;
166
+ /** The consent version on record, or null. */
167
+ readonly consentVersion: string | null;
168
+ /** The pet texts are about, or null when none is chosen. */
169
+ readonly selectedPetRef: PetRef | null;
170
+ }
171
+ /** An outstanding code, as the server issued it. */
172
+ interface EverfurTextingChallenge {
173
+ readonly challengeId: string;
174
+ /** ISO 8601, or null when the server did not say. */
175
+ readonly expiresAt: string | null;
176
+ /**
177
+ * How many wrong codes the server still accepts for this challenge, as it said when it issued the code
178
+ * (`attempts_remaining`), or null when it did not say. The controller counts it down on each refused code.
179
+ */
180
+ readonly attemptsRemaining: number | null;
181
+ }
182
+ interface EverfurTextingVerificationInput {
183
+ /** E.164 (`+14155550134`). `toTextingE164` turns what a member typed into this. */
184
+ readonly phoneE164: string;
185
+ /** The tenant profile's `consentVersion`: the words the member ticked. The server refuses any other. */
186
+ readonly consentVersion: string;
187
+ }
188
+ /** A code is digits only; the consumer screen asks for six. */
189
+ declare const TEXTING_CODE_PATTERN: RegExp;
190
+ interface TextingRepository {
191
+ /** `GET /widget/v1/me/sms-identity`. Settles; never throws. */
192
+ read(opts?: {
193
+ readonly signal?: AbortSignal;
194
+ }): Promise<EverfurResult<EverfurTextingIdentity>>;
195
+ /** `POST .../verification`: text a code to the number. Sent once, never replayed. */
196
+ startVerification(input: EverfurTextingVerificationInput): Promise<EverfurResult<EverfurTextingChallenge>>;
197
+ /** `POST .../verification/confirm`: spend the code. Sent once, never replayed. */
198
+ confirmVerification(challengeId: string, code: string): Promise<EverfurResult<EverfurTextingIdentity>>;
199
+ /** `PUT .../selected-pet`: the pet texts are about. */
200
+ selectPet(petRef: PetRef): Promise<EverfurResult<EverfurTextingIdentity>>;
201
+ /** `DELETE /widget/v1/me/sms-identity`: withdraw consent and stop texts. As available as opting in. */
202
+ optOut(): Promise<EverfurResult<EverfurTextingIdentity>>;
203
+ }
204
+ /** The part of the runtime this repository needs (`useEverfurContext().runtime` satisfies it). */
205
+ interface TextingRuntime {
206
+ readonly isDisposed: boolean;
207
+ readonly registry: {
208
+ readonly services: {
209
+ authFor(userRef: UserRef | null): AuthContext;
210
+ readonly errorPolicy: ErrorPolicyPort | undefined;
211
+ };
212
+ };
213
+ }
214
+ /** The lower seam: one auth context, or an already-built funnel (tests). */
215
+ interface TextingRepositoryDeps {
216
+ readonly auth: AuthContext;
217
+ readonly errorPolicy?: ErrorPolicyPort;
218
+ readonly funnel?: RequestFunnel;
219
+ }
220
+ /** The reason codes a surface branches on, by meaning. Read with `textingReasonOf`. */
221
+ type EverfurTextingReason = 'not_live' | 'code_invalid' | 'phone_linked' | 'pet_ineligible' | 'no_identity' | 'consent_changed' | 'session_required' | 'country_not_allowed' | 'phone_code_limit' | 'tenant_code_limit';
222
+ /** Which texting refusal an error is, or null for any other failure. */
223
+ declare function textingReasonOf(error: EverfurError | null | undefined): EverfurTextingReason | null;
224
+ /** The allowlist mapper for one identity body. `status` is REQUIRED: a body without one is not an identity. */
225
+ declare function textingIdentityFromWire(raw: unknown): EverfurTextingIdentity | null;
226
+ /** The repository over the runtime under your provider. Auth is read at CALL time; a disposed runtime sends nothing. */
227
+ declare function createTextingRepository(runtime: TextingRuntime): TextingRepository;
228
+ /** The same repository over one auth context (or an injected funnel). Internal seam, for deterministic tests. */
229
+ declare function createTextingRepositoryOver(deps: TextingRepositoryDeps): TextingRepository;
230
+
231
+ type TextingPhase = 'loading' | 'failed' | 'enroll' | 'requesting' | 'code' | 'confirming' | 'verified' | 'optingOut' | 'optedOut';
232
+ /** What a refused code most likely was. See the header. */
233
+ type TextingCodeRefusal = 'wrong' | 'expired' | 'spent';
234
+ /** Which verb a refusal belongs to, so a surface retries the right thing. */
235
+ type TextingAction = 'read' | 'start' | 'confirm' | 'selectPet' | 'optOut';
236
+ interface TextingSnapshot {
237
+ readonly phase: TextingPhase;
238
+ /** The identity as the server last reported it, or null before the first read. */
239
+ readonly identity: EverfurTextingIdentity | null;
240
+ /** The outstanding code, while one is out. */
241
+ readonly challenge: EverfurTextingChallenge | null;
242
+ /** The number the current code went to (what the member typed, as E.164), for "request a new code". */
243
+ readonly phoneE164: string | null;
244
+ /** The last refusal, or null. `error.displayMessage` is safe to show. */
245
+ readonly error: EverfurError | null;
246
+ readonly failedAction: TextingAction | null;
247
+ /** For a refused code (`failedAction` 'confirm'), what it most likely was; null otherwise. */
248
+ readonly codeRefusal: TextingCodeRefusal | null;
249
+ /** True while a pet choice is being saved. */
250
+ readonly savingPet: boolean;
251
+ /**
252
+ * True while `requesting` is a new code for the code step ("Request a new code"), so a surface keeps the code step
253
+ * on screen with its link busy instead of flipping back to the number (audit 2026-10-20). False for a first send.
254
+ */
255
+ readonly resending: boolean;
256
+ }
257
+ declare class TextingController {
258
+ private readonly repository;
259
+ private readonly now;
260
+ private snapshot;
261
+ private readonly listeners;
262
+ /** Bumped by every step change; a settlement for an older generation is dropped. */
263
+ private generation;
264
+ private consentVersion;
265
+ private disposed;
266
+ /** `now` is the clock a refused code is judged against (epoch ms); tests pass their own. */
267
+ constructor(repository: TextingRepository, now?: () => number);
268
+ readonly subscribe: (listener: () => void) => (() => void);
269
+ readonly getSnapshot: () => TextingSnapshot;
270
+ private set;
271
+ /** Read the member's identity (the first load, and the way out of `failed`). */
272
+ load(): Promise<void>;
273
+ /** Text a code to `phoneE164` for the consent words of `consentVersion`. */
274
+ start(phoneE164: string, consentVersion: string): Promise<boolean>;
275
+ /** Text a new code to the same number. */
276
+ resend(): Promise<boolean>;
277
+ /** Check the code the member typed. */
278
+ confirm(code: string): Promise<boolean>;
279
+ /** Back to the number step ("use a different number"); any code in flight is abandoned. */
280
+ changeNumber(): void;
281
+ /** From `optedOut`, start a new opt-in. Withdrawing never locks a member out of coming back. */
282
+ reenroll(): void;
283
+ /** Choose the pet texts are about. The step does not change; only `savingPet` and the identity do. */
284
+ selectPet(petRef: PetRef): Promise<boolean>;
285
+ /** Withdraw consent and stop texts. */
286
+ optOut(): Promise<boolean>;
287
+ /** Stop notifying; any settlement after this is dropped. */
288
+ dispose(): void;
289
+ }
290
+
291
+ type EverfurTextingViewStatus = 'signedOut' | 'unavailable' | TextingSnapshot['phase'];
292
+ interface EverfurTextingState {
293
+ readonly status: EverfurTextingViewStatus;
294
+ /** The tenant's public texting profile, or null when it has none. */
295
+ readonly profile: EverfurTextingProfile | null;
296
+ /** The controller's snapshot (identity, outstanding code, last refusal). */
297
+ readonly snapshot: TextingSnapshot;
298
+ /** Text a code to what the member typed. Refuses (settles false) for a number `validateTextingPhone` rejects. */
299
+ start(phone: string): Promise<boolean>;
300
+ resend(): Promise<boolean>;
301
+ confirm(code: string): Promise<boolean>;
302
+ changeNumber(): void;
303
+ reenroll(): void;
304
+ selectPet(petRef: PetRef): Promise<boolean>;
305
+ optOut(): Promise<boolean>;
306
+ /** Read the identity again (the way out of `failed`). */
307
+ refresh(): Promise<void>;
308
+ }
309
+ /** Why a member's input is not ready to send, or null when it is. */
310
+ type EverfurTextingInputProblem = 'phoneInvalid' | 'consentRequired' | 'codeInvalidFormat';
311
+ /** The opt-in's pre-flight: a +1 number and a ticked consent box, before any request is spent. */
312
+ declare function validateTextingEnroll(phone: string, consented: boolean): EverfurTextingInputProblem | null;
313
+ /** The surface asks for six digits, as the consumer screen does. */
314
+ declare const TEXTING_UI_CODE_LENGTH = 6;
315
+ declare function validateTextingCode(code: string): EverfurTextingInputProblem | null;
316
+ /** The tenant's parsed texting profile, or null. Re-parses only when the verdict carries a new blob. */
317
+ declare function useEverfurTextingProfile(): EverfurTextingProfile | null;
318
+ /** The texting repository bound to the runtime under your provider, for a partner's own UI. */
319
+ declare function useEverfurTextingRepository(): TextingRepository;
320
+ /** The member's texting opt-in, step by step. `EverfurTextingOptIn` renders it on either host. */
321
+ declare function useEverfurTexting(): EverfurTextingState;
322
+
323
+ type TextingAskStage = 'hidden' | 'offered' | 'enrolling' | 'verified' | 'dismissed';
324
+ interface TextingAskOptions {
325
+ /** The surface wants the ask (the chat's `chatTextingAsk`). Default true. */
326
+ readonly enabled?: boolean;
327
+ /** The surface is ready for it (the chat: an answer on screen, nothing in flight). Default true. */
328
+ readonly ready?: boolean;
329
+ /** Which surface draws it. A showing belongs to the surface that offered it; the other draws nothing. Default `prompt`. */
330
+ readonly surface?: 'chat' | 'prompt';
331
+ }
332
+ /** The ask's state and its answers. Every function is safe to call in any stage (a call out of turn does nothing). */
333
+ interface TextingAsk {
334
+ readonly stage: TextingAskStage;
335
+ /** The tenant's brand name (its texting profile), for the brand-named lines. Empty while hidden. */
336
+ readonly brand: string;
337
+ /** Which ask this showing is (1, 2 or 3). */
338
+ readonly askNumber: 1 | 2 | 3;
339
+ /** The enrollment underneath (the opt-in's own state and steps). */
340
+ readonly texting: EverfurTextingState;
341
+ /** "Turn on SMS Chat": open the number entry. Answers nothing yet. */
342
+ accept(): void;
343
+ /** "Not now": one ask, unless this showing was already answered. The pop-up's close hands the ask to the chat. */
344
+ dismiss(): void;
345
+ /** The close control on the number entry: back to the two answers. Answers nothing. */
346
+ close(): void;
347
+ /** Text a code to what the member typed (a code request counts as accepting, once per showing). */
348
+ start(phone: string): Promise<boolean>;
349
+ }
350
+ /** The texting ask for the member under the provider. `EverfurChat` and `EverfurTextingPrompt` draw it. */
351
+ declare function useTextingAsk(options?: TextingAskOptions): TextingAsk;
352
+
353
+ /** What the member's identity read said: still unknown (loading, refused, not read), none yet, or one exists. */
354
+ type TextingAskIdentity = 'unknown' | 'none' | 'exists';
355
+ interface TextingAskDueInput {
356
+ /** The surface wants the ask: the chat's `chatTextingAsk`, true for the pop-up. */
357
+ readonly enabled: boolean;
358
+ readonly capabilityGranted: boolean;
359
+ readonly hasProfile: boolean;
360
+ readonly signedIn: boolean;
361
+ /** The schedule was readable and says this is an eligible ask. */
362
+ readonly scheduleEligible: boolean;
363
+ readonly offeredThisSession: boolean;
364
+ readonly identity: TextingAskIdentity;
365
+ /** The chat: a message on screen and nothing in flight. True for the pop-up. */
366
+ readonly surfaceReady: boolean;
367
+ }
368
+ interface TextingAskDue {
369
+ readonly readEnabled: boolean;
370
+ readonly due: boolean;
371
+ }
372
+ declare function resolveTextingAskDue(input: TextingAskDueInput): TextingAskDue;
373
+ /** The parts of a chat message the thread rule reads (a `ChatMessage` is one). */
374
+ interface TextingAskThreadMessage {
375
+ readonly role: string;
376
+ readonly text: string;
377
+ readonly pending?: boolean | undefined;
378
+ /** A platform check-in asks the member something; it is not an answer. */
379
+ readonly checkin?: unknown;
380
+ readonly urgencyLevel?: string | null | undefined;
381
+ }
382
+ /** The chat state the thread rule reads (`UseEverfurChatState` is one). */
383
+ interface TextingAskThreadState {
384
+ readonly messages: ReadonlyArray<TextingAskThreadMessage>;
385
+ readonly status?: string | undefined;
386
+ readonly stopped?: boolean | undefined;
387
+ readonly isBootstrapping?: boolean | undefined;
388
+ readonly isLoadingHistory?: boolean | undefined;
389
+ readonly isStreaming?: boolean | undefined;
390
+ }
391
+ /**
392
+ * The chat's thread is ready for the ask: the line lands after an ANSWER (the consumer rule, everfur-mobile
393
+ * useSmsChatAsk.ts). Nothing is opening, loading or streaming, and the latest turn is a completed Everfur answer:
394
+ * the last row is the assistant's, settled and not empty, not a check-in, and not urgent (`URGENT_LEVELS`); the turn
395
+ * neither failed (the error card) nor was stopped. A vet's message is not Everfur's answer. This only gates the
396
+ * OFFER: a line already offered stays when a later turn fails (the ask's session entry holds it).
397
+ */
398
+ declare function textingAskThreadReady(chat: TextingAskThreadState): boolean;
399
+
400
+ /** The KvPort key (the web port adds its own `everfur:` namespace). */
401
+ declare const TEXTING_ASK_SCHEDULE_KEY = "everfur.texting.askSchedule.v1";
402
+ /** Flat snooze after every ask. Not a backoff. */
403
+ declare const TEXTING_ASK_SNOOZE_MS: number;
404
+ /** Lifetime cap on asks. */
405
+ declare const TEXTING_ASK_MAX_ASKS = 3;
406
+ /** One member's record. */
407
+ interface TextingAskEntry {
408
+ readonly askCount: number;
409
+ /** Do not ask before this instant (epoch ms). Null when never asked. */
410
+ readonly nextAskAt: number | null;
411
+ readonly completed: boolean;
412
+ }
413
+ type TextingAskScheduleRead = {
414
+ readonly status: 'ok';
415
+ readonly entry: TextingAskEntry;
416
+ } | {
417
+ readonly status: 'unreadable';
418
+ };
419
+ declare function isTextingAskEligible(read: TextingAskScheduleRead, now: number): boolean;
420
+
421
+ /**
422
+ * The line for a refused step. The consumer deck's own words per refusal; never the raw server message. For a refused
423
+ * code, pass the snapshot's `codeRefusal` so a typo, an expired code and a used-up code read differently; without it
424
+ * (or when the controller could not tell) the line is the deck's generic "request a new one".
425
+ */
426
+ declare function textingErrorText(error: EverfurError, action: TextingAction | null, codeRefusal?: TextingCodeRefusal | null, copy?: TextingCopy): string;
427
+ /** The support line under a refusal, when the server named the request. Null otherwise. */
428
+ declare function textingSupportText(error: EverfurError, copy?: TextingCopy): string | null;
429
+ /** The line for input the surface refused before any request. */
430
+ declare function textingInputProblemText(problem: EverfurTextingInputProblem, copy?: TextingCopy): string;
431
+ /**
432
+ * The opted-out body: the brand STOP line for a member who texted STOP, the consumer's turn-off line for one who
433
+ * turned texts off in the app. The server tells them apart without a field of its own: an in-app turn-off revokes the
434
+ * identity, so `opted_out` comes back with no number (and the SDK's own turn-off settles to that shape), while a STOP
435
+ * keeps the live identity and its masked number (EFBackend partner_sms_identity.py `partner_status`).
436
+ */
437
+ declare function textingOptedOutBody(identity: EverfurTextingIdentity | null, brand: string, copy?: TextingCopy, brandCopy?: TextingBrandCopy): string;
438
+ /** A +1 E.164 number as a member reads it: `+14155550134` becomes `(415) 555-0134`. Anything else is unchanged. */
439
+ declare function formatTextingPhone(e164: string | null): string;
440
+
441
+ export { toTextingE164 as $, type TextingAskStage as A, type TextingAskThreadMessage as B, COPY_PLACEHOLDER_PREFIX as C, type TextingAskThreadState as D, type EverfurTextingViewStatus as E, type TextingCodeRefusal as F, TextingController as G, type TextingPhase as H, type TextingRepository as I, type TextingRepositoryDeps as J, type TextingRuntime as K, type TextingSnapshot as L, createTextingRepository as M, createTextingRepositoryOver as N, formatTextingPhone as O, isE164 as P, isTextingAskEligible as Q, parseTextingProfile as R, resolveTextingAskDue as S, type TextingCopy as T, textingAskThreadReady as U, textingErrorText as V, textingIdentityFromWire as W, textingInputProblemText as X, textingOptedOutBody as Y, textingReasonOf as Z, textingSupportText as _, type TextingBrandCopy as a, useEverfurTexting as a0, useEverfurTextingProfile as a1, useEverfurTextingRepository as a2, useTextingAsk as a3, validateTextingCode as a4, validateTextingEnroll as a5, type TextingAsk as b, EVERFUR_TEXTING_STATUSES as c, type EverfurTextingChallenge as d, type EverfurTextingIdentity as e, type EverfurTextingInputProblem as f, type EverfurTextingProfile as g, type EverfurTextingReason as h, type EverfurTextingState as i, type EverfurTextingStatus as j, type EverfurTextingVerificationInput as k, TEXTING_ASK_MAX_ASKS as l, TEXTING_ASK_SCHEDULE_KEY as m, TEXTING_ASK_SNOOZE_MS as n, TEXTING_BRAND_COPY as o, TEXTING_CODE_PATTERN as p, TEXTING_COPY as q, TEXTING_COPY_PLACEHOLDERS as r, TEXTING_UI_CODE_LENGTH as s, type TextingAction as t, type TextingAskDue as u, type TextingAskDueInput as v, type TextingAskEntry as w, type TextingAskIdentity as x, type TextingAskOptions as y, type TextingAskScheduleRead as z };
@@ -0,0 +1,210 @@
1
+ import { E as EverfurError } from './EverfurError.d-8NHtlgzA.js';
2
+ import { E as EverfurResult } from './EverfurResult.d-D_-254ZY.js';
3
+ import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-68yrE3BE.js';
4
+ import { A as AuthContext } from './identity.d-BePPZ7Uv.js';
5
+ import { U as UserRef, R as RecordsRequestId, P as PetRef, C as ConversationId } from './ids.d-B2GAAifq.js';
6
+ import { V as VetVisitIntent } from './visitIntent.d-D7_yVp1I.js';
7
+
8
+ /** The push providers the registration route accepts. `apns` is refused with `provider_unsupported` until APNs direct lands. */
9
+ type PushProvider = 'expo' | 'fcm' | 'apns';
10
+ /** The device platforms the registration route accepts. There is no web push in this version. */
11
+ type DevicePlatform = 'ios' | 'android';
12
+ /** What to register: the token your notification library obtained, which provider minted it, and which OS it is for. */
13
+ interface RegisterDeviceInput {
14
+ /**
15
+ * The push token as your library printed it: `ExponentPushToken[...]` from expo-notifications, or the FCM
16
+ * registration token from Firebase Messaging. Never an APNs device token in this version.
17
+ */
18
+ readonly token: string;
19
+ readonly provider: PushProvider;
20
+ readonly platform: DevicePlatform;
21
+ /** Your own stable id for this install, if you keep one (1 to 128 characters). Echoed back, never interpreted. */
22
+ readonly installationId?: string;
23
+ }
24
+ /** The device row as Everfur stored it. The token itself is never echoed. */
25
+ interface RegisteredDevice {
26
+ /** Everfur's id for this device: pass it to `unregisterDevice` on sign-out. */
27
+ readonly deviceId: string;
28
+ readonly provider: PushProvider;
29
+ readonly platform: DevicePlatform;
30
+ readonly installationId: string | null;
31
+ /** ISO 8601. */
32
+ readonly registeredAt: string;
33
+ /** ISO 8601; refreshed by every registration of the same token. */
34
+ readonly lastSeenAt: string;
35
+ }
36
+ /** Both switches, always: the route is a replacement, not a patch. */
37
+ interface NotificationPreferencesInput {
38
+ readonly pushEnabled: boolean;
39
+ readonly emailEnabled: boolean;
40
+ }
41
+ /** The member's switches as Everfur stored them. */
42
+ interface NotificationPreferences {
43
+ readonly pushEnabled: boolean;
44
+ readonly emailEnabled: boolean;
45
+ /** ISO 8601. */
46
+ readonly updatedAt: string;
47
+ }
48
+ interface NotificationsClient {
49
+ /**
50
+ * `POST /widget/v1/me/devices`. Idempotent: the same token is the same device (its `lastSeenAt` moves), and a token
51
+ * another member of your tenant registered rebinds to the calling member. Settles `ok(RegisteredDevice)`;
52
+ * `validationFailed` with `reasonCode` `provider_unsupported` or `token_invalid`; `serviceUnavailable` with
53
+ * `reasonCode` `device_cipher_unavailable` (retry later); `rateLimited` above ten registrations a minute; the
54
+ * not-found error while notifications are not enabled for your tenant; `sessionRequired` for a publishable-key caller.
55
+ */
56
+ registerDevice(input: RegisterDeviceInput, opts?: {
57
+ readonly signal?: AbortSignal;
58
+ }): Promise<EverfurResult<RegisteredDevice>>;
59
+ /**
60
+ * `DELETE /widget/v1/me/devices/{device_id}`. Settles `ok(undefined)` on 204; an unknown id and another member's
61
+ * device are the same not-found error.
62
+ */
63
+ unregisterDevice(deviceId: string, opts?: {
64
+ readonly signal?: AbortSignal;
65
+ }): Promise<EverfurResult<void>>;
66
+ /** `PUT /widget/v1/me/notification-preferences`. Settles `ok(NotificationPreferences)`. */
67
+ setPreferences(input: NotificationPreferencesInput, opts?: {
68
+ readonly signal?: AbortSignal;
69
+ }): Promise<EverfurResult<NotificationPreferences>>;
70
+ }
71
+ /**
72
+ * The part of the runtime this client needs: the current auth at call time, the partner's error policy, and whether
73
+ * the runtime is gone. `useEverfurContext().runtime` (any `EverfurRuntime`) satisfies it; the narrow shape keeps this
74
+ * subpath's public types to what it reads.
75
+ */
76
+ interface NotificationsRuntime {
77
+ readonly isDisposed: boolean;
78
+ readonly registry: {
79
+ readonly services: {
80
+ authFor(userRef: UserRef | null): AuthContext;
81
+ readonly errorPolicy: ErrorPolicyPort | undefined;
82
+ };
83
+ };
84
+ }
85
+ /** The sub-reasons a notifications call, or a delivery, can carry as `EverfurError.reasonCode`. */
86
+ type NotificationsReasonCode = 'provider_unsupported' | 'token_invalid' | 'device_cipher_unavailable' | 'credentials_missing';
87
+ /**
88
+ * DEVELOPER-FACING explanations, one per reason. Log them, show them on a developer screen, never render them to a
89
+ * member: `displayMessage` is the copy a person sees. `credentials_missing` is not a route answer but the reason a
90
+ * delivery is skipped on Everfur's side (visible on the events API and in the partner console); it is here so one
91
+ * table explains every reason this surface can name.
92
+ */
93
+ declare const NOTIFICATIONS_REASON_MESSAGES: Readonly<Record<NotificationsReasonCode, string>>;
94
+ /** The developer-facing sentence for an error's `reasonCode`, or null when it carries none this surface knows. */
95
+ declare function explainNotificationsReason(error: EverfurError): string | null;
96
+ /**
97
+ * The client over the runtime under your provider (`useEverfurContext().runtime`). Auth is read at call time, so the
98
+ * client can be built once and reused across sign-ins; a disposed runtime settles every verb without a request.
99
+ */
100
+ declare function createNotificationsClient(runtime: NotificationsRuntime): NotificationsClient;
101
+
102
+ /** What the hook needs from you: the token your notification library obtained, or null until you have one. */
103
+ interface EverfurNotificationsOptions {
104
+ /**
105
+ * The push token as your library printed it (`ExponentPushToken[...]`, or an FCM registration token), or null
106
+ * while you do not have one (permission not asked, not granted, or the token not yet fetched). Nothing is
107
+ * registered without it; pass it as soon as you have it and the hook registers.
108
+ */
109
+ readonly token: string | null;
110
+ /** `expo` for a token from expo-notifications, `fcm` for a Firebase registration token. */
111
+ readonly provider: PushProvider;
112
+ readonly platform: DevicePlatform;
113
+ /** Your own stable id for this install, if you keep one. */
114
+ readonly installationId?: string;
115
+ }
116
+ /**
117
+ * `signed_out`: no signed-in user on the provider (nothing to register). `no_token`: a user, no token yet.
118
+ * `registering` / `registered` / `failed` / `unavailable`: the registration of the current token.
119
+ * `unavailable` is the dark tenant: notifications are not enabled for your client (the routes answer 404).
120
+ * `unregistered`: `unregister()` was called; `register()` registers again.
121
+ */
122
+ type EverfurNotificationsStatus = 'signed_out' | 'no_token' | 'registering' | 'registered' | 'unavailable' | 'failed' | 'unregistered';
123
+ interface EverfurNotificationsState {
124
+ readonly status: EverfurNotificationsStatus;
125
+ /** The device Everfur registered for this install and user, or null. */
126
+ readonly device: RegisteredDevice | null;
127
+ /** The settled failure of the last registration, or null. `error.displayMessage` is safe to show. */
128
+ readonly error: EverfurError | null;
129
+ /** Register the current token now (a retry after `failed`, or after `unregister()`). Settles, never throws. */
130
+ register(): Promise<EverfurResult<RegisteredDevice>>;
131
+ /** Unregister this install's device for the signed-in user. Settles, never throws. */
132
+ unregister(): Promise<EverfurResult<void>>;
133
+ /** The member's push and email switches, both at once (`PUT /widget/v1/me/notification-preferences`). */
134
+ setPreferences(input: NotificationPreferencesInput): Promise<EverfurResult<NotificationPreferences>>;
135
+ }
136
+ /**
137
+ * The notifications client bound to the runtime under your provider, for the imperative calls (`setPreferences`
138
+ * from a settings screen, say). Auth is read at call time, so one client serves every sign-in.
139
+ */
140
+ declare function useEverfurNotificationsClient(): NotificationsClient;
141
+ /**
142
+ * Register this install's push token for the signed-in member, keep it registered as the token and the user
143
+ * change, and unregister it before sign-out. Call it once, high in the tree under `EverfurProvider`.
144
+ */
145
+ declare function useEverfurNotifications(options: EverfurNotificationsOptions): EverfurNotificationsState;
146
+
147
+ /** The version of the routing block this release reads. */
148
+ declare const EVERFUR_NOTIFICATION_VERSION = 1;
149
+ /** The closed target kinds, in the backend's order (`partner_target.py` TARGET_KINDS). */
150
+ declare const EVERFUR_NOTIFICATION_TARGET_KINDS: readonly ["record_request", "pet", "visit", "case"];
151
+ /** One target kind. */
152
+ type EverfurNotificationTargetKind = (typeof EVERFUR_NOTIFICATION_TARGET_KINDS)[number];
153
+ /**
154
+ * The event types Everfur builds a push target for (`partner_target.py` TARGET_BUILDERS), in its order. The member
155
+ * events, the urgency verdict and the endpoint test event reach the partner's webhook only and never a device, and
156
+ * `visit.completed`, `visit.rescheduled` and `visit.ended` carry no consumer copy, so they are never pushed either;
157
+ * they are listed because the platform builds their target.
158
+ */
159
+ declare const EVERFUR_NOTIFICATION_EVENT_TYPES: readonly ["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"];
160
+ /** One pushed event type. */
161
+ type EverfurNotificationEventType = (typeof EVERFUR_NOTIFICATION_EVENT_TYPES)[number];
162
+ /** What a tapped notification is about, keyed on `kind`. The optional references are null when the push carried none. */
163
+ type EverfurNotificationTarget = {
164
+ /**
165
+ * A records request (`record_request.updated`, `record.ready`, and `record.activation`, which says what the
166
+ * request's parse found): open that request.
167
+ */
168
+ readonly kind: 'record_request';
169
+ readonly requestId: RecordsRequestId;
170
+ readonly petRef: PetRef | null;
171
+ } | {
172
+ /** A pet: `pet.vaccination.due` opens that pet's records, `chat.reminder_due` that pet's chat. */
173
+ readonly kind: 'pet';
174
+ readonly petRef: PetRef;
175
+ } | {
176
+ /**
177
+ * A vet visit (`visit.*`): open that visit. `visitRef` is the partner visit reference the visit events carry.
178
+ * `intent` is what to open for it, derived from the event type with the consumer app's routing (the push
179
+ * itself carries none): `visit` for a booking or a change to it, `join` for a reminder, `messages` for the
180
+ * vet's reply or the follow-up, `summary` for a completed visit. Pass both to `useVetVisit().openVisit`.
181
+ * `null` for a cancelled or missed visit: there is nothing left to open, so route to a new booking.
182
+ */
183
+ readonly kind: 'visit';
184
+ readonly visitRef: string;
185
+ readonly petRef: PetRef | null;
186
+ readonly intent: VetVisitIntent | null;
187
+ } | {
188
+ /** A follow-up case (`chat.follow_up_due`): open the conversation the check-in landed in. */
189
+ readonly kind: 'case';
190
+ readonly caseRef: string;
191
+ readonly conversationId: ConversationId | null;
192
+ readonly petRef: PetRef | null;
193
+ };
194
+ /** A parsed push: the event it announces and the thing to open. Frozen. */
195
+ interface EverfurNotification {
196
+ /** `evt_` plus the public event id, the same id the webhook envelope for this event carries. */
197
+ readonly eventId: string;
198
+ readonly eventType: EverfurNotificationEventType;
199
+ readonly target: EverfurNotificationTarget;
200
+ }
201
+ /**
202
+ * Read the Everfur routing block out of a received push, or null when there is none or it is not one Everfur would
203
+ * send. Pure and total: it never throws, whatever it is handed.
204
+ *
205
+ * Pass the object your notification library gave you: an expo-notifications `Notification` or `NotificationResponse`,
206
+ * an FCM `RemoteMessage`, or its `data` map. Route on `target.kind`; `eventType` says why the push was sent.
207
+ */
208
+ declare function parseEverfurNotification(payload: unknown): EverfurNotification | null;
209
+
210
+ export { type DevicePlatform as D, type EverfurNotificationsOptions as E, NOTIFICATIONS_REASON_MESSAGES as N, type PushProvider as P, type RegisterDeviceInput as R, type EverfurNotificationsState as a, EVERFUR_NOTIFICATION_EVENT_TYPES as b, EVERFUR_NOTIFICATION_TARGET_KINDS as c, EVERFUR_NOTIFICATION_VERSION as d, type EverfurNotification as e, type EverfurNotificationEventType as f, type EverfurNotificationTarget as g, type EverfurNotificationTargetKind as h, type EverfurNotificationsStatus as i, type NotificationPreferences as j, type NotificationPreferencesInput as k, type NotificationsClient as l, type NotificationsReasonCode as m, type NotificationsRuntime as n, type RegisteredDevice as o, createNotificationsClient as p, explainNotificationsReason as q, parseEverfurNotification as r, useEverfurNotifications as s, useEverfurNotificationsClient as u };