@spare-technologies/spare-link 0.1.0-beta.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/README.md +119 -81
  2. package/lib/commonjs/core/models/payment-return-params.js +245 -20
  3. package/lib/commonjs/core/models/payment-return-params.js.map +1 -1
  4. package/lib/commonjs/core/models/pending-session-record.js +2 -0
  5. package/lib/commonjs/core/models/pending-session-record.js.map +1 -0
  6. package/lib/commonjs/core/services/hosted-flow-controller.js +333 -0
  7. package/lib/commonjs/core/services/hosted-flow-controller.js.map +1 -0
  8. package/lib/commonjs/core/services/hosted-flow-state.js +96 -0
  9. package/lib/commonjs/core/services/hosted-flow-state.js.map +1 -0
  10. package/lib/commonjs/index.js +42 -164
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/internal/hosted/bridge-message.js +107 -0
  13. package/lib/commonjs/internal/hosted/bridge-message.js.map +1 -0
  14. package/lib/commonjs/internal/hosted/hosted-url.js +41 -0
  15. package/lib/commonjs/internal/hosted/hosted-url.js.map +1 -0
  16. package/lib/commonjs/internal/index.js +0 -7
  17. package/lib/commonjs/internal/index.js.map +1 -1
  18. package/lib/commonjs/internal/redact-uri.js +59 -15
  19. package/lib/commonjs/internal/redact-uri.js.map +1 -1
  20. package/lib/commonjs/internal/secure-store-pending-session-store.js +20 -25
  21. package/lib/commonjs/internal/secure-store-pending-session-store.js.map +1 -1
  22. package/lib/commonjs/internal/url-parts.js +145 -0
  23. package/lib/commonjs/internal/url-parts.js.map +1 -0
  24. package/lib/commonjs/public/index.js +0 -37
  25. package/lib/commonjs/public/index.js.map +1 -1
  26. package/lib/commonjs/public/payment-result.js +16 -4
  27. package/lib/commonjs/public/payment-result.js.map +1 -1
  28. package/lib/commonjs/public/recovery-result.js +7 -18
  29. package/lib/commonjs/public/recovery-result.js.map +1 -1
  30. package/lib/commonjs/public/spare-link-config.js +41 -16
  31. package/lib/commonjs/public/spare-link-config.js.map +1 -1
  32. package/lib/commonjs/public/spare-link-event.js +27 -33
  33. package/lib/commonjs/public/spare-link-event.js.map +1 -1
  34. package/lib/commonjs/public/spare-link-instance.js +67 -77
  35. package/lib/commonjs/public/spare-link-instance.js.map +1 -1
  36. package/lib/commonjs/public/spare-link-session.js +2 -9
  37. package/lib/commonjs/public/spare-link-session.js.map +1 -1
  38. package/lib/commonjs/public/spare-link.js +0 -12
  39. package/lib/commonjs/public/spare-link.js.map +1 -1
  40. package/lib/commonjs/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +4 -4
  41. package/lib/commonjs/ui/hooks/use-hosted-flow-state.js.map +1 -0
  42. package/lib/commonjs/ui/hosted/hosted-payment-page.js +177 -0
  43. package/lib/commonjs/ui/hosted/hosted-payment-page.js.map +1 -0
  44. package/lib/commonjs/ui/hosted/hosted-payment-webview.js +168 -0
  45. package/lib/commonjs/ui/hosted/hosted-payment-webview.js.map +1 -0
  46. package/lib/commonjs/ui/screens/index.js +3 -17
  47. package/lib/commonjs/ui/screens/index.js.map +1 -1
  48. package/lib/commonjs/ui/screens/page-unavailable-screen.js +101 -0
  49. package/lib/commonjs/ui/screens/page-unavailable-screen.js.map +1 -0
  50. package/lib/commonjs/ui/spare-link-host.js +220 -234
  51. package/lib/commonjs/ui/spare-link-host.js.map +1 -1
  52. package/lib/commonjs/ui/widgets/index.js +3 -10
  53. package/lib/commonjs/ui/widgets/index.js.map +1 -1
  54. package/lib/commonjs/version.js +7 -5
  55. package/lib/commonjs/version.js.map +1 -1
  56. package/lib/module/core/models/payment-return-params.js +235 -20
  57. package/lib/module/core/models/payment-return-params.js.map +1 -1
  58. package/lib/module/core/models/pending-session-record.js +2 -0
  59. package/lib/module/core/models/pending-session-record.js.map +1 -0
  60. package/lib/module/core/services/hosted-flow-controller.js +328 -0
  61. package/lib/module/core/services/hosted-flow-controller.js.map +1 -0
  62. package/lib/module/core/services/hosted-flow-state.js +91 -0
  63. package/lib/module/core/services/hosted-flow-state.js.map +1 -0
  64. package/lib/module/index.js +8 -22
  65. package/lib/module/index.js.map +1 -1
  66. package/lib/module/internal/hosted/bridge-message.js +104 -0
  67. package/lib/module/internal/hosted/bridge-message.js.map +1 -0
  68. package/lib/module/internal/hosted/hosted-url.js +36 -0
  69. package/lib/module/internal/hosted/hosted-url.js.map +1 -0
  70. package/lib/module/internal/index.js +0 -1
  71. package/lib/module/internal/index.js.map +1 -1
  72. package/lib/module/internal/redact-uri.js +59 -15
  73. package/lib/module/internal/redact-uri.js.map +1 -1
  74. package/lib/module/internal/secure-store-pending-session-store.js +20 -25
  75. package/lib/module/internal/secure-store-pending-session-store.js.map +1 -1
  76. package/lib/module/internal/url-parts.js +139 -0
  77. package/lib/module/internal/url-parts.js.map +1 -0
  78. package/lib/module/public/index.js +2 -3
  79. package/lib/module/public/index.js.map +1 -1
  80. package/lib/module/public/payment-result.js +16 -4
  81. package/lib/module/public/payment-result.js.map +1 -1
  82. package/lib/module/public/recovery-result.js +7 -17
  83. package/lib/module/public/recovery-result.js.map +1 -1
  84. package/lib/module/public/spare-link-config.js +42 -15
  85. package/lib/module/public/spare-link-config.js.map +1 -1
  86. package/lib/module/public/spare-link-event.js +27 -33
  87. package/lib/module/public/spare-link-event.js.map +1 -1
  88. package/lib/module/public/spare-link-instance.js +68 -72
  89. package/lib/module/public/spare-link-instance.js.map +1 -1
  90. package/lib/module/public/spare-link-session.js +2 -9
  91. package/lib/module/public/spare-link-session.js.map +1 -1
  92. package/lib/module/public/spare-link.js +1 -1
  93. package/lib/module/public/spare-link.js.map +1 -1
  94. package/lib/module/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +3 -3
  95. package/lib/module/ui/hooks/use-hosted-flow-state.js.map +1 -0
  96. package/lib/module/ui/hosted/hosted-payment-page.js +175 -0
  97. package/lib/module/ui/hosted/hosted-payment-page.js.map +1 -0
  98. package/lib/module/ui/hosted/hosted-payment-webview.js +163 -0
  99. package/lib/module/ui/hosted/hosted-payment-webview.js.map +1 -0
  100. package/lib/module/ui/screens/index.js +1 -3
  101. package/lib/module/ui/screens/index.js.map +1 -1
  102. package/lib/module/ui/screens/page-unavailable-screen.js +97 -0
  103. package/lib/module/ui/screens/page-unavailable-screen.js.map +1 -0
  104. package/lib/module/ui/spare-link-host.js +221 -236
  105. package/lib/module/ui/spare-link-host.js.map +1 -1
  106. package/lib/module/ui/widgets/index.js +1 -2
  107. package/lib/module/ui/widgets/index.js.map +1 -1
  108. package/lib/module/version.js +7 -5
  109. package/lib/module/version.js.map +1 -1
  110. package/lib/typescript/commonjs/core/models/index.d.ts +1 -123
  111. package/lib/typescript/commonjs/core/models/index.d.ts.map +1 -1
  112. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts +91 -8
  113. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/core/models/pending-session-record.d.ts +11 -0
  115. package/lib/typescript/commonjs/core/models/pending-session-record.d.ts.map +1 -0
  116. package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts +119 -0
  117. package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts +75 -0
  119. package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/index.d.ts +5 -14
  121. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts +44 -0
  123. package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts +30 -0
  125. package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/internal/index.d.ts +0 -1
  127. package/lib/typescript/commonjs/internal/index.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/internal/redact-uri.d.ts +21 -1
  129. package/lib/typescript/commonjs/internal/redact-uri.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts +3 -2
  131. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/internal/url-parts.d.ts +46 -0
  133. package/lib/typescript/commonjs/internal/url-parts.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/public/index.d.ts +4 -6
  135. package/lib/typescript/commonjs/public/index.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/public/payment-result.d.ts +50 -12
  137. package/lib/typescript/commonjs/public/payment-result.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/public/recovery-result.d.ts +11 -20
  139. package/lib/typescript/commonjs/public/recovery-result.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/public/spare-link-config.d.ts +13 -31
  141. package/lib/typescript/commonjs/public/spare-link-config.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/public/spare-link-event.d.ts +29 -31
  143. package/lib/typescript/commonjs/public/spare-link-event.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts +1 -12
  145. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts.map +1 -1
  146. package/lib/typescript/commonjs/public/spare-link-instance.d.ts +26 -20
  147. package/lib/typescript/commonjs/public/spare-link-instance.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/public/spare-link-session.d.ts +3 -8
  149. package/lib/typescript/commonjs/public/spare-link-session.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/public/spare-link.d.ts +1 -1
  151. package/lib/typescript/commonjs/public/spare-link.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts +9 -0
  153. package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts +17 -0
  155. package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts +43 -0
  157. package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/ui/screens/index.d.ts +1 -3
  159. package/lib/typescript/commonjs/ui/screens/index.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts +18 -0
  161. package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/ui/spare-link-host.d.ts +4 -5
  163. package/lib/typescript/commonjs/ui/spare-link-host.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/ui/widgets/index.d.ts +1 -2
  165. package/lib/typescript/commonjs/ui/widgets/index.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/version.d.ts +7 -5
  167. package/lib/typescript/commonjs/version.d.ts.map +1 -1
  168. package/lib/typescript/module/core/models/index.d.ts +1 -123
  169. package/lib/typescript/module/core/models/index.d.ts.map +1 -1
  170. package/lib/typescript/module/core/models/payment-return-params.d.ts +91 -8
  171. package/lib/typescript/module/core/models/payment-return-params.d.ts.map +1 -1
  172. package/lib/typescript/module/core/models/pending-session-record.d.ts +11 -0
  173. package/lib/typescript/module/core/models/pending-session-record.d.ts.map +1 -0
  174. package/lib/typescript/module/core/services/hosted-flow-controller.d.ts +119 -0
  175. package/lib/typescript/module/core/services/hosted-flow-controller.d.ts.map +1 -0
  176. package/lib/typescript/module/core/services/hosted-flow-state.d.ts +75 -0
  177. package/lib/typescript/module/core/services/hosted-flow-state.d.ts.map +1 -0
  178. package/lib/typescript/module/index.d.ts +5 -14
  179. package/lib/typescript/module/index.d.ts.map +1 -1
  180. package/lib/typescript/module/internal/hosted/bridge-message.d.ts +44 -0
  181. package/lib/typescript/module/internal/hosted/bridge-message.d.ts.map +1 -0
  182. package/lib/typescript/module/internal/hosted/hosted-url.d.ts +30 -0
  183. package/lib/typescript/module/internal/hosted/hosted-url.d.ts.map +1 -0
  184. package/lib/typescript/module/internal/index.d.ts +0 -1
  185. package/lib/typescript/module/internal/index.d.ts.map +1 -1
  186. package/lib/typescript/module/internal/redact-uri.d.ts +21 -1
  187. package/lib/typescript/module/internal/redact-uri.d.ts.map +1 -1
  188. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts +3 -2
  189. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts.map +1 -1
  190. package/lib/typescript/module/internal/url-parts.d.ts +46 -0
  191. package/lib/typescript/module/internal/url-parts.d.ts.map +1 -0
  192. package/lib/typescript/module/public/index.d.ts +4 -6
  193. package/lib/typescript/module/public/index.d.ts.map +1 -1
  194. package/lib/typescript/module/public/payment-result.d.ts +50 -12
  195. package/lib/typescript/module/public/payment-result.d.ts.map +1 -1
  196. package/lib/typescript/module/public/recovery-result.d.ts +11 -20
  197. package/lib/typescript/module/public/recovery-result.d.ts.map +1 -1
  198. package/lib/typescript/module/public/spare-link-config.d.ts +13 -31
  199. package/lib/typescript/module/public/spare-link-config.d.ts.map +1 -1
  200. package/lib/typescript/module/public/spare-link-event.d.ts +29 -31
  201. package/lib/typescript/module/public/spare-link-event.d.ts.map +1 -1
  202. package/lib/typescript/module/public/spare-link-host-api.d.ts +1 -12
  203. package/lib/typescript/module/public/spare-link-host-api.d.ts.map +1 -1
  204. package/lib/typescript/module/public/spare-link-instance.d.ts +26 -20
  205. package/lib/typescript/module/public/spare-link-instance.d.ts.map +1 -1
  206. package/lib/typescript/module/public/spare-link-session.d.ts +3 -8
  207. package/lib/typescript/module/public/spare-link-session.d.ts.map +1 -1
  208. package/lib/typescript/module/public/spare-link.d.ts +1 -1
  209. package/lib/typescript/module/public/spare-link.d.ts.map +1 -1
  210. package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts +9 -0
  211. package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
  212. package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts +17 -0
  213. package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts.map +1 -0
  214. package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts +43 -0
  215. package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
  216. package/lib/typescript/module/ui/screens/index.d.ts +1 -3
  217. package/lib/typescript/module/ui/screens/index.d.ts.map +1 -1
  218. package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts +18 -0
  219. package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts.map +1 -0
  220. package/lib/typescript/module/ui/spare-link-host.d.ts +4 -5
  221. package/lib/typescript/module/ui/spare-link-host.d.ts.map +1 -1
  222. package/lib/typescript/module/ui/widgets/index.d.ts +1 -2
  223. package/lib/typescript/module/ui/widgets/index.d.ts.map +1 -1
  224. package/lib/typescript/module/version.d.ts +7 -5
  225. package/lib/typescript/module/version.d.ts.map +1 -1
  226. package/package.json +24 -23
  227. package/plugins/with-spare-link.js +6 -26
  228. package/src/core/models/index.ts +1 -139
  229. package/src/core/models/payment-return-params.ts +269 -21
  230. package/src/core/models/pending-session-record.ts +10 -0
  231. package/src/core/services/hosted-flow-controller.ts +374 -0
  232. package/src/core/services/hosted-flow-state.ts +123 -0
  233. package/src/index.ts +20 -89
  234. package/src/internal/hosted/bridge-message.ts +106 -0
  235. package/src/internal/hosted/hosted-url.ts +33 -0
  236. package/src/internal/index.ts +0 -1
  237. package/src/internal/redact-uri.ts +69 -15
  238. package/src/internal/secure-store-pending-session-store.ts +28 -49
  239. package/src/internal/url-parts.ts +134 -0
  240. package/src/public/index.ts +2 -24
  241. package/src/public/payment-result.ts +50 -12
  242. package/src/public/recovery-result.ts +16 -25
  243. package/src/public/spare-link-config.ts +56 -43
  244. package/src/public/spare-link-event.ts +33 -42
  245. package/src/public/spare-link-host-api.ts +1 -14
  246. package/src/public/spare-link-instance.ts +57 -65
  247. package/src/public/spare-link-session.ts +4 -16
  248. package/src/public/spare-link.ts +1 -1
  249. package/src/ui/hooks/use-hosted-flow-state.ts +16 -0
  250. package/src/ui/hosted/hosted-payment-page.tsx +178 -0
  251. package/src/ui/hosted/hosted-payment-webview.tsx +164 -0
  252. package/src/ui/screens/index.ts +4 -6
  253. package/src/ui/screens/page-unavailable-screen.tsx +94 -0
  254. package/src/ui/spare-link-host.tsx +227 -247
  255. package/src/ui/widgets/index.ts +1 -2
  256. package/src/version.ts +7 -5
  257. package/CHANGELOG.md +0 -66
  258. package/lib/commonjs/core/client/link-api-client.js +0 -297
  259. package/lib/commonjs/core/client/link-api-client.js.map +0 -1
  260. package/lib/commonjs/core/errors/payment-api-error.js +0 -35
  261. package/lib/commonjs/core/errors/payment-api-error.js.map +0 -1
  262. package/lib/commonjs/core/models/link-session-status.js +0 -14
  263. package/lib/commonjs/core/models/link-session-status.js.map +0 -1
  264. package/lib/commonjs/core/models/payment-type.js +0 -45
  265. package/lib/commonjs/core/models/payment-type.js.map +0 -1
  266. package/lib/commonjs/core/models/wire-mappers.js +0 -277
  267. package/lib/commonjs/core/models/wire-mappers.js.map +0 -1
  268. package/lib/commonjs/core/services/consent-presenter.js +0 -150
  269. package/lib/commonjs/core/services/consent-presenter.js.map +0 -1
  270. package/lib/commonjs/core/services/execute-resume-if-needed.js +0 -216
  271. package/lib/commonjs/core/services/execute-resume-if-needed.js.map +0 -1
  272. package/lib/commonjs/core/services/multi-payment-rules-presenter.js +0 -151
  273. package/lib/commonjs/core/services/multi-payment-rules-presenter.js.map +0 -1
  274. package/lib/commonjs/core/services/payment-flow-controller.js +0 -547
  275. package/lib/commonjs/core/services/payment-flow-controller.js.map +0 -1
  276. package/lib/commonjs/core/services/payment-flow-state.js +0 -110
  277. package/lib/commonjs/core/services/payment-flow-state.js.map +0 -1
  278. package/lib/commonjs/core/services/payment-result-mapper.js +0 -49
  279. package/lib/commonjs/core/services/payment-result-mapper.js.map +0 -1
  280. package/lib/commonjs/core/services/presentation-utils.js +0 -11
  281. package/lib/commonjs/core/services/presentation-utils.js.map +0 -1
  282. package/lib/commonjs/core/services/redirect-buffer.js +0 -40
  283. package/lib/commonjs/core/services/redirect-buffer.js.map +0 -1
  284. package/lib/commonjs/core/services/user-friendly-messages.js +0 -46
  285. package/lib/commonjs/core/services/user-friendly-messages.js.map +0 -1
  286. package/lib/commonjs/internal/telemetry-collector.js +0 -80
  287. package/lib/commonjs/internal/telemetry-collector.js.map +0 -1
  288. package/lib/commonjs/public/constants.js +0 -21
  289. package/lib/commonjs/public/constants.js.map +0 -1
  290. package/lib/commonjs/public/spare-link-callbacks.js +0 -6
  291. package/lib/commonjs/public/spare-link-callbacks.js.map +0 -1
  292. package/lib/commonjs/ui/consent/charge-bearer-display.js +0 -99
  293. package/lib/commonjs/ui/consent/charge-bearer-display.js.map +0 -1
  294. package/lib/commonjs/ui/consent/consent-accordion.js +0 -94
  295. package/lib/commonjs/ui/consent/consent-accordion.js.map +0 -1
  296. package/lib/commonjs/ui/consent/consent-summary-section.js +0 -27
  297. package/lib/commonjs/ui/consent/consent-summary-section.js.map +0 -1
  298. package/lib/commonjs/ui/consent/cop-information.js +0 -168
  299. package/lib/commonjs/ui/consent/cop-information.js.map +0 -1
  300. package/lib/commonjs/ui/consent/international-payment-summary.js +0 -98
  301. package/lib/commonjs/ui/consent/international-payment-summary.js.map +0 -1
  302. package/lib/commonjs/ui/consent/label-value-rows.js +0 -59
  303. package/lib/commonjs/ui/consent/label-value-rows.js.map +0 -1
  304. package/lib/commonjs/ui/consent/multi-payment-rules-list.js +0 -130
  305. package/lib/commonjs/ui/consent/multi-payment-rules-list.js.map +0 -1
  306. package/lib/commonjs/ui/consent/multi-payment-summary.js +0 -99
  307. package/lib/commonjs/ui/consent/multi-payment-summary.js.map +0 -1
  308. package/lib/commonjs/ui/consent/single-payment-summary.js +0 -158
  309. package/lib/commonjs/ui/consent/single-payment-summary.js.map +0 -1
  310. package/lib/commonjs/ui/consent/terms-link.js +0 -35
  311. package/lib/commonjs/ui/consent/terms-link.js.map +0 -1
  312. package/lib/commonjs/ui/hooks/use-payment-flow-state.js.map +0 -1
  313. package/lib/commonjs/ui/payment-flow-page.js +0 -235
  314. package/lib/commonjs/ui/payment-flow-page.js.map +0 -1
  315. package/lib/commonjs/ui/screens/bank-selection-screen.js +0 -215
  316. package/lib/commonjs/ui/screens/bank-selection-screen.js.map +0 -1
  317. package/lib/commonjs/ui/screens/consent-details-screen.js +0 -124
  318. package/lib/commonjs/ui/screens/consent-details-screen.js.map +0 -1
  319. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js +0 -79
  320. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js.map +0 -1
  321. package/lib/commonjs/ui/widgets/layout-w-header.js +0 -106
  322. package/lib/commonjs/ui/widgets/layout-w-header.js.map +0 -1
  323. package/lib/commonjs/ui/widgets/stepper.js +0 -124
  324. package/lib/commonjs/ui/widgets/stepper.js.map +0 -1
  325. package/lib/module/core/client/link-api-client.js +0 -292
  326. package/lib/module/core/client/link-api-client.js.map +0 -1
  327. package/lib/module/core/errors/payment-api-error.js +0 -29
  328. package/lib/module/core/errors/payment-api-error.js.map +0 -1
  329. package/lib/module/core/models/link-session-status.js +0 -10
  330. package/lib/module/core/models/link-session-status.js.map +0 -1
  331. package/lib/module/core/models/payment-type.js +0 -36
  332. package/lib/module/core/models/payment-type.js.map +0 -1
  333. package/lib/module/core/models/wire-mappers.js +0 -263
  334. package/lib/module/core/models/wire-mappers.js.map +0 -1
  335. package/lib/module/core/services/consent-presenter.js +0 -140
  336. package/lib/module/core/services/consent-presenter.js.map +0 -1
  337. package/lib/module/core/services/execute-resume-if-needed.js +0 -211
  338. package/lib/module/core/services/execute-resume-if-needed.js.map +0 -1
  339. package/lib/module/core/services/multi-payment-rules-presenter.js +0 -146
  340. package/lib/module/core/services/multi-payment-rules-presenter.js.map +0 -1
  341. package/lib/module/core/services/payment-flow-controller.js +0 -544
  342. package/lib/module/core/services/payment-flow-controller.js.map +0 -1
  343. package/lib/module/core/services/payment-flow-state.js +0 -106
  344. package/lib/module/core/services/payment-flow-state.js.map +0 -1
  345. package/lib/module/core/services/payment-result-mapper.js +0 -45
  346. package/lib/module/core/services/payment-result-mapper.js.map +0 -1
  347. package/lib/module/core/services/presentation-utils.js +0 -7
  348. package/lib/module/core/services/presentation-utils.js.map +0 -1
  349. package/lib/module/core/services/redirect-buffer.js +0 -33
  350. package/lib/module/core/services/redirect-buffer.js.map +0 -1
  351. package/lib/module/core/services/user-friendly-messages.js +0 -42
  352. package/lib/module/core/services/user-friendly-messages.js.map +0 -1
  353. package/lib/module/internal/telemetry-collector.js +0 -75
  354. package/lib/module/internal/telemetry-collector.js.map +0 -1
  355. package/lib/module/public/constants.js +0 -17
  356. package/lib/module/public/constants.js.map +0 -1
  357. package/lib/module/public/spare-link-callbacks.js +0 -4
  358. package/lib/module/public/spare-link-callbacks.js.map +0 -1
  359. package/lib/module/ui/consent/charge-bearer-display.js +0 -95
  360. package/lib/module/ui/consent/charge-bearer-display.js.map +0 -1
  361. package/lib/module/ui/consent/consent-accordion.js +0 -90
  362. package/lib/module/ui/consent/consent-accordion.js.map +0 -1
  363. package/lib/module/ui/consent/consent-summary-section.js +0 -23
  364. package/lib/module/ui/consent/consent-summary-section.js.map +0 -1
  365. package/lib/module/ui/consent/cop-information.js +0 -165
  366. package/lib/module/ui/consent/cop-information.js.map +0 -1
  367. package/lib/module/ui/consent/international-payment-summary.js +0 -94
  368. package/lib/module/ui/consent/international-payment-summary.js.map +0 -1
  369. package/lib/module/ui/consent/label-value-rows.js +0 -55
  370. package/lib/module/ui/consent/label-value-rows.js.map +0 -1
  371. package/lib/module/ui/consent/multi-payment-rules-list.js +0 -125
  372. package/lib/module/ui/consent/multi-payment-rules-list.js.map +0 -1
  373. package/lib/module/ui/consent/multi-payment-summary.js +0 -95
  374. package/lib/module/ui/consent/multi-payment-summary.js.map +0 -1
  375. package/lib/module/ui/consent/single-payment-summary.js +0 -154
  376. package/lib/module/ui/consent/single-payment-summary.js.map +0 -1
  377. package/lib/module/ui/consent/terms-link.js +0 -31
  378. package/lib/module/ui/consent/terms-link.js.map +0 -1
  379. package/lib/module/ui/hooks/use-payment-flow-state.js.map +0 -1
  380. package/lib/module/ui/payment-flow-page.js +0 -232
  381. package/lib/module/ui/payment-flow-page.js.map +0 -1
  382. package/lib/module/ui/screens/bank-selection-screen.js +0 -211
  383. package/lib/module/ui/screens/bank-selection-screen.js.map +0 -1
  384. package/lib/module/ui/screens/consent-details-screen.js +0 -120
  385. package/lib/module/ui/screens/consent-details-screen.js.map +0 -1
  386. package/lib/module/ui/screens/mandate-setup-success-screen.js +0 -75
  387. package/lib/module/ui/screens/mandate-setup-success-screen.js.map +0 -1
  388. package/lib/module/ui/widgets/layout-w-header.js +0 -102
  389. package/lib/module/ui/widgets/layout-w-header.js.map +0 -1
  390. package/lib/module/ui/widgets/stepper.js +0 -120
  391. package/lib/module/ui/widgets/stepper.js.map +0 -1
  392. package/lib/typescript/commonjs/core/client/link-api-client.d.ts +0 -70
  393. package/lib/typescript/commonjs/core/client/link-api-client.d.ts.map +0 -1
  394. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts +0 -15
  395. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts.map +0 -1
  396. package/lib/typescript/commonjs/core/models/link-session-status.d.ts +0 -6
  397. package/lib/typescript/commonjs/core/models/link-session-status.d.ts.map +0 -1
  398. package/lib/typescript/commonjs/core/models/payment-type.d.ts +0 -18
  399. package/lib/typescript/commonjs/core/models/payment-type.d.ts.map +0 -1
  400. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts +0 -19
  401. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts.map +0 -1
  402. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts +0 -67
  403. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts.map +0 -1
  404. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts +0 -32
  405. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts.map +0 -1
  406. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts +0 -9
  407. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
  408. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts +0 -146
  409. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts.map +0 -1
  410. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts +0 -64
  411. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts.map +0 -1
  412. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts +0 -5
  413. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts.map +0 -1
  414. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts +0 -5
  415. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts.map +0 -1
  416. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts +0 -6
  417. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts.map +0 -1
  418. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts +0 -6
  419. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts.map +0 -1
  420. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts +0 -2
  421. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts.map +0 -1
  422. package/lib/typescript/commonjs/public/constants.d.ts +0 -12
  423. package/lib/typescript/commonjs/public/constants.d.ts.map +0 -1
  424. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts +0 -14
  425. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts.map +0 -1
  426. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts +0 -5
  427. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts.map +0 -1
  428. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts +0 -10
  429. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts.map +0 -1
  430. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts +0 -6
  431. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts.map +0 -1
  432. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts +0 -6
  433. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts.map +0 -1
  434. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts +0 -6
  435. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts.map +0 -1
  436. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts +0 -10
  437. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts.map +0 -1
  438. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts +0 -15
  439. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
  440. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts +0 -6
  441. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts.map +0 -1
  442. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts +0 -6
  443. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts.map +0 -1
  444. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts +0 -2
  445. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts.map +0 -1
  446. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts +0 -9
  447. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
  448. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts +0 -20
  449. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts.map +0 -1
  450. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts +0 -15
  451. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts.map +0 -1
  452. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts +0 -13
  453. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts.map +0 -1
  454. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts +0 -10
  455. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
  456. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts +0 -20
  457. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts.map +0 -1
  458. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts +0 -15
  459. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts.map +0 -1
  460. package/lib/typescript/module/core/client/link-api-client.d.ts +0 -70
  461. package/lib/typescript/module/core/client/link-api-client.d.ts.map +0 -1
  462. package/lib/typescript/module/core/errors/payment-api-error.d.ts +0 -15
  463. package/lib/typescript/module/core/errors/payment-api-error.d.ts.map +0 -1
  464. package/lib/typescript/module/core/models/link-session-status.d.ts +0 -6
  465. package/lib/typescript/module/core/models/link-session-status.d.ts.map +0 -1
  466. package/lib/typescript/module/core/models/payment-type.d.ts +0 -18
  467. package/lib/typescript/module/core/models/payment-type.d.ts.map +0 -1
  468. package/lib/typescript/module/core/models/wire-mappers.d.ts +0 -19
  469. package/lib/typescript/module/core/models/wire-mappers.d.ts.map +0 -1
  470. package/lib/typescript/module/core/services/consent-presenter.d.ts +0 -67
  471. package/lib/typescript/module/core/services/consent-presenter.d.ts.map +0 -1
  472. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts +0 -32
  473. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts.map +0 -1
  474. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts +0 -9
  475. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
  476. package/lib/typescript/module/core/services/payment-flow-controller.d.ts +0 -146
  477. package/lib/typescript/module/core/services/payment-flow-controller.d.ts.map +0 -1
  478. package/lib/typescript/module/core/services/payment-flow-state.d.ts +0 -64
  479. package/lib/typescript/module/core/services/payment-flow-state.d.ts.map +0 -1
  480. package/lib/typescript/module/core/services/payment-result-mapper.d.ts +0 -5
  481. package/lib/typescript/module/core/services/payment-result-mapper.d.ts.map +0 -1
  482. package/lib/typescript/module/core/services/presentation-utils.d.ts +0 -5
  483. package/lib/typescript/module/core/services/presentation-utils.d.ts.map +0 -1
  484. package/lib/typescript/module/core/services/redirect-buffer.d.ts +0 -6
  485. package/lib/typescript/module/core/services/redirect-buffer.d.ts.map +0 -1
  486. package/lib/typescript/module/core/services/user-friendly-messages.d.ts +0 -6
  487. package/lib/typescript/module/core/services/user-friendly-messages.d.ts.map +0 -1
  488. package/lib/typescript/module/internal/telemetry-collector.d.ts +0 -2
  489. package/lib/typescript/module/internal/telemetry-collector.d.ts.map +0 -1
  490. package/lib/typescript/module/public/constants.d.ts +0 -12
  491. package/lib/typescript/module/public/constants.d.ts.map +0 -1
  492. package/lib/typescript/module/public/spare-link-callbacks.d.ts +0 -14
  493. package/lib/typescript/module/public/spare-link-callbacks.d.ts.map +0 -1
  494. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts +0 -5
  495. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts.map +0 -1
  496. package/lib/typescript/module/ui/consent/consent-accordion.d.ts +0 -10
  497. package/lib/typescript/module/ui/consent/consent-accordion.d.ts.map +0 -1
  498. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts +0 -6
  499. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts.map +0 -1
  500. package/lib/typescript/module/ui/consent/cop-information.d.ts +0 -6
  501. package/lib/typescript/module/ui/consent/cop-information.d.ts.map +0 -1
  502. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts +0 -6
  503. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts.map +0 -1
  504. package/lib/typescript/module/ui/consent/label-value-rows.d.ts +0 -10
  505. package/lib/typescript/module/ui/consent/label-value-rows.d.ts.map +0 -1
  506. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts +0 -15
  507. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
  508. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts +0 -6
  509. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts.map +0 -1
  510. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts +0 -6
  511. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts.map +0 -1
  512. package/lib/typescript/module/ui/consent/terms-link.d.ts +0 -2
  513. package/lib/typescript/module/ui/consent/terms-link.d.ts.map +0 -1
  514. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts +0 -9
  515. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
  516. package/lib/typescript/module/ui/payment-flow-page.d.ts +0 -20
  517. package/lib/typescript/module/ui/payment-flow-page.d.ts.map +0 -1
  518. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts +0 -15
  519. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts.map +0 -1
  520. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts +0 -13
  521. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts.map +0 -1
  522. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts +0 -10
  523. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
  524. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts +0 -20
  525. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts.map +0 -1
  526. package/lib/typescript/module/ui/widgets/stepper.d.ts +0 -15
  527. package/lib/typescript/module/ui/widgets/stepper.d.ts.map +0 -1
  528. package/src/core/client/link-api-client.ts +0 -414
  529. package/src/core/errors/payment-api-error.ts +0 -35
  530. package/src/core/models/link-session-status.ts +0 -7
  531. package/src/core/models/payment-type.ts +0 -54
  532. package/src/core/models/wire-mappers.ts +0 -315
  533. package/src/core/services/consent-presenter.ts +0 -213
  534. package/src/core/services/execute-resume-if-needed.ts +0 -243
  535. package/src/core/services/multi-payment-rules-presenter.ts +0 -158
  536. package/src/core/services/payment-flow-controller.ts +0 -607
  537. package/src/core/services/payment-flow-state.ts +0 -124
  538. package/src/core/services/payment-result-mapper.ts +0 -41
  539. package/src/core/services/presentation-utils.ts +0 -4
  540. package/src/core/services/redirect-buffer.ts +0 -34
  541. package/src/core/services/user-friendly-messages.ts +0 -39
  542. package/src/internal/telemetry-collector.ts +0 -90
  543. package/src/public/constants.ts +0 -14
  544. package/src/public/spare-link-callbacks.ts +0 -20
  545. package/src/ui/consent/charge-bearer-display.tsx +0 -68
  546. package/src/ui/consent/consent-accordion.tsx +0 -89
  547. package/src/ui/consent/consent-summary-section.tsx +0 -19
  548. package/src/ui/consent/cop-information.tsx +0 -121
  549. package/src/ui/consent/international-payment-summary.tsx +0 -83
  550. package/src/ui/consent/label-value-rows.tsx +0 -50
  551. package/src/ui/consent/multi-payment-rules-list.tsx +0 -138
  552. package/src/ui/consent/multi-payment-summary.tsx +0 -82
  553. package/src/ui/consent/single-payment-summary.tsx +0 -123
  554. package/src/ui/consent/terms-link.tsx +0 -27
  555. package/src/ui/hooks/use-payment-flow-state.ts +0 -16
  556. package/src/ui/payment-flow-page.tsx +0 -254
  557. package/src/ui/screens/bank-selection-screen.tsx +0 -209
  558. package/src/ui/screens/consent-details-screen.tsx +0 -106
  559. package/src/ui/screens/mandate-setup-success-screen.tsx +0 -72
  560. package/src/ui/widgets/layout-w-header.tsx +0 -89
  561. package/src/ui/widgets/stepper.tsx +0 -126
@@ -5,28 +5,25 @@
5
5
  * ```ts
6
6
  * plugins: [
7
7
  * ['@spare-technologies/spare-link/expo-plugin', {
8
- * locationUsageDescription: 'We use your location to verify the payment.',
9
8
  * merchantScheme: 'sparemerchantrn',
10
9
  * merchantHost: 'callback',
11
- * universalLinkHost: 'link.krshnas.com', // optional
12
10
  * }],
13
11
  * ]
14
12
  * ```
15
13
  *
14
+ * All this registers is the deep link the payer returns through. The SDK asks
15
+ * for no runtime permissions: the hosted page collects the bank's risk signals
16
+ * itself, so nothing here reads the device.
17
+ *
16
18
  * Written as plain CJS so the Expo CLI's plugin loader (which `require()`s
17
19
  * this file) works regardless of whether Node loads it as ESM or CJS.
18
20
  *
19
21
  * @typedef {Object} SpareLinkPluginOptions
20
- * @property {string} [locationUsageDescription]
21
22
  * @property {string} [merchantScheme]
22
23
  * @property {string} [merchantHost]
23
- * @property {string} [universalLinkHost]
24
24
  */
25
25
 
26
- const { AndroidConfig, withAndroidManifest, withInfoPlist } = require('@expo/config-plugins');
27
-
28
- const DEFAULT_LOCATION_DESCRIPTION =
29
- 'Spare Link uses your location to confirm the payment as part of the bank security checks.';
26
+ const { withAndroidManifest, withInfoPlist } = require('@expo/config-plugins');
30
27
 
31
28
  /**
32
29
  * @param {import('@expo/config-plugins').ExpoConfig} config
@@ -36,10 +33,8 @@ function withSpareLink(config, props) {
36
33
  const opts = props ?? {};
37
34
  let next = config;
38
35
 
39
- // iOS — location permission + URL scheme.
36
+ // iOS — the return URL scheme, and nothing else.
40
37
  next = withInfoPlist(next, (cfg) => {
41
- cfg.modResults.NSLocationWhenInUseUsageDescription =
42
- opts.locationUsageDescription ?? DEFAULT_LOCATION_DESCRIPTION;
43
38
  if (opts.merchantScheme) {
44
39
  const types = cfg.modResults.CFBundleURLTypes ?? [];
45
40
  const exists = types.some(
@@ -54,10 +49,6 @@ function withSpareLink(config, props) {
54
49
  return cfg;
55
50
  });
56
51
 
57
- next = AndroidConfig.Permissions.withPermissions(next, [
58
- 'android.permission.ACCESS_FINE_LOCATION',
59
- ]);
60
-
61
52
  if (opts.merchantScheme) {
62
53
  const scheme = opts.merchantScheme;
63
54
  next = withAndroidManifest(next, (cfg) => {
@@ -76,17 +67,6 @@ function withSpareLink(config, props) {
76
67
  ? [{ $: { 'android:scheme': scheme, 'android:host': opts.merchantHost } }]
77
68
  : [{ $: { 'android:scheme': scheme } }],
78
69
  });
79
- if (opts.universalLinkHost) {
80
- activity['intent-filter'].push({
81
- $: { 'android:autoVerify': 'true' },
82
- action: [{ $: { 'android:name': 'android.intent.action.VIEW' } }],
83
- category: [
84
- { $: { 'android:name': 'android.intent.category.DEFAULT' } },
85
- { $: { 'android:name': 'android.intent.category.BROWSABLE' } },
86
- ],
87
- data: [{ $: { 'android:scheme': 'https', 'android:host': opts.universalLinkHost } }],
88
- });
89
- }
90
70
  return cfg;
91
71
  });
92
72
  }
@@ -1,139 +1 @@
1
- /**
2
- * SDK-side models. These are the camelCase shapes returned from the
3
- * {@link LinkApiClient} — translated from the snake_case wire format defined
4
- * by tofa (see harness `src/types/wire.ts` for the raw wire shapes).
5
- */
6
-
7
- export interface AmountDto {
8
- amount: string;
9
- currency: string;
10
- }
11
-
12
- export interface PaymentScheduleEntry {
13
- amount?: AmountDto;
14
- maxAmount?: AmountDto;
15
- paymentExecutionDate?: string;
16
- }
17
-
18
- export interface PeriodicControls {
19
- maxCumulativeAmountPerPeriod?: AmountDto;
20
- maxCumulativeNumberOfPaymentsPerPeriod?: number;
21
- }
22
-
23
- export interface PeriodicSchedule {
24
- frequency?: string;
25
- startDate?: string;
26
- endDate?: string;
27
- amount?: AmountDto;
28
- maxAmount?: AmountDto;
29
- controls?: PeriodicControls;
30
- }
31
-
32
- export interface CurrencyRequest {
33
- priority?: string;
34
- purpose?: string;
35
- chargeBearer?: string;
36
- }
37
-
38
- export interface PaymentInstructions {
39
- amount?: AmountDto;
40
- isInternationalPayment?: boolean;
41
- maxCumulativeNumberOfPayments?: number;
42
- maxCumulativeAmount?: AmountDto;
43
- paymentSchedule?: PaymentScheduleEntry[];
44
- periodicSchedule?: PeriodicSchedule;
45
- currencyRequest?: CurrencyRequest;
46
- }
47
-
48
- /** Payment request DTO as carried by GET /link. */
49
- export interface CreatePaymentRequestInput {
50
- id: string;
51
- internalReference: string;
52
- status: string;
53
- type: string;
54
- creditorType: string;
55
- purpose: string;
56
- creditorReference?: string;
57
- merchantReference: string;
58
- createdAt: string;
59
- updatedAt: string;
60
- isCopVerified: boolean;
61
- creditorAccount: {
62
- schemeName: string;
63
- identification: string;
64
- name?: string;
65
- };
66
- instructions: PaymentInstructions;
67
- }
68
-
69
- export interface LinkSessionResponse {
70
- request: CreatePaymentRequestInput;
71
- providerId?: string;
72
- }
73
-
74
- export interface ConsentResponse {
75
- redirectUrl: string;
76
- mobileAppUrl?: string;
77
- }
78
-
79
- export interface LinkStatusResponse {
80
- linkSessionId: string;
81
- /** created | initialized | redirected | callback_received | completed | failed | cancelled | expired */
82
- status: string;
83
- /** payment | account */
84
- intent: string;
85
- /** sip | multipayment | account */
86
- resourceType: string;
87
- expiresAt: string;
88
- failureCode?: string;
89
- cancelledAt?: string;
90
- completedAt?: string;
91
- failedAt?: string;
92
- }
93
-
94
- export interface CopResponse {
95
- /** `Match` | `NoMatch` | `Unavailable` */
96
- matchIndicator: string;
97
- maskedName?: string;
98
- }
99
-
100
- export interface TelemetryResponse {
101
- accepted?: boolean;
102
- linkSessionId?: string;
103
- }
104
-
105
- export interface PatchTokenResponse {
106
- status: string;
107
- linkSession?: {
108
- linkSessionId: string;
109
- status: string;
110
- cancelledAt: string | null;
111
- failedAt: string | null;
112
- failureCode: string | null;
113
- };
114
- }
115
-
116
- export interface ProviderCountry {
117
- englishName: string;
118
- iso3166Code: string;
119
- }
120
-
121
- export interface ProviderSummary {
122
- id: string;
123
- code: string;
124
- name: string;
125
- logoUrl: string;
126
- status: string;
127
- country: ProviderCountry;
128
- }
129
-
130
- /** Persisted record describing an in-flight payment for cold-start recovery. */
131
- export interface PendingSessionRecord {
132
- sessionId: string;
133
- selectedBankId: string;
134
- authorizationUrl: string;
135
- consentAt?: number;
136
- recoveryAttempts: number;
137
- /** Merchant reference from the link session, used to bind buffered return URIs. */
138
- merchantRef?: string;
139
- }
1
+ export type { PendingSessionRecord } from './pending-session-record';
@@ -1,34 +1,282 @@
1
+ import { parseQueryParams } from '../../internal/url-parts';
2
+
3
+ /**
4
+ * Query parameters on the deep link that returns a payer to the app.
5
+ *
6
+ * Both channels are told the same thing in the same words. A success carries
7
+ * `reference`, `status` and either `paymentId` or `mandateId`. A failure carries
8
+ * `reference`, `errorCode` and `status`. `merchantRef` is on both when the request
9
+ * recorded one, and `status` is always present but may be empty.
10
+ *
11
+ * `errorCode` is what tells the two apart: it is on every failure and on no
12
+ * success, so an outcome can be read without recognising a status.
13
+ *
14
+ * **A deep link to an app is not signed.** `sig` is added on the browser channel
15
+ * only, deliberately: any installed app can claim a custom scheme, so a signature
16
+ * on a deep link would be a proof handed to whoever intercepted it. When it is
17
+ * present it is an ES256 JWS over the return URL, and it is carried through
18
+ * unverified — checking it needs Spare's public key, which the SDK does not hold.
19
+ *
20
+ * The query is read by {@link parseQueryParams} rather than through `URL`,
21
+ * because React Native's `URL.searchParams` never parses the URL it was given.
22
+ */
23
+
24
+ /**
25
+ * Statuses that mean the payment is done and will not change.
26
+ *
27
+ * `Scheduled` is a success: a future-dated payment the bank has accepted has
28
+ * succeeded, the money simply has not moved yet. A caller that needs settled funds
29
+ * specifically must read the status back from its own backend — this SDK reports
30
+ * every settled status as `processed`, because all of them are terminal and all of
31
+ * them resolve to the merchant's success URL.
32
+ *
33
+ * `success` is the word an app used to be sent instead of the request's own status.
34
+ * The service now sends one vocabulary to both channels, so it should no longer
35
+ * arrive — it is still read because an environment running the earlier build would
36
+ * otherwise report a completed payment as unresolved.
37
+ */
38
+ const SETTLED_STATUSES: ReadonlySet<string> = new Set(['Processed', 'Scheduled', 'success']);
39
+
40
+ /**
41
+ * Statuses that mean the payment will not happen. `failure` is legacy, for the same
42
+ * reason `success` is in {@link SETTLED_STATUSES}.
43
+ */
44
+ const FAILED_STATUSES: ReadonlySet<string> = new Set(['Rejected', 'Errored', 'failure']);
45
+
1
46
  /**
2
- * Query-parameter helpers for bank / authorize return URIs.
47
+ * Statuses that mean the request is still payable — not an outcome at all.
3
48
  *
4
- * The Link service appends `exchange_code` on success and `error_code` on
5
- * authorize failure (legacy integrations may still send `error`).
49
+ * A return should never carry one: the payer has come back, so the request has
50
+ * moved on. One arriving here means the outcome is still being decided, which is
51
+ * `unknown` rather than either answer.
6
52
  */
53
+ const IN_FLIGHT_STATUSES: ReadonlySet<string> = new Set(['New', 'Consumed', 'ConsentRaised']);
54
+
55
+ /**
56
+ * The one error key that reports a success rather than a failure.
57
+ *
58
+ * It arrives in `errorCode` like every other key, so anything that treats the
59
+ * presence of a key as a failure reports a completed payment as a failed one.
60
+ */
61
+ const SUCCESS_ERROR_KEY = 'request_processed';
62
+
63
+ /** Every status this version has been taught, whatever it means. */
64
+ function isKnownStatus(status: string): boolean {
65
+ return (
66
+ SETTLED_STATUSES.has(status) || FAILED_STATUSES.has(status) || IN_FLIGHT_STATUSES.has(status)
67
+ );
68
+ }
7
69
 
8
70
  export function isPaymentReturnCallbackUri(uri: URL | string): boolean {
9
- let parsed: URL;
10
- try {
11
- parsed = typeof uri === 'string' ? new URL(uri) : uri;
12
- } catch {
13
- return false;
14
- }
15
- const params = parsed.searchParams;
16
- if (params.has('exchange_code')) return true;
17
- if (params.has('error_code')) return true;
18
- if (params.has('error')) return true;
19
- if (params.get('status') === 'failure') return true;
71
+ const params = paymentReturnParams(uri);
72
+ if (params.reference !== undefined) return true;
73
+ if (params.merchantRef !== undefined) return true;
74
+ if (params.errorCode !== undefined) return true;
75
+ if (params.error_code !== undefined) return true;
76
+ if (params.error !== undefined) return true;
77
+ const status = nonEmpty(params.status);
78
+ if (status !== undefined && isKnownStatus(status)) return true;
20
79
  return false;
21
80
  }
22
81
 
82
+ /** Reads the query of a return URI into the shape the extractors below take. */
83
+ export function paymentReturnParams(uri: URL | string): Record<string, string> {
84
+ return parseQueryParams(typeof uri === 'string' ? uri : uri.toString());
85
+ }
86
+
87
+ /**
88
+ * Whether the return URI reports a completed payment.
89
+ *
90
+ * Only a known settled status counts. Absent, in-flight or a status this version
91
+ * has not been taught is read as not-a-success: a payer returned without one has
92
+ * not been told their payment succeeded, and neither should the app.
93
+ */
94
+ export function isPaymentReturnSuccess(params: Record<string, string>): boolean {
95
+ const status = nonEmpty(params.status);
96
+ return status !== undefined && SETTLED_STATUSES.has(status);
97
+ }
98
+
99
+ /** The payment request reference, if the return URI named one. */
100
+ export function extractPaymentReturnReference(params: Record<string, string>): string | undefined {
101
+ return nonEmpty(params.reference);
102
+ }
103
+
104
+ /** The merchant's own reference for the attempt, if present. */
105
+ export function extractPaymentReturnMerchantRef(
106
+ params: Record<string, string>,
107
+ ): string | undefined {
108
+ return nonEmpty(params.merchantRef);
109
+ }
110
+
111
+ /**
112
+ * Spare's identifier for the payment itself, present on a success.
113
+ *
114
+ * Distinct from the reference, which names the *request*. This is what a merchant
115
+ * records against the order.
116
+ */
117
+ export function extractPaymentReturnPaymentId(params: Record<string, string>): string | undefined {
118
+ return nonEmpty(params.paymentId);
119
+ }
120
+
121
+ /**
122
+ * Spare's identifier for a mandate, present on a mandate's success.
123
+ *
124
+ * A return carries this or {@link extractPaymentReturnPaymentId}, never both: a
125
+ * single payment names a payment, every mandate type names a mandate. Read
126
+ * whichever is present rather than assuming which one the flow produced.
127
+ */
128
+ export function extractPaymentReturnMandateId(params: Record<string, string>): string | undefined {
129
+ return nonEmpty(params.mandateId);
130
+ }
131
+
132
+ /**
133
+ * The signature over this return, if it carried one.
134
+ *
135
+ * An ES256 JWS whose payload is the return URL. Handed to the caller unverified —
136
+ * checking it needs Spare's public key, which the SDK does not hold.
137
+ */
138
+ export function extractPaymentReturnSignature(params: Record<string, string>): string | undefined {
139
+ return nonEmpty(params.sig);
140
+ }
141
+
142
+ /**
143
+ * The failure key from a payment return URI, if it reported one.
144
+ *
145
+ * `errorCode` is the name both channels now use, and it is what tells the two
146
+ * outcomes apart: the service puts it on every failure and on no success, so a
147
+ * reader never has to recognise a status to know the payment did not happen.
148
+ *
149
+ * `error_code` and `error` are legacy — an earlier build sent the code under the
150
+ * snake_case name, and older returns carried a separate machine-readable reason.
151
+ * Both are still read so an environment running that build is not misread.
152
+ *
153
+ * {@link SUCCESS_ERROR_KEY} is excluded, because a success reports itself through
154
+ * the same field and must not come back out of here looking like a reason the
155
+ * payment failed.
156
+ */
157
+ function failureErrorKey(params: Record<string, string>): string | undefined {
158
+ const key = nonEmpty(params.errorCode) ?? nonEmpty(params.error_code) ?? nonEmpty(params.error);
159
+ return key === SUCCESS_ERROR_KEY ? undefined : key;
160
+ }
161
+
23
162
  /**
24
- * Extract the failure code from a payment-return URI, if present.
163
+ * The failure code from a payment return URI.
25
164
  *
26
- * `error_code` takes precedence over the legacy `error` query param. A
27
- * `status=failure` with no other code resolves to `'authorize_failed'`.
165
+ * A return that says only that it failed, naming no key, still yields something a
166
+ * merchant can branch on.
28
167
  */
29
- export function extractPaymentReturnErrorCode(params: URLSearchParams): string | undefined {
30
- const code = params.get('error_code') ?? params.get('error');
31
- if (code && code.length > 0) return code;
32
- if (params.get('status') === 'failure') return 'authorize_failed';
168
+ export function extractPaymentReturnErrorCode(params: Record<string, string>): string | undefined {
169
+ const key = failureErrorKey(params);
170
+ if (key !== undefined) return key;
171
+ const status = nonEmpty(params.status);
172
+ if (status !== undefined && FAILED_STATUSES.has(status)) return 'authorize_failed';
33
173
  return undefined;
34
174
  }
175
+
176
+ /**
177
+ * The machine-readable reason a payment did not complete, e.g. `user_cancelled`.
178
+ *
179
+ * Kept alongside the code because the code is often generic where this is not.
180
+ */
181
+ export function extractPaymentReturnErrorReason(
182
+ params: Record<string, string>,
183
+ ): string | undefined {
184
+ const reason = nonEmpty(params.error);
185
+ return reason === SUCCESS_ERROR_KEY ? undefined : reason;
186
+ }
187
+
188
+ /**
189
+ * The human-readable failure text, if the return carried one.
190
+ *
191
+ * For the merchant's logs and their own copy decisions — not shown to the payer
192
+ * by this SDK, which cannot verify anything the link says.
193
+ */
194
+ export function extractPaymentReturnErrorDescription(
195
+ params: Record<string, string>,
196
+ ): string | undefined {
197
+ return nonEmpty(params.error_description);
198
+ }
199
+
200
+ /**
201
+ * Everything a return said, gathered once.
202
+ *
203
+ * Carried whole through the flow so a new parameter reaches the caller by being
204
+ * read here, rather than by being threaded through every state factory.
205
+ */
206
+ export interface PaymentReturnReport {
207
+ /**
208
+ * The payment request this return is about.
209
+ *
210
+ * Compared against the payment in flight before the outcome is applied: a
211
+ * delayed or spoofed callback naming another payment must not resolve this one.
212
+ */
213
+ readonly reference?: string;
214
+ readonly merchantRef?: string;
215
+ readonly paymentId?: string;
216
+ /**
217
+ * Spare's identifier for a mandate. Set instead of `paymentId` when the flow
218
+ * created a mandate rather than a single payment.
219
+ */
220
+ readonly mandateId?: string;
221
+ readonly signature?: string;
222
+ readonly errorCode?: string;
223
+ readonly errorReason?: string;
224
+ readonly errorDescription?: string;
225
+ }
226
+
227
+ /**
228
+ * What a return said about the payment.
229
+ *
230
+ * `unknown` is not a failure. The status vocabulary grows, and a payment the
231
+ * service has not finished deciding on must not be reported as one that failed —
232
+ * the merchant's backend is what resolves it.
233
+ */
234
+ export type PaymentReturnOutcome = 'processed' | 'rejected' | 'unknown';
235
+
236
+ export function paymentReturnOutcome(params: Record<string, string>): PaymentReturnOutcome {
237
+ const status = nonEmpty(params.status);
238
+
239
+ // The status is the authoritative field, so a recognised one settles it — an
240
+ // error key alongside does not override it. In-flight and unrecognised statuses
241
+ // both fall through to `unknown`: one is a payment still being decided, the
242
+ // other a value this version has not been taught, and neither is an outcome.
243
+ if (status !== undefined) {
244
+ if (SETTLED_STATUSES.has(status)) return 'processed';
245
+ if (FAILED_STATUSES.has(status)) return 'rejected';
246
+ return 'unknown';
247
+ }
248
+
249
+ // No status at all. A failure key is still a report of failure, so it is read as
250
+ // one — but the success key on its own is not read as a success. Reporting money
251
+ // moved on the strength of one field is the one mistake with no way back.
252
+ return failureErrorKey(params) !== undefined ? 'rejected' : 'unknown';
253
+ }
254
+
255
+ /** Reads a return URI into an outcome and everything it reported. */
256
+ export function readPaymentReturn(uri: URL | string): {
257
+ outcome: PaymentReturnOutcome;
258
+ report: PaymentReturnReport;
259
+ } {
260
+ const params = paymentReturnParams(uri);
261
+ return {
262
+ outcome: paymentReturnOutcome(params),
263
+ report: {
264
+ ...defined('reference', extractPaymentReturnReference(params)),
265
+ ...defined('merchantRef', extractPaymentReturnMerchantRef(params)),
266
+ ...defined('paymentId', extractPaymentReturnPaymentId(params)),
267
+ ...defined('mandateId', extractPaymentReturnMandateId(params)),
268
+ ...defined('signature', extractPaymentReturnSignature(params)),
269
+ ...defined('errorCode', extractPaymentReturnErrorCode(params)),
270
+ ...defined('errorReason', extractPaymentReturnErrorReason(params)),
271
+ ...defined('errorDescription', extractPaymentReturnErrorDescription(params)),
272
+ },
273
+ };
274
+ }
275
+
276
+ function defined(key: string, value: string | undefined): Record<string, string> {
277
+ return value === undefined ? {} : { [key]: value };
278
+ }
279
+
280
+ function nonEmpty(value: string | undefined): string | undefined {
281
+ return value !== undefined && value.length > 0 ? value : undefined;
282
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * What the SDK remembers about a payment that was still in flight.
3
+ *
4
+ * Only the reference: the SDK holds no credentials and can ask the service
5
+ * nothing, so the record exists to tell a cold start which payment to hand the
6
+ * merchant's backend for resolution — not to resume the flow itself.
7
+ */
8
+ export interface PendingSessionRecord {
9
+ reference: string;
10
+ }