@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
@@ -23,6 +23,8 @@ return Object.freeze({ok:false,error:error})}var EverfurConfigError=class _Everf
23
23
  /* @__PURE__ */Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),
24
24
  /* @__PURE__ */Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),
25
25
  /* @__PURE__ */Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),
26
+ /* @__PURE__ */Object.freeze({wireCode:"catalog_empty_refused",envelope:"http_envelope",httpStatus:409,retryable:false}),
27
+ /* @__PURE__ */Object.freeze({wireCode:"catalog_shrink_refused",envelope:"http_envelope",httpStatus:409,retryable:false}),
26
28
  /* @__PURE__ */Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
27
29
  /* @__PURE__ */Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),
28
30
  /* @__PURE__ */Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),
@@ -47,6 +49,7 @@ return Object.freeze({ok:false,error:error})}var EverfurConfigError=class _Everf
47
49
  /* @__PURE__ */Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),
48
50
  /* @__PURE__ */Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),
49
51
  /* @__PURE__ */Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),
52
+ /* @__PURE__ */Object.freeze({wireCode:"linked_account_read_only",envelope:"http_envelope",httpStatus:409,retryable:false}),
50
53
  /* @__PURE__ */Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),
51
54
  /* @__PURE__ */Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),
52
55
  /* @__PURE__ */Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),
@@ -90,7 +93,7 @@ return Object.freeze({ok:false,error:error})}var EverfurConfigError=class _Everf
90
93
  /* @__PURE__ */Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
91
94
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),
92
95
  /* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
93
- /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row=>row.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",session_revoked:"authExpired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",unrestrictedKeyRequired:"accessDenied",user_ref_invalid:"validationFailed",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row=BY_KEY.get(candidate+key);if(row)return row}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",runtimeDisposed:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){case"DAILYQUOTAEXCEEDED":case"QUOTAEXCEEDED":return"quotaExceeded";case"RATELIMITED":case"TOOMANYREQUESTS":case"TELEVETRATELIMITED":return"rateLimited";case"IDEMPOTENCYKEYCONFLICT":case"IDEMPOTENCYCONFLICT":return"idempotencyConflict";case"ACCESSDENIED":case"FORBIDDEN":return"accessDenied";case"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"RUNTIMEDISPOSED":return"runtimeDisposed";case"NOTFOUND":case"CONVERSATIONNOTFOUND":return"conversationNotFound";case"PETNOTFOUND":return"petNotFound";case"TIMEOUT":case"STREAMTIMEOUT":return"streamTimeout";case"MEDIAUPLOADFAILED":case"UNRECOGNIZEDVIDEOFORMAT":case"FILETOOSMALL":return"mediaUploadFailed";case"MODERATIONBLOCKED":return"moderationBlocked";case"UPSTREAMLLMTIMEOUT":return"upstreamLlmTimeout";case"INTERNALERROR":case"INTERNALSERVERERROR":return"internalError";case"STREAMINCOMPLETE":case"CHATSTREAMINCOMPLETE":return"streamIncomplete";case"INVALIDANALYSISTYPE":case"INVALIDUPLOADPURPOSE":return"unknown";default:return"unknown"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:VALIDATION_FAILED_COPY,sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."}),SESSION_REVOKED_COPY="This session has ended. Please sign in again.";function displayFor(code,wireCode){return(code==="authRejected"||code==="authExpired")&&typeof wireCode=="string"&&wireCode.trim().toLowerCase()==="session_revoked"?SESSION_REVOKED_COPY:userFacingError(code)}function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),error={code:code,category:categoryFor(code),retryable:opts?.retryable??isRetryableCode(code),displayMessage:displayFor(code,opts?.wireCode)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}function errorFrame(fields){/* @__PURE__ */
96
+ /* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row=>row.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",session_revoked:"authExpired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",unrestrictedKeyRequired:"accessDenied",user_ref_invalid:"validationFailed",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",linked_account_read_only:"conflict",catalog_empty_refused:"conflict",catalog_shrink_refused:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row=BY_KEY.get(candidate+key);if(row)return row}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",runtimeDisposed:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){case"DAILYQUOTAEXCEEDED":case"QUOTAEXCEEDED":return"quotaExceeded";case"RATELIMITED":case"TOOMANYREQUESTS":case"TELEVETRATELIMITED":return"rateLimited";case"IDEMPOTENCYKEYCONFLICT":case"IDEMPOTENCYCONFLICT":return"idempotencyConflict";case"ACCESSDENIED":case"FORBIDDEN":return"accessDenied";case"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"RUNTIMEDISPOSED":return"runtimeDisposed";case"NOTFOUND":case"CONVERSATIONNOTFOUND":return"conversationNotFound";case"PETNOTFOUND":return"petNotFound";case"TIMEOUT":case"STREAMTIMEOUT":return"streamTimeout";case"MEDIAUPLOADFAILED":case"UNRECOGNIZEDVIDEOFORMAT":case"FILETOOSMALL":return"mediaUploadFailed";case"MODERATIONBLOCKED":return"moderationBlocked";case"UPSTREAMLLMTIMEOUT":return"upstreamLlmTimeout";case"INTERNALERROR":case"INTERNALSERVERERROR":return"internalError";case"STREAMINCOMPLETE":case"CHATSTREAMINCOMPLETE":return"streamIncomplete";case"INVALIDANALYSISTYPE":case"INVALIDUPLOADPURPOSE":return"unknown";default:return"unknown"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:VALIDATION_FAILED_COPY,sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."}),SESSION_REVOKED_COPY="This session has ended. Please sign in again.",LINKED_ACCOUNT_READ_ONLY="linked_account_read_only";function displayFor(code,wireCode,reasonCode){return code==="conflict"&&reasonCode===LINKED_ACCOUNT_READ_ONLY?ACCESS_DENIED_COPY:(code==="authRejected"||code==="authExpired")&&typeof wireCode=="string"&&wireCode.trim().toLowerCase()==="session_revoked"?SESSION_REVOKED_COPY:userFacingError(code)}function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),linkedReadOnly=code==="conflict"&&opts?.reasonCode===LINKED_ACCOUNT_READ_ONLY,error={code:code,category:categoryFor(code),retryable:opts?.retryable??(linkedReadOnly?false:isRetryableCode(code)),displayMessage:displayFor(code,opts?.wireCode,linkedReadOnly?LINKED_ACCOUNT_READ_ONLY:null)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}function errorFrame(fields){/* @__PURE__ */
94
97
  return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fields.retryable,wireMessage:fields.wireMessage,synthesized:fields.synthesized,lastEventId:fields.lastEventId,serverRequestId:null})}function mintFailedError(cause,refusal){let message=cause instanceof Error?cause.message:typeof cause=="string"?cause:null;return makeEverfurError("authRejected",{retryable:false,...refusal?.wireCode?{wireCode:refusal.wireCode}:{},...refusal?.requestId?{requestId:refusal.requestId}:{},...message?{wireMessage:message}:{},...cause!=null?{raw:cause}:{}})}function authHeaders(auth){let headers={};return auth.mode==="personalized"?headers.authorization=`Bearer ${auth.token}`:headers["x-everfur-partner-key"]=auth.publishableKey,auth.userRef&&(headers["x-everfur-user-ref"]=auth.userRef),auth.sessionId&&(headers["x-everfur-session-id"]=auth.sessionId),headers}function withAuthHeaders(req,auth){return{...req,headers:{...stripAuthHeaders(req.headers),...authHeaders(auth)}}}function stripAuthHeaders(headers){if(!headers)return{};let out={};for(let[key,value]of Object.entries(headers)){let lower=key.toLowerCase();lower==="authorization"||lower==="x-everfur-partner-key"||(out[key]=value)}return out}async function authedSend(req,ctx){if(ctx.mode==="anonymous")return ctx.transport.request(withAuthHeaders(req,{mode:"anonymous",publishableKey:ctx.publishableKey,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));let token;try{token=await ctx.identity.currentToken()}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause))}let first=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:token,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));if(first.ok||first.error.httpStatus!==401)return first;let refreshed;try{refreshed=await ctx.identity.currentToken({forceRefresh:!0})}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause,{wireCode:wireCodeOf(first.error.raw),requestId:first.error.requestId}))}let retry=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:refreshed,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));return!retry.ok&&retry.error.httpStatus===401?(ctx.identity.reportRejected?.(),err(refusedAfterRemintError(retry.error))):retry}function refusedAfterRemintError(refusal){let raw=refusal.raw,wireCode=wireCodeOf(raw);return makeEverfurError("authRejected",{retryable:false,...refusal.httpStatus!==void 0?{httpStatus:refusal.httpStatus}:{},...refusal.requestId?{requestId:refusal.requestId}:{},...wireCode?{wireCode:wireCode}:{},...refusal.reasonCode?{reasonCode:refusal.reasonCode}:{},...refusal.wireMessage?{wireMessage:refusal.wireMessage}:{},...raw!=null?{raw:raw}:{}})}function wireCodeOf(body){if(typeof body!="object"||body===null)return null;let b=body,code=(typeof b.error=="object"&&b.error!==null?b.error.code:void 0)??b.code;return typeof code=="string"&&code.length>0?code:null}function networkError(cause){return makeEverfurError("internalError",{retryable:true,wireMessage:describeCause(cause)})}function describeCause(cause){return cause instanceof Error?cause.message:typeof cause=="string"?cause:"network request failed"}var FUNNEL_UNARY_TIMEOUT_MS=3e4,RETRY_OVERRIDE_MAX_MS=BACKOFF_CAP_MS*2,IDEMPOTENCY_HEADER="idempotency-key",MUTATING_METHODS=/* @__PURE__ */new Set(["POST","PUT","PATCH","DELETE"]),NOOP_OBSERVER=/* @__PURE__ */Object.freeze({onEvent(){}}),defaultFunnelTimers=/* @__PURE__ */Object.freeze({setTimeout:(handler,ms)=>setTimeout(handler,ms),clearTimeout:handle=>clearTimeout(handle),now:()=>Date.now()});function seededIdempotencyKey(seed){let safe=seed.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return safe.length===0?null:`efs_${safe}`.slice(0,128)}function createRequestFunnel(deps){let observer=deps.observer??NOOP_OBSERVER,timers=deps.timers??defaultFunnelTimers,rng=deps.rng??Math.random,sleep=deps.sleep??((ms,signal)=>delayAbortable(ms,timers,signal)),ceiling=deps.maxAttempts??MAX_RETRY_ATTEMPTS,timeoutMs=deps.unaryTimeoutMs??FUNNEL_UNARY_TIMEOUT_MS,mintKey=deps.newIdempotencyKey??defaultIdempotencyKeyFactory(),emit=event=>{try{observer.onEvent(event)}catch{}};async function send(call,req,opts){let perCallMaxAttempts=opts?.maxAttempts,maxAttempts=Math.max(1,perCallMaxAttempts??ceiling),idempotent=opts?.idempotent??MUTATING_METHODS.has(req.method),seeded=opts?.idempotencyKey===void 0?null:seededIdempotencyKey(opts.idempotencyKey),idempotencyKey=idempotent?seeded??mintKey():null,base=assembleHeaders(req,idempotencyKey),attempt=0;for(;;){let stamp=extra=>/* @__PURE__ */Object.freeze({call:call,method:req.method,path:req.path,attempt:attempt,...idempotencyKey?{idempotencyKey:idempotencyKey}:{},...extra});emit(stamp({phase:"attempt"}));let deadline=boundedSignal(timeoutMs,timers),merged=mergeSignals(deadline.signal,req.signal),settled;try{settled=await authedSend({...base,signal:merged.signal},deps.auth)}catch(cause){settled=err(networkError(cause))}finally{merged.dispose(),deadline.cancel()}if(settled.ok)return emit(stamp({phase:"settled",ok:true,reason:"ok"})),settled;let error=settled.error,decision=decideRetry(error,attempt,{maxAttempts:maxAttempts,rng:rng,now:timers.now(),aborted:req.signal?.aborted===true,...perCallMaxAttempts!==void 0?{perCallMaxAttempts:perCallMaxAttempts}:{},...deps.errorPolicy!==void 0?{policy:deps.errorPolicy}:{}}),settledEvent={ok:false,code:error.code,reason:decision.reason,...error.httpStatus!==void 0?{httpStatus:error.httpStatus}:{},...error.requestId!==void 0?{requestId:error.requestId}:{}};if(!decision.retry)return emit(stamp({phase:"settled",...settledEvent})),err(error);if(emit(stamp({phase:"retry",...settledEvent,delayMs:decision.delayMs})),await sleep(decision.delayMs,req.signal),req.signal?.aborted===true)return emit(stamp({phase:"settled",...settledEvent,reason:"aborted"})),err(error);attempt+=1}}async function authorize(req){return withAuthHeaders(req,await resolveDeviceAuth(deps.auth))}async function*stream(call,req,signal){emit(
95
98
  /* @__PURE__ */Object.freeze({call:call,phase:"stream.open",method:req.method,path:req.path,attempt:0}));try{yield*deps.auth.transport.stream(req,signal)}catch{yield errorFrame({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null})}}/* @__PURE__ */
96
99
  return Object.freeze({send:send,authorize:authorize,stream:stream})}function assembleHeaders(req,idempotencyKey){let headers={};for(let[key,value]of Object.entries(req.headers??{}))key.toLowerCase()!==IDEMPOTENCY_HEADER&&(headers[key]=value);return idempotencyKey!==null&&(headers["Idempotency-Key"]=idempotencyKey),{...req,headers:headers}}function defaultIdempotencyKeyFactory(){let counter=0;return()=>`efk_${Date.now().toString(36)}_${(counter++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}var POLICY_MAX_ATTEMPTS_CAP=10;function decideRetry(error,attempt,ctx){if(ctx.aborted)return{retry:false,reason:"aborted"};let throttle=throttleKind(error);if(throttle==="quota")return{retry:false,reason:"daily-quota-exhausted"};if(throttle!=="burst"&&!isAutoRetryable(error.code))return{retry:false,reason:"terminal-code"};let reason=throttle==="burst"?"burst-throttle":"retryable-code";if((()=>{if(ctx.policy===void 0)return false;try{return!ctx.policy.shouldRetry(error.code,attempt)}catch{return false}})())return{retry:false,reason:"terminal-code"};let policyCeiling=()=>{if(ctx.policy===void 0)return null;let raw;try{raw=ctx.policy.maxAttempts(error.code)}catch{return null}return typeof raw!="number"||!Number.isFinite(raw)?null:Math.max(1,Math.min(POLICY_MAX_ATTEMPTS_CAP,Math.floor(raw)))},ceiling=ctx.perCallMaxAttempts??policyCeiling()??ctx.maxAttempts;if(attempt+1>=ceiling)return{retry:false,reason:"attempts-exhausted"};let override=retryOverrideMs(error,ctx.now);return override!==null?override>RETRY_OVERRIDE_MAX_MS?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:reason,delayMs:override}:{retry:true,reason:reason,delayMs:backoffDelayMs(attempt,ctx.rng)}}function throttleKind(error){let code=error.code==="unknown"?fromWire(rawWireCode(error.raw)):error.code;return code==="quotaExceeded"?"quota":code==="rateLimited"||error.httpStatus===429?"burst":null}function retryOverrideMs(error,now){let at2=findResetsAt(error.raw);if(at2!==null){let delta=at2-now;return delta>0?delta:0}let wait=findRetryAfterSeconds(error.raw);return wait===null?null:Math.round(wait*1e3)}function findRetryAfterSeconds(raw){for(let scope of candidateScopes(raw)){let value=scope.retry_after_seconds;if(typeof value=="number"&&Number.isFinite(value)&&value>=0)return value}return null}function findResetsAt(raw){for(let scope of candidateScopes(raw)){let value=scope.resets_at,parsed=parseInstantMs(value);if(parsed!==null)return parsed}return null}function candidateScopes(raw){if(!isRecord(raw))return[];let out=[raw];for(let nested of["error","detail"]){let value=raw[nested];isRecord(value)&&out.push(value)}return out}function parseInstantMs(value){if(typeof value=="number"&&Number.isFinite(value))return value<1e11?Math.round(value*1e3):Math.round(value);if(typeof value=="string"&&value.trim().length>0){let parsed=Date.parse(value);return Number.isFinite(parsed)?parsed:null}return null}function rawWireCode(raw){for(let scope of candidateScopes(raw)){let code=scope.code;if(typeof code=="string"&&code.length>0)return code}return null}function isRecord(value){return typeof value=="object"&&value!==null}async function resolveDeviceAuth(auth){return auth.mode==="anonymous"?{mode:"anonymous",publishableKey:auth.publishableKey,userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}:{mode:"personalized",token:await auth.identity.currentToken(),userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}}function boundedSignal(ms,timers){let ctrl=new AbortController,handle=timers.setTimeout(()=>ctrl.abort(),ms);return{signal:ctrl.signal,cancel:()=>timers.clearTimeout(handle)}}function mergeSignals(deadline,caller){let noop=()=>{};if(!caller)return{signal:deadline,dispose:noop};let ctrl=new AbortController;if(deadline.aborted||caller.aborted)return ctrl.abort(),{signal:ctrl.signal,dispose:noop};let onAbort=()=>ctrl.abort();return deadline.addEventListener("abort",onAbort,{once:true}),caller.addEventListener("abort",onAbort,{once:true}),{signal:ctrl.signal,dispose:()=>{deadline.removeEventListener("abort",onAbort),caller.removeEventListener("abort",onAbort)}}}function delayAbortable(ms,timers,signal){return ms<=0||signal?.aborted===true?Promise.resolve():new Promise(resolve=>{let handle=timers.setTimeout(()=>{signal?.removeEventListener("abort",onAbort),resolve()},ms),onAbort=()=>{timers.clearTimeout(handle),resolve()};signal?.addEventListener("abort",onAbort,{once:true})})}function wireCodeOf2(error){let raw=error.raw;if(typeof raw!="object"||raw===null)return null;let code=raw.code;return typeof code=="string"&&code.length>0?code:null}function foldWireReason(error,table){let wire=wireCodeOf2(error);if(wire===null)return error;let fold=table[wire];return fold===void 0?error:makeEverfurError(fold.code,{retryable:fold.retryable,...error.httpStatus!==void 0?{httpStatus:error.httpStatus}:{},...error.requestId!==void 0?{requestId:error.requestId}:{},wireCode:wire,reasonCode:wire,...error.wireMessage!==void 0?{wireMessage:error.wireMessage}:{},raw:error.raw})}var NOTIFICATIONS_REASON_MESSAGES=/* @__PURE__ */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."}),REASONS=/* @__PURE__ */new Set(["provider_unsupported","token_invalid","device_cipher_unavailable","credentials_missing"]);function explainNotificationsReason(error){let reason=error.reasonCode;return reason!==void 0&&REASONS.has(reason)?NOTIFICATIONS_REASON_MESSAGES[reason]:null}var PROVIDERS=/* @__PURE__ */new Set(["expo","fcm","apns"]),PLATFORMS=/* @__PURE__ */new Set(["ios","android"]),TOKEN_MAX=4096,INSTALLATION_ID_MAX=128,DEVICE_ID_MAX=64,CONTROL_OR_SPACE=/[\0- ]/;function invalid(wireMessage,reasonCode){return makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage,...reasonCode?{reasonCode:reasonCode}:{}})}function validateRegister(input){if(typeof input!="object"||input===null)return invalid("registerDevice needs an input object");let{token:token,provider:provider,platform:platform,installationId:installationId}=input;return typeof provider!="string"||!PROVIDERS.has(provider)?invalid("provider must be expo, fcm or apns"):typeof platform!="string"||!PLATFORMS.has(platform)?invalid("platform must be ios or android"):typeof token!="string"||token.trim().length===0||token.length>TOKEN_MAX||CONTROL_OR_SPACE.test(token)?invalid(`token must be a push token of 1..${TOKEN_MAX} characters with no whitespace`,"token_invalid"):installationId!==void 0&&(typeof installationId!="string"||installationId.length===0||installationId.length>INSTALLATION_ID_MAX)?invalid(`installationId must be 1..${INSTALLATION_ID_MAX} characters`):null}function validateDeviceId(deviceId){return typeof deviceId!="string"||deviceId.length===0||deviceId.length>DEVICE_ID_MAX?invalid(`deviceId must be 1..${DEVICE_ID_MAX} characters`):CONTROL_OR_SPACE.test(deviceId)||deviceId.includes("/")||deviceId==="."||deviceId===".."?invalid("deviceId is not a device id"):null}function validatePreferences(input){if(typeof input!="object"||input===null)return invalid("setPreferences needs an input object");let{pushEnabled:pushEnabled,emailEnabled:emailEnabled}=input;return typeof pushEnabled!="boolean"||typeof emailEnabled!="boolean"?invalid("pushEnabled and emailEnabled must both be booleans: the route replaces both switches"):null}function str(value){return typeof value=="string"&&value.length>0?value:null}function parseDevice(raw){if(typeof raw!="object"||raw===null)return null;let o=raw,deviceId=str(o.device_id),provider=str(o.provider),platform=str(o.platform),registeredAt=str(o.registered_at),lastSeenAt=str(o.last_seen_at);if(deviceId===null||provider===null||platform===null||registeredAt===null||lastSeenAt===null||!PROVIDERS.has(provider)||!PLATFORMS.has(platform))return null;let installation=o.installation_id;/* @__PURE__ */
@@ -0,0 +1,441 @@
1
+ import { E as EverfurError } from './EverfurError.d-8NHtlgzA.cjs';
2
+ import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
3
+ import { R as RequestFunnel } from './requestFunnel.d-RZex94XX.cjs';
4
+ import { A as AuthContext } from './identity.d-CJfnWOdH.cjs';
5
+ import { P as PetRef, U as UserRef } from './ids.d-B2GAAifq.cjs';
6
+ import { E as ErrorPolicyPort } from './ErrorPolicyPort.d-DirW9hgO.cjs';
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 };