@spare-technologies/spare-link 0.1.0-beta.0 → 1.0.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 (561) hide show
  1. package/README.md +119 -81
  2. package/lib/commonjs/core/models/payment-return-params.js +245 -20
  3. package/lib/commonjs/core/models/payment-return-params.js.map +1 -1
  4. package/lib/commonjs/core/models/pending-session-record.js +2 -0
  5. package/lib/commonjs/core/models/pending-session-record.js.map +1 -0
  6. package/lib/commonjs/core/services/hosted-flow-controller.js +333 -0
  7. package/lib/commonjs/core/services/hosted-flow-controller.js.map +1 -0
  8. package/lib/commonjs/core/services/hosted-flow-state.js +96 -0
  9. package/lib/commonjs/core/services/hosted-flow-state.js.map +1 -0
  10. package/lib/commonjs/index.js +42 -164
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/internal/hosted/bridge-message.js +107 -0
  13. package/lib/commonjs/internal/hosted/bridge-message.js.map +1 -0
  14. package/lib/commonjs/internal/hosted/hosted-url.js +41 -0
  15. package/lib/commonjs/internal/hosted/hosted-url.js.map +1 -0
  16. package/lib/commonjs/internal/index.js +0 -7
  17. package/lib/commonjs/internal/index.js.map +1 -1
  18. package/lib/commonjs/internal/redact-uri.js +59 -15
  19. package/lib/commonjs/internal/redact-uri.js.map +1 -1
  20. package/lib/commonjs/internal/secure-store-pending-session-store.js +20 -25
  21. package/lib/commonjs/internal/secure-store-pending-session-store.js.map +1 -1
  22. package/lib/commonjs/internal/url-parts.js +145 -0
  23. package/lib/commonjs/internal/url-parts.js.map +1 -0
  24. package/lib/commonjs/public/index.js +0 -37
  25. package/lib/commonjs/public/index.js.map +1 -1
  26. package/lib/commonjs/public/payment-result.js +16 -4
  27. package/lib/commonjs/public/payment-result.js.map +1 -1
  28. package/lib/commonjs/public/recovery-result.js +7 -18
  29. package/lib/commonjs/public/recovery-result.js.map +1 -1
  30. package/lib/commonjs/public/spare-link-config.js +41 -16
  31. package/lib/commonjs/public/spare-link-config.js.map +1 -1
  32. package/lib/commonjs/public/spare-link-event.js +27 -33
  33. package/lib/commonjs/public/spare-link-event.js.map +1 -1
  34. package/lib/commonjs/public/spare-link-instance.js +67 -77
  35. package/lib/commonjs/public/spare-link-instance.js.map +1 -1
  36. package/lib/commonjs/public/spare-link-session.js +2 -9
  37. package/lib/commonjs/public/spare-link-session.js.map +1 -1
  38. package/lib/commonjs/public/spare-link.js +0 -12
  39. package/lib/commonjs/public/spare-link.js.map +1 -1
  40. package/lib/commonjs/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +4 -4
  41. package/lib/commonjs/ui/hooks/use-hosted-flow-state.js.map +1 -0
  42. package/lib/commonjs/ui/hosted/hosted-payment-page.js +177 -0
  43. package/lib/commonjs/ui/hosted/hosted-payment-page.js.map +1 -0
  44. package/lib/commonjs/ui/hosted/hosted-payment-webview.js +168 -0
  45. package/lib/commonjs/ui/hosted/hosted-payment-webview.js.map +1 -0
  46. package/lib/commonjs/ui/screens/index.js +3 -17
  47. package/lib/commonjs/ui/screens/index.js.map +1 -1
  48. package/lib/commonjs/ui/screens/page-unavailable-screen.js +101 -0
  49. package/lib/commonjs/ui/screens/page-unavailable-screen.js.map +1 -0
  50. package/lib/commonjs/ui/spare-link-host.js +220 -234
  51. package/lib/commonjs/ui/spare-link-host.js.map +1 -1
  52. package/lib/commonjs/ui/widgets/index.js +3 -10
  53. package/lib/commonjs/ui/widgets/index.js.map +1 -1
  54. package/lib/commonjs/version.js +7 -5
  55. package/lib/commonjs/version.js.map +1 -1
  56. package/lib/module/core/models/payment-return-params.js +235 -20
  57. package/lib/module/core/models/payment-return-params.js.map +1 -1
  58. package/lib/module/core/models/pending-session-record.js +2 -0
  59. package/lib/module/core/models/pending-session-record.js.map +1 -0
  60. package/lib/module/core/services/hosted-flow-controller.js +328 -0
  61. package/lib/module/core/services/hosted-flow-controller.js.map +1 -0
  62. package/lib/module/core/services/hosted-flow-state.js +91 -0
  63. package/lib/module/core/services/hosted-flow-state.js.map +1 -0
  64. package/lib/module/index.js +8 -22
  65. package/lib/module/index.js.map +1 -1
  66. package/lib/module/internal/hosted/bridge-message.js +104 -0
  67. package/lib/module/internal/hosted/bridge-message.js.map +1 -0
  68. package/lib/module/internal/hosted/hosted-url.js +36 -0
  69. package/lib/module/internal/hosted/hosted-url.js.map +1 -0
  70. package/lib/module/internal/index.js +0 -1
  71. package/lib/module/internal/index.js.map +1 -1
  72. package/lib/module/internal/redact-uri.js +59 -15
  73. package/lib/module/internal/redact-uri.js.map +1 -1
  74. package/lib/module/internal/secure-store-pending-session-store.js +20 -25
  75. package/lib/module/internal/secure-store-pending-session-store.js.map +1 -1
  76. package/lib/module/internal/url-parts.js +139 -0
  77. package/lib/module/internal/url-parts.js.map +1 -0
  78. package/lib/module/public/index.js +2 -3
  79. package/lib/module/public/index.js.map +1 -1
  80. package/lib/module/public/payment-result.js +16 -4
  81. package/lib/module/public/payment-result.js.map +1 -1
  82. package/lib/module/public/recovery-result.js +7 -17
  83. package/lib/module/public/recovery-result.js.map +1 -1
  84. package/lib/module/public/spare-link-config.js +42 -15
  85. package/lib/module/public/spare-link-config.js.map +1 -1
  86. package/lib/module/public/spare-link-event.js +27 -33
  87. package/lib/module/public/spare-link-event.js.map +1 -1
  88. package/lib/module/public/spare-link-instance.js +68 -72
  89. package/lib/module/public/spare-link-instance.js.map +1 -1
  90. package/lib/module/public/spare-link-session.js +2 -9
  91. package/lib/module/public/spare-link-session.js.map +1 -1
  92. package/lib/module/public/spare-link.js +1 -1
  93. package/lib/module/public/spare-link.js.map +1 -1
  94. package/lib/module/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +3 -3
  95. package/lib/module/ui/hooks/use-hosted-flow-state.js.map +1 -0
  96. package/lib/module/ui/hosted/hosted-payment-page.js +175 -0
  97. package/lib/module/ui/hosted/hosted-payment-page.js.map +1 -0
  98. package/lib/module/ui/hosted/hosted-payment-webview.js +163 -0
  99. package/lib/module/ui/hosted/hosted-payment-webview.js.map +1 -0
  100. package/lib/module/ui/screens/index.js +1 -3
  101. package/lib/module/ui/screens/index.js.map +1 -1
  102. package/lib/module/ui/screens/page-unavailable-screen.js +97 -0
  103. package/lib/module/ui/screens/page-unavailable-screen.js.map +1 -0
  104. package/lib/module/ui/spare-link-host.js +221 -236
  105. package/lib/module/ui/spare-link-host.js.map +1 -1
  106. package/lib/module/ui/widgets/index.js +1 -2
  107. package/lib/module/ui/widgets/index.js.map +1 -1
  108. package/lib/module/version.js +7 -5
  109. package/lib/module/version.js.map +1 -1
  110. package/lib/typescript/commonjs/core/models/index.d.ts +1 -123
  111. package/lib/typescript/commonjs/core/models/index.d.ts.map +1 -1
  112. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts +91 -8
  113. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/core/models/pending-session-record.d.ts +11 -0
  115. package/lib/typescript/commonjs/core/models/pending-session-record.d.ts.map +1 -0
  116. package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts +119 -0
  117. package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts +75 -0
  119. package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/index.d.ts +5 -14
  121. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts +44 -0
  123. package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts +30 -0
  125. package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/internal/index.d.ts +0 -1
  127. package/lib/typescript/commonjs/internal/index.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/internal/redact-uri.d.ts +21 -1
  129. package/lib/typescript/commonjs/internal/redact-uri.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts +3 -2
  131. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/internal/url-parts.d.ts +46 -0
  133. package/lib/typescript/commonjs/internal/url-parts.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/public/index.d.ts +4 -6
  135. package/lib/typescript/commonjs/public/index.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/public/payment-result.d.ts +50 -12
  137. package/lib/typescript/commonjs/public/payment-result.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/public/recovery-result.d.ts +11 -20
  139. package/lib/typescript/commonjs/public/recovery-result.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/public/spare-link-config.d.ts +13 -31
  141. package/lib/typescript/commonjs/public/spare-link-config.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/public/spare-link-event.d.ts +29 -31
  143. package/lib/typescript/commonjs/public/spare-link-event.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts +1 -12
  145. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts.map +1 -1
  146. package/lib/typescript/commonjs/public/spare-link-instance.d.ts +26 -20
  147. package/lib/typescript/commonjs/public/spare-link-instance.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/public/spare-link-session.d.ts +3 -8
  149. package/lib/typescript/commonjs/public/spare-link-session.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/public/spare-link.d.ts +1 -1
  151. package/lib/typescript/commonjs/public/spare-link.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts +9 -0
  153. package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts +17 -0
  155. package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts +43 -0
  157. package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/ui/screens/index.d.ts +1 -3
  159. package/lib/typescript/commonjs/ui/screens/index.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts +18 -0
  161. package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/ui/spare-link-host.d.ts +4 -5
  163. package/lib/typescript/commonjs/ui/spare-link-host.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/ui/widgets/index.d.ts +1 -2
  165. package/lib/typescript/commonjs/ui/widgets/index.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/version.d.ts +7 -5
  167. package/lib/typescript/commonjs/version.d.ts.map +1 -1
  168. package/lib/typescript/module/core/models/index.d.ts +1 -123
  169. package/lib/typescript/module/core/models/index.d.ts.map +1 -1
  170. package/lib/typescript/module/core/models/payment-return-params.d.ts +91 -8
  171. package/lib/typescript/module/core/models/payment-return-params.d.ts.map +1 -1
  172. package/lib/typescript/module/core/models/pending-session-record.d.ts +11 -0
  173. package/lib/typescript/module/core/models/pending-session-record.d.ts.map +1 -0
  174. package/lib/typescript/module/core/services/hosted-flow-controller.d.ts +119 -0
  175. package/lib/typescript/module/core/services/hosted-flow-controller.d.ts.map +1 -0
  176. package/lib/typescript/module/core/services/hosted-flow-state.d.ts +75 -0
  177. package/lib/typescript/module/core/services/hosted-flow-state.d.ts.map +1 -0
  178. package/lib/typescript/module/index.d.ts +5 -14
  179. package/lib/typescript/module/index.d.ts.map +1 -1
  180. package/lib/typescript/module/internal/hosted/bridge-message.d.ts +44 -0
  181. package/lib/typescript/module/internal/hosted/bridge-message.d.ts.map +1 -0
  182. package/lib/typescript/module/internal/hosted/hosted-url.d.ts +30 -0
  183. package/lib/typescript/module/internal/hosted/hosted-url.d.ts.map +1 -0
  184. package/lib/typescript/module/internal/index.d.ts +0 -1
  185. package/lib/typescript/module/internal/index.d.ts.map +1 -1
  186. package/lib/typescript/module/internal/redact-uri.d.ts +21 -1
  187. package/lib/typescript/module/internal/redact-uri.d.ts.map +1 -1
  188. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts +3 -2
  189. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts.map +1 -1
  190. package/lib/typescript/module/internal/url-parts.d.ts +46 -0
  191. package/lib/typescript/module/internal/url-parts.d.ts.map +1 -0
  192. package/lib/typescript/module/public/index.d.ts +4 -6
  193. package/lib/typescript/module/public/index.d.ts.map +1 -1
  194. package/lib/typescript/module/public/payment-result.d.ts +50 -12
  195. package/lib/typescript/module/public/payment-result.d.ts.map +1 -1
  196. package/lib/typescript/module/public/recovery-result.d.ts +11 -20
  197. package/lib/typescript/module/public/recovery-result.d.ts.map +1 -1
  198. package/lib/typescript/module/public/spare-link-config.d.ts +13 -31
  199. package/lib/typescript/module/public/spare-link-config.d.ts.map +1 -1
  200. package/lib/typescript/module/public/spare-link-event.d.ts +29 -31
  201. package/lib/typescript/module/public/spare-link-event.d.ts.map +1 -1
  202. package/lib/typescript/module/public/spare-link-host-api.d.ts +1 -12
  203. package/lib/typescript/module/public/spare-link-host-api.d.ts.map +1 -1
  204. package/lib/typescript/module/public/spare-link-instance.d.ts +26 -20
  205. package/lib/typescript/module/public/spare-link-instance.d.ts.map +1 -1
  206. package/lib/typescript/module/public/spare-link-session.d.ts +3 -8
  207. package/lib/typescript/module/public/spare-link-session.d.ts.map +1 -1
  208. package/lib/typescript/module/public/spare-link.d.ts +1 -1
  209. package/lib/typescript/module/public/spare-link.d.ts.map +1 -1
  210. package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts +9 -0
  211. package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
  212. package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts +17 -0
  213. package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts.map +1 -0
  214. package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts +43 -0
  215. package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
  216. package/lib/typescript/module/ui/screens/index.d.ts +1 -3
  217. package/lib/typescript/module/ui/screens/index.d.ts.map +1 -1
  218. package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts +18 -0
  219. package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts.map +1 -0
  220. package/lib/typescript/module/ui/spare-link-host.d.ts +4 -5
  221. package/lib/typescript/module/ui/spare-link-host.d.ts.map +1 -1
  222. package/lib/typescript/module/ui/widgets/index.d.ts +1 -2
  223. package/lib/typescript/module/ui/widgets/index.d.ts.map +1 -1
  224. package/lib/typescript/module/version.d.ts +7 -5
  225. package/lib/typescript/module/version.d.ts.map +1 -1
  226. package/package.json +24 -23
  227. package/plugins/with-spare-link.js +6 -26
  228. package/src/core/models/index.ts +1 -139
  229. package/src/core/models/payment-return-params.ts +269 -21
  230. package/src/core/models/pending-session-record.ts +10 -0
  231. package/src/core/services/hosted-flow-controller.ts +374 -0
  232. package/src/core/services/hosted-flow-state.ts +123 -0
  233. package/src/index.ts +20 -89
  234. package/src/internal/hosted/bridge-message.ts +106 -0
  235. package/src/internal/hosted/hosted-url.ts +33 -0
  236. package/src/internal/index.ts +0 -1
  237. package/src/internal/redact-uri.ts +69 -15
  238. package/src/internal/secure-store-pending-session-store.ts +28 -49
  239. package/src/internal/url-parts.ts +134 -0
  240. package/src/public/index.ts +2 -24
  241. package/src/public/payment-result.ts +50 -12
  242. package/src/public/recovery-result.ts +16 -25
  243. package/src/public/spare-link-config.ts +56 -43
  244. package/src/public/spare-link-event.ts +33 -42
  245. package/src/public/spare-link-host-api.ts +1 -14
  246. package/src/public/spare-link-instance.ts +57 -65
  247. package/src/public/spare-link-session.ts +4 -16
  248. package/src/public/spare-link.ts +1 -1
  249. package/src/ui/hooks/use-hosted-flow-state.ts +16 -0
  250. package/src/ui/hosted/hosted-payment-page.tsx +178 -0
  251. package/src/ui/hosted/hosted-payment-webview.tsx +164 -0
  252. package/src/ui/screens/index.ts +4 -6
  253. package/src/ui/screens/page-unavailable-screen.tsx +94 -0
  254. package/src/ui/spare-link-host.tsx +227 -247
  255. package/src/ui/widgets/index.ts +1 -2
  256. package/src/version.ts +7 -5
  257. package/CHANGELOG.md +0 -66
  258. package/lib/commonjs/core/client/link-api-client.js +0 -297
  259. package/lib/commonjs/core/client/link-api-client.js.map +0 -1
  260. package/lib/commonjs/core/errors/payment-api-error.js +0 -35
  261. package/lib/commonjs/core/errors/payment-api-error.js.map +0 -1
  262. package/lib/commonjs/core/models/link-session-status.js +0 -14
  263. package/lib/commonjs/core/models/link-session-status.js.map +0 -1
  264. package/lib/commonjs/core/models/payment-type.js +0 -45
  265. package/lib/commonjs/core/models/payment-type.js.map +0 -1
  266. package/lib/commonjs/core/models/wire-mappers.js +0 -277
  267. package/lib/commonjs/core/models/wire-mappers.js.map +0 -1
  268. package/lib/commonjs/core/services/consent-presenter.js +0 -150
  269. package/lib/commonjs/core/services/consent-presenter.js.map +0 -1
  270. package/lib/commonjs/core/services/execute-resume-if-needed.js +0 -216
  271. package/lib/commonjs/core/services/execute-resume-if-needed.js.map +0 -1
  272. package/lib/commonjs/core/services/multi-payment-rules-presenter.js +0 -151
  273. package/lib/commonjs/core/services/multi-payment-rules-presenter.js.map +0 -1
  274. package/lib/commonjs/core/services/payment-flow-controller.js +0 -547
  275. package/lib/commonjs/core/services/payment-flow-controller.js.map +0 -1
  276. package/lib/commonjs/core/services/payment-flow-state.js +0 -110
  277. package/lib/commonjs/core/services/payment-flow-state.js.map +0 -1
  278. package/lib/commonjs/core/services/payment-result-mapper.js +0 -49
  279. package/lib/commonjs/core/services/payment-result-mapper.js.map +0 -1
  280. package/lib/commonjs/core/services/presentation-utils.js +0 -11
  281. package/lib/commonjs/core/services/presentation-utils.js.map +0 -1
  282. package/lib/commonjs/core/services/redirect-buffer.js +0 -40
  283. package/lib/commonjs/core/services/redirect-buffer.js.map +0 -1
  284. package/lib/commonjs/core/services/user-friendly-messages.js +0 -46
  285. package/lib/commonjs/core/services/user-friendly-messages.js.map +0 -1
  286. package/lib/commonjs/internal/telemetry-collector.js +0 -80
  287. package/lib/commonjs/internal/telemetry-collector.js.map +0 -1
  288. package/lib/commonjs/public/constants.js +0 -21
  289. package/lib/commonjs/public/constants.js.map +0 -1
  290. package/lib/commonjs/public/spare-link-callbacks.js +0 -6
  291. package/lib/commonjs/public/spare-link-callbacks.js.map +0 -1
  292. package/lib/commonjs/ui/consent/charge-bearer-display.js +0 -99
  293. package/lib/commonjs/ui/consent/charge-bearer-display.js.map +0 -1
  294. package/lib/commonjs/ui/consent/consent-accordion.js +0 -94
  295. package/lib/commonjs/ui/consent/consent-accordion.js.map +0 -1
  296. package/lib/commonjs/ui/consent/consent-summary-section.js +0 -27
  297. package/lib/commonjs/ui/consent/consent-summary-section.js.map +0 -1
  298. package/lib/commonjs/ui/consent/cop-information.js +0 -168
  299. package/lib/commonjs/ui/consent/cop-information.js.map +0 -1
  300. package/lib/commonjs/ui/consent/international-payment-summary.js +0 -98
  301. package/lib/commonjs/ui/consent/international-payment-summary.js.map +0 -1
  302. package/lib/commonjs/ui/consent/label-value-rows.js +0 -59
  303. package/lib/commonjs/ui/consent/label-value-rows.js.map +0 -1
  304. package/lib/commonjs/ui/consent/multi-payment-rules-list.js +0 -130
  305. package/lib/commonjs/ui/consent/multi-payment-rules-list.js.map +0 -1
  306. package/lib/commonjs/ui/consent/multi-payment-summary.js +0 -99
  307. package/lib/commonjs/ui/consent/multi-payment-summary.js.map +0 -1
  308. package/lib/commonjs/ui/consent/single-payment-summary.js +0 -158
  309. package/lib/commonjs/ui/consent/single-payment-summary.js.map +0 -1
  310. package/lib/commonjs/ui/consent/terms-link.js +0 -35
  311. package/lib/commonjs/ui/consent/terms-link.js.map +0 -1
  312. package/lib/commonjs/ui/hooks/use-payment-flow-state.js.map +0 -1
  313. package/lib/commonjs/ui/payment-flow-page.js +0 -235
  314. package/lib/commonjs/ui/payment-flow-page.js.map +0 -1
  315. package/lib/commonjs/ui/screens/bank-selection-screen.js +0 -215
  316. package/lib/commonjs/ui/screens/bank-selection-screen.js.map +0 -1
  317. package/lib/commonjs/ui/screens/consent-details-screen.js +0 -124
  318. package/lib/commonjs/ui/screens/consent-details-screen.js.map +0 -1
  319. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js +0 -79
  320. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js.map +0 -1
  321. package/lib/commonjs/ui/widgets/layout-w-header.js +0 -106
  322. package/lib/commonjs/ui/widgets/layout-w-header.js.map +0 -1
  323. package/lib/commonjs/ui/widgets/stepper.js +0 -124
  324. package/lib/commonjs/ui/widgets/stepper.js.map +0 -1
  325. package/lib/module/core/client/link-api-client.js +0 -292
  326. package/lib/module/core/client/link-api-client.js.map +0 -1
  327. package/lib/module/core/errors/payment-api-error.js +0 -29
  328. package/lib/module/core/errors/payment-api-error.js.map +0 -1
  329. package/lib/module/core/models/link-session-status.js +0 -10
  330. package/lib/module/core/models/link-session-status.js.map +0 -1
  331. package/lib/module/core/models/payment-type.js +0 -36
  332. package/lib/module/core/models/payment-type.js.map +0 -1
  333. package/lib/module/core/models/wire-mappers.js +0 -263
  334. package/lib/module/core/models/wire-mappers.js.map +0 -1
  335. package/lib/module/core/services/consent-presenter.js +0 -140
  336. package/lib/module/core/services/consent-presenter.js.map +0 -1
  337. package/lib/module/core/services/execute-resume-if-needed.js +0 -211
  338. package/lib/module/core/services/execute-resume-if-needed.js.map +0 -1
  339. package/lib/module/core/services/multi-payment-rules-presenter.js +0 -146
  340. package/lib/module/core/services/multi-payment-rules-presenter.js.map +0 -1
  341. package/lib/module/core/services/payment-flow-controller.js +0 -544
  342. package/lib/module/core/services/payment-flow-controller.js.map +0 -1
  343. package/lib/module/core/services/payment-flow-state.js +0 -106
  344. package/lib/module/core/services/payment-flow-state.js.map +0 -1
  345. package/lib/module/core/services/payment-result-mapper.js +0 -45
  346. package/lib/module/core/services/payment-result-mapper.js.map +0 -1
  347. package/lib/module/core/services/presentation-utils.js +0 -7
  348. package/lib/module/core/services/presentation-utils.js.map +0 -1
  349. package/lib/module/core/services/redirect-buffer.js +0 -33
  350. package/lib/module/core/services/redirect-buffer.js.map +0 -1
  351. package/lib/module/core/services/user-friendly-messages.js +0 -42
  352. package/lib/module/core/services/user-friendly-messages.js.map +0 -1
  353. package/lib/module/internal/telemetry-collector.js +0 -75
  354. package/lib/module/internal/telemetry-collector.js.map +0 -1
  355. package/lib/module/public/constants.js +0 -17
  356. package/lib/module/public/constants.js.map +0 -1
  357. package/lib/module/public/spare-link-callbacks.js +0 -4
  358. package/lib/module/public/spare-link-callbacks.js.map +0 -1
  359. package/lib/module/ui/consent/charge-bearer-display.js +0 -95
  360. package/lib/module/ui/consent/charge-bearer-display.js.map +0 -1
  361. package/lib/module/ui/consent/consent-accordion.js +0 -90
  362. package/lib/module/ui/consent/consent-accordion.js.map +0 -1
  363. package/lib/module/ui/consent/consent-summary-section.js +0 -23
  364. package/lib/module/ui/consent/consent-summary-section.js.map +0 -1
  365. package/lib/module/ui/consent/cop-information.js +0 -165
  366. package/lib/module/ui/consent/cop-information.js.map +0 -1
  367. package/lib/module/ui/consent/international-payment-summary.js +0 -94
  368. package/lib/module/ui/consent/international-payment-summary.js.map +0 -1
  369. package/lib/module/ui/consent/label-value-rows.js +0 -55
  370. package/lib/module/ui/consent/label-value-rows.js.map +0 -1
  371. package/lib/module/ui/consent/multi-payment-rules-list.js +0 -125
  372. package/lib/module/ui/consent/multi-payment-rules-list.js.map +0 -1
  373. package/lib/module/ui/consent/multi-payment-summary.js +0 -95
  374. package/lib/module/ui/consent/multi-payment-summary.js.map +0 -1
  375. package/lib/module/ui/consent/single-payment-summary.js +0 -154
  376. package/lib/module/ui/consent/single-payment-summary.js.map +0 -1
  377. package/lib/module/ui/consent/terms-link.js +0 -31
  378. package/lib/module/ui/consent/terms-link.js.map +0 -1
  379. package/lib/module/ui/hooks/use-payment-flow-state.js.map +0 -1
  380. package/lib/module/ui/payment-flow-page.js +0 -232
  381. package/lib/module/ui/payment-flow-page.js.map +0 -1
  382. package/lib/module/ui/screens/bank-selection-screen.js +0 -211
  383. package/lib/module/ui/screens/bank-selection-screen.js.map +0 -1
  384. package/lib/module/ui/screens/consent-details-screen.js +0 -120
  385. package/lib/module/ui/screens/consent-details-screen.js.map +0 -1
  386. package/lib/module/ui/screens/mandate-setup-success-screen.js +0 -75
  387. package/lib/module/ui/screens/mandate-setup-success-screen.js.map +0 -1
  388. package/lib/module/ui/widgets/layout-w-header.js +0 -102
  389. package/lib/module/ui/widgets/layout-w-header.js.map +0 -1
  390. package/lib/module/ui/widgets/stepper.js +0 -120
  391. package/lib/module/ui/widgets/stepper.js.map +0 -1
  392. package/lib/typescript/commonjs/core/client/link-api-client.d.ts +0 -70
  393. package/lib/typescript/commonjs/core/client/link-api-client.d.ts.map +0 -1
  394. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts +0 -15
  395. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts.map +0 -1
  396. package/lib/typescript/commonjs/core/models/link-session-status.d.ts +0 -6
  397. package/lib/typescript/commonjs/core/models/link-session-status.d.ts.map +0 -1
  398. package/lib/typescript/commonjs/core/models/payment-type.d.ts +0 -18
  399. package/lib/typescript/commonjs/core/models/payment-type.d.ts.map +0 -1
  400. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts +0 -19
  401. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts.map +0 -1
  402. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts +0 -67
  403. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts.map +0 -1
  404. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts +0 -32
  405. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts.map +0 -1
  406. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts +0 -9
  407. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
  408. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts +0 -146
  409. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts.map +0 -1
  410. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts +0 -64
  411. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts.map +0 -1
  412. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts +0 -5
  413. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts.map +0 -1
  414. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts +0 -5
  415. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts.map +0 -1
  416. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts +0 -6
  417. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts.map +0 -1
  418. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts +0 -6
  419. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts.map +0 -1
  420. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts +0 -2
  421. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts.map +0 -1
  422. package/lib/typescript/commonjs/public/constants.d.ts +0 -12
  423. package/lib/typescript/commonjs/public/constants.d.ts.map +0 -1
  424. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts +0 -14
  425. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts.map +0 -1
  426. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts +0 -5
  427. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts.map +0 -1
  428. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts +0 -10
  429. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts.map +0 -1
  430. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts +0 -6
  431. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts.map +0 -1
  432. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts +0 -6
  433. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts.map +0 -1
  434. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts +0 -6
  435. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts.map +0 -1
  436. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts +0 -10
  437. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts.map +0 -1
  438. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts +0 -15
  439. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
  440. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts +0 -6
  441. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts.map +0 -1
  442. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts +0 -6
  443. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts.map +0 -1
  444. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts +0 -2
  445. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts.map +0 -1
  446. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts +0 -9
  447. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
  448. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts +0 -20
  449. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts.map +0 -1
  450. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts +0 -15
  451. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts.map +0 -1
  452. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts +0 -13
  453. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts.map +0 -1
  454. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts +0 -10
  455. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
  456. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts +0 -20
  457. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts.map +0 -1
  458. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts +0 -15
  459. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts.map +0 -1
  460. package/lib/typescript/module/core/client/link-api-client.d.ts +0 -70
  461. package/lib/typescript/module/core/client/link-api-client.d.ts.map +0 -1
  462. package/lib/typescript/module/core/errors/payment-api-error.d.ts +0 -15
  463. package/lib/typescript/module/core/errors/payment-api-error.d.ts.map +0 -1
  464. package/lib/typescript/module/core/models/link-session-status.d.ts +0 -6
  465. package/lib/typescript/module/core/models/link-session-status.d.ts.map +0 -1
  466. package/lib/typescript/module/core/models/payment-type.d.ts +0 -18
  467. package/lib/typescript/module/core/models/payment-type.d.ts.map +0 -1
  468. package/lib/typescript/module/core/models/wire-mappers.d.ts +0 -19
  469. package/lib/typescript/module/core/models/wire-mappers.d.ts.map +0 -1
  470. package/lib/typescript/module/core/services/consent-presenter.d.ts +0 -67
  471. package/lib/typescript/module/core/services/consent-presenter.d.ts.map +0 -1
  472. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts +0 -32
  473. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts.map +0 -1
  474. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts +0 -9
  475. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
  476. package/lib/typescript/module/core/services/payment-flow-controller.d.ts +0 -146
  477. package/lib/typescript/module/core/services/payment-flow-controller.d.ts.map +0 -1
  478. package/lib/typescript/module/core/services/payment-flow-state.d.ts +0 -64
  479. package/lib/typescript/module/core/services/payment-flow-state.d.ts.map +0 -1
  480. package/lib/typescript/module/core/services/payment-result-mapper.d.ts +0 -5
  481. package/lib/typescript/module/core/services/payment-result-mapper.d.ts.map +0 -1
  482. package/lib/typescript/module/core/services/presentation-utils.d.ts +0 -5
  483. package/lib/typescript/module/core/services/presentation-utils.d.ts.map +0 -1
  484. package/lib/typescript/module/core/services/redirect-buffer.d.ts +0 -6
  485. package/lib/typescript/module/core/services/redirect-buffer.d.ts.map +0 -1
  486. package/lib/typescript/module/core/services/user-friendly-messages.d.ts +0 -6
  487. package/lib/typescript/module/core/services/user-friendly-messages.d.ts.map +0 -1
  488. package/lib/typescript/module/internal/telemetry-collector.d.ts +0 -2
  489. package/lib/typescript/module/internal/telemetry-collector.d.ts.map +0 -1
  490. package/lib/typescript/module/public/constants.d.ts +0 -12
  491. package/lib/typescript/module/public/constants.d.ts.map +0 -1
  492. package/lib/typescript/module/public/spare-link-callbacks.d.ts +0 -14
  493. package/lib/typescript/module/public/spare-link-callbacks.d.ts.map +0 -1
  494. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts +0 -5
  495. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts.map +0 -1
  496. package/lib/typescript/module/ui/consent/consent-accordion.d.ts +0 -10
  497. package/lib/typescript/module/ui/consent/consent-accordion.d.ts.map +0 -1
  498. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts +0 -6
  499. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts.map +0 -1
  500. package/lib/typescript/module/ui/consent/cop-information.d.ts +0 -6
  501. package/lib/typescript/module/ui/consent/cop-information.d.ts.map +0 -1
  502. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts +0 -6
  503. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts.map +0 -1
  504. package/lib/typescript/module/ui/consent/label-value-rows.d.ts +0 -10
  505. package/lib/typescript/module/ui/consent/label-value-rows.d.ts.map +0 -1
  506. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts +0 -15
  507. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
  508. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts +0 -6
  509. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts.map +0 -1
  510. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts +0 -6
  511. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts.map +0 -1
  512. package/lib/typescript/module/ui/consent/terms-link.d.ts +0 -2
  513. package/lib/typescript/module/ui/consent/terms-link.d.ts.map +0 -1
  514. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts +0 -9
  515. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
  516. package/lib/typescript/module/ui/payment-flow-page.d.ts +0 -20
  517. package/lib/typescript/module/ui/payment-flow-page.d.ts.map +0 -1
  518. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts +0 -15
  519. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts.map +0 -1
  520. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts +0 -13
  521. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts.map +0 -1
  522. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts +0 -10
  523. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
  524. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts +0 -20
  525. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts.map +0 -1
  526. package/lib/typescript/module/ui/widgets/stepper.d.ts +0 -15
  527. package/lib/typescript/module/ui/widgets/stepper.d.ts.map +0 -1
  528. package/src/core/client/link-api-client.ts +0 -414
  529. package/src/core/errors/payment-api-error.ts +0 -35
  530. package/src/core/models/link-session-status.ts +0 -7
  531. package/src/core/models/payment-type.ts +0 -54
  532. package/src/core/models/wire-mappers.ts +0 -315
  533. package/src/core/services/consent-presenter.ts +0 -213
  534. package/src/core/services/execute-resume-if-needed.ts +0 -243
  535. package/src/core/services/multi-payment-rules-presenter.ts +0 -158
  536. package/src/core/services/payment-flow-controller.ts +0 -607
  537. package/src/core/services/payment-flow-state.ts +0 -124
  538. package/src/core/services/payment-result-mapper.ts +0 -41
  539. package/src/core/services/presentation-utils.ts +0 -4
  540. package/src/core/services/redirect-buffer.ts +0 -34
  541. package/src/core/services/user-friendly-messages.ts +0 -39
  542. package/src/internal/telemetry-collector.ts +0 -90
  543. package/src/public/constants.ts +0 -14
  544. package/src/public/spare-link-callbacks.ts +0 -20
  545. package/src/ui/consent/charge-bearer-display.tsx +0 -68
  546. package/src/ui/consent/consent-accordion.tsx +0 -89
  547. package/src/ui/consent/consent-summary-section.tsx +0 -19
  548. package/src/ui/consent/cop-information.tsx +0 -121
  549. package/src/ui/consent/international-payment-summary.tsx +0 -83
  550. package/src/ui/consent/label-value-rows.tsx +0 -50
  551. package/src/ui/consent/multi-payment-rules-list.tsx +0 -138
  552. package/src/ui/consent/multi-payment-summary.tsx +0 -82
  553. package/src/ui/consent/single-payment-summary.tsx +0 -123
  554. package/src/ui/consent/terms-link.tsx +0 -27
  555. package/src/ui/hooks/use-payment-flow-state.ts +0 -16
  556. package/src/ui/payment-flow-page.tsx +0 -254
  557. package/src/ui/screens/bank-selection-screen.tsx +0 -209
  558. package/src/ui/screens/consent-details-screen.tsx +0 -106
  559. package/src/ui/screens/mandate-setup-success-screen.tsx +0 -72
  560. package/src/ui/widgets/layout-w-header.tsx +0 -89
  561. package/src/ui/widgets/stepper.tsx +0 -126
@@ -2,40 +2,35 @@ import type { PaymentResult } from './payment-result';
2
2
 
3
3
  /**
4
4
  * Why {@link SpareLink.resumeIfNeeded} did not recover a terminal session.
5
- * Mirrors Flutter's `NoRecoveryReason`.
6
- */
7
- export type NoRecoveryReason = 'noPendingSession' | 'flowAlreadyActive' | 'persistenceUnavailable';
8
-
9
- /**
10
- * Outcome of {@link SpareLink.resumeIfNeeded}.
11
5
  *
12
- * Discriminated union aligned with Flutter's sealed `RecoveryResult`.
6
+ * `outcomeUnknown` is the one that carries weight: a payment was pending and no
7
+ * return arrived, so **it may have completed**. The SDK holds no credentials and
8
+ * has nothing to ask with — the reference is handed back for your backend to
9
+ * resolve.
13
10
  */
14
- export type RecoveryResult = NoRecoveryNeeded | SessionRecovered | RecoveryAwaitingUser;
11
+ export type NoRecoveryReason =
12
+ | 'noPendingSession'
13
+ | 'flowAlreadyActive'
14
+ | 'persistenceUnavailable'
15
+ | 'outcomeUnknown';
15
16
 
16
- /** No pending session was recovered. */
17
+ /** Outcome of {@link SpareLink.resumeIfNeeded}. */
18
+ export type RecoveryResult = NoRecoveryNeeded | SessionRecovered;
19
+
20
+ /** No pending payment was resolved to a terminal outcome. */
17
21
  export interface NoRecoveryNeeded {
18
22
  readonly kind: 'none';
19
23
  readonly reason: NoRecoveryReason;
24
+ /** The pending payment's reference, when `reason` is `outcomeUnknown`. */
25
+ readonly reference?: string;
20
26
  }
21
27
 
22
- /** A pending session was recovered to a terminal {@link PaymentResult}. */
28
+ /** A pending payment was resolved to a terminal {@link PaymentResult}. */
23
29
  export interface SessionRecovered {
24
30
  readonly kind: 'recovered';
25
31
  readonly result: PaymentResult;
26
32
  }
27
33
 
28
- /**
29
- * A pending session is non-terminal and the SDK opened its recovery UI —
30
- * the integrator should treat this as in-progress, not "nothing happened".
31
- * The terminal outcome arrives later via `SpareLink.events` /
32
- * `spareLink.emitTerminal`, not as a second `resumeIfNeeded` resolution.
33
- */
34
- export interface RecoveryAwaitingUser {
35
- readonly kind: 'awaitingUser';
36
- readonly linkToken: string;
37
- }
38
-
39
34
  export function isSessionRecovered(r: RecoveryResult): r is SessionRecovered {
40
35
  return r.kind === 'recovered';
41
36
  }
@@ -43,7 +38,3 @@ export function isSessionRecovered(r: RecoveryResult): r is SessionRecovered {
43
38
  export function isNoRecoveryNeeded(r: RecoveryResult): r is NoRecoveryNeeded {
44
39
  return r.kind === 'none';
45
40
  }
46
-
47
- export function isRecoveryAwaitingUser(r: RecoveryResult): r is RecoveryAwaitingUser {
48
- return r.kind === 'awaitingUser';
49
- }
@@ -1,24 +1,48 @@
1
+ import { Platform } from 'react-native';
2
+
3
+ /**
4
+ * Deployment environment for the Spare Link API, which is also where the hosted
5
+ * payment page is served from.
6
+ */
7
+ export type PaymentEnvironment = 'local' | 'dev' | 'sandbox' | 'production';
8
+
9
+ /** Default port an Encore app serves on. */
10
+ const LOCAL_PORT = 4000;
11
+
1
12
  /**
2
- * Deployment environment for the Spare Link API.
13
+ * A Spare API running on the developer's own machine.
14
+ *
15
+ * The host differs by platform because an emulator's `localhost` is the emulator,
16
+ * not the machine hosting it. A **physical device** reaches neither, so pass
17
+ * `baseUrl` with your machine's address on the local network instead.
3
18
  *
4
- * Each value maps to a default base URL
5
- * the SDK will hit unless `baseUrl` is overridden in {@link SpareLinkConfig}.
19
+ * Serves over plain HTTP, which both platforms block by default. See the
20
+ * integration notes for the debug-only exceptions that allow it.
6
21
  */
7
- export type PaymentEnvironment = 'sandbox' | 'production';
22
+ function localBaseUrl(): string {
23
+ return Platform.OS === 'android'
24
+ ? `http://10.0.2.2:${LOCAL_PORT}`
25
+ : `http://localhost:${LOCAL_PORT}`;
26
+ }
8
27
 
9
- const DEFAULT_BASE_URLS: Record<PaymentEnvironment, string> = {
28
+ /**
29
+ * `dev` is Spare's own integration environment, not one an integrator would ship
30
+ * against. Unlike the others its host names a single tenant, so it serves UAE alone.
31
+ */
32
+ const DEFAULT_BASE_URLS: Readonly<Record<Exclude<PaymentEnvironment, 'local'>, string>> = {
33
+ dev: 'https://api-dev-uae.tryspare.ae',
10
34
  sandbox: 'https://api.sandbox.tryspare.ae',
11
35
  production: 'https://api.tryspare.ae',
12
36
  };
13
37
 
14
38
  export function defaultBaseUrlFor(env: PaymentEnvironment): string {
15
- return DEFAULT_BASE_URLS[env];
39
+ return env === 'local' ? localBaseUrl() : DEFAULT_BASE_URLS[env];
16
40
  }
17
41
 
18
42
  /** Spare API tenant — one country per tenant. */
19
43
  export type SpareApiTenant = 'ksa' | 'uae' | 'bah';
20
44
 
21
- const TENANT_COUNTRY_CODES: Record<SpareApiTenant, string> = {
45
+ const TENANT_COUNTRY_CODES: Readonly<Record<SpareApiTenant, string>> = {
22
46
  ksa: 'KSA',
23
47
  uae: 'UAE',
24
48
  bah: 'BAH',
@@ -28,31 +52,19 @@ export function tenantCountryCode(t: SpareApiTenant): string {
28
52
  return TENANT_COUNTRY_CODES[t];
29
53
  }
30
54
 
31
- /** Configuration to start a Spare Link payment flow. */
55
+ /** Configuration for a Spare Link instance. */
32
56
  export interface SpareLinkConfig {
33
- /** One-time link token minted by the merchant backend via POST /link/token/payment. */
34
- linkToken: string;
35
-
36
- /** Target environment (sandbox vs production). */
57
+ /** Target environment. Selects the host the hosted page is loaded from. */
37
58
  environment: PaymentEnvironment;
38
59
 
39
- /** Tenant (country). */
40
- tenant: SpareApiTenant;
41
-
42
- /**
43
- * Override the base URL. Set only for local dev (e.g. `http://localhost:4000`)
44
- * — production should rely on the environment-derived default.
45
- */
46
- baseUrl?: string;
47
-
48
60
  /**
49
- * Inject a custom fetch implementation for advanced cases (cert pinning,
50
- * request logging). Defaults to `globalThis.fetch`.
61
+ * Tenant (country). The hosted flow currently serves UAE only; the value is
62
+ * kept for that selection and for the tenants that follow.
51
63
  */
52
- fetch?: typeof fetch;
64
+ tenant: SpareApiTenant;
53
65
 
54
- /** Per-request timeout in milliseconds. Defaults to 15000. */
55
- requestTimeoutMs?: number;
66
+ /** Override the host. Set for a physical device pointed at a local API. */
67
+ baseUrl?: string;
56
68
  }
57
69
 
58
70
  /** Resolved base URL: explicit `baseUrl` if provided, else the environment default. */
@@ -61,27 +73,28 @@ export function resolvedBaseUrl(config: SpareLinkConfig): string {
61
73
  }
62
74
 
63
75
  /**
64
- * Recovery config — like {@link SpareLinkConfig} but without `linkToken`
65
- * (read from the persisted record).
76
+ * The tenants the hosted flow can actually serve.
77
+ *
78
+ * `tenant` accepts the others because the API surface outlives this list, but
79
+ * accepting one the page cannot serve would put a payer in front of the wrong
80
+ * country's flow rather than telling the integrator at construction time.
66
81
  */
67
- export interface SpareLinkResumeConfig {
68
- environment: PaymentEnvironment;
69
- tenant: SpareApiTenant;
70
- baseUrl?: string;
71
- fetch?: typeof fetch;
72
- requestTimeoutMs?: number;
73
- }
82
+ const SUPPORTED_TENANTS: readonly SpareApiTenant[] = ['uae'];
74
83
 
75
- export function resolvedResumeBaseUrl(config: SpareLinkResumeConfig): string {
76
- return config.baseUrl ?? defaultBaseUrlFor(config.environment);
77
- }
78
-
79
- /** Throws if a SpareLinkConfig is structurally invalid. */
84
+ /**
85
+ * Throws if a config cannot be honoured.
86
+ *
87
+ * Called from {@link SpareLink}'s constructor, so a bad value fails where it was
88
+ * written rather than reaching the webview as a URL nobody meant.
89
+ */
80
90
  export function assertValidConfig(config: SpareLinkConfig): void {
81
- if (!config.linkToken) {
82
- throw new Error('SpareLinkConfig: linkToken must not be empty');
83
- }
84
91
  if (config.baseUrl && !/^https?:\/\//.test(config.baseUrl)) {
85
92
  throw new Error('SpareLinkConfig: baseUrl must start with http:// or https://');
86
93
  }
94
+ if (!SUPPORTED_TENANTS.includes(config.tenant)) {
95
+ throw new Error(
96
+ `SpareLinkConfig: the hosted flow does not serve tenant '${config.tenant}' yet ` +
97
+ `(supported: ${SUPPORTED_TENANTS.join(', ')})`,
98
+ );
99
+ }
87
100
  }
@@ -3,20 +3,21 @@ import type { PaymentResult } from './payment-result';
3
3
  /**
4
4
  * Lifecycle events emitted on {@link SpareLink.events}.
5
5
  *
6
- * This is a discriminated union (TypeScript's equivalent to Dart sealed classes).
7
- * Use a switch on the `type` field for exhaustive handling:
6
+ * Analytics only — never required to drive the flow. This is a discriminated
7
+ * union (TypeScript's equivalent to Dart sealed classes); switch on `type` for
8
+ * exhaustive handling:
8
9
  *
9
10
  * ```ts
10
11
  * spareLink.events.subscribe((event) => {
11
12
  * switch (event.type) {
12
13
  * case 'initialized':
13
- * console.log('Started flow for', event.linkToken);
14
+ * console.log('Started flow for', event.reference);
14
15
  * break;
15
- * case 'sessionLoaded':
16
- * console.log('Session loaded', event.linkSessionId);
16
+ * case 'pageReady':
17
+ * console.log('Payer can act on the page');
17
18
  * break;
18
19
  * case 'succeeded':
19
- * console.log('Payment succeeded', event.result.exchangeCode);
20
+ * console.log('Reported success for', event.result.reference);
20
21
  * break;
21
22
  * // ...
22
23
  * }
@@ -25,8 +26,7 @@ import type { PaymentResult } from './payment-result';
25
26
  */
26
27
  export type SpareLinkEvent =
27
28
  | SpareLinkInitialized
28
- | SpareLinkSessionLoaded
29
- | SpareLinkConsentStarted
29
+ | SpareLinkPageReady
30
30
  | SpareLinkRedirectToBank
31
31
  | SpareLinkBankCallbackReceived
32
32
  | SpareLinkSucceeded
@@ -37,36 +37,33 @@ export type SpareLinkEvent =
37
37
  /** The SDK has started a payment flow. */
38
38
  export interface SpareLinkInitialized {
39
39
  readonly type: 'initialized';
40
- readonly linkToken: string;
40
+ readonly reference: string;
41
41
  }
42
42
 
43
- /** The payment session was loaded from the server. */
44
- export interface SpareLinkSessionLoaded {
45
- readonly type: 'sessionLoaded';
46
- readonly linkToken: string;
47
- /** Server-assigned link session ID when available from the API. */
48
- readonly linkSessionId?: string;
49
- }
50
-
51
- /** The user confirmed consent and a consent request was submitted. */
52
- export interface SpareLinkConsentStarted {
53
- readonly type: 'consentStarted';
54
- readonly linkToken: string;
43
+ /**
44
+ * The hosted page is interactive and the payer has something to act on.
45
+ *
46
+ * The steps after this — choosing a bank, the payee check, reading the consent —
47
+ * happen inside the page, which does not report them.
48
+ */
49
+ export interface SpareLinkPageReady {
50
+ readonly type: 'pageReady';
51
+ readonly reference: string;
55
52
  }
56
53
 
57
- /** The user is being redirected to their bank's authorization page. */
54
+ /** The payer is being handed to their bank, outside the WebView. */
58
55
  export interface SpareLinkRedirectToBank {
59
56
  readonly type: 'redirectToBank';
60
- readonly linkToken: string;
57
+ readonly reference: string;
61
58
  }
62
59
 
63
60
  /** The bank has redirected back with a callback URI. */
64
61
  export interface SpareLinkBankCallbackReceived {
65
62
  readonly type: 'bankCallbackReceived';
66
- readonly linkToken: string;
63
+ readonly reference: string;
67
64
  }
68
65
 
69
- /** The payment completed successfully and the flow is about to resolve. */
66
+ /** The return reported a completed payment and the flow is about to resolve. */
70
67
  export interface SpareLinkSucceeded {
71
68
  readonly type: 'succeeded';
72
69
  readonly result: PaymentResult;
@@ -78,13 +75,13 @@ export interface SpareLinkFailed {
78
75
  readonly result: PaymentResult;
79
76
  }
80
77
 
81
- /** The user cancelled the payment and the flow is about to resolve. */
78
+ /** The payer cancelled the payment and the flow is about to resolve. */
82
79
  export interface SpareLinkCancelled {
83
80
  readonly type: 'cancelled';
84
81
  readonly result: PaymentResult;
85
82
  }
86
83
 
87
- /** The flow was abandoned without an explicit user action. */
84
+ /** The payer left before the flow resolved either way. */
88
85
  export interface SpareLinkAbandoned {
89
86
  readonly type: 'abandoned';
90
87
  readonly result: PaymentResult;
@@ -93,8 +90,7 @@ export interface SpareLinkAbandoned {
93
90
  /** All possible event type strings for type narrowing. */
94
91
  export const SPARE_LINK_EVENT_TYPES = [
95
92
  'initialized',
96
- 'sessionLoaded',
97
- 'consentStarted',
93
+ 'pageReady',
98
94
  'redirectToBank',
99
95
  'bankCallbackReceived',
100
96
  'succeeded',
@@ -114,22 +110,17 @@ export function isSpareLinkEvent(value: unknown): value is SpareLinkEvent {
114
110
 
115
111
  /** Factory functions for creating events (internal use). */
116
112
  export const SpareLinkEvents = {
117
- initialized(linkToken: string): SpareLinkInitialized {
118
- return { type: 'initialized', linkToken };
119
- },
120
- sessionLoaded(linkToken: string, linkSessionId?: string): SpareLinkSessionLoaded {
121
- return linkSessionId
122
- ? { type: 'sessionLoaded', linkToken, linkSessionId }
123
- : { type: 'sessionLoaded', linkToken };
113
+ initialized(reference: string): SpareLinkInitialized {
114
+ return { type: 'initialized', reference };
124
115
  },
125
- consentStarted(linkToken: string): SpareLinkConsentStarted {
126
- return { type: 'consentStarted', linkToken };
116
+ pageReady(reference: string): SpareLinkPageReady {
117
+ return { type: 'pageReady', reference };
127
118
  },
128
- redirectToBank(linkToken: string): SpareLinkRedirectToBank {
129
- return { type: 'redirectToBank', linkToken };
119
+ redirectToBank(reference: string): SpareLinkRedirectToBank {
120
+ return { type: 'redirectToBank', reference };
130
121
  },
131
- bankCallbackReceived(linkToken: string): SpareLinkBankCallbackReceived {
132
- return { type: 'bankCallbackReceived', linkToken };
122
+ bankCallbackReceived(reference: string): SpareLinkBankCallbackReceived {
123
+ return { type: 'bankCallbackReceived', reference };
133
124
  },
134
125
  succeeded(result: PaymentResult): SpareLinkSucceeded {
135
126
  return { type: 'succeeded', result };
@@ -1,6 +1,5 @@
1
1
  import type { PaymentResult } from './payment-result';
2
2
  import type { RecoveryResult } from './recovery-result';
3
- import type { SpareLinkSession } from './spare-link-session';
4
3
 
5
4
  /**
6
5
  * Imperative API the {@link SpareLinkHost} mounts and wires to a
@@ -8,20 +7,8 @@ import type { SpareLinkSession } from './spare-link-session';
8
7
  *
9
8
  * @internal
10
9
  */
11
- export interface SpareLinkHostApi {
12
- start(args: { linkToken: string }): Promise<SpareLinkSession>;
13
- handleRedirect(uri: URL | string): Promise<boolean>;
14
- resumeIfNeeded(): Promise<RecoveryResult>;
15
- isFlowActive(): boolean;
16
- }
17
-
18
- /** @internal */
19
10
  export interface SpareLinkHostDelegate {
20
- startFlow(args: {
21
- linkToken: string;
22
- resolve: (result: PaymentResult) => void;
23
- onSessionLoaded?: (linkSessionId: string) => void;
24
- }): void;
11
+ startFlow(args: { reference: string; resolve: (result: PaymentResult) => void }): void;
25
12
  handleRedirect(uri: URL | string): Promise<boolean>;
26
13
  resumeIfNeeded(): Promise<RecoveryResult>;
27
14
  isFlowActive(): boolean;
@@ -1,10 +1,11 @@
1
1
  import type { PendingSessionStore } from '../core/services/pending-session-store';
2
2
  import { type EventEmitter, createEventEmitter } from '../internal/event-emitter';
3
3
  import { type PaymentResult, paymentAbandoned } from './payment-result';
4
- import { type NoRecoveryReason, type RecoveryResult, isSessionRecovered } from './recovery-result';
4
+ import type { NoRecoveryReason, RecoveryResult } from './recovery-result';
5
5
  import {
6
6
  type PaymentEnvironment,
7
7
  type SpareApiTenant,
8
+ assertValidConfig,
8
9
  defaultBaseUrlFor,
9
10
  } from './spare-link-config';
10
11
  import { type SpareLinkEvent, SpareLinkEvents } from './spare-link-event';
@@ -15,14 +16,12 @@ export interface SpareLinkOptions {
15
16
  environment: PaymentEnvironment;
16
17
  tenant: SpareApiTenant;
17
18
  baseUrl?: string;
18
- fetch?: typeof fetch;
19
- requestTimeoutMs?: number;
20
19
  /** Store for crash-safe recovery. Defaults to none — wire e.g. `SecureStorePendingSessionStore`. */
21
20
  pendingSessionStore?: PendingSessionStore;
22
21
  }
23
22
 
24
23
  interface PendingStart {
25
- linkToken: string;
24
+ reference: string;
26
25
  resolve: (session: SpareLinkSession) => void;
27
26
  }
28
27
 
@@ -36,8 +35,11 @@ interface PendingResume {
36
35
  }
37
36
 
38
37
  /**
39
- * Entry point for the Spare Link payment SDK — aligned with Flutter's
40
- * instance-based {@link SpareLink} API.
38
+ * Entry point for the Spare Link payment SDK.
39
+ *
40
+ * Your backend creates the payment request — with `channel: 'sdk_react_native'`
41
+ * and the return URLs your app is registered for — and gives the app the
42
+ * reference it returns. That reference is all this SDK needs.
41
43
  *
42
44
  * Mount {@link SpareLinkHost} once near your app root and pass this instance:
43
45
  *
@@ -51,13 +53,15 @@ interface PendingResume {
51
53
  * <App />
52
54
  * </SpareLinkHost>
53
55
  * ```
56
+ *
57
+ * The SDK makes no API calls of its own and holds no credentials. Every result
58
+ * it reports comes from a deep link that is interceptable by design, so confirm
59
+ * with your backend via `GET /payment-requests/{reference}` before acting on one.
54
60
  */
55
61
  export class SpareLink {
56
62
  readonly environment: PaymentEnvironment;
57
63
  readonly tenant: SpareApiTenant;
58
64
  readonly baseUrl: string | undefined;
59
- readonly fetch: typeof fetch | undefined;
60
- readonly requestTimeoutMs: number | undefined;
61
65
  readonly pendingSessionStore: PendingSessionStore | undefined;
62
66
 
63
67
  private readonly _events = createEventEmitter<SpareLinkEvent>();
@@ -69,11 +73,17 @@ export class SpareLink {
69
73
  private readonly _pendingResumes: PendingResume[] = [];
70
74
 
71
75
  constructor(options: SpareLinkOptions) {
76
+ // Fails where the config was written rather than letting a host the page was
77
+ // never served from reach the webview as a URL nobody meant.
78
+ assertValidConfig({
79
+ environment: options.environment,
80
+ tenant: options.tenant,
81
+ ...(options.baseUrl ? { baseUrl: options.baseUrl } : {}),
82
+ });
83
+
72
84
  this.environment = options.environment;
73
85
  this.tenant = options.tenant;
74
86
  this.baseUrl = options.baseUrl;
75
- this.fetch = options.fetch;
76
- this.requestTimeoutMs = options.requestTimeoutMs;
77
87
  this.pendingSessionStore = options.pendingSessionStore;
78
88
  }
79
89
 
@@ -92,45 +102,34 @@ export class SpareLink {
92
102
  }
93
103
 
94
104
  /**
95
- * Starts a new payment flow.
105
+ * Opens the hosted payment page for `reference` and resolves when the flow ends.
96
106
  *
97
- * Returns a {@link SpareLinkSession} immediately; await `session.result`
98
- * for the terminal outcome.
107
+ * Returns a {@link SpareLinkSession} immediately; await `session.result` for the
108
+ * terminal outcome. There is no session to load first: the page resolves the
109
+ * request itself, so the payer sees it without waiting on a round trip.
99
110
  */
100
- async start(args: { linkToken: string }): Promise<SpareLinkSession> {
101
- const { linkToken } = args;
102
- if (!linkToken) {
103
- const result = paymentAbandoned({
104
- linkToken: '',
105
- message: 'SpareLinkConfig: linkToken must not be empty',
106
- resolvedAtMs: Date.now(),
107
- });
108
- this._emitTerminal(result);
109
- return new SpareLinkSession({ linkToken: '', result: Promise.resolve(result) });
111
+ async start(args: { reference: string }): Promise<SpareLinkSession> {
112
+ const { reference } = args;
113
+ if (!reference) {
114
+ return this._resolveImmediately('', 'SpareLink.start: reference must not be empty');
110
115
  }
111
116
 
112
117
  if (this._disposed) {
113
- const result = paymentAbandoned({
114
- linkToken,
115
- message: 'SpareLink has been disposed.',
116
- resolvedAtMs: Date.now(),
117
- });
118
- this._emitTerminal(result);
119
- return new SpareLinkSession({ linkToken, result: Promise.resolve(result) });
118
+ return this._resolveImmediately(reference, 'SpareLink has been disposed.');
120
119
  }
121
120
 
122
- this._events.emit(SpareLinkEvents.initialized(linkToken));
121
+ this._events.emit(SpareLinkEvents.initialized(reference));
123
122
 
124
123
  if (!this._host) {
125
124
  return new Promise<SpareLinkSession>((resolve) => {
126
- this._pendingStarts.push({ linkToken, resolve });
125
+ this._pendingStarts.push({ reference, resolve });
127
126
  });
128
127
  }
129
128
 
130
- return this._hostStart(linkToken);
129
+ return this._hostStart(reference);
131
130
  }
132
131
 
133
- /** Processes a deep-link URI received from the bank. */
132
+ /** Processes a deep-link URI the payer returned through. */
134
133
  async handleRedirect(uri: URL | string): Promise<boolean> {
135
134
  if (this._disposed) return false;
136
135
  if (!this._host) {
@@ -141,12 +140,16 @@ export class SpareLink {
141
140
  return this._host.handleRedirect(uri);
142
141
  }
143
142
 
144
- /** Checks for a pending session saved during a previous flow and recovers it. */
143
+ /**
144
+ * Reports a payment that was left in progress by a previous app session.
145
+ *
146
+ * If the return deep link arrived before the app had a flow to give it to, the
147
+ * outcome is resolved from it. Otherwise the SDK cannot say how the payment
148
+ * ended — it holds no credentials, so it has nothing to ask with — and reports
149
+ * `outcomeUnknown` with the reference for your backend to resolve.
150
+ */
145
151
  async resumeIfNeeded(): Promise<RecoveryResult> {
146
- if (this._disposed) {
147
- return { kind: 'none', reason: 'persistenceUnavailable' };
148
- }
149
- if (!this.pendingSessionStore) {
152
+ if (this._disposed || !this.pendingSessionStore) {
150
153
  return { kind: 'none', reason: 'persistenceUnavailable' };
151
154
  }
152
155
  if (!this._host) {
@@ -166,12 +169,12 @@ export class SpareLink {
166
169
 
167
170
  for (const p of starts) {
168
171
  const result = paymentAbandoned({
169
- linkToken: p.linkToken,
172
+ reference: p.reference,
170
173
  message: 'SpareLink has been disposed.',
171
174
  resolvedAtMs: Date.now(),
172
175
  });
173
176
  this._emitTerminal(result);
174
- p.resolve(new SpareLinkSession({ linkToken: p.linkToken, result: Promise.resolve(result) }));
177
+ p.resolve(new SpareLinkSession({ reference: p.reference, result: Promise.resolve(result) }));
175
178
  }
176
179
  for (const p of redirects) {
177
180
  p.resolve(false);
@@ -207,6 +210,12 @@ export class SpareLink {
207
210
  this._emitTerminal(result);
208
211
  }
209
212
 
213
+ private _resolveImmediately(reference: string, message: string): SpareLinkSession {
214
+ const result = paymentAbandoned({ reference, message, resolvedAtMs: Date.now() });
215
+ this._emitTerminal(result);
216
+ return new SpareLinkSession({ reference, result: Promise.resolve(result) });
217
+ }
218
+
210
219
  private _emitTerminal(result: PaymentResult): void {
211
220
  switch (result.status) {
212
221
  case 'success':
@@ -224,11 +233,11 @@ export class SpareLink {
224
233
  }
225
234
  }
226
235
 
227
- private async _hostStart(linkToken: string): Promise<SpareLinkSession> {
236
+ private async _hostStart(reference: string): Promise<SpareLinkSession> {
228
237
  const host = this._host;
229
238
  if (!host) {
230
239
  return new Promise<SpareLinkSession>((resolve) => {
231
- this._pendingStarts.push({ linkToken, resolve });
240
+ this._pendingStarts.push({ reference, resolve });
232
241
  });
233
242
  }
234
243
 
@@ -236,21 +245,16 @@ export class SpareLink {
236
245
  const resultPromise = new Promise<PaymentResult>((resolve) => {
237
246
  resolveResult = resolve;
238
247
  });
239
- const session = new SpareLinkSession({ linkToken, result: resultPromise });
240
248
 
241
249
  host.startFlow({
242
- linkToken,
250
+ reference,
243
251
  resolve: (result) => {
244
252
  this._emitTerminal(result);
245
253
  resolveResult(result);
246
254
  },
247
- onSessionLoaded: (linkSessionId) => {
248
- session.updateLinkSessionId(linkSessionId);
249
- this._events.emit(SpareLinkEvents.sessionLoaded(linkToken, linkSessionId));
250
- },
251
255
  });
252
256
 
253
- return session;
257
+ return new SpareLinkSession({ reference, result: resultPromise });
254
258
  }
255
259
 
256
260
  private _drainPending(host: SpareLinkHostDelegate): void {
@@ -259,7 +263,7 @@ export class SpareLink {
259
263
  const resumes = this._pendingResumes.splice(0);
260
264
 
261
265
  for (const p of starts) {
262
- void this._hostStart(p.linkToken).then(p.resolve);
266
+ void this._hostStart(p.reference).then(p.resolve);
263
267
  }
264
268
  for (const p of redirects) {
265
269
  void host.handleRedirect(p.uri).then(p.resolve, () => p.resolve(false));
@@ -272,18 +276,6 @@ export class SpareLink {
272
276
  }
273
277
  }
274
278
 
275
- /** Map legacy recovery helper outcomes to Flutter-aligned {@link RecoveryResult}. */
276
- export function mapHostRecovery(
277
- recovery: RecoveryResult | { kind: 'inProgress'; linkToken: string },
278
- ): RecoveryResult {
279
- if (recovery.kind === 'inProgress') {
280
- return { kind: 'awaitingUser', linkToken: recovery.linkToken };
281
- }
282
- return recovery;
283
- }
284
-
285
- export function noRecovery(reason: NoRecoveryReason): RecoveryResult {
286
- return { kind: 'none', reason };
279
+ export function noRecovery(reason: NoRecoveryReason, reference?: string): RecoveryResult {
280
+ return reference ? { kind: 'none', reason, reference } : { kind: 'none', reason };
287
281
  }
288
-
289
- export { isSessionRecovered };
@@ -3,26 +3,14 @@ import type { PaymentResult } from './payment-result';
3
3
  /**
4
4
  * Handle for an in-flight or completed payment started via {@link SpareLink.start}.
5
5
  *
6
- * Mirrors Flutter's `SpareLinkSession` — `linkToken` is available immediately;
7
- * await `result` for the terminal outcome.
6
+ * `reference` is available immediately; await `result` for the terminal outcome.
8
7
  */
9
8
  export class SpareLinkSession {
10
- readonly linkToken: string;
11
- linkSessionId: string | undefined;
9
+ readonly reference: string;
12
10
  readonly result: Promise<PaymentResult>;
13
11
 
14
- constructor(args: {
15
- linkToken: string;
16
- result: Promise<PaymentResult>;
17
- linkSessionId?: string;
18
- }) {
19
- this.linkToken = args.linkToken;
20
- this.linkSessionId = args.linkSessionId;
12
+ constructor(args: { reference: string; result: Promise<PaymentResult> }) {
13
+ this.reference = args.reference;
21
14
  this.result = args.result;
22
15
  }
23
-
24
- /** Called internally when the server provides {@link linkSessionId}. */
25
- updateLinkSessionId(value: string): void {
26
- this.linkSessionId = value;
27
- }
28
16
  }
@@ -1,2 +1,2 @@
1
- export { SpareLink, mapHostRecovery, noRecovery, isSessionRecovered } from './spare-link-instance';
1
+ export { SpareLink, noRecovery } from './spare-link-instance';
2
2
  export type { SpareLinkOptions } from './spare-link-instance';