@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
@@ -1,414 +0,0 @@
1
- import { createLogger } from '../../internal/logger';
2
- import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../public/constants';
3
- import { type SpareApiTenant, tenantCountryCode } from '../../public/spare-link-config';
4
- import { SDK_VERSION } from '../../version';
5
- import { PaymentApiError, isPaymentApiError } from '../errors/payment-api-error';
6
- import type {
7
- ConsentResponse,
8
- CopResponse,
9
- LinkSessionResponse,
10
- LinkStatusResponse,
11
- PatchTokenResponse,
12
- ProviderSummary,
13
- TelemetryResponse,
14
- } from '../models';
15
- import {
16
- mapConsentResponse,
17
- mapCopResponse,
18
- mapLinkSessionResponse,
19
- mapLinkStatusResponse,
20
- mapPatchTokenResponse,
21
- mapProvidersResponse,
22
- mapTelemetryResponse,
23
- unwrap,
24
- } from '../models/wire-mappers';
25
-
26
- export interface LinkApiClientOptions {
27
- baseUrl: string;
28
- /** Either 'UAE' (raw header value) or a tenant enum. */
29
- tenant: SpareApiTenant | string;
30
- fetch?: typeof fetch;
31
- requestTimeoutMs?: number;
32
- /** UUID generator for the Idempotency-Key header on POST /link/consent. */
33
- uuid?: () => string;
34
- /** User-Agent header (defaults to `@spare-technologies/spare-link/<SDK_VERSION>`). */
35
- userAgent?: string;
36
- }
37
-
38
- const RETRYABLE_ERROR_CODES = new Set([
39
- 'network_timeout',
40
- 'consent_creation_failed',
41
- 'bank_unavailable',
42
- 'network_error',
43
- ]);
44
-
45
- const DEFAULT_USER_AGENT = `@spare-technologies/spare-link/${SDK_VERSION}`;
46
- const log = createLogger('LinkApiClient');
47
-
48
- function isCryptoCapable(g: typeof globalThis): g is typeof globalThis & {
49
- crypto: { randomUUID(): string };
50
- } {
51
- return (
52
- typeof g.crypto !== 'undefined' &&
53
- typeof (g.crypto as { randomUUID?: () => string }).randomUUID === 'function'
54
- );
55
- }
56
-
57
- function isCryptoRandom(g: typeof globalThis): g is typeof globalThis & {
58
- crypto: { getRandomValues(arr: Uint8Array): Uint8Array };
59
- } {
60
- return (
61
- typeof g.crypto !== 'undefined' &&
62
- typeof (g.crypto as { getRandomValues?: (a: Uint8Array) => Uint8Array }).getRandomValues ===
63
- 'function'
64
- );
65
- }
66
-
67
- function defaultUuid(): string {
68
- if (isCryptoCapable(globalThis)) {
69
- return globalThis.crypto.randomUUID();
70
- }
71
- const bytes = new Uint8Array(16);
72
- if (isCryptoRandom(globalThis)) {
73
- globalThis.crypto.getRandomValues(bytes);
74
- } else {
75
- for (let i = 0; i < 16; i += 1) bytes[i] = Math.floor(Math.random() * 256);
76
- }
77
- bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;
78
- bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;
79
- const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
80
- return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
81
- }
82
-
83
- /** Full client for all Link-origin endpoints — headers, retry rules, and error mapping. */
84
- export class LinkApiClient {
85
- readonly baseUrl: string;
86
- readonly tenantHeader: string;
87
- readonly requestTimeoutMs: number;
88
- readonly userAgent: string;
89
-
90
- private readonly fetchImpl: typeof fetch;
91
- private readonly uuid: () => string;
92
- private readonly aborters = new Set<AbortController>();
93
- private disposed = false;
94
-
95
- constructor(opts: LinkApiClientOptions) {
96
- this.baseUrl = opts.baseUrl.endsWith('/') ? opts.baseUrl.slice(0, -1) : opts.baseUrl;
97
- this.tenantHeader =
98
- typeof opts.tenant === 'string' && /^[A-Z]+$/.test(opts.tenant)
99
- ? opts.tenant
100
- : tenantCountryCode(opts.tenant as SpareApiTenant);
101
- this.requestTimeoutMs = opts.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
102
- this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);
103
- this.uuid = opts.uuid ?? defaultUuid;
104
- this.userAgent = opts.userAgent ?? DEFAULT_USER_AGENT;
105
- }
106
-
107
- /** Aborts in-flight requests and rejects further work. */
108
- dispose(): void {
109
- this.disposed = true;
110
- for (const c of this.aborters) c.abort();
111
- this.aborters.clear();
112
- }
113
-
114
- private headers(linkToken: string, extra?: Record<string, string>): HeadersInit {
115
- return {
116
- 'x-link-token': linkToken,
117
- 'Content-Type': 'application/json',
118
- 'X-Tenant': this.tenantHeader,
119
- 'User-Agent': this.userAgent,
120
- ...(extra ?? {}),
121
- };
122
- }
123
-
124
- private url(path: string): string {
125
- return `${this.baseUrl}${path.startsWith('/') ? path : `/${path}`}`;
126
- }
127
-
128
- /**
129
- * Wraps a single attempt with a per-request `AbortController`. Times out after
130
- * `requestTimeoutMs`. Classifies any thrown non-{@link PaymentApiError} as
131
- * `network_error` so callers always see a typed error.
132
- */
133
- private async withTimeout<T>(body: (signal: AbortSignal) => Promise<T>): Promise<T> {
134
- if (this.disposed) {
135
- throw new PaymentApiError('client_disposed', 'API client has been disposed.');
136
- }
137
- const controller = new AbortController();
138
- this.aborters.add(controller);
139
- const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
140
- try {
141
- return await body(controller.signal);
142
- } catch (err) {
143
- if (isPaymentApiError(err)) throw err;
144
- const name = (err as { name?: string }).name;
145
- if (name === 'AbortError') {
146
- log.severe(
147
- `request timed out after ${this.requestTimeoutMs}ms${this.disposed ? ' (client disposed)' : ''}`,
148
- );
149
- throw new PaymentApiError(
150
- this.disposed ? 'client_disposed' : 'network_timeout',
151
- this.disposed
152
- ? 'API client was disposed mid-request.'
153
- : 'The request timed out. Please check your connection and try again.',
154
- );
155
- }
156
- // Catch-all: DNS, refused, malformed response, JSON parse failure, etc.
157
- // We surface the message for debugging but a stable code for branching.
158
- const message = err instanceof Error ? err.message : String(err);
159
- throw new PaymentApiError('network_error', `Network error: ${message}`);
160
- } finally {
161
- clearTimeout(timer);
162
- this.aborters.delete(controller);
163
- }
164
- }
165
-
166
- /** Idempotent retry helper (max 2 attempts, 500ms + 1000ms backoff). */
167
- private async withRetry<T>(
168
- body: (signal: AbortSignal) => Promise<T>,
169
- maxAttempts = 2,
170
- ): Promise<T> {
171
- let lastError: PaymentApiError | undefined;
172
- for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
173
- try {
174
- return await this.withTimeout(body);
175
- } catch (err) {
176
- if (
177
- isPaymentApiError(err) &&
178
- RETRYABLE_ERROR_CODES.has(err.code) &&
179
- attempt < maxAttempts
180
- ) {
181
- lastError = err;
182
- await delay(attempt === 1 ? 500 : 1000);
183
- continue;
184
- }
185
- throw err;
186
- }
187
- }
188
- throw (
189
- lastError ??
190
- new PaymentApiError('network_error', 'A network error occurred. Please try again.')
191
- );
192
- }
193
-
194
- private async parseAndHandle<T>(
195
- res: Response,
196
- mapper: (raw: unknown) => T,
197
- endpoint: string,
198
- ): Promise<T> {
199
- if (!res.ok) {
200
- await this.throwForError(res);
201
- }
202
- let body: unknown;
203
- try {
204
- body = (await res.json()) as unknown;
205
- } catch (err) {
206
- const message = err instanceof Error ? err.message : String(err);
207
- throw new PaymentApiError(
208
- `${endpoint}_payload_invalid`,
209
- `${endpoint} response body is not valid JSON: ${message}`,
210
- );
211
- }
212
- try {
213
- return mapper(unwrap(body));
214
- } catch (err) {
215
- if (isPaymentApiError(err)) throw err;
216
- const message = err instanceof Error ? err.message : String(err);
217
- throw new PaymentApiError(
218
- `${endpoint}_payload_invalid`,
219
- `${endpoint} response payload is invalid: ${message}`,
220
- );
221
- }
222
- }
223
-
224
- private async throwForError(res: Response): Promise<never> {
225
- const text = await res.text().catch(() => '');
226
- let parsed:
227
- | { error_code?: string; code?: string; error?: string; message?: string }
228
- | undefined;
229
- try {
230
- parsed = text ? (JSON.parse(text) as typeof parsed) : undefined;
231
- } catch {
232
- parsed = undefined;
233
- }
234
- const errorCode =
235
- parsed?.error_code ??
236
- parsed?.code ??
237
- (typeof parsed?.error === 'string' ? parsed.error : undefined);
238
-
239
- switch (res.status) {
240
- case 401:
241
- log.severe('HTTP 401: link token invalid or expired');
242
- throw new PaymentApiError('invalid_token', 'The link token is invalid or has expired.');
243
- case 410:
244
- if (errorCode === 'SESSION_CANCELLED') {
245
- log.severe('HTTP 410: session cancelled');
246
- throw new PaymentApiError('session_cancelled', 'The payment session was cancelled.');
247
- }
248
- log.severe('HTTP 410: session expired');
249
- throw PaymentApiError.sessionExpired();
250
- case 409:
251
- log.severe('HTTP 409: session already completed');
252
- throw new PaymentApiError(
253
- 'session_already_completed',
254
- 'The payment session has already been completed.',
255
- );
256
- case 503:
257
- log.severe('HTTP 503: bank unavailable');
258
- throw new PaymentApiError(
259
- 'bank_unavailable',
260
- 'Bank is temporarily unavailable. Please try again.',
261
- );
262
- case 502:
263
- log.severe('HTTP 502: consent creation failed');
264
- throw new PaymentApiError(
265
- 'consent_creation_failed',
266
- 'Unable to create payment authorization. Please try again.',
267
- );
268
- case 408:
269
- log.severe('HTTP 408: request timeout');
270
- throw new PaymentApiError(
271
- 'network_timeout',
272
- 'The server timed out processing the request. Please try again.',
273
- );
274
- case 429:
275
- log.severe('HTTP 429: rate limit exceeded');
276
- throw new PaymentApiError(
277
- 'rate_limit_exceeded',
278
- 'Too many requests. Please wait and try again.',
279
- );
280
- default:
281
- log.severe(`HTTP ${res.status}: unexpected error`);
282
- throw new PaymentApiError(
283
- 'network_error',
284
- `Unexpected status ${res.status} from Link API.`,
285
- );
286
- }
287
- }
288
-
289
- // ---- Endpoints ----------------------------------------------------------
290
-
291
- /** `GET /link` — one-time session hydration. */
292
- async getSession(linkToken: string): Promise<LinkSessionResponse> {
293
- log.info('GET /link');
294
- return this.withRetry(async (signal) => {
295
- const res = await this.fetchImpl(this.url('/link'), {
296
- method: 'GET',
297
- headers: this.headers(linkToken),
298
- signal,
299
- });
300
- return this.parseAndHandle(res, mapLinkSessionResponse, 'session');
301
- });
302
- }
303
-
304
- /** `GET /link/status` — read-only session status. */
305
- async getStatus(linkToken: string): Promise<LinkStatusResponse> {
306
- log.info('GET /link/status');
307
- return this.withRetry(async (signal) => {
308
- const res = await this.fetchImpl(this.url('/link/status'), {
309
- method: 'GET',
310
- headers: this.headers(linkToken),
311
- signal,
312
- });
313
- return this.parseAndHandle(res, mapLinkStatusResponse, 'status');
314
- });
315
- }
316
-
317
- /** `GET /link/providers` — bank list for the session jurisdiction. */
318
- async getProviders(linkToken: string): Promise<ProviderSummary[]> {
319
- log.info('GET /link/providers');
320
- return this.withRetry(async (signal) => {
321
- const res = await this.fetchImpl(this.url('/link/providers'), {
322
- method: 'GET',
323
- headers: this.headers(linkToken),
324
- signal,
325
- });
326
- return this.parseAndHandle(res, mapProvidersResponse, 'providers');
327
- });
328
- }
329
-
330
- /** `POST /link/telemetry` — device/risk signals (best-effort). */
331
- async postTelemetry(args: {
332
- linkToken: string;
333
- payload: Record<string, unknown>;
334
- }): Promise<TelemetryResponse> {
335
- log.info('POST /link/telemetry');
336
- return this.withRetry(async (signal) => {
337
- const res = await this.fetchImpl(this.url('/link/telemetry'), {
338
- method: 'POST',
339
- headers: this.headers(args.linkToken),
340
- body: JSON.stringify(args.payload),
341
- signal,
342
- });
343
- return this.parseAndHandle(res, mapTelemetryResponse, 'telemetry');
344
- });
345
- }
346
-
347
- /** `GET /link/cop` — Confirmation of Payee. Accepts an optional providerId override. */
348
- async getConfirmPayee(linkToken: string, providerId?: string): Promise<CopResponse> {
349
- log.info(`GET /link/cop${providerId ? ` (providerId: ${providerId})` : ''}`);
350
- return this.withRetry(async (signal) => {
351
- const path = providerId
352
- ? `/link/cop?providerId=${encodeURIComponent(providerId)}`
353
- : '/link/cop';
354
- const res = await this.fetchImpl(this.url(path), {
355
- method: 'GET',
356
- headers: this.headers(linkToken),
357
- signal,
358
- });
359
- return this.parseAndHandle(res, mapCopResponse, 'cop');
360
- });
361
- }
362
-
363
- /**
364
- * `POST /link/consent` — creates a consent and returns the bank redirect URL.
365
- *
366
- * NEVER retried — the Idempotency-Key header guarantees safe retries at the
367
- * caller level if they re-invoke with the SAME key.
368
- */
369
- async postConsent(args: {
370
- linkToken: string;
371
- bankId?: string;
372
- idempotencyKey?: string;
373
- }): Promise<ConsentResponse> {
374
- const key = args.idempotencyKey ?? this.uuid();
375
- log.info(`POST /link/consent (bankId: ${args.bankId ?? 'n/a'}, idempotencyKey: ${key})`);
376
- return this.withTimeout(async (signal) => {
377
- const body = args.bankId ? JSON.stringify({ provider_id: args.bankId }) : '{}';
378
- const res = await this.fetchImpl(this.url('/link/consent'), {
379
- method: 'POST',
380
- headers: this.headers(args.linkToken, { 'Idempotency-Key': key }),
381
- body,
382
- signal,
383
- });
384
- return this.parseAndHandle(res, mapConsentResponse, 'consent');
385
- });
386
- }
387
-
388
- /** `PATCH /link` — cancel or report an error on the session. */
389
- async patchToken(args: {
390
- linkToken: string;
391
- action: 'cancel' | 'error';
392
- errorCode?: string;
393
- }): Promise<PatchTokenResponse> {
394
- log.info(`PATCH /link (action: ${args.action}, errorCode: ${args.errorCode ?? 'n/a'})`);
395
- return this.withRetry(async (signal) => {
396
- const body: { action: string; code?: string; source?: string } = { action: args.action };
397
- if (args.errorCode) body.code = args.errorCode;
398
- // Tag SDK-originated error reports so the backend can distinguish them
399
- // from hosted/provider-return reports in its dashboards.
400
- if (args.action === 'error') body.source = 'sdk';
401
- const res = await this.fetchImpl(this.url('/link'), {
402
- method: 'PATCH',
403
- headers: this.headers(args.linkToken),
404
- body: JSON.stringify(body),
405
- signal,
406
- });
407
- return this.parseAndHandle(res, mapPatchTokenResponse, 'patch_token');
408
- });
409
- }
410
- }
411
-
412
- function delay(ms: number): Promise<void> {
413
- return new Promise((resolve) => setTimeout(resolve, ms));
414
- }
@@ -1,35 +0,0 @@
1
- /**
2
- * Errors emitted by the SDK's API client.
3
- *
4
- * The `code` field is stable wire-of-record for merchant analytics/logging.
5
- * The `message` field is intentionally generic and safe to display to end users.
6
- */
7
- export class PaymentApiError extends Error {
8
- readonly code: string;
9
-
10
- constructor(code: string, message: string) {
11
- super(message);
12
- this.name = 'PaymentApiError';
13
- this.code = code;
14
- // Preserve the prototype chain across compile targets.
15
- Object.setPrototypeOf(this, PaymentApiError.prototype);
16
- }
17
-
18
- override toString(): string {
19
- return `PaymentApiError(${this.code}): ${this.message}`;
20
- }
21
-
22
- static sessionExpired(): PaymentApiError {
23
- return new PaymentApiError('session_expired', 'The payment session has expired.');
24
- }
25
- }
26
-
27
- /** Type guard so consumers can narrow without instanceof. */
28
- export function isPaymentApiError(err: unknown): err is PaymentApiError {
29
- return (
30
- err instanceof PaymentApiError ||
31
- (typeof err === 'object' &&
32
- err !== null &&
33
- (err as { name?: string }).name === 'PaymentApiError')
34
- );
35
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * `/link/status` values where the bank has returned but settlement may still be
3
- * pending. `redirected` only means consent was posted — not bank authorization.
4
- */
5
- export function isBankCallbackReceivedStatus(status: string): boolean {
6
- return status === 'callback_received';
7
- }
@@ -1,54 +0,0 @@
1
- import type { CreatePaymentRequestInput } from './index';
2
-
3
- export enum PaymentType {
4
- singleInstantPayment = 'SingleInstantPayment',
5
- fixedDefinedSchedule = 'FixedDefinedSchedule',
6
- variableDefinedSchedule = 'VariableDefinedSchedule',
7
- fixedPeriodicSchedule = 'FixedPeriodicSchedule',
8
- variablePeriodicSchedule = 'VariablePeriodicSchedule',
9
- fixedOnDemand = 'FixedOnDemand',
10
- variableOnDemand = 'VariableOnDemand',
11
- internationalPayment = 'InternationalPayment',
12
- }
13
-
14
- export type ConsentUiVariant = 'singlePayment' | 'international' | 'multiPayment';
15
-
16
- const MANDATE_TYPES = new Set<string>([
17
- PaymentType.fixedDefinedSchedule,
18
- PaymentType.variableDefinedSchedule,
19
- PaymentType.fixedPeriodicSchedule,
20
- PaymentType.variablePeriodicSchedule,
21
- PaymentType.fixedOnDemand,
22
- PaymentType.variableOnDemand,
23
- ]);
24
-
25
- export function resolvedPaymentType(request: CreatePaymentRequestInput): PaymentType {
26
- const t = request.type;
27
- if (Object.values(PaymentType).includes(t as PaymentType)) {
28
- return t as PaymentType;
29
- }
30
- return PaymentType.singleInstantPayment;
31
- }
32
-
33
- export function isMultiPayment(request: CreatePaymentRequestInput): boolean {
34
- return MANDATE_TYPES.has(request.type);
35
- }
36
-
37
- export function isInternational(request: CreatePaymentRequestInput): boolean {
38
- return (
39
- request.instructions.isInternationalPayment === true ||
40
- resolvedPaymentType(request) === PaymentType.internationalPayment
41
- );
42
- }
43
-
44
- export function supportsConfirmationOfPayee(request: CreatePaymentRequestInput): boolean {
45
- return (
46
- resolvedPaymentType(request) === PaymentType.singleInstantPayment && !isInternational(request)
47
- );
48
- }
49
-
50
- export function consentUiVariant(request: CreatePaymentRequestInput): ConsentUiVariant {
51
- if (isMultiPayment(request)) return 'multiPayment';
52
- if (isInternational(request)) return 'international';
53
- return 'singlePayment';
54
- }