@spare-technologies/spare-link 0.1.0-beta.1 → 1.0.1

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 (568) hide show
  1. package/README.md +119 -63
  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/bank-redirect.js +20 -9
  13. package/lib/commonjs/internal/bank-redirect.js.map +1 -1
  14. package/lib/commonjs/internal/hosted/bridge-message.js +107 -0
  15. package/lib/commonjs/internal/hosted/bridge-message.js.map +1 -0
  16. package/lib/commonjs/internal/hosted/hosted-url.js +41 -0
  17. package/lib/commonjs/internal/hosted/hosted-url.js.map +1 -0
  18. package/lib/commonjs/internal/index.js +0 -7
  19. package/lib/commonjs/internal/index.js.map +1 -1
  20. package/lib/commonjs/internal/redact-uri.js +59 -15
  21. package/lib/commonjs/internal/redact-uri.js.map +1 -1
  22. package/lib/commonjs/internal/secure-store-pending-session-store.js +20 -25
  23. package/lib/commonjs/internal/secure-store-pending-session-store.js.map +1 -1
  24. package/lib/commonjs/internal/url-parts.js +145 -0
  25. package/lib/commonjs/internal/url-parts.js.map +1 -0
  26. package/lib/commonjs/public/index.js +0 -37
  27. package/lib/commonjs/public/index.js.map +1 -1
  28. package/lib/commonjs/public/payment-result.js +16 -4
  29. package/lib/commonjs/public/payment-result.js.map +1 -1
  30. package/lib/commonjs/public/recovery-result.js +7 -18
  31. package/lib/commonjs/public/recovery-result.js.map +1 -1
  32. package/lib/commonjs/public/spare-link-config.js +41 -16
  33. package/lib/commonjs/public/spare-link-config.js.map +1 -1
  34. package/lib/commonjs/public/spare-link-event.js +27 -33
  35. package/lib/commonjs/public/spare-link-event.js.map +1 -1
  36. package/lib/commonjs/public/spare-link-instance.js +67 -77
  37. package/lib/commonjs/public/spare-link-instance.js.map +1 -1
  38. package/lib/commonjs/public/spare-link-session.js +2 -9
  39. package/lib/commonjs/public/spare-link-session.js.map +1 -1
  40. package/lib/commonjs/public/spare-link.js +0 -12
  41. package/lib/commonjs/public/spare-link.js.map +1 -1
  42. package/lib/commonjs/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +4 -4
  43. package/lib/commonjs/ui/hooks/use-hosted-flow-state.js.map +1 -0
  44. package/lib/commonjs/ui/hosted/hosted-payment-page.js +177 -0
  45. package/lib/commonjs/ui/hosted/hosted-payment-page.js.map +1 -0
  46. package/lib/commonjs/ui/hosted/hosted-payment-webview.js +168 -0
  47. package/lib/commonjs/ui/hosted/hosted-payment-webview.js.map +1 -0
  48. package/lib/commonjs/ui/screens/index.js +3 -17
  49. package/lib/commonjs/ui/screens/index.js.map +1 -1
  50. package/lib/commonjs/ui/screens/page-unavailable-screen.js +101 -0
  51. package/lib/commonjs/ui/screens/page-unavailable-screen.js.map +1 -0
  52. package/lib/commonjs/ui/spare-link-host.js +220 -234
  53. package/lib/commonjs/ui/spare-link-host.js.map +1 -1
  54. package/lib/commonjs/ui/widgets/index.js +3 -10
  55. package/lib/commonjs/ui/widgets/index.js.map +1 -1
  56. package/lib/commonjs/version.js +1 -1
  57. package/lib/commonjs/version.js.map +1 -1
  58. package/lib/module/core/models/payment-return-params.js +235 -20
  59. package/lib/module/core/models/payment-return-params.js.map +1 -1
  60. package/lib/module/core/models/pending-session-record.js +2 -0
  61. package/lib/module/core/models/pending-session-record.js.map +1 -0
  62. package/lib/module/core/services/hosted-flow-controller.js +328 -0
  63. package/lib/module/core/services/hosted-flow-controller.js.map +1 -0
  64. package/lib/module/core/services/hosted-flow-state.js +91 -0
  65. package/lib/module/core/services/hosted-flow-state.js.map +1 -0
  66. package/lib/module/index.js +8 -22
  67. package/lib/module/index.js.map +1 -1
  68. package/lib/module/internal/bank-redirect.js +20 -9
  69. package/lib/module/internal/bank-redirect.js.map +1 -1
  70. package/lib/module/internal/hosted/bridge-message.js +104 -0
  71. package/lib/module/internal/hosted/bridge-message.js.map +1 -0
  72. package/lib/module/internal/hosted/hosted-url.js +36 -0
  73. package/lib/module/internal/hosted/hosted-url.js.map +1 -0
  74. package/lib/module/internal/index.js +0 -1
  75. package/lib/module/internal/index.js.map +1 -1
  76. package/lib/module/internal/redact-uri.js +59 -15
  77. package/lib/module/internal/redact-uri.js.map +1 -1
  78. package/lib/module/internal/secure-store-pending-session-store.js +20 -25
  79. package/lib/module/internal/secure-store-pending-session-store.js.map +1 -1
  80. package/lib/module/internal/url-parts.js +139 -0
  81. package/lib/module/internal/url-parts.js.map +1 -0
  82. package/lib/module/public/index.js +2 -3
  83. package/lib/module/public/index.js.map +1 -1
  84. package/lib/module/public/payment-result.js +16 -4
  85. package/lib/module/public/payment-result.js.map +1 -1
  86. package/lib/module/public/recovery-result.js +7 -17
  87. package/lib/module/public/recovery-result.js.map +1 -1
  88. package/lib/module/public/spare-link-config.js +42 -15
  89. package/lib/module/public/spare-link-config.js.map +1 -1
  90. package/lib/module/public/spare-link-event.js +27 -33
  91. package/lib/module/public/spare-link-event.js.map +1 -1
  92. package/lib/module/public/spare-link-instance.js +68 -72
  93. package/lib/module/public/spare-link-instance.js.map +1 -1
  94. package/lib/module/public/spare-link-session.js +2 -9
  95. package/lib/module/public/spare-link-session.js.map +1 -1
  96. package/lib/module/public/spare-link.js +1 -1
  97. package/lib/module/public/spare-link.js.map +1 -1
  98. package/lib/module/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +3 -3
  99. package/lib/module/ui/hooks/use-hosted-flow-state.js.map +1 -0
  100. package/lib/module/ui/hosted/hosted-payment-page.js +175 -0
  101. package/lib/module/ui/hosted/hosted-payment-page.js.map +1 -0
  102. package/lib/module/ui/hosted/hosted-payment-webview.js +163 -0
  103. package/lib/module/ui/hosted/hosted-payment-webview.js.map +1 -0
  104. package/lib/module/ui/screens/index.js +1 -3
  105. package/lib/module/ui/screens/index.js.map +1 -1
  106. package/lib/module/ui/screens/page-unavailable-screen.js +97 -0
  107. package/lib/module/ui/screens/page-unavailable-screen.js.map +1 -0
  108. package/lib/module/ui/spare-link-host.js +221 -236
  109. package/lib/module/ui/spare-link-host.js.map +1 -1
  110. package/lib/module/ui/widgets/index.js +1 -2
  111. package/lib/module/ui/widgets/index.js.map +1 -1
  112. package/lib/module/version.js +1 -1
  113. package/lib/module/version.js.map +1 -1
  114. package/lib/typescript/commonjs/core/models/index.d.ts +1 -123
  115. package/lib/typescript/commonjs/core/models/index.d.ts.map +1 -1
  116. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts +91 -8
  117. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/core/models/pending-session-record.d.ts +11 -0
  119. package/lib/typescript/commonjs/core/models/pending-session-record.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts +119 -0
  121. package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts.map +1 -0
  122. package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts +75 -0
  123. package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/index.d.ts +5 -14
  125. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/internal/bank-redirect.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts +44 -0
  128. package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts.map +1 -0
  129. package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts +30 -0
  130. package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/internal/index.d.ts +0 -1
  132. package/lib/typescript/commonjs/internal/index.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/internal/redact-uri.d.ts +21 -1
  134. package/lib/typescript/commonjs/internal/redact-uri.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts +3 -2
  136. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/internal/url-parts.d.ts +46 -0
  138. package/lib/typescript/commonjs/internal/url-parts.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/public/index.d.ts +4 -6
  140. package/lib/typescript/commonjs/public/index.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/public/payment-result.d.ts +50 -12
  142. package/lib/typescript/commonjs/public/payment-result.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/public/recovery-result.d.ts +11 -20
  144. package/lib/typescript/commonjs/public/recovery-result.d.ts.map +1 -1
  145. package/lib/typescript/commonjs/public/spare-link-config.d.ts +13 -31
  146. package/lib/typescript/commonjs/public/spare-link-config.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/public/spare-link-event.d.ts +29 -31
  148. package/lib/typescript/commonjs/public/spare-link-event.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts +1 -12
  150. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/public/spare-link-instance.d.ts +26 -20
  152. package/lib/typescript/commonjs/public/spare-link-instance.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/public/spare-link-session.d.ts +3 -8
  154. package/lib/typescript/commonjs/public/spare-link-session.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/public/spare-link.d.ts +1 -1
  156. package/lib/typescript/commonjs/public/spare-link.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts +9 -0
  158. package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
  159. package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts +17 -0
  160. package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts +43 -0
  162. package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/ui/screens/index.d.ts +1 -3
  164. package/lib/typescript/commonjs/ui/screens/index.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts +18 -0
  166. package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/ui/spare-link-host.d.ts +4 -5
  168. package/lib/typescript/commonjs/ui/spare-link-host.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/ui/widgets/index.d.ts +1 -2
  170. package/lib/typescript/commonjs/ui/widgets/index.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/version.d.ts +1 -1
  172. package/lib/typescript/commonjs/version.d.ts.map +1 -1
  173. package/lib/typescript/module/core/models/index.d.ts +1 -123
  174. package/lib/typescript/module/core/models/index.d.ts.map +1 -1
  175. package/lib/typescript/module/core/models/payment-return-params.d.ts +91 -8
  176. package/lib/typescript/module/core/models/payment-return-params.d.ts.map +1 -1
  177. package/lib/typescript/module/core/models/pending-session-record.d.ts +11 -0
  178. package/lib/typescript/module/core/models/pending-session-record.d.ts.map +1 -0
  179. package/lib/typescript/module/core/services/hosted-flow-controller.d.ts +119 -0
  180. package/lib/typescript/module/core/services/hosted-flow-controller.d.ts.map +1 -0
  181. package/lib/typescript/module/core/services/hosted-flow-state.d.ts +75 -0
  182. package/lib/typescript/module/core/services/hosted-flow-state.d.ts.map +1 -0
  183. package/lib/typescript/module/index.d.ts +5 -14
  184. package/lib/typescript/module/index.d.ts.map +1 -1
  185. package/lib/typescript/module/internal/bank-redirect.d.ts.map +1 -1
  186. package/lib/typescript/module/internal/hosted/bridge-message.d.ts +44 -0
  187. package/lib/typescript/module/internal/hosted/bridge-message.d.ts.map +1 -0
  188. package/lib/typescript/module/internal/hosted/hosted-url.d.ts +30 -0
  189. package/lib/typescript/module/internal/hosted/hosted-url.d.ts.map +1 -0
  190. package/lib/typescript/module/internal/index.d.ts +0 -1
  191. package/lib/typescript/module/internal/index.d.ts.map +1 -1
  192. package/lib/typescript/module/internal/redact-uri.d.ts +21 -1
  193. package/lib/typescript/module/internal/redact-uri.d.ts.map +1 -1
  194. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts +3 -2
  195. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts.map +1 -1
  196. package/lib/typescript/module/internal/url-parts.d.ts +46 -0
  197. package/lib/typescript/module/internal/url-parts.d.ts.map +1 -0
  198. package/lib/typescript/module/public/index.d.ts +4 -6
  199. package/lib/typescript/module/public/index.d.ts.map +1 -1
  200. package/lib/typescript/module/public/payment-result.d.ts +50 -12
  201. package/lib/typescript/module/public/payment-result.d.ts.map +1 -1
  202. package/lib/typescript/module/public/recovery-result.d.ts +11 -20
  203. package/lib/typescript/module/public/recovery-result.d.ts.map +1 -1
  204. package/lib/typescript/module/public/spare-link-config.d.ts +13 -31
  205. package/lib/typescript/module/public/spare-link-config.d.ts.map +1 -1
  206. package/lib/typescript/module/public/spare-link-event.d.ts +29 -31
  207. package/lib/typescript/module/public/spare-link-event.d.ts.map +1 -1
  208. package/lib/typescript/module/public/spare-link-host-api.d.ts +1 -12
  209. package/lib/typescript/module/public/spare-link-host-api.d.ts.map +1 -1
  210. package/lib/typescript/module/public/spare-link-instance.d.ts +26 -20
  211. package/lib/typescript/module/public/spare-link-instance.d.ts.map +1 -1
  212. package/lib/typescript/module/public/spare-link-session.d.ts +3 -8
  213. package/lib/typescript/module/public/spare-link-session.d.ts.map +1 -1
  214. package/lib/typescript/module/public/spare-link.d.ts +1 -1
  215. package/lib/typescript/module/public/spare-link.d.ts.map +1 -1
  216. package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts +9 -0
  217. package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
  218. package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts +17 -0
  219. package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts.map +1 -0
  220. package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts +43 -0
  221. package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
  222. package/lib/typescript/module/ui/screens/index.d.ts +1 -3
  223. package/lib/typescript/module/ui/screens/index.d.ts.map +1 -1
  224. package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts +18 -0
  225. package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts.map +1 -0
  226. package/lib/typescript/module/ui/spare-link-host.d.ts +4 -5
  227. package/lib/typescript/module/ui/spare-link-host.d.ts.map +1 -1
  228. package/lib/typescript/module/ui/widgets/index.d.ts +1 -2
  229. package/lib/typescript/module/ui/widgets/index.d.ts.map +1 -1
  230. package/lib/typescript/module/version.d.ts +1 -1
  231. package/lib/typescript/module/version.d.ts.map +1 -1
  232. package/package.json +24 -22
  233. package/plugins/with-spare-link.js +6 -26
  234. package/src/core/models/index.ts +1 -139
  235. package/src/core/models/payment-return-params.ts +269 -21
  236. package/src/core/models/pending-session-record.ts +10 -0
  237. package/src/core/services/hosted-flow-controller.ts +374 -0
  238. package/src/core/services/hosted-flow-state.ts +123 -0
  239. package/src/index.ts +20 -89
  240. package/src/internal/bank-redirect.ts +23 -9
  241. package/src/internal/hosted/bridge-message.ts +106 -0
  242. package/src/internal/hosted/hosted-url.ts +33 -0
  243. package/src/internal/index.ts +0 -1
  244. package/src/internal/redact-uri.ts +69 -15
  245. package/src/internal/secure-store-pending-session-store.ts +28 -49
  246. package/src/internal/url-parts.ts +134 -0
  247. package/src/public/index.ts +2 -24
  248. package/src/public/payment-result.ts +50 -12
  249. package/src/public/recovery-result.ts +16 -25
  250. package/src/public/spare-link-config.ts +56 -43
  251. package/src/public/spare-link-event.ts +33 -42
  252. package/src/public/spare-link-host-api.ts +1 -14
  253. package/src/public/spare-link-instance.ts +57 -65
  254. package/src/public/spare-link-session.ts +4 -16
  255. package/src/public/spare-link.ts +1 -1
  256. package/src/ui/hooks/use-hosted-flow-state.ts +16 -0
  257. package/src/ui/hosted/hosted-payment-page.tsx +178 -0
  258. package/src/ui/hosted/hosted-payment-webview.tsx +164 -0
  259. package/src/ui/screens/index.ts +4 -6
  260. package/src/ui/screens/page-unavailable-screen.tsx +94 -0
  261. package/src/ui/spare-link-host.tsx +227 -247
  262. package/src/ui/widgets/index.ts +1 -2
  263. package/src/version.ts +1 -1
  264. package/CHANGELOG.md +0 -25
  265. package/lib/commonjs/core/client/link-api-client.js +0 -297
  266. package/lib/commonjs/core/client/link-api-client.js.map +0 -1
  267. package/lib/commonjs/core/errors/payment-api-error.js +0 -35
  268. package/lib/commonjs/core/errors/payment-api-error.js.map +0 -1
  269. package/lib/commonjs/core/models/link-session-status.js +0 -14
  270. package/lib/commonjs/core/models/link-session-status.js.map +0 -1
  271. package/lib/commonjs/core/models/payment-type.js +0 -45
  272. package/lib/commonjs/core/models/payment-type.js.map +0 -1
  273. package/lib/commonjs/core/models/wire-mappers.js +0 -277
  274. package/lib/commonjs/core/models/wire-mappers.js.map +0 -1
  275. package/lib/commonjs/core/services/consent-presenter.js +0 -150
  276. package/lib/commonjs/core/services/consent-presenter.js.map +0 -1
  277. package/lib/commonjs/core/services/execute-resume-if-needed.js +0 -216
  278. package/lib/commonjs/core/services/execute-resume-if-needed.js.map +0 -1
  279. package/lib/commonjs/core/services/multi-payment-rules-presenter.js +0 -151
  280. package/lib/commonjs/core/services/multi-payment-rules-presenter.js.map +0 -1
  281. package/lib/commonjs/core/services/payment-flow-controller.js +0 -547
  282. package/lib/commonjs/core/services/payment-flow-controller.js.map +0 -1
  283. package/lib/commonjs/core/services/payment-flow-state.js +0 -110
  284. package/lib/commonjs/core/services/payment-flow-state.js.map +0 -1
  285. package/lib/commonjs/core/services/payment-result-mapper.js +0 -49
  286. package/lib/commonjs/core/services/payment-result-mapper.js.map +0 -1
  287. package/lib/commonjs/core/services/presentation-utils.js +0 -11
  288. package/lib/commonjs/core/services/presentation-utils.js.map +0 -1
  289. package/lib/commonjs/core/services/redirect-buffer.js +0 -40
  290. package/lib/commonjs/core/services/redirect-buffer.js.map +0 -1
  291. package/lib/commonjs/core/services/user-friendly-messages.js +0 -46
  292. package/lib/commonjs/core/services/user-friendly-messages.js.map +0 -1
  293. package/lib/commonjs/internal/telemetry-collector.js +0 -80
  294. package/lib/commonjs/internal/telemetry-collector.js.map +0 -1
  295. package/lib/commonjs/public/constants.js +0 -21
  296. package/lib/commonjs/public/constants.js.map +0 -1
  297. package/lib/commonjs/public/spare-link-callbacks.js +0 -6
  298. package/lib/commonjs/public/spare-link-callbacks.js.map +0 -1
  299. package/lib/commonjs/ui/consent/charge-bearer-display.js +0 -99
  300. package/lib/commonjs/ui/consent/charge-bearer-display.js.map +0 -1
  301. package/lib/commonjs/ui/consent/consent-accordion.js +0 -94
  302. package/lib/commonjs/ui/consent/consent-accordion.js.map +0 -1
  303. package/lib/commonjs/ui/consent/consent-summary-section.js +0 -27
  304. package/lib/commonjs/ui/consent/consent-summary-section.js.map +0 -1
  305. package/lib/commonjs/ui/consent/cop-information.js +0 -168
  306. package/lib/commonjs/ui/consent/cop-information.js.map +0 -1
  307. package/lib/commonjs/ui/consent/international-payment-summary.js +0 -98
  308. package/lib/commonjs/ui/consent/international-payment-summary.js.map +0 -1
  309. package/lib/commonjs/ui/consent/label-value-rows.js +0 -59
  310. package/lib/commonjs/ui/consent/label-value-rows.js.map +0 -1
  311. package/lib/commonjs/ui/consent/multi-payment-rules-list.js +0 -130
  312. package/lib/commonjs/ui/consent/multi-payment-rules-list.js.map +0 -1
  313. package/lib/commonjs/ui/consent/multi-payment-summary.js +0 -99
  314. package/lib/commonjs/ui/consent/multi-payment-summary.js.map +0 -1
  315. package/lib/commonjs/ui/consent/single-payment-summary.js +0 -158
  316. package/lib/commonjs/ui/consent/single-payment-summary.js.map +0 -1
  317. package/lib/commonjs/ui/consent/terms-link.js +0 -35
  318. package/lib/commonjs/ui/consent/terms-link.js.map +0 -1
  319. package/lib/commonjs/ui/hooks/use-payment-flow-state.js.map +0 -1
  320. package/lib/commonjs/ui/payment-flow-page.js +0 -235
  321. package/lib/commonjs/ui/payment-flow-page.js.map +0 -1
  322. package/lib/commonjs/ui/screens/bank-selection-screen.js +0 -215
  323. package/lib/commonjs/ui/screens/bank-selection-screen.js.map +0 -1
  324. package/lib/commonjs/ui/screens/consent-details-screen.js +0 -124
  325. package/lib/commonjs/ui/screens/consent-details-screen.js.map +0 -1
  326. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js +0 -79
  327. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js.map +0 -1
  328. package/lib/commonjs/ui/widgets/layout-w-header.js +0 -106
  329. package/lib/commonjs/ui/widgets/layout-w-header.js.map +0 -1
  330. package/lib/commonjs/ui/widgets/stepper.js +0 -124
  331. package/lib/commonjs/ui/widgets/stepper.js.map +0 -1
  332. package/lib/module/core/client/link-api-client.js +0 -292
  333. package/lib/module/core/client/link-api-client.js.map +0 -1
  334. package/lib/module/core/errors/payment-api-error.js +0 -29
  335. package/lib/module/core/errors/payment-api-error.js.map +0 -1
  336. package/lib/module/core/models/link-session-status.js +0 -10
  337. package/lib/module/core/models/link-session-status.js.map +0 -1
  338. package/lib/module/core/models/payment-type.js +0 -36
  339. package/lib/module/core/models/payment-type.js.map +0 -1
  340. package/lib/module/core/models/wire-mappers.js +0 -263
  341. package/lib/module/core/models/wire-mappers.js.map +0 -1
  342. package/lib/module/core/services/consent-presenter.js +0 -140
  343. package/lib/module/core/services/consent-presenter.js.map +0 -1
  344. package/lib/module/core/services/execute-resume-if-needed.js +0 -211
  345. package/lib/module/core/services/execute-resume-if-needed.js.map +0 -1
  346. package/lib/module/core/services/multi-payment-rules-presenter.js +0 -146
  347. package/lib/module/core/services/multi-payment-rules-presenter.js.map +0 -1
  348. package/lib/module/core/services/payment-flow-controller.js +0 -544
  349. package/lib/module/core/services/payment-flow-controller.js.map +0 -1
  350. package/lib/module/core/services/payment-flow-state.js +0 -106
  351. package/lib/module/core/services/payment-flow-state.js.map +0 -1
  352. package/lib/module/core/services/payment-result-mapper.js +0 -45
  353. package/lib/module/core/services/payment-result-mapper.js.map +0 -1
  354. package/lib/module/core/services/presentation-utils.js +0 -7
  355. package/lib/module/core/services/presentation-utils.js.map +0 -1
  356. package/lib/module/core/services/redirect-buffer.js +0 -33
  357. package/lib/module/core/services/redirect-buffer.js.map +0 -1
  358. package/lib/module/core/services/user-friendly-messages.js +0 -42
  359. package/lib/module/core/services/user-friendly-messages.js.map +0 -1
  360. package/lib/module/internal/telemetry-collector.js +0 -75
  361. package/lib/module/internal/telemetry-collector.js.map +0 -1
  362. package/lib/module/public/constants.js +0 -17
  363. package/lib/module/public/constants.js.map +0 -1
  364. package/lib/module/public/spare-link-callbacks.js +0 -4
  365. package/lib/module/public/spare-link-callbacks.js.map +0 -1
  366. package/lib/module/ui/consent/charge-bearer-display.js +0 -95
  367. package/lib/module/ui/consent/charge-bearer-display.js.map +0 -1
  368. package/lib/module/ui/consent/consent-accordion.js +0 -90
  369. package/lib/module/ui/consent/consent-accordion.js.map +0 -1
  370. package/lib/module/ui/consent/consent-summary-section.js +0 -23
  371. package/lib/module/ui/consent/consent-summary-section.js.map +0 -1
  372. package/lib/module/ui/consent/cop-information.js +0 -165
  373. package/lib/module/ui/consent/cop-information.js.map +0 -1
  374. package/lib/module/ui/consent/international-payment-summary.js +0 -94
  375. package/lib/module/ui/consent/international-payment-summary.js.map +0 -1
  376. package/lib/module/ui/consent/label-value-rows.js +0 -55
  377. package/lib/module/ui/consent/label-value-rows.js.map +0 -1
  378. package/lib/module/ui/consent/multi-payment-rules-list.js +0 -125
  379. package/lib/module/ui/consent/multi-payment-rules-list.js.map +0 -1
  380. package/lib/module/ui/consent/multi-payment-summary.js +0 -95
  381. package/lib/module/ui/consent/multi-payment-summary.js.map +0 -1
  382. package/lib/module/ui/consent/single-payment-summary.js +0 -154
  383. package/lib/module/ui/consent/single-payment-summary.js.map +0 -1
  384. package/lib/module/ui/consent/terms-link.js +0 -31
  385. package/lib/module/ui/consent/terms-link.js.map +0 -1
  386. package/lib/module/ui/hooks/use-payment-flow-state.js.map +0 -1
  387. package/lib/module/ui/payment-flow-page.js +0 -232
  388. package/lib/module/ui/payment-flow-page.js.map +0 -1
  389. package/lib/module/ui/screens/bank-selection-screen.js +0 -211
  390. package/lib/module/ui/screens/bank-selection-screen.js.map +0 -1
  391. package/lib/module/ui/screens/consent-details-screen.js +0 -120
  392. package/lib/module/ui/screens/consent-details-screen.js.map +0 -1
  393. package/lib/module/ui/screens/mandate-setup-success-screen.js +0 -75
  394. package/lib/module/ui/screens/mandate-setup-success-screen.js.map +0 -1
  395. package/lib/module/ui/widgets/layout-w-header.js +0 -102
  396. package/lib/module/ui/widgets/layout-w-header.js.map +0 -1
  397. package/lib/module/ui/widgets/stepper.js +0 -120
  398. package/lib/module/ui/widgets/stepper.js.map +0 -1
  399. package/lib/typescript/commonjs/core/client/link-api-client.d.ts +0 -70
  400. package/lib/typescript/commonjs/core/client/link-api-client.d.ts.map +0 -1
  401. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts +0 -15
  402. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts.map +0 -1
  403. package/lib/typescript/commonjs/core/models/link-session-status.d.ts +0 -6
  404. package/lib/typescript/commonjs/core/models/link-session-status.d.ts.map +0 -1
  405. package/lib/typescript/commonjs/core/models/payment-type.d.ts +0 -18
  406. package/lib/typescript/commonjs/core/models/payment-type.d.ts.map +0 -1
  407. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts +0 -19
  408. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts.map +0 -1
  409. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts +0 -67
  410. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts.map +0 -1
  411. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts +0 -32
  412. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts.map +0 -1
  413. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts +0 -9
  414. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
  415. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts +0 -146
  416. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts.map +0 -1
  417. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts +0 -64
  418. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts.map +0 -1
  419. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts +0 -5
  420. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts.map +0 -1
  421. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts +0 -5
  422. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts.map +0 -1
  423. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts +0 -6
  424. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts.map +0 -1
  425. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts +0 -6
  426. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts.map +0 -1
  427. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts +0 -2
  428. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts.map +0 -1
  429. package/lib/typescript/commonjs/public/constants.d.ts +0 -12
  430. package/lib/typescript/commonjs/public/constants.d.ts.map +0 -1
  431. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts +0 -14
  432. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts.map +0 -1
  433. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts +0 -5
  434. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts.map +0 -1
  435. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts +0 -10
  436. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts.map +0 -1
  437. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts +0 -6
  438. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts.map +0 -1
  439. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts +0 -6
  440. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts.map +0 -1
  441. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts +0 -6
  442. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts.map +0 -1
  443. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts +0 -10
  444. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts.map +0 -1
  445. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts +0 -15
  446. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
  447. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts +0 -6
  448. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts.map +0 -1
  449. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts +0 -6
  450. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts.map +0 -1
  451. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts +0 -2
  452. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts.map +0 -1
  453. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts +0 -9
  454. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
  455. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts +0 -20
  456. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts.map +0 -1
  457. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts +0 -15
  458. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts.map +0 -1
  459. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts +0 -13
  460. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts.map +0 -1
  461. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts +0 -10
  462. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
  463. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts +0 -20
  464. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts.map +0 -1
  465. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts +0 -15
  466. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts.map +0 -1
  467. package/lib/typescript/module/core/client/link-api-client.d.ts +0 -70
  468. package/lib/typescript/module/core/client/link-api-client.d.ts.map +0 -1
  469. package/lib/typescript/module/core/errors/payment-api-error.d.ts +0 -15
  470. package/lib/typescript/module/core/errors/payment-api-error.d.ts.map +0 -1
  471. package/lib/typescript/module/core/models/link-session-status.d.ts +0 -6
  472. package/lib/typescript/module/core/models/link-session-status.d.ts.map +0 -1
  473. package/lib/typescript/module/core/models/payment-type.d.ts +0 -18
  474. package/lib/typescript/module/core/models/payment-type.d.ts.map +0 -1
  475. package/lib/typescript/module/core/models/wire-mappers.d.ts +0 -19
  476. package/lib/typescript/module/core/models/wire-mappers.d.ts.map +0 -1
  477. package/lib/typescript/module/core/services/consent-presenter.d.ts +0 -67
  478. package/lib/typescript/module/core/services/consent-presenter.d.ts.map +0 -1
  479. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts +0 -32
  480. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts.map +0 -1
  481. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts +0 -9
  482. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
  483. package/lib/typescript/module/core/services/payment-flow-controller.d.ts +0 -146
  484. package/lib/typescript/module/core/services/payment-flow-controller.d.ts.map +0 -1
  485. package/lib/typescript/module/core/services/payment-flow-state.d.ts +0 -64
  486. package/lib/typescript/module/core/services/payment-flow-state.d.ts.map +0 -1
  487. package/lib/typescript/module/core/services/payment-result-mapper.d.ts +0 -5
  488. package/lib/typescript/module/core/services/payment-result-mapper.d.ts.map +0 -1
  489. package/lib/typescript/module/core/services/presentation-utils.d.ts +0 -5
  490. package/lib/typescript/module/core/services/presentation-utils.d.ts.map +0 -1
  491. package/lib/typescript/module/core/services/redirect-buffer.d.ts +0 -6
  492. package/lib/typescript/module/core/services/redirect-buffer.d.ts.map +0 -1
  493. package/lib/typescript/module/core/services/user-friendly-messages.d.ts +0 -6
  494. package/lib/typescript/module/core/services/user-friendly-messages.d.ts.map +0 -1
  495. package/lib/typescript/module/internal/telemetry-collector.d.ts +0 -2
  496. package/lib/typescript/module/internal/telemetry-collector.d.ts.map +0 -1
  497. package/lib/typescript/module/public/constants.d.ts +0 -12
  498. package/lib/typescript/module/public/constants.d.ts.map +0 -1
  499. package/lib/typescript/module/public/spare-link-callbacks.d.ts +0 -14
  500. package/lib/typescript/module/public/spare-link-callbacks.d.ts.map +0 -1
  501. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts +0 -5
  502. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts.map +0 -1
  503. package/lib/typescript/module/ui/consent/consent-accordion.d.ts +0 -10
  504. package/lib/typescript/module/ui/consent/consent-accordion.d.ts.map +0 -1
  505. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts +0 -6
  506. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts.map +0 -1
  507. package/lib/typescript/module/ui/consent/cop-information.d.ts +0 -6
  508. package/lib/typescript/module/ui/consent/cop-information.d.ts.map +0 -1
  509. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts +0 -6
  510. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts.map +0 -1
  511. package/lib/typescript/module/ui/consent/label-value-rows.d.ts +0 -10
  512. package/lib/typescript/module/ui/consent/label-value-rows.d.ts.map +0 -1
  513. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts +0 -15
  514. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
  515. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts +0 -6
  516. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts.map +0 -1
  517. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts +0 -6
  518. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts.map +0 -1
  519. package/lib/typescript/module/ui/consent/terms-link.d.ts +0 -2
  520. package/lib/typescript/module/ui/consent/terms-link.d.ts.map +0 -1
  521. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts +0 -9
  522. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
  523. package/lib/typescript/module/ui/payment-flow-page.d.ts +0 -20
  524. package/lib/typescript/module/ui/payment-flow-page.d.ts.map +0 -1
  525. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts +0 -15
  526. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts.map +0 -1
  527. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts +0 -13
  528. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts.map +0 -1
  529. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts +0 -10
  530. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
  531. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts +0 -20
  532. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts.map +0 -1
  533. package/lib/typescript/module/ui/widgets/stepper.d.ts +0 -15
  534. package/lib/typescript/module/ui/widgets/stepper.d.ts.map +0 -1
  535. package/src/core/client/link-api-client.ts +0 -414
  536. package/src/core/errors/payment-api-error.ts +0 -35
  537. package/src/core/models/link-session-status.ts +0 -7
  538. package/src/core/models/payment-type.ts +0 -54
  539. package/src/core/models/wire-mappers.ts +0 -315
  540. package/src/core/services/consent-presenter.ts +0 -213
  541. package/src/core/services/execute-resume-if-needed.ts +0 -243
  542. package/src/core/services/multi-payment-rules-presenter.ts +0 -158
  543. package/src/core/services/payment-flow-controller.ts +0 -607
  544. package/src/core/services/payment-flow-state.ts +0 -124
  545. package/src/core/services/payment-result-mapper.ts +0 -41
  546. package/src/core/services/presentation-utils.ts +0 -4
  547. package/src/core/services/redirect-buffer.ts +0 -34
  548. package/src/core/services/user-friendly-messages.ts +0 -39
  549. package/src/internal/telemetry-collector.ts +0 -90
  550. package/src/public/constants.ts +0 -14
  551. package/src/public/spare-link-callbacks.ts +0 -20
  552. package/src/ui/consent/charge-bearer-display.tsx +0 -68
  553. package/src/ui/consent/consent-accordion.tsx +0 -89
  554. package/src/ui/consent/consent-summary-section.tsx +0 -19
  555. package/src/ui/consent/cop-information.tsx +0 -121
  556. package/src/ui/consent/international-payment-summary.tsx +0 -83
  557. package/src/ui/consent/label-value-rows.tsx +0 -50
  558. package/src/ui/consent/multi-payment-rules-list.tsx +0 -138
  559. package/src/ui/consent/multi-payment-summary.tsx +0 -82
  560. package/src/ui/consent/single-payment-summary.tsx +0 -123
  561. package/src/ui/consent/terms-link.tsx +0 -27
  562. package/src/ui/hooks/use-payment-flow-state.ts +0 -16
  563. package/src/ui/payment-flow-page.tsx +0 -254
  564. package/src/ui/screens/bank-selection-screen.tsx +0 -209
  565. package/src/ui/screens/consent-details-screen.tsx +0 -106
  566. package/src/ui/screens/mandate-setup-success-screen.tsx +0 -72
  567. package/src/ui/widgets/layout-w-header.tsx +0 -89
  568. package/src/ui/widgets/stepper.tsx +0 -126
@@ -1,254 +0,0 @@
1
- import { useEffect, useRef, useState } from 'react';
2
- import { ActivityIndicator, StyleSheet, View } from 'react-native';
3
- import { Text } from 'react-native';
4
- import { isMultiPayment, resolvedPaymentType } from '../core/models/payment-type';
5
- import { summaryFromState } from '../core/services/consent-presenter';
6
- import {
7
- buildMultiPaymentRules,
8
- rulesSectionTitle,
9
- } from '../core/services/multi-payment-rules-presenter';
10
- import type { PaymentFlowController } from '../core/services/payment-flow-controller';
11
- import { userFriendlyMessageFor } from '../core/services/user-friendly-messages';
12
- import { DEFAULT_AWAITING_CALLBACK_POLL_MS } from '../public/constants';
13
- import type { SpareLinkCallbacks } from '../public/spare-link-callbacks';
14
- import { usePaymentFlowState } from './hooks/use-payment-flow-state';
15
- import { BankSelectionScreen } from './screens/bank-selection-screen';
16
- import { ConsentDetailsScreen } from './screens/consent-details-screen';
17
- import { MandateSetupSuccessScreen } from './screens/mandate-setup-success-screen';
18
- import { RedirectHandoffScreen } from './screens/redirect-handoff-screen';
19
- import { ResultScreen } from './screens/result-screen';
20
- import { ResumeProcessingScreen } from './screens/resume-processing-screen';
21
- import { Colors, Typography } from './theme';
22
-
23
- export interface PaymentFlowPageProps {
24
- controller: PaymentFlowController;
25
- /** Called when the flow resolves to a terminal phase. Hosts the Modal close. */
26
- onResolved: () => void;
27
- callbacks?: SpareLinkCallbacks;
28
- /**
29
- * Bank redirect launcher. Defaults to a noop in tests (the SDK substitutes
30
- * the real `BankRedirect.launch` in {@link SpareLinkHost}). Receives the
31
- * consent's `authorizationUrl` (+ optional bank `mobileAppUrl`) and returns
32
- * once the system has handed off to the bank.
33
- */
34
- launchBankRedirect?: (args: { authorizationUrl: string; mobileAppUrl?: string }) => Promise<void>;
35
- }
36
-
37
- export function PaymentFlowPage(props: PaymentFlowPageProps): JSX.Element {
38
- const { controller, onResolved, launchBankRedirect } = props;
39
- const state = usePaymentFlowState(controller);
40
- const [processing, setProcessing] = useState(false);
41
- const [mandateAcknowledged, setMandateAcknowledged] = useState(false);
42
- const hydratedRef = useRef(false);
43
- const terminalFiredRef = useRef(false);
44
- const mandateClosedRef = useRef(false);
45
-
46
- useEffect(() => {
47
- if (hydratedRef.current) return;
48
- hydratedRef.current = true;
49
- // Recovery parks at awaitingCallback before mount (Flutter parity) — GET /link
50
- // is one-time and must not be called again on resume.
51
- if (controller.state.phase !== 'idle') return;
52
- void controller.hydrate().catch(() => {
53
- // hydrate already setStates failed — callback will fire below.
54
- });
55
- }, [controller]);
56
-
57
- // Launch bank redirect once we hit `redirecting`.
58
- useEffect(() => {
59
- if (state.phase !== 'redirecting' || !state.consent) return;
60
- const consent = state.consent;
61
- let cancelled = false;
62
- (async () => {
63
- try {
64
- await launchBankRedirect?.({
65
- authorizationUrl: consent.redirectUrl,
66
- ...(consent.mobileAppUrl ? { mobileAppUrl: consent.mobileAppUrl } : {}),
67
- });
68
- if (cancelled) return;
69
- controller.fireEvent('redirectToBank');
70
- controller.setAwaitingCallbackState({
71
- ...(state.selectedProvider ? { providerName: state.selectedProvider.name } : {}),
72
- });
73
- } catch {
74
- if (!cancelled) {
75
- void controller.reportError('bank_launch_failed');
76
- }
77
- }
78
- })();
79
- return () => {
80
- cancelled = true;
81
- };
82
- }, [state.phase, state.consent, state.selectedProvider, launchBankRedirect, controller]);
83
-
84
- // Poll /link/status while waiting for the bank — production and sandbox.
85
- useEffect(() => {
86
- if (state.phase !== 'awaitingCallback') return;
87
- const id = setInterval(() => {
88
- void controller.pollStatus();
89
- }, DEFAULT_AWAITING_CALLBACK_POLL_MS);
90
- return () => clearInterval(id);
91
- }, [state.phase, controller]);
92
-
93
- // Fire terminal callbacks exactly once.
94
- // or re-delivered terminal state (e.g. a duplicate callback) can't fire
95
- // onSuccess/onEvent twice — integrators treat onSuccess as fire-once
96
- // (navigate, capture funds, record analytics).
97
- useEffect(() => {
98
- const phase = state.phase;
99
- if (phase !== 'succeeded' && phase !== 'failed' && phase !== 'cancelled') return;
100
- if (terminalFiredRef.current) return;
101
- if (phase === 'succeeded') {
102
- const request = state.session?.request;
103
- if (request && isMultiPayment(request) && !mandateAcknowledged) return;
104
- }
105
- terminalFiredRef.current = true;
106
- if (phase === 'succeeded') {
107
- props.callbacks?.onSuccess?.(state.exchangeCode, state.linkSessionId);
108
- props.callbacks?.onEvent?.('succeeded');
109
- } else if (phase === 'failed') {
110
- props.callbacks?.onEvent?.('failed');
111
- } else {
112
- props.callbacks?.onEvent?.('cancelled');
113
- }
114
- }, [
115
- state.phase,
116
- state.exchangeCode,
117
- state.linkSessionId,
118
- state.session,
119
- mandateAcknowledged,
120
- props.callbacks,
121
- ]);
122
-
123
- useEffect(() => {
124
- if (state.phase !== 'succeeded' || !mandateAcknowledged || mandateClosedRef.current) return;
125
- const request = state.session?.request;
126
- if (!request || !isMultiPayment(request)) return;
127
- mandateClosedRef.current = true;
128
- onResolved();
129
- }, [state.phase, state.session, mandateAcknowledged, onResolved]);
130
-
131
- switch (state.phase) {
132
- case 'idle':
133
- case 'hydrating':
134
- return <LoadingState />;
135
-
136
- case 'bankSelection':
137
- return (
138
- <BankSelectionScreen
139
- providers={state.providers}
140
- isProcessing={processing}
141
- onSelected={async (bankId) => {
142
- setProcessing(true);
143
- try {
144
- controller.selectBank(bankId);
145
- } finally {
146
- setProcessing(false);
147
- }
148
- }}
149
- onCancel={async () => {
150
- setProcessing(true);
151
- try {
152
- await controller.cancel();
153
- } finally {
154
- setProcessing(false);
155
- }
156
- }}
157
- />
158
- );
159
-
160
- case 'consentDetails': {
161
- const summary = summaryFromState(state);
162
- if (!summary) return <LoadingState />;
163
- return (
164
- <ConsentDetailsScreen
165
- display={summary}
166
- isProcessing={processing}
167
- {...(state.isCopLoading ? { isCopLoading: true } : {})}
168
- onContinue={async () => {
169
- setProcessing(true);
170
- try {
171
- await controller.confirmConsent();
172
- } catch {
173
- // controller already setStates failed
174
- } finally {
175
- setProcessing(false);
176
- }
177
- }}
178
- onCancel={async () => {
179
- setProcessing(true);
180
- try {
181
- await controller.cancel();
182
- } finally {
183
- setProcessing(false);
184
- }
185
- }}
186
- />
187
- );
188
- }
189
-
190
- case 'redirecting':
191
- return <RedirectHandoffScreen />;
192
-
193
- case 'awaitingCallback':
194
- return (
195
- <ResumeProcessingScreen
196
- {...(controller.awaitingCallbackStartedAtMs !== undefined
197
- ? { awaitingCallbackStartedAtMs: controller.awaitingCallbackStartedAtMs }
198
- : {})}
199
- onCancel={async () => {
200
- await controller.cancel();
201
- }}
202
- />
203
- );
204
-
205
- case 'succeeded': {
206
- const request = state.session?.request;
207
- if (request && isMultiPayment(request) && !mandateAcknowledged) {
208
- const paymentType = resolvedPaymentType(request);
209
- return (
210
- <MandateSetupSuccessScreen
211
- rulesTitle={rulesSectionTitle(paymentType)}
212
- rules={buildMultiPaymentRules(paymentType, request.instructions)}
213
- paymentType={paymentType}
214
- onDone={() => setMandateAcknowledged(true)}
215
- />
216
- );
217
- }
218
- return <ResultScreen title="Your payment was successful." isSuccess onDone={onResolved} />;
219
- }
220
-
221
- case 'failed':
222
- return (
223
- <ResultScreen
224
- title={userFriendlyMessageFor(state.errorCode ?? 'unknown_error')}
225
- isSuccess={false}
226
- onDone={onResolved}
227
- />
228
- );
229
-
230
- case 'cancelled':
231
- return (
232
- <ResultScreen title="The payment was cancelled." isSuccess={false} onDone={onResolved} />
233
- );
234
- }
235
- }
236
-
237
- function LoadingState(): JSX.Element {
238
- return (
239
- <View style={styles.loading} testID="payment-flow-loading">
240
- <ActivityIndicator size="large" color={Colors.spareBlue} />
241
- <Text style={Typography.bodyMuted}>Loading…</Text>
242
- </View>
243
- );
244
- }
245
-
246
- const styles = StyleSheet.create({
247
- loading: {
248
- flex: 1,
249
- alignItems: 'center',
250
- justifyContent: 'center',
251
- gap: 12,
252
- backgroundColor: Colors.surfacePage,
253
- },
254
- });
@@ -1,209 +0,0 @@
1
- import { Ionicons } from '@expo/vector-icons';
2
- import { useMemo, useState } from 'react';
3
- import { Image, Pressable, StyleSheet, Text, TextInput, View } from 'react-native';
4
- import type { ProviderSummary } from '../../core/models';
5
- import { Colors, FONT_FAMILY, Spacing } from '../theme';
6
- import { Footer, LayoutWHeader } from '../widgets';
7
-
8
- export interface BankSelectionScreenProps {
9
- providers: ProviderSummary[];
10
- onSelected: (bankId: string) => void;
11
- onCancel: () => void;
12
- isProcessing?: boolean;
13
- }
14
-
15
- /**
16
- * CBUAE-approved bank picker. Port of Flutter `bank_selection_screen.dart`:
17
- * "Choose your bank" inside a white card with a search field and logo rows
18
- * (blue-outline selection), wrapped in the shared {@link LayoutWHeader} stepper
19
- * chrome with a "Proceed using Altareq" footer.
20
- */
21
- export function BankSelectionScreen(props: BankSelectionScreenProps): JSX.Element {
22
- const [query, setQuery] = useState('');
23
- const [selectedId, setSelectedId] = useState<string | undefined>(undefined);
24
-
25
- const trimmed = query.trim().toLowerCase();
26
- const filtered = useMemo(
27
- () =>
28
- trimmed
29
- ? props.providers.filter((p) => p.name.toLowerCase().includes(trimmed))
30
- : props.providers,
31
- [props.providers, trimmed],
32
- );
33
-
34
- const isBankSelected = !!selectedId;
35
-
36
- return (
37
- <LayoutWHeader
38
- progress={0}
39
- onBackPress={props.onCancel}
40
- {...(props.isProcessing ? { backDisabled: true } : {})}
41
- >
42
- <View style={styles.container} testID="bank-selection-screen">
43
- <View style={styles.card}>
44
- <Text style={styles.cardTitle} testID="bank-selection-title">
45
- Choose your bank
46
- </Text>
47
- <View style={styles.searchRow}>
48
- <TextInput
49
- accessibilityLabel="Search account providers"
50
- testID="bank-selection-search"
51
- value={query}
52
- onChangeText={setQuery}
53
- placeholder="Enter account provider..."
54
- placeholderTextColor={Colors.textMuted}
55
- style={styles.searchInput}
56
- />
57
- {query.length > 0 ? (
58
- <Pressable
59
- accessibilityRole="button"
60
- testID="bank-selection-search-clear"
61
- onPress={() => setQuery('')}
62
- hitSlop={8}
63
- >
64
- <Ionicons name="close" size={18} color={Colors.textMuted} />
65
- </Pressable>
66
- ) : (
67
- <Ionicons name="search" size={18} color={Colors.textMuted} />
68
- )}
69
- </View>
70
-
71
- {filtered.length === 0 ? (
72
- <Text testID="bank-selection-empty" style={styles.empty}>
73
- {trimmed ? `No banks match "${query.trim()}"` : 'No banks available'}
74
- </Text>
75
- ) : (
76
- filtered.map((provider) => (
77
- <BankRow
78
- key={provider.id}
79
- provider={provider}
80
- isSelected={provider.id === selectedId}
81
- onPress={() => setSelectedId(provider.id)}
82
- />
83
- ))
84
- )}
85
- </View>
86
-
87
- <View style={styles.spacer} />
88
-
89
- <Footer
90
- continueButtonText="Proceed using Altareq"
91
- continueTestID="bank-selection-continue-btn"
92
- cancelTestID="bank-selection-cancel-btn"
93
- onCancel={props.onCancel}
94
- disabledContinueButton={!isBankSelected}
95
- {...(isBankSelected ? { onContinue: () => props.onSelected(selectedId as string) } : {})}
96
- {...(props.isProcessing ? { isLoading: true } : {})}
97
- />
98
- </View>
99
- </LayoutWHeader>
100
- );
101
- }
102
-
103
- function BankRow(props: {
104
- provider: ProviderSummary;
105
- isSelected: boolean;
106
- onPress: () => void;
107
- }): JSX.Element {
108
- const { provider, isSelected } = props;
109
- const [logoFailed, setLogoFailed] = useState(false);
110
- const showLogo = !!provider.logoUrl && !logoFailed;
111
- return (
112
- <Pressable
113
- testID={`bank-row-${provider.code}`}
114
- accessibilityRole="button"
115
- onPress={props.onPress}
116
- style={[styles.row, isSelected && styles.rowSelected]}
117
- >
118
- {showLogo ? (
119
- <Image
120
- source={{ uri: provider.logoUrl }}
121
- style={styles.logo}
122
- resizeMode="contain"
123
- onError={() => setLogoFailed(true)}
124
- />
125
- ) : (
126
- <View style={[styles.logo, styles.logoFallback]}>
127
- <Ionicons name="business-outline" size={20} color={Colors.textMuted} />
128
- </View>
129
- )}
130
- <Text style={[styles.rowName, isSelected && styles.rowNameSelected]} numberOfLines={1}>
131
- {provider.name}
132
- </Text>
133
- </Pressable>
134
- );
135
- }
136
-
137
- const styles = StyleSheet.create({
138
- container: { flex: 1 },
139
- card: {
140
- backgroundColor: Colors.surfaceCard,
141
- borderRadius: 12,
142
- paddingHorizontal: 12,
143
- paddingVertical: 16,
144
- borderWidth: StyleSheet.hairlineWidth,
145
- borderColor: Colors.divider,
146
- shadowColor: '#000000',
147
- shadowOpacity: 0.06,
148
- shadowRadius: 6,
149
- shadowOffset: { width: 0, height: 2 },
150
- elevation: 2,
151
- },
152
- cardTitle: {
153
- fontFamily: FONT_FAMILY,
154
- fontSize: 16,
155
- fontWeight: '700',
156
- color: Colors.textPrimary,
157
- marginBottom: 12,
158
- },
159
- searchRow: {
160
- flexDirection: 'row',
161
- alignItems: 'center',
162
- borderWidth: StyleSheet.hairlineWidth,
163
- borderColor: Colors.divider,
164
- borderRadius: 12,
165
- paddingHorizontal: 12,
166
- height: 44,
167
- marginBottom: Spacing.md,
168
- },
169
- searchInput: {
170
- flex: 1,
171
- fontFamily: FONT_FAMILY,
172
- fontSize: 14,
173
- color: Colors.textPrimary,
174
- paddingVertical: 0,
175
- },
176
- empty: {
177
- fontFamily: FONT_FAMILY,
178
- fontSize: 14,
179
- color: Colors.textMuted,
180
- textAlign: 'center',
181
- paddingVertical: Spacing.xl,
182
- },
183
- row: {
184
- flexDirection: 'row',
185
- alignItems: 'center',
186
- paddingHorizontal: 12,
187
- paddingVertical: 10,
188
- marginVertical: 4,
189
- borderRadius: 10,
190
- borderWidth: 1.5,
191
- borderColor: 'transparent',
192
- },
193
- rowSelected: { borderColor: Colors.spareBlue },
194
- logo: { width: 36, height: 36, borderRadius: 4 },
195
- logoFallback: {
196
- backgroundColor: Colors.surfaceMuted,
197
- alignItems: 'center',
198
- justifyContent: 'center',
199
- },
200
- rowName: {
201
- flex: 1,
202
- marginLeft: 12,
203
- fontFamily: FONT_FAMILY,
204
- fontSize: 14,
205
- color: Colors.textPrimary,
206
- },
207
- rowNameSelected: { color: Colors.spareBlue, fontWeight: '600' },
208
- spacer: { flex: 1, minHeight: Spacing.xl },
209
- });
@@ -1,106 +0,0 @@
1
- import { ScrollView, StyleSheet, Text, View } from 'react-native';
2
- import type { ConsentSummaryData } from '../../core/services/consent-presenter';
3
- import { ConsentSummarySection } from '../consent/consent-summary-section';
4
- import { present } from '../consent/label-value-rows';
5
- import { Colors, FONT_FAMILY, Spacing } from '../theme';
6
- import { Footer, LayoutWHeader } from '../widgets';
7
-
8
- export interface ConsentDetailsScreenProps {
9
- display: ConsentSummaryData;
10
- onContinue: () => void;
11
- onCancel: () => void;
12
- isProcessing?: boolean;
13
- isCopLoading?: boolean;
14
- }
15
-
16
- /**
17
- * CBUAE-approved consent screen. Port of Flutter `consent_details_screen.dart`.
18
- */
19
- export function ConsentDetailsScreen(props: ConsentDetailsScreenProps): JSX.Element {
20
- const { display, onContinue, onCancel, isProcessing, isCopLoading } = props;
21
- const bankName = present(display.bankName, 'your bank');
22
- const disableContinue =
23
- isCopLoading ?? (display.variant === 'singlePayment' ? display.isCopLoading : false);
24
- const backDisabled = !!isProcessing;
25
- return (
26
- <LayoutWHeader progress={0.5} onBackPress={onCancel} backDisabled={backDisabled}>
27
- <ScrollView
28
- style={styles.scroll}
29
- contentContainerStyle={styles.content}
30
- testID="consent-details-screen"
31
- >
32
- <Text style={styles.title} testID="consent-details-title">
33
- Permission to make a payment
34
- </Text>
35
- <Text style={styles.intro} testID="consent-details-intro">
36
- To make a payment we need your permission to securely initiate payment order from{' '}
37
- {bankName}.
38
- </Text>
39
-
40
- <ConsentSummarySection data={display} />
41
-
42
- {display.variant === 'multiPayment' ? (
43
- <View style={styles.balancePermission} testID="consent-balance-permission">
44
- <Text style={styles.title}>Permission to check balance</Text>
45
- <Text style={styles.balanceIntro}>
46
- You also allow us to check the available funds before making a payment
47
- </Text>
48
- </View>
49
- ) : null}
50
-
51
- <View style={styles.footerWrap}>
52
- <Footer
53
- onContinue={onContinue}
54
- continueButtonText="Pay using Altareq"
55
- continueTestID="consent-proceed-btn"
56
- showCancelButton={false}
57
- disabledContinueButton={disableContinue}
58
- {...(isProcessing ? { isLoading: true } : {})}
59
- />
60
- </View>
61
-
62
- <Text style={styles.disclaimer} testID="consent-details-disclaimer">
63
- We will securely transfer you to{' '}
64
- <Text style={styles.disclaimerBold}>{display.bankName}</Text> to authorize and make the
65
- payment.
66
- </Text>
67
- </ScrollView>
68
- </LayoutWHeader>
69
- );
70
- }
71
-
72
- const styles = StyleSheet.create({
73
- scroll: { flex: 1 },
74
- content: { paddingBottom: Spacing.xl },
75
- title: {
76
- fontFamily: FONT_FAMILY,
77
- fontSize: 18,
78
- fontWeight: '700',
79
- color: Colors.textPrimary,
80
- },
81
- intro: {
82
- fontFamily: FONT_FAMILY,
83
- fontSize: 14,
84
- color: Colors.textMuted,
85
- lineHeight: 22,
86
- marginTop: 10,
87
- marginBottom: 20,
88
- },
89
- balancePermission: { marginTop: 20 },
90
- balanceIntro: {
91
- fontFamily: FONT_FAMILY,
92
- fontSize: 14,
93
- color: Colors.textMuted,
94
- lineHeight: 22,
95
- marginTop: Spacing.sm,
96
- },
97
- footerWrap: { marginTop: 20 },
98
- disclaimer: {
99
- fontFamily: FONT_FAMILY,
100
- fontSize: 14,
101
- color: Colors.textMuted,
102
- lineHeight: 22,
103
- marginTop: Spacing.md,
104
- },
105
- disclaimerBold: { fontWeight: '700', color: Colors.textMuted },
106
- });
@@ -1,72 +0,0 @@
1
- import { ScrollView, StyleSheet, Text, View } from 'react-native';
2
- import type { PaymentType } from '../../core/models/payment-type';
3
- import type { LabelValueRow } from '../../core/services/multi-payment-rules-presenter';
4
- import { MultiPaymentRulesList } from '../consent/multi-payment-rules-list';
5
- import { Colors, FONT_FAMILY, Spacing } from '../theme';
6
- import { Footer } from '../widgets';
7
-
8
- export interface MandateSetupSuccessScreenProps {
9
- rulesTitle: string;
10
- rules: LabelValueRow[];
11
- paymentType: PaymentType;
12
- onDone: () => void;
13
- }
14
-
15
- export function MandateSetupSuccessScreen(props: MandateSetupSuccessScreenProps): JSX.Element {
16
- return (
17
- <View style={styles.root} testID="mandate-setup-success-screen">
18
- <Text style={styles.title}>Setup successful</Text>
19
- <Text style={styles.subtitle}>Successfully set up your payment method</Text>
20
- <ScrollView style={styles.scroll} contentContainerStyle={styles.scrollContent}>
21
- <View style={styles.card}>
22
- <MultiPaymentRulesList
23
- rulesTitle={props.rulesTitle}
24
- rules={props.rules}
25
- paymentType={props.paymentType}
26
- />
27
- </View>
28
- </ScrollView>
29
- <Footer
30
- onContinue={props.onDone}
31
- continueButtonText="Done"
32
- continueTestID="mandate-success-done-btn"
33
- showCancelButton={false}
34
- />
35
- </View>
36
- );
37
- }
38
-
39
- const styles = StyleSheet.create({
40
- root: {
41
- flex: 1,
42
- backgroundColor: Colors.surfacePage,
43
- paddingHorizontal: 24,
44
- paddingTop: 32,
45
- paddingBottom: Spacing.lg,
46
- },
47
- title: {
48
- fontFamily: FONT_FAMILY,
49
- fontSize: 22,
50
- fontWeight: '700',
51
- color: Colors.textPrimary,
52
- textAlign: 'center',
53
- },
54
- subtitle: {
55
- fontFamily: FONT_FAMILY,
56
- fontSize: 14,
57
- color: Colors.textMuted,
58
- textAlign: 'center',
59
- marginTop: 12,
60
- marginBottom: 24,
61
- },
62
- scroll: { flex: 1 },
63
- scrollContent: { paddingBottom: Spacing.md },
64
- card: {
65
- backgroundColor: Colors.cardMutedBg,
66
- borderRadius: 16,
67
- paddingVertical: 16,
68
- paddingHorizontal: 20,
69
- borderWidth: StyleSheet.hairlineWidth,
70
- borderColor: Colors.divider,
71
- },
72
- });