@spare-technologies/spare-link 0.1.0-beta.1 → 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 -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/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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  225. package/lib/typescript/module/version.d.ts.map +1 -1
  226. package/package.json +24 -22
  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 +1 -1
  257. package/CHANGELOG.md +0 -25
  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
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Where a hosted payment has got to.
5
+ *
6
+ * The phases the payer spends most of their time in — choosing a bank, reading
7
+ * the consent, confirming the payee — are all `hosted`: they happen inside the
8
+ * page, which does not report them, and the SDK has nothing to decide there.
9
+ */
10
+
11
+ /** Immutable snapshot of a hosted payment. */
12
+
13
+ const TERMINAL_PHASES = new Set(['succeeded', 'failed', 'cancelled', 'abandoned']);
14
+ export function isTerminalPhase(phase) {
15
+ return TERMINAL_PHASES.has(phase);
16
+ }
17
+
18
+ /** Factories for each phase, so no caller assembles a state by hand. */
19
+ export const HostedFlowStates = {
20
+ loading(reference, attempt = 1) {
21
+ return {
22
+ phase: 'loading',
23
+ reference,
24
+ attempt
25
+ };
26
+ },
27
+ hosted(reference, attempt = 1) {
28
+ return {
29
+ phase: 'hosted',
30
+ reference,
31
+ attempt
32
+ };
33
+ },
34
+ unreachable(reference, attempt = 1) {
35
+ return {
36
+ phase: 'unreachable',
37
+ reference,
38
+ attempt
39
+ };
40
+ },
41
+ redirecting(reference, attempt = 1) {
42
+ return {
43
+ phase: 'redirecting',
44
+ reference,
45
+ attempt
46
+ };
47
+ },
48
+ awaitingCallback(reference, attempt = 1) {
49
+ return {
50
+ phase: 'awaitingCallback',
51
+ reference,
52
+ attempt
53
+ };
54
+ },
55
+ succeeded(args) {
56
+ return {
57
+ phase: 'succeeded',
58
+ reference: args.reference,
59
+ attempt: args.attempt ?? 1,
60
+ ...(args.report ? {
61
+ report: args.report
62
+ } : {})
63
+ };
64
+ },
65
+ failed(args) {
66
+ return {
67
+ phase: 'failed',
68
+ reference: args.reference,
69
+ errorCode: args.errorCode,
70
+ attempt: args.attempt ?? 1,
71
+ ...(args.report ? {
72
+ report: args.report
73
+ } : {})
74
+ };
75
+ },
76
+ cancelled(reference, attempt = 1) {
77
+ return {
78
+ phase: 'cancelled',
79
+ reference,
80
+ attempt
81
+ };
82
+ },
83
+ abandoned(reference, attempt = 1) {
84
+ return {
85
+ phase: 'abandoned',
86
+ reference,
87
+ attempt
88
+ };
89
+ }
90
+ };
91
+ //# sourceMappingURL=hosted-flow-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TERMINAL_PHASES","Set","isTerminalPhase","phase","has","HostedFlowStates","loading","reference","attempt","hosted","unreachable","redirecting","awaitingCallback","succeeded","args","report","failed","errorCode","cancelled","abandoned"],"sourceRoot":"../../../../src","sources":["core/services/hosted-flow-state.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAwBA;;AA8BA,MAAMA,eAA6C,GAAG,IAAIC,GAAG,CAAkB,CAC7E,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,CACZ,CAAC;AAEF,OAAO,SAASC,eAAeA,CAACC,KAAsB,EAAW;EAC/D,OAAOH,eAAe,CAACI,GAAG,CAACD,KAAK,CAAC;AACnC;;AAEA;AACA,OAAO,MAAME,gBAAgB,GAAG;EAC9BC,OAAOA,CAACC,SAAiB,EAAEC,OAAO,GAAG,CAAC,EAAmB;IACvD,OAAO;MAAEL,KAAK,EAAE,SAAS;MAAEI,SAAS;MAAEC;IAAQ,CAAC;EACjD,CAAC;EACDC,MAAMA,CAACF,SAAiB,EAAEC,OAAO,GAAG,CAAC,EAAmB;IACtD,OAAO;MAAEL,KAAK,EAAE,QAAQ;MAAEI,SAAS;MAAEC;IAAQ,CAAC;EAChD,CAAC;EACDE,WAAWA,CAACH,SAAiB,EAAEC,OAAO,GAAG,CAAC,EAAmB;IAC3D,OAAO;MAAEL,KAAK,EAAE,aAAa;MAAEI,SAAS;MAAEC;IAAQ,CAAC;EACrD,CAAC;EACDG,WAAWA,CAACJ,SAAiB,EAAEC,OAAO,GAAG,CAAC,EAAmB;IAC3D,OAAO;MAAEL,KAAK,EAAE,aAAa;MAAEI,SAAS;MAAEC;IAAQ,CAAC;EACrD,CAAC;EACDI,gBAAgBA,CAACL,SAAiB,EAAEC,OAAO,GAAG,CAAC,EAAmB;IAChE,OAAO;MAAEL,KAAK,EAAE,kBAAkB;MAAEI,SAAS;MAAEC;IAAQ,CAAC;EAC1D,CAAC;EACDK,SAASA,CAACC,IAIT,EAAmB;IAClB,OAAO;MACLX,KAAK,EAAE,WAAW;MAClBI,SAAS,EAAEO,IAAI,CAACP,SAAS;MACzBC,OAAO,EAAEM,IAAI,CAACN,OAAO,IAAI,CAAC;MAC1B,IAAIM,IAAI,CAACC,MAAM,GAAG;QAAEA,MAAM,EAAED,IAAI,CAACC;MAAO,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;EACH,CAAC;EACDC,MAAMA,CAACF,IAKN,EAAmB;IAClB,OAAO;MACLX,KAAK,EAAE,QAAQ;MACfI,SAAS,EAAEO,IAAI,CAACP,SAAS;MACzBU,SAAS,EAAEH,IAAI,CAACG,SAAS;MACzBT,OAAO,EAAEM,IAAI,CAACN,OAAO,IAAI,CAAC;MAC1B,IAAIM,IAAI,CAACC,MAAM,GAAG;QAAEA,MAAM,EAAED,IAAI,CAACC;MAAO,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;EACH,CAAC;EACDG,SAASA,CAACX,SAAiB,EAAEC,OAAO,GAAG,CAAC,EAAmB;IACzD,OAAO;MAAEL,KAAK,EAAE,WAAW;MAAEI,SAAS;MAAEC;IAAQ,CAAC;EACnD,CAAC;EACDW,SAASA,CAACZ,SAAiB,EAAEC,OAAO,GAAG,CAAC,EAAmB;IACzD,OAAO;MAAEL,KAAK,EAAE,WAAW;MAAEI,SAAS;MAAEC;IAAQ,CAAC;EACnD;AACF,CAAU","ignoreList":[]}
@@ -5,36 +5,22 @@
5
5
  export { SDK_VERSION } from "./version.js";
6
6
  export * from "./public/index.js";
7
7
 
8
- // Errors
9
- export { PaymentApiError, isPaymentApiError } from "./core/errors/payment-api-error.js";
10
-
11
- // Models (camelCase SDK shapes)
12
-
13
8
  // Bank-return URI helpers (handy for hosts implementing their own deep-link
14
9
  // router that needs to know whether a URI belongs to the payment flow).
15
- export { isPaymentReturnCallbackUri, extractPaymentReturnErrorCode } from "./core/models/payment-return-params.js";
10
+ export { isPaymentReturnCallbackUri, readPaymentReturn, extractPaymentReturnErrorCode, extractPaymentReturnErrorDescription, extractPaymentReturnErrorReason, extractPaymentReturnPaymentId, extractPaymentReturnMandateId, extractPaymentReturnReference, extractPaymentReturnMerchantRef, extractPaymentReturnSignature, isPaymentReturnSuccess, paymentReturnParams } from "./core/models/payment-return-params.js";
16
11
 
17
- // API client
18
- export { LinkApiClient } from "./core/client/link-api-client.js";
19
-
20
- // Controller + state machine
21
- export { PaymentFlowController } from "./core/services/payment-flow-controller.js";
22
- export { PaymentFlowStates } from "./core/services/payment-flow-state.js";
12
+ // Types a caller reads off a result or a state, without the machinery that
13
+ // produces them. The orchestration internals — the controller, the raw webview,
14
+ // the phase hook, the individual screens — are deliberately not exported: they
15
+ // are how `SpareLinkHost` is built, not a surface anyone should build against,
16
+ // and exporting them makes every internal rename a breaking change.
23
17
 
24
18
  // Storage interface
25
19
 
26
- // Consent presenter (UI helper, pure function)
27
- export { presentConsent, summaryFromState, formatAmount, formatCop } from "./core/services/consent-presenter.js";
28
- export { buildMultiPaymentRules, rulesSectionTitle } from "./core/services/multi-payment-rules-presenter.js";
29
- export { isMultiPayment, isInternational, supportsConfirmationOfPayee, resolvedPaymentType, consentUiVariant, PaymentType } from "./core/models/payment-type.js";
30
-
31
- // UI surface
20
+ // UI surface: one component to mount, and the theme to match it.
32
21
  export { SpareLinkHost } from "./ui/spare-link-host.js";
33
- export { PaymentFlowPage } from "./ui/payment-flow-page.js";
34
- export { usePaymentFlowState } from "./ui/hooks/use-payment-flow-state.js";
35
- export { BankSelectionScreen, ConsentDetailsScreen, RedirectHandoffScreen, ResumeProcessingScreen, ResultScreen, MandateSetupSuccessScreen } from "./ui/screens/index.js";
36
22
  export { Colors, Typography, Spacing, FONT_FAMILY } from "./ui/theme/index.js";
37
23
 
38
24
  // Native platform integration
39
- export { collectTelemetry, launchBankRedirect, SecureStorePendingSessionStore, useSpareLinkDeepLinks } from "./internal/index.js";
25
+ export { launchBankRedirect, SecureStorePendingSessionStore, useSpareLinkDeepLinks } from "./internal/index.js";
40
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SDK_VERSION","PaymentApiError","isPaymentApiError","isPaymentReturnCallbackUri","extractPaymentReturnErrorCode","LinkApiClient","PaymentFlowController","PaymentFlowStates","presentConsent","summaryFromState","formatAmount","formatCop","buildMultiPaymentRules","rulesSectionTitle","isMultiPayment","isInternational","supportsConfirmationOfPayee","resolvedPaymentType","consentUiVariant","PaymentType","SpareLinkHost","PaymentFlowPage","usePaymentFlowState","BankSelectionScreen","ConsentDetailsScreen","RedirectHandoffScreen","ResumeProcessingScreen","ResultScreen","MandateSetupSuccessScreen","Colors","Typography","Spacing","FONT_FAMILY","collectTelemetry","launchBankRedirect","SecureStorePendingSessionStore","useSpareLinkDeepLinks"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;;AAEA,SAASA,WAAW,QAAQ,cAAW;AAEvC,cAAc,mBAAU;;AAExB;AACA,SAASC,eAAe,EAAEC,iBAAiB,QAAQ,oCAAiC;;AAEpF;;AAoBA;AACA;AACA,SACEC,0BAA0B,EAC1BC,6BAA6B,QACxB,wCAAqC;;AAE5C;AACA,SAASC,aAAa,QAAmC,kCAA+B;;AAExF;AACA,SACEC,qBAAqB,QAGhB,4CAAyC;AAChD,SACEC,iBAAiB,QAGZ,uCAAoC;;AAE3C;;AAGA;AACA,SACEC,cAAc,EACdC,gBAAgB,EAChBC,YAAY,EACZC,SAAS,QAQJ,sCAAmC;AAE1C,SACEC,sBAAsB,EACtBC,iBAAiB,QAEZ,kDAA+C;AAEtD,SACEC,cAAc,EACdC,eAAe,EACfC,2BAA2B,EAC3BC,mBAAmB,EACnBC,gBAAgB,EAChBC,WAAW,QAEN,+BAA4B;;AAEnC;AACA,SACEC,aAAa,QAER,yBAAsB;AAC7B,SAASC,eAAe,QAAmC,2BAAwB;AACnF,SAASC,mBAAmB,QAAQ,sCAAmC;AACvE,SACEC,mBAAmB,EAEnBC,oBAAoB,EAEpBC,qBAAqB,EACrBC,sBAAsB,EAEtBC,YAAY,EAEZC,yBAAyB,QAEpB,uBAAc;AACrB,SAASC,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,WAAW,QAAQ,qBAAY;;AAErE;AACA,SACEC,gBAAgB,EAChBC,kBAAkB,EAElBC,8BAA8B,EAC9BC,qBAAqB,QAChB,qBAAY","ignoreList":[]}
1
+ {"version":3,"names":["SDK_VERSION","isPaymentReturnCallbackUri","readPaymentReturn","extractPaymentReturnErrorCode","extractPaymentReturnErrorDescription","extractPaymentReturnErrorReason","extractPaymentReturnPaymentId","extractPaymentReturnMandateId","extractPaymentReturnReference","extractPaymentReturnMerchantRef","extractPaymentReturnSignature","isPaymentReturnSuccess","paymentReturnParams","SpareLinkHost","Colors","Typography","Spacing","FONT_FAMILY","launchBankRedirect","SecureStorePendingSessionStore","useSpareLinkDeepLinks"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;;AAEA,SAASA,WAAW,QAAQ,cAAW;AAEvC,cAAc,mBAAU;;AAExB;AACA;AACA,SAEEC,0BAA0B,EAC1BC,iBAAiB,EACjBC,6BAA6B,EAC7BC,oCAAoC,EACpCC,+BAA+B,EAC/BC,6BAA6B,EAC7BC,6BAA6B,EAC7BC,6BAA6B,EAC7BC,+BAA+B,EAC/BC,6BAA6B,EAC7BC,sBAAsB,EACtBC,mBAAmB,QACd,wCAAqC;;AAE5C;AACA;AACA;AACA;AACA;;AAGA;;AAIA;AACA,SAASC,aAAa,QAAiC,yBAAsB;AAC7E,SAASC,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,WAAW,QAAQ,qBAAY;;AAErE;AACA,SACEC,kBAAkB,EAElBC,8BAA8B,EAC9BC,qBAAqB,QAChB,qBAAY","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ import { parseUrlParts } from "../url-parts.js";
4
+
5
+ /**
6
+ * Messages the hosted payment page sends to this SDK.
7
+ *
8
+ * The contract is one-way. The page never waits on a reply, so a message this
9
+ * version does not recognise is dropped rather than treated as a failure — the
10
+ * page continues, and a newer page stays usable by an older app.
11
+ *
12
+ * The page posts to `window.ReactNativeWebView.postMessage` as a JSON string,
13
+ * which arrives here as `event.nativeEvent.data`.
14
+ */
15
+
16
+ /** The payable page is interactive. */
17
+
18
+ /**
19
+ * A consent exists and the bank must now be opened outside the WebView.
20
+ *
21
+ * Banks commonly refuse to serve their authorization pages inside an embedded
22
+ * browser, and the address bar is what lets a payer tell a real bank page from
23
+ * a convincing copy.
24
+ */
25
+
26
+ /** The payer cancelled, and the request is already rejected server-side. */
27
+
28
+ /** The flow cannot continue. [code] is the key the page itself renders. */
29
+
30
+ /**
31
+ * Parses a message posted by the hosted page.
32
+ *
33
+ * Returns null for anything unrecognised. The message crosses a boundary the
34
+ * SDK does not control, so nothing here trusts its shape — the WebView message
35
+ * channel is shared with every script on the page.
36
+ */
37
+ export function parseHostedBridgeMessage(raw) {
38
+ const message = asRecord(raw);
39
+ if (!message) return null;
40
+ const type = message.type;
41
+ if (typeof type !== 'string') return null;
42
+ switch (type) {
43
+ case 'spare.ready':
44
+ return {
45
+ type: 'ready'
46
+ };
47
+ case 'spare.open_url':
48
+ {
49
+ const url = message.url;
50
+ if (typeof url !== 'string' || !isHttpsUrl(url)) return null;
51
+ return {
52
+ type: 'openUrl',
53
+ url
54
+ };
55
+ }
56
+ case 'spare.cancel':
57
+ return {
58
+ type: 'cancel'
59
+ };
60
+ case 'spare.error':
61
+ {
62
+ const code = message.code;
63
+ if (typeof code !== 'string' || code.trim().length === 0) return null;
64
+ return {
65
+ type: 'error',
66
+ code
67
+ };
68
+ }
69
+ default:
70
+ return null;
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Reads the message out of whatever the WebView handed over.
76
+ *
77
+ * The page stringifies its payload, but a plain object is accepted too so the
78
+ * transport is not the thing that decides whether a valid message is understood.
79
+ */
80
+ function asRecord(raw) {
81
+ if (typeof raw === 'string') {
82
+ try {
83
+ return asRecord(JSON.parse(raw));
84
+ } catch {
85
+ return null;
86
+ }
87
+ }
88
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) return null;
89
+ return raw;
90
+ }
91
+
92
+ /**
93
+ * Whether [url] is an absolute https URL.
94
+ *
95
+ * Required before handing a URL to the OS browser: the page is trusted to name
96
+ * a bank, not to name a scheme that could reach something else on the device.
97
+ * Parsed rather than pattern-matched so `https:/\/evil` and friends cannot pass
98
+ * for an absolute URL.
99
+ */
100
+ function isHttpsUrl(url) {
101
+ const parts = parseUrlParts(url);
102
+ return parts !== null && parts.scheme === 'https' && parts.host.length > 0;
103
+ }
104
+ //# sourceMappingURL=bridge-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseUrlParts","parseHostedBridgeMessage","raw","message","asRecord","type","url","isHttpsUrl","code","trim","length","JSON","parse","Array","isArray","parts","scheme","host"],"sourceRoot":"../../../../src","sources":["internal/hosted/bridge-message.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,iBAAc;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;;AAKA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,GAAY,EAA8B;EACjF,MAAMC,OAAO,GAAGC,QAAQ,CAACF,GAAG,CAAC;EAC7B,IAAI,CAACC,OAAO,EAAE,OAAO,IAAI;EAEzB,MAAME,IAAI,GAAGF,OAAO,CAACE,IAAI;EACzB,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI;EAEzC,QAAQA,IAAI;IACV,KAAK,aAAa;MAChB,OAAO;QAAEA,IAAI,EAAE;MAAQ,CAAC;IAC1B,KAAK,gBAAgB;MAAE;QACrB,MAAMC,GAAG,GAAGH,OAAO,CAACG,GAAG;QACvB,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAI,CAACC,UAAU,CAACD,GAAG,CAAC,EAAE,OAAO,IAAI;QAC5D,OAAO;UAAED,IAAI,EAAE,SAAS;UAAEC;QAAI,CAAC;MACjC;IACA,KAAK,cAAc;MACjB,OAAO;QAAED,IAAI,EAAE;MAAS,CAAC;IAC3B,KAAK,aAAa;MAAE;QAClB,MAAMG,IAAI,GAAGL,OAAO,CAACK,IAAI;QACzB,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAIA,IAAI,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;QACrE,OAAO;UAAEL,IAAI,EAAE,OAAO;UAAEG;QAAK,CAAC;MAChC;IACA;MACE,OAAO,IAAI;EACf;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASJ,QAAQA,CAACF,GAAY,EAAkC;EAC9D,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IAC3B,IAAI;MACF,OAAOE,QAAQ,CAACO,IAAI,CAACC,KAAK,CAACV,GAAG,CAAY,CAAC;IAC7C,CAAC,CAAC,MAAM;MACN,OAAO,IAAI;IACb;EACF;EACA,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,IAAIW,KAAK,CAACC,OAAO,CAACZ,GAAG,CAAC,EAAE,OAAO,IAAI;EAC9E,OAAOA,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASK,UAAUA,CAACD,GAAW,EAAW;EACxC,MAAMS,KAAK,GAAGf,aAAa,CAACM,GAAG,CAAC;EAChC,OAAOS,KAAK,KAAK,IAAI,IAAIA,KAAK,CAACC,MAAM,KAAK,OAAO,IAAID,KAAK,CAACE,IAAI,CAACP,MAAM,GAAG,CAAC;AAC5E","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ import { isSameOrigin } from "../url-parts.js";
4
+
5
+ /**
6
+ * Origin channel this SDK identifies as to the hosted page.
7
+ *
8
+ * The same value must be recorded on the payment request by the merchant's
9
+ * backend, because the bank redirect that completes a payment carries no query
10
+ * string of ours and the return path is decided from the stored row.
11
+ */
12
+ export const HOSTED_ORIGIN_CHANNEL = 'sdk_react_native';
13
+
14
+ /**
15
+ * Builds the hosted payment page URL for a payment request reference.
16
+ *
17
+ * The reference is the only credential the page needs; everything else is
18
+ * resolved server-side from the row it names.
19
+ */
20
+ export function buildHostedPaymentUrl(args) {
21
+ const base = args.baseUrl.trim().replace(/\/+$/, '');
22
+ const reference = encodeURIComponent(args.reference.trim());
23
+ return `${base}/link/payment/${reference}?channel=${HOSTED_ORIGIN_CHANNEL}`;
24
+ }
25
+
26
+ /**
27
+ * Whether [url] belongs to the hosted origin derived from [baseUrl].
28
+ *
29
+ * The WebView loads only the hosted origin. Bank authentication deliberately
30
+ * happens outside it, so anything else navigating in-frame is refused rather
31
+ * than followed.
32
+ */
33
+ export function isHostedOriginUrl(args) {
34
+ return isSameOrigin(args.baseUrl, args.url);
35
+ }
36
+ //# sourceMappingURL=hosted-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isSameOrigin","HOSTED_ORIGIN_CHANNEL","buildHostedPaymentUrl","args","base","baseUrl","trim","replace","reference","encodeURIComponent","isHostedOriginUrl","url"],"sourceRoot":"../../../../src","sources":["internal/hosted/hosted-url.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,iBAAc;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAG,kBAAkB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAACC,IAA4C,EAAU;EAC1F,MAAMC,IAAI,GAAGD,IAAI,CAACE,OAAO,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;EACpD,MAAMC,SAAS,GAAGC,kBAAkB,CAACN,IAAI,CAACK,SAAS,CAACF,IAAI,CAAC,CAAC,CAAC;EAC3D,OAAO,GAAGF,IAAI,iBAAiBI,SAAS,YAAYP,qBAAqB,EAAE;AAC7E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASS,iBAAiBA,CAACP,IAAsC,EAAW;EACjF,OAAOH,YAAY,CAACG,IAAI,CAACE,OAAO,EAAEF,IAAI,CAACQ,GAAG,CAAC;AAC7C","ignoreList":[]}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- export { collectTelemetry } from "./telemetry-collector.js";
4
3
  export { launchBankRedirect } from "./bank-redirect.js";
5
4
  export { SecureStorePendingSessionStore } from "./secure-store-pending-session-store.js";
6
5
  export { useSpareLinkDeepLinks } from "./deep-link-listener.js";
@@ -1 +1 @@
1
- {"version":3,"names":["collectTelemetry","launchBankRedirect","SecureStorePendingSessionStore","useSpareLinkDeepLinks"],"sourceRoot":"../../../src","sources":["internal/index.ts"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,0BAAuB;AACxD,SAASC,kBAAkB,QAA+B,oBAAiB;AAC3E,SAASC,8BAA8B,QAAQ,yCAAsC;AACrF,SAASC,qBAAqB,QAAQ,yBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["launchBankRedirect","SecureStorePendingSessionStore","useSpareLinkDeepLinks"],"sourceRoot":"../../../src","sources":["internal/index.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAA+B,oBAAiB;AAC3E,SAASC,8BAA8B,QAAQ,yCAAsC;AACrF,SAASC,qBAAqB,QAAQ,yBAAsB","ignoreList":[]}
@@ -1,21 +1,65 @@
1
1
  "use strict";
2
2
 
3
- const SENSITIVE_QUERY_KEYS = new Set(['exchange_code', 'error_description']);
3
+ /**
4
+ * Redacts the query of a bank-return URI before it is logged.
5
+ *
6
+ * Every value goes except the few that describe the outcome rather than identify
7
+ * anyone — see {@link KEPT_KEYS}. Redaction is a denylist by default rather than
8
+ * an allowlist of names to remove: an earlier version named the two keys to
9
+ * redact, so anything else the return ever carried was logged in full, and one of
10
+ * the names it knew (`exchange_code`) is not even in the contract any more.
11
+ *
12
+ * What is worth keeping in a log is the shape of the URI — its scheme, its path,
13
+ * which parameters were present — plus enough to explain the outcome.
14
+ *
15
+ * It also cannot use the global `URL`. React Native's is a stub whose
16
+ * `searchParams` returns a fresh empty instance, so `has()` was always false and
17
+ * this function returned the URI untouched on a device while redacting correctly
18
+ * under Jest, which runs on Node.
19
+ *
20
+ * The query is split here rather than read through `parseQueryParams`, because
21
+ * that decodes values and keeps only the first of a repeated key — fine for
22
+ * reading an outcome, wrong for reproducing a URI whose shape is the point.
23
+ */
4
24
 
5
- /** Redacts sensitive query params before logging bank-return URIs. */
25
+ const REDACTED = '[REDACTED]';
26
+
27
+ /**
28
+ * Parameters whose values are kept, because they say what happened rather than to
29
+ * whom.
30
+ *
31
+ * Redacting these made the log useless for the one question it gets asked. A
32
+ * return that resolves as unresolved does so because of its `status`, and a log
33
+ * reading `status=[REDACTED]` cannot tell anyone which value was not recognised.
34
+ *
35
+ * None of these identifies a payer, a payment or a request: `status` is one of a
36
+ * fixed vocabulary, and `errorCode` and `error` are keys from a fixed list. The
37
+ * identifiers — `reference`, `merchantRef`, `paymentId` — and the signature stay
38
+ * redacted, as does `error_description`, which is prose and could name a person.
39
+ */
40
+ const KEPT_KEYS = new Set(['status', 'errorCode', 'error']);
6
41
  export function redactPaymentReturnUri(uri) {
7
- try {
8
- const parsed = new URL(uri);
9
- let changed = false;
10
- for (const key of SENSITIVE_QUERY_KEYS) {
11
- if (parsed.searchParams.has(key)) {
12
- parsed.searchParams.set(key, '[REDACTED]');
13
- changed = true;
14
- }
15
- }
16
- return changed ? parsed.toString() : uri;
17
- } catch {
18
- return '[invalid-uri]';
19
- }
42
+ const queryStart = uri.indexOf('?');
43
+ const fragmentStart = uri.indexOf('#');
44
+
45
+ // No query and no fragment: nothing here carries a value.
46
+ if (queryStart === -1 && fragmentStart === -1) return uri;
47
+ const queryEnd = fragmentStart !== -1 && fragmentStart > queryStart ? fragmentStart : uri.length;
48
+ const beforeQuery = queryStart === -1 ? uri.slice(0, fragmentStart) : uri.slice(0, queryStart);
49
+ const query = queryStart === -1 ? '' : uri.slice(queryStart + 1, queryEnd);
50
+
51
+ // A fragment is dropped whole. Nothing in this SDK reads one, so its shape is
52
+ // not worth keeping, and a return that ever carried a token in one — as OAuth
53
+ // implicit flows do — must not put it in a log.
54
+ const hadFragment = fragmentStart !== -1;
55
+ const redactedQuery = query.split('&').filter(pair => pair.length > 0).map(pair => {
56
+ const eq = pair.indexOf('=');
57
+ const key = eq === -1 ? pair : pair.slice(0, eq);
58
+ if (KEPT_KEYS.has(key)) return pair;
59
+ return `${key}=${REDACTED}`;
60
+ }).join('&');
61
+ const rebuiltQuery = redactedQuery.length > 0 ? `?${redactedQuery}` : '';
62
+ const rebuiltFragment = hadFragment ? `#${REDACTED}` : '';
63
+ return `${beforeQuery}${rebuiltQuery}${rebuiltFragment}`;
20
64
  }
21
65
  //# sourceMappingURL=redact-uri.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SENSITIVE_QUERY_KEYS","Set","redactPaymentReturnUri","uri","parsed","URL","changed","key","searchParams","has","set","toString"],"sourceRoot":"../../../src","sources":["internal/redact-uri.ts"],"mappings":";;AAAA,MAAMA,oBAAoB,GAAG,IAAIC,GAAG,CAAC,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;;AAE5E;AACA,OAAO,SAASC,sBAAsBA,CAACC,GAAW,EAAU;EAC1D,IAAI;IACF,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAACF,GAAG,CAAC;IAC3B,IAAIG,OAAO,GAAG,KAAK;IACnB,KAAK,MAAMC,GAAG,IAAIP,oBAAoB,EAAE;MACtC,IAAII,MAAM,CAACI,YAAY,CAACC,GAAG,CAACF,GAAG,CAAC,EAAE;QAChCH,MAAM,CAACI,YAAY,CAACE,GAAG,CAACH,GAAG,EAAE,YAAY,CAAC;QAC1CD,OAAO,GAAG,IAAI;MAChB;IACF;IACA,OAAOA,OAAO,GAAGF,MAAM,CAACO,QAAQ,CAAC,CAAC,GAAGR,GAAG;EAC1C,CAAC,CAAC,MAAM;IACN,OAAO,eAAe;EACxB;AACF","ignoreList":[]}
1
+ {"version":3,"names":["REDACTED","KEPT_KEYS","Set","redactPaymentReturnUri","uri","queryStart","indexOf","fragmentStart","queryEnd","length","beforeQuery","slice","query","hadFragment","redactedQuery","split","filter","pair","map","eq","key","has","join","rebuiltQuery","rebuiltFragment"],"sourceRoot":"../../../src","sources":["internal/redact-uri.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,QAAQ,GAAG,YAAY;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAA8B,GAAG,IAAIC,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAEhF,OAAO,SAASC,sBAAsBA,CAACC,GAAW,EAAU;EAC1D,MAAMC,UAAU,GAAGD,GAAG,CAACE,OAAO,CAAC,GAAG,CAAC;EACnC,MAAMC,aAAa,GAAGH,GAAG,CAACE,OAAO,CAAC,GAAG,CAAC;;EAEtC;EACA,IAAID,UAAU,KAAK,CAAC,CAAC,IAAIE,aAAa,KAAK,CAAC,CAAC,EAAE,OAAOH,GAAG;EAEzD,MAAMI,QAAQ,GAAGD,aAAa,KAAK,CAAC,CAAC,IAAIA,aAAa,GAAGF,UAAU,GAAGE,aAAa,GAAGH,GAAG,CAACK,MAAM;EAEhG,MAAMC,WAAW,GAAGL,UAAU,KAAK,CAAC,CAAC,GAAGD,GAAG,CAACO,KAAK,CAAC,CAAC,EAAEJ,aAAa,CAAC,GAAGH,GAAG,CAACO,KAAK,CAAC,CAAC,EAAEN,UAAU,CAAC;EAC9F,MAAMO,KAAK,GAAGP,UAAU,KAAK,CAAC,CAAC,GAAG,EAAE,GAAGD,GAAG,CAACO,KAAK,CAACN,UAAU,GAAG,CAAC,EAAEG,QAAQ,CAAC;;EAE1E;EACA;EACA;EACA,MAAMK,WAAW,GAAGN,aAAa,KAAK,CAAC,CAAC;EAExC,MAAMO,aAAa,GAAGF,KAAK,CACxBG,KAAK,CAAC,GAAG,CAAC,CACVC,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACR,MAAM,GAAG,CAAC,CAAC,CACjCS,GAAG,CAAED,IAAI,IAAK;IACb,MAAME,EAAE,GAAGF,IAAI,CAACX,OAAO,CAAC,GAAG,CAAC;IAC5B,MAAMc,GAAG,GAAGD,EAAE,KAAK,CAAC,CAAC,GAAGF,IAAI,GAAGA,IAAI,CAACN,KAAK,CAAC,CAAC,EAAEQ,EAAE,CAAC;IAChD,IAAIlB,SAAS,CAACoB,GAAG,CAACD,GAAG,CAAC,EAAE,OAAOH,IAAI;IACnC,OAAO,GAAGG,GAAG,IAAIpB,QAAQ,EAAE;EAC7B,CAAC,CAAC,CACDsB,IAAI,CAAC,GAAG,CAAC;EAEZ,MAAMC,YAAY,GAAGT,aAAa,CAACL,MAAM,GAAG,CAAC,GAAG,IAAIK,aAAa,EAAE,GAAG,EAAE;EACxE,MAAMU,eAAe,GAAGX,WAAW,GAAG,IAAIb,QAAQ,EAAE,GAAG,EAAE;EAEzD,OAAO,GAAGU,WAAW,GAAGa,YAAY,GAAGC,eAAe,EAAE;AAC1D","ignoreList":[]}
@@ -1,20 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  /**
4
- * Production `PendingSessionStore` backed by expo-secure-store. Persists a
5
- * single in-flight payment session so the SDK can recover after cold start.
4
+ * Production `PendingSessionStore` backed by expo-secure-store. Persists the
5
+ * reference of a single in-flight payment so a cold start knows which payment
6
+ * was under way.
6
7
  */
7
8
 
8
9
  import { createLogger } from "./logger.js";
9
10
  const log = createLogger('SecureStorePendingSessionStore');
10
- const KEYS = {
11
- sessionId: 'spare_link_session_id',
12
- bankId: 'spare_link_bank_id',
13
- authUrl: 'spare_link_auth_url',
14
- consentAt: 'spare_link_consent_at',
15
- recoveryAttempts: 'spare_link_recovery_attempts',
16
- merchantRef: 'spare_link_merchant_ref'
17
- };
11
+ const KEY_REFERENCE = 'spare_link_reference';
12
+
13
+ /**
14
+ * Keys earlier versions wrote, cleared alongside our own.
15
+ *
16
+ * An app upgrading mid-payment would otherwise keep a token and session it can
17
+ * never resolve — the endpoints they addressed are gone — and the secure store
18
+ * outlives the version that wrote to it.
19
+ */
20
+ const RETIRED_KEYS = ['spare_link_token', 'spare_link_session_id', 'spare_link_bank_id', 'spare_link_auth_url', 'spare_link_consent_at', 'spare_link_recovery_attempts', 'spare_link_merchant_ref'];
18
21
  async function defaultLoader() {
19
22
  try {
20
23
  return await import('expo-secure-store');
@@ -54,34 +57,26 @@ export class SecureStorePendingSessionStore {
54
57
  save(record) {
55
58
  return this.enqueueWrite(async () => {
56
59
  const s = await this.module;
57
- await Promise.all([s.setItemAsync(KEYS.sessionId, record.sessionId), s.setItemAsync(KEYS.bankId, record.selectedBankId), s.setItemAsync(KEYS.authUrl, record.authorizationUrl), record.consentAt !== undefined ? s.setItemAsync(KEYS.consentAt, String(record.consentAt)) : s.deleteItemAsync(KEYS.consentAt), s.setItemAsync(KEYS.recoveryAttempts, String(record.recoveryAttempts)), record.merchantRef ? s.setItemAsync(KEYS.merchantRef, record.merchantRef) : s.deleteItemAsync(KEYS.merchantRef)]);
60
+ await s.setItemAsync(KEY_REFERENCE, record.reference);
58
61
  });
59
62
  }
60
63
  async load() {
61
64
  // Wait for any pending writes to settle so we read a consistent snapshot.
62
65
  await this.writeQueue.catch(() => undefined);
63
66
  const s = await this.module;
64
- const [sessionId, bankId, authUrl, consentAtRaw, attemptsRaw, merchantRef] = await Promise.all([s.getItemAsync(KEYS.sessionId), s.getItemAsync(KEYS.bankId), s.getItemAsync(KEYS.authUrl), s.getItemAsync(KEYS.consentAt), s.getItemAsync(KEYS.recoveryAttempts), s.getItemAsync(KEYS.merchantRef)]);
65
- if (!sessionId || !bankId || !authUrl) {
66
- log.fine('load: no pending session found');
67
+ const reference = await s.getItemAsync(KEY_REFERENCE);
68
+ if (!reference) {
69
+ log.fine('load: no pending payment found');
67
70
  return null;
68
71
  }
69
- const consentAt = consentAtRaw ? Number(consentAtRaw) : undefined;
70
- const recoveryAttempts = attemptsRaw ? Number(attemptsRaw) : 0;
71
- const record = {
72
- sessionId,
73
- selectedBankId: bankId,
74
- authorizationUrl: authUrl,
75
- recoveryAttempts: Number.isFinite(recoveryAttempts) ? recoveryAttempts : 0
72
+ return {
73
+ reference
76
74
  };
77
- if (consentAt !== undefined && Number.isFinite(consentAt)) record.consentAt = consentAt;
78
- if (merchantRef) record.merchantRef = merchantRef;
79
- return record;
80
75
  }
81
76
  clear() {
82
77
  return this.enqueueWrite(async () => {
83
78
  const s = await this.module;
84
- await Promise.all([s.deleteItemAsync(KEYS.sessionId), s.deleteItemAsync(KEYS.bankId), s.deleteItemAsync(KEYS.authUrl), s.deleteItemAsync(KEYS.consentAt), s.deleteItemAsync(KEYS.recoveryAttempts), s.deleteItemAsync(KEYS.merchantRef)]);
79
+ await Promise.all([s.deleteItemAsync(KEY_REFERENCE), ...RETIRED_KEYS.map(key => s.deleteItemAsync(key))]);
85
80
  });
86
81
  }
87
82
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createLogger","log","KEYS","sessionId","bankId","authUrl","consentAt","recoveryAttempts","merchantRef","defaultLoader","err","Error","message","String","SecureStorePendingSessionStore","secureStore","writeQueue","Promise","resolve","constructor","moduleLoader","loader","module","enqueueWrite","op","next","then","catch","save","record","s","all","setItemAsync","selectedBankId","authorizationUrl","undefined","deleteItemAsync","load","consentAtRaw","attemptsRaw","getItemAsync","fine","Number","isFinite","clear"],"sourceRoot":"../../../src","sources":["internal/secure-store-pending-session-store.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createLogger","log","KEY_REFERENCE","RETIRED_KEYS","defaultLoader","err","Error","message","String","SecureStorePendingSessionStore","secureStore","writeQueue","Promise","resolve","constructor","moduleLoader","loader","module","enqueueWrite","op","next","then","catch","save","record","s","setItemAsync","reference","load","undefined","getItemAsync","fine","clear","all","deleteItemAsync","map","key"],"sourceRoot":"../../../src","sources":["internal/secure-store-pending-session-store.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAIA,SAASA,YAAY,QAAQ,aAAU;AAEvC,MAAMC,GAAG,GAAGD,YAAY,CAAC,gCAAgC,CAAC;AAE1D,MAAME,aAAa,GAAG,sBAAsB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAG,CACnB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,8BAA8B,EAC9B,yBAAyB,CACjB;AAQV,eAAeC,aAAaA,CAAA,EAA+B;EACzD,IAAI;IACF,OAAQ,MAAM,MAAM,CAAC,mBAAmB,CAAC;EAC3C,CAAC,CAAC,OAAOC,GAAG,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,0FACED,GAAG,YAAYC,KAAK,GAAGD,GAAG,CAACE,OAAO,GAAGC,MAAM,CAACH,GAAG,CAAC,GAEpD,CAAC;EACH;AACF;AAEA,OAAO,MAAMI,8BAA8B,CAAgC;EACjEC,WAAW,GAAsC,IAAI;EAE7D;AACF;AACA;AACA;EACUC,UAAU,GAAkBC,OAAO,CAACC,OAAO,CAAC,CAAC;;EAErD;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAACC,YAA8C,GAAGX,aAAa,EAAE;IAC1E,IAAI,CAACY,MAAM,GAAGD,YAAY;EAC5B;EAEA,IAAYE,MAAMA,CAAA,EAA+B;IAC/C,IAAI,CAAC,IAAI,CAACP,WAAW,EAAE,IAAI,CAACA,WAAW,GAAG,IAAI,CAACM,MAAM,CAAC,CAAC;IACvD,OAAO,IAAI,CAACN,WAAW;EACzB;;EAEA;EACQQ,YAAYA,CAACC,EAAuB,EAAiB;IAC3D,MAAMC,IAAI,GAAG,IAAI,CAACT,UAAU,CAACU,IAAI,CAACF,EAAE,EAAEA,EAAE,CAAC;IACzC,IAAI,CAACR,UAAU,GAAGS,IAAI,CAACE,KAAK,CAAC,MAAM;MACjC;IAAA,CACD,CAAC;IACF,OAAOF,IAAI;EACb;EAEAG,IAAIA,CAACC,MAA4B,EAAiB;IAChD,OAAO,IAAI,CAACN,YAAY,CAAC,YAAY;MACnC,MAAMO,CAAC,GAAG,MAAM,IAAI,CAACR,MAAM;MAC3B,MAAMQ,CAAC,CAACC,YAAY,CAACxB,aAAa,EAAEsB,MAAM,CAACG,SAAS,CAAC;IACvD,CAAC,CAAC;EACJ;EAEA,MAAMC,IAAIA,CAAA,EAAyC;IACjD;IACA,MAAM,IAAI,CAACjB,UAAU,CAACW,KAAK,CAAC,MAAMO,SAAS,CAAC;IAC5C,MAAMJ,CAAC,GAAG,MAAM,IAAI,CAACR,MAAM;IAC3B,MAAMU,SAAS,GAAG,MAAMF,CAAC,CAACK,YAAY,CAAC5B,aAAa,CAAC;IACrD,IAAI,CAACyB,SAAS,EAAE;MACd1B,GAAG,CAAC8B,IAAI,CAAC,gCAAgC,CAAC;MAC1C,OAAO,IAAI;IACb;IACA,OAAO;MAAEJ;IAAU,CAAC;EACtB;EAEAK,KAAKA,CAAA,EAAkB;IACrB,OAAO,IAAI,CAACd,YAAY,CAAC,YAAY;MACnC,MAAMO,CAAC,GAAG,MAAM,IAAI,CAACR,MAAM;MAC3B,MAAML,OAAO,CAACqB,GAAG,CAAC,CAChBR,CAAC,CAACS,eAAe,CAAChC,aAAa,CAAC,EAChC,GAAGC,YAAY,CAACgC,GAAG,CAAEC,GAAG,IAAKX,CAAC,CAACS,eAAe,CAACE,GAAG,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Minimal URL parsing that does not go through the global `URL`.
5
+ *
6
+ * React Native ships a stub: every component accessor — `protocol`, `hostname`,
7
+ * `port`, `origin`, `search`, `pathname` — throws "not implemented", and
8
+ * `searchParams` returns a fresh empty instance that never reads the URL it was
9
+ * constructed from (`react-native/Libraries/Blob/URL.js`, installed globally by
10
+ * `setUpXHR.js`). Code written against the standard therefore behaves correctly
11
+ * under Jest, which runs on Node's real `URL`, and silently reads nothing on a
12
+ * device.
13
+ *
14
+ * The SDK parses what it needs itself rather than asking the host app to install
15
+ * a polyfill whose presence it cannot verify — an origin check that quietly
16
+ * stops comparing hosts is worse than one that was never written.
17
+ */
18
+
19
+ /** The parts of a URL this SDK compares origins on. */
20
+
21
+ /** Scheme plus authority. Anything without an authority has no origin to compare. */
22
+ const SCHEME_AND_AUTHORITY = /^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/;
23
+ const DEFAULT_PORTS = {
24
+ http: 80,
25
+ https: 443
26
+ };
27
+
28
+ /**
29
+ * Splits [url] into the parts an origin comparison needs, or null if it has no
30
+ * authority to compare.
31
+ */
32
+ export function parseUrlParts(url) {
33
+ const match = SCHEME_AND_AUTHORITY.exec(url.trim());
34
+ if (!match?.[1] || match[2] === undefined) return null;
35
+ const scheme = match[1].toLowerCase();
36
+
37
+ // Everything up to the last `@` is userinfo, not host. `https://api.real.example@evil.example`
38
+ // is a request to evil.example, and reading the left half would accept it as the real one.
39
+ const authority = match[2].slice(match[2].lastIndexOf('@') + 1);
40
+ const hostAndPort = splitHostAndPort(authority);
41
+ if (!hostAndPort) return null;
42
+ const {
43
+ host,
44
+ portText
45
+ } = hostAndPort;
46
+ if (host.length === 0) return null;
47
+
48
+ // An empty port (`https://host:/x`) means the scheme's default, as does no port.
49
+ if (portText === undefined || portText.length === 0) {
50
+ return {
51
+ scheme,
52
+ host: host.toLowerCase(),
53
+ port: DEFAULT_PORTS[scheme]
54
+ };
55
+ }
56
+ if (!/^\d+$/.test(portText)) return null;
57
+ const port = Number.parseInt(portText, 10);
58
+ if (port > 65535) return null;
59
+ return {
60
+ scheme,
61
+ host: host.toLowerCase(),
62
+ port
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Whether two URLs share a scheme, host and port.
68
+ *
69
+ * Both must carry an authority, so a relative path never matches an absolute
70
+ * URL: `/link/payment/x` names no origin and must not be read as naming this one.
71
+ */
72
+ export function isSameOrigin(a, b) {
73
+ const left = parseUrlParts(a);
74
+ const right = parseUrlParts(b);
75
+ if (!left || !right) return false;
76
+ return left.scheme === right.scheme && left.host === right.host && left.port === right.port;
77
+ }
78
+
79
+ /**
80
+ * Reads the query string of [url] into a plain object.
81
+ *
82
+ * The first occurrence of a repeated key wins, matching `URLSearchParams.get`.
83
+ * A value the SDK cannot decode is kept in its raw form rather than dropping the
84
+ * parameter: callers compare against known literals, and a mangled value should
85
+ * fail that comparison rather than read as absent.
86
+ */
87
+ export function parseQueryParams(url) {
88
+ const params = {};
89
+ const start = url.indexOf('?');
90
+ if (start === -1) return params;
91
+ const fragment = url.indexOf('#', start);
92
+ const query = fragment === -1 ? url.slice(start + 1) : url.slice(start + 1, fragment);
93
+ for (const pair of query.split('&')) {
94
+ if (pair.length === 0) continue;
95
+ const eq = pair.indexOf('=');
96
+ const rawKey = eq === -1 ? pair : pair.slice(0, eq);
97
+ const rawValue = eq === -1 ? '' : pair.slice(eq + 1);
98
+ const key = decodeFormComponent(rawKey);
99
+ if (key.length === 0 || Object.hasOwn(params, key)) continue;
100
+ params[key] = decodeFormComponent(rawValue);
101
+ }
102
+ return params;
103
+ }
104
+ function splitHostAndPort(authority) {
105
+ // An IPv6 literal carries colons of its own, so its brackets close the host.
106
+ if (authority.startsWith('[')) {
107
+ const close = authority.indexOf(']');
108
+ if (close === -1) return null;
109
+ const host = authority.slice(0, close + 1);
110
+ const rest = authority.slice(close + 1);
111
+ if (rest.length === 0) return {
112
+ host,
113
+ portText: undefined
114
+ };
115
+ if (!rest.startsWith(':')) return null;
116
+ return {
117
+ host,
118
+ portText: rest.slice(1)
119
+ };
120
+ }
121
+ const colon = authority.indexOf(':');
122
+ if (colon === -1) return {
123
+ host: authority,
124
+ portText: undefined
125
+ };
126
+ return {
127
+ host: authority.slice(0, colon),
128
+ portText: authority.slice(colon + 1)
129
+ };
130
+ }
131
+ function decodeFormComponent(value) {
132
+ const plusesAsSpaces = value.replace(/\+/g, ' ');
133
+ try {
134
+ return decodeURIComponent(plusesAsSpaces);
135
+ } catch {
136
+ return plusesAsSpaces;
137
+ }
138
+ }
139
+ //# sourceMappingURL=url-parts.js.map