@spare-technologies/spare-link 0.1.0-beta.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -63
- package/lib/commonjs/core/models/payment-return-params.js +245 -20
- package/lib/commonjs/core/models/payment-return-params.js.map +1 -1
- package/lib/commonjs/core/models/pending-session-record.js +2 -0
- package/lib/commonjs/core/models/pending-session-record.js.map +1 -0
- package/lib/commonjs/core/services/hosted-flow-controller.js +333 -0
- package/lib/commonjs/core/services/hosted-flow-controller.js.map +1 -0
- package/lib/commonjs/core/services/hosted-flow-state.js +96 -0
- package/lib/commonjs/core/services/hosted-flow-state.js.map +1 -0
- package/lib/commonjs/index.js +42 -164
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/internal/bank-redirect.js +20 -9
- package/lib/commonjs/internal/bank-redirect.js.map +1 -1
- package/lib/commonjs/internal/hosted/bridge-message.js +107 -0
- package/lib/commonjs/internal/hosted/bridge-message.js.map +1 -0
- package/lib/commonjs/internal/hosted/hosted-url.js +41 -0
- package/lib/commonjs/internal/hosted/hosted-url.js.map +1 -0
- package/lib/commonjs/internal/index.js +0 -7
- package/lib/commonjs/internal/index.js.map +1 -1
- package/lib/commonjs/internal/redact-uri.js +59 -15
- package/lib/commonjs/internal/redact-uri.js.map +1 -1
- package/lib/commonjs/internal/secure-store-pending-session-store.js +20 -25
- package/lib/commonjs/internal/secure-store-pending-session-store.js.map +1 -1
- package/lib/commonjs/internal/url-parts.js +145 -0
- package/lib/commonjs/internal/url-parts.js.map +1 -0
- package/lib/commonjs/public/index.js +0 -37
- package/lib/commonjs/public/index.js.map +1 -1
- package/lib/commonjs/public/payment-result.js +16 -4
- package/lib/commonjs/public/payment-result.js.map +1 -1
- package/lib/commonjs/public/recovery-result.js +7 -18
- package/lib/commonjs/public/recovery-result.js.map +1 -1
- package/lib/commonjs/public/spare-link-config.js +41 -16
- package/lib/commonjs/public/spare-link-config.js.map +1 -1
- package/lib/commonjs/public/spare-link-event.js +27 -33
- package/lib/commonjs/public/spare-link-event.js.map +1 -1
- package/lib/commonjs/public/spare-link-instance.js +67 -77
- package/lib/commonjs/public/spare-link-instance.js.map +1 -1
- package/lib/commonjs/public/spare-link-session.js +2 -9
- package/lib/commonjs/public/spare-link-session.js.map +1 -1
- package/lib/commonjs/public/spare-link.js +0 -12
- package/lib/commonjs/public/spare-link.js.map +1 -1
- package/lib/commonjs/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +4 -4
- package/lib/commonjs/ui/hooks/use-hosted-flow-state.js.map +1 -0
- package/lib/commonjs/ui/hosted/hosted-payment-page.js +177 -0
- package/lib/commonjs/ui/hosted/hosted-payment-page.js.map +1 -0
- package/lib/commonjs/ui/hosted/hosted-payment-webview.js +168 -0
- package/lib/commonjs/ui/hosted/hosted-payment-webview.js.map +1 -0
- package/lib/commonjs/ui/screens/index.js +3 -17
- package/lib/commonjs/ui/screens/index.js.map +1 -1
- package/lib/commonjs/ui/screens/page-unavailable-screen.js +101 -0
- package/lib/commonjs/ui/screens/page-unavailable-screen.js.map +1 -0
- package/lib/commonjs/ui/spare-link-host.js +220 -234
- package/lib/commonjs/ui/spare-link-host.js.map +1 -1
- package/lib/commonjs/ui/widgets/index.js +3 -10
- package/lib/commonjs/ui/widgets/index.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/core/models/payment-return-params.js +235 -20
- package/lib/module/core/models/payment-return-params.js.map +1 -1
- package/lib/module/core/models/pending-session-record.js +2 -0
- package/lib/module/core/models/pending-session-record.js.map +1 -0
- package/lib/module/core/services/hosted-flow-controller.js +328 -0
- package/lib/module/core/services/hosted-flow-controller.js.map +1 -0
- package/lib/module/core/services/hosted-flow-state.js +91 -0
- package/lib/module/core/services/hosted-flow-state.js.map +1 -0
- package/lib/module/index.js +8 -22
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal/bank-redirect.js +20 -9
- package/lib/module/internal/bank-redirect.js.map +1 -1
- package/lib/module/internal/hosted/bridge-message.js +104 -0
- package/lib/module/internal/hosted/bridge-message.js.map +1 -0
- package/lib/module/internal/hosted/hosted-url.js +36 -0
- package/lib/module/internal/hosted/hosted-url.js.map +1 -0
- package/lib/module/internal/index.js +0 -1
- package/lib/module/internal/index.js.map +1 -1
- package/lib/module/internal/redact-uri.js +59 -15
- package/lib/module/internal/redact-uri.js.map +1 -1
- package/lib/module/internal/secure-store-pending-session-store.js +20 -25
- package/lib/module/internal/secure-store-pending-session-store.js.map +1 -1
- package/lib/module/internal/url-parts.js +139 -0
- package/lib/module/internal/url-parts.js.map +1 -0
- package/lib/module/public/index.js +2 -3
- package/lib/module/public/index.js.map +1 -1
- package/lib/module/public/payment-result.js +16 -4
- package/lib/module/public/payment-result.js.map +1 -1
- package/lib/module/public/recovery-result.js +7 -17
- package/lib/module/public/recovery-result.js.map +1 -1
- package/lib/module/public/spare-link-config.js +42 -15
- package/lib/module/public/spare-link-config.js.map +1 -1
- package/lib/module/public/spare-link-event.js +27 -33
- package/lib/module/public/spare-link-event.js.map +1 -1
- package/lib/module/public/spare-link-instance.js +68 -72
- package/lib/module/public/spare-link-instance.js.map +1 -1
- package/lib/module/public/spare-link-session.js +2 -9
- package/lib/module/public/spare-link-session.js.map +1 -1
- package/lib/module/public/spare-link.js +1 -1
- package/lib/module/public/spare-link.js.map +1 -1
- package/lib/module/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +3 -3
- package/lib/module/ui/hooks/use-hosted-flow-state.js.map +1 -0
- package/lib/module/ui/hosted/hosted-payment-page.js +175 -0
- package/lib/module/ui/hosted/hosted-payment-page.js.map +1 -0
- package/lib/module/ui/hosted/hosted-payment-webview.js +163 -0
- package/lib/module/ui/hosted/hosted-payment-webview.js.map +1 -0
- package/lib/module/ui/screens/index.js +1 -3
- package/lib/module/ui/screens/index.js.map +1 -1
- package/lib/module/ui/screens/page-unavailable-screen.js +97 -0
- package/lib/module/ui/screens/page-unavailable-screen.js.map +1 -0
- package/lib/module/ui/spare-link-host.js +221 -236
- package/lib/module/ui/spare-link-host.js.map +1 -1
- package/lib/module/ui/widgets/index.js +1 -2
- package/lib/module/ui/widgets/index.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/commonjs/core/models/index.d.ts +1 -123
- package/lib/typescript/commonjs/core/models/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/core/models/payment-return-params.d.ts +91 -8
- package/lib/typescript/commonjs/core/models/payment-return-params.d.ts.map +1 -1
- package/lib/typescript/commonjs/core/models/pending-session-record.d.ts +11 -0
- package/lib/typescript/commonjs/core/models/pending-session-record.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts +119 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts +75 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +5 -14
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/bank-redirect.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts +44 -0
- package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts.map +1 -0
- package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts +30 -0
- package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts.map +1 -0
- package/lib/typescript/commonjs/internal/index.d.ts +0 -1
- package/lib/typescript/commonjs/internal/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/redact-uri.d.ts +21 -1
- package/lib/typescript/commonjs/internal/redact-uri.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts +3 -2
- package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/url-parts.d.ts +46 -0
- package/lib/typescript/commonjs/internal/url-parts.d.ts.map +1 -0
- package/lib/typescript/commonjs/public/index.d.ts +4 -6
- package/lib/typescript/commonjs/public/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/payment-result.d.ts +50 -12
- package/lib/typescript/commonjs/public/payment-result.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/recovery-result.d.ts +11 -20
- package/lib/typescript/commonjs/public/recovery-result.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-config.d.ts +13 -31
- package/lib/typescript/commonjs/public/spare-link-config.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-event.d.ts +29 -31
- package/lib/typescript/commonjs/public/spare-link-event.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-host-api.d.ts +1 -12
- package/lib/typescript/commonjs/public/spare-link-host-api.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-instance.d.ts +26 -20
- package/lib/typescript/commonjs/public/spare-link-instance.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-session.d.ts +3 -8
- package/lib/typescript/commonjs/public/spare-link-session.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link.d.ts +1 -1
- package/lib/typescript/commonjs/public/spare-link.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts +9 -0
- package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts +17 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts +43 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/index.d.ts +1 -3
- package/lib/typescript/commonjs/ui/screens/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts +18 -0
- package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/spare-link-host.d.ts +4 -5
- package/lib/typescript/commonjs/ui/spare-link-host.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/widgets/index.d.ts +1 -2
- package/lib/typescript/commonjs/ui/widgets/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/commonjs/version.d.ts.map +1 -1
- package/lib/typescript/module/core/models/index.d.ts +1 -123
- package/lib/typescript/module/core/models/index.d.ts.map +1 -1
- package/lib/typescript/module/core/models/payment-return-params.d.ts +91 -8
- package/lib/typescript/module/core/models/payment-return-params.d.ts.map +1 -1
- package/lib/typescript/module/core/models/pending-session-record.d.ts +11 -0
- package/lib/typescript/module/core/models/pending-session-record.d.ts.map +1 -0
- package/lib/typescript/module/core/services/hosted-flow-controller.d.ts +119 -0
- package/lib/typescript/module/core/services/hosted-flow-controller.d.ts.map +1 -0
- package/lib/typescript/module/core/services/hosted-flow-state.d.ts +75 -0
- package/lib/typescript/module/core/services/hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +5 -14
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/internal/bank-redirect.d.ts.map +1 -1
- package/lib/typescript/module/internal/hosted/bridge-message.d.ts +44 -0
- package/lib/typescript/module/internal/hosted/bridge-message.d.ts.map +1 -0
- package/lib/typescript/module/internal/hosted/hosted-url.d.ts +30 -0
- package/lib/typescript/module/internal/hosted/hosted-url.d.ts.map +1 -0
- package/lib/typescript/module/internal/index.d.ts +0 -1
- package/lib/typescript/module/internal/index.d.ts.map +1 -1
- package/lib/typescript/module/internal/redact-uri.d.ts +21 -1
- package/lib/typescript/module/internal/redact-uri.d.ts.map +1 -1
- package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts +3 -2
- package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts.map +1 -1
- package/lib/typescript/module/internal/url-parts.d.ts +46 -0
- package/lib/typescript/module/internal/url-parts.d.ts.map +1 -0
- package/lib/typescript/module/public/index.d.ts +4 -6
- package/lib/typescript/module/public/index.d.ts.map +1 -1
- package/lib/typescript/module/public/payment-result.d.ts +50 -12
- package/lib/typescript/module/public/payment-result.d.ts.map +1 -1
- package/lib/typescript/module/public/recovery-result.d.ts +11 -20
- package/lib/typescript/module/public/recovery-result.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-config.d.ts +13 -31
- package/lib/typescript/module/public/spare-link-config.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-event.d.ts +29 -31
- package/lib/typescript/module/public/spare-link-event.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-host-api.d.ts +1 -12
- package/lib/typescript/module/public/spare-link-host-api.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-instance.d.ts +26 -20
- package/lib/typescript/module/public/spare-link-instance.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-session.d.ts +3 -8
- package/lib/typescript/module/public/spare-link-session.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link.d.ts +1 -1
- package/lib/typescript/module/public/spare-link.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts +9 -0
- package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts +17 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts.map +1 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts +43 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/index.d.ts +1 -3
- package/lib/typescript/module/ui/screens/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts +18 -0
- package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts.map +1 -0
- package/lib/typescript/module/ui/spare-link-host.d.ts +4 -5
- package/lib/typescript/module/ui/spare-link-host.d.ts.map +1 -1
- package/lib/typescript/module/ui/widgets/index.d.ts +1 -2
- package/lib/typescript/module/ui/widgets/index.d.ts.map +1 -1
- package/lib/typescript/module/version.d.ts +1 -1
- package/lib/typescript/module/version.d.ts.map +1 -1
- package/package.json +24 -22
- package/plugins/with-spare-link.js +6 -26
- package/src/core/models/index.ts +1 -139
- package/src/core/models/payment-return-params.ts +269 -21
- package/src/core/models/pending-session-record.ts +10 -0
- package/src/core/services/hosted-flow-controller.ts +374 -0
- package/src/core/services/hosted-flow-state.ts +123 -0
- package/src/index.ts +20 -89
- package/src/internal/bank-redirect.ts +23 -9
- package/src/internal/hosted/bridge-message.ts +106 -0
- package/src/internal/hosted/hosted-url.ts +33 -0
- package/src/internal/index.ts +0 -1
- package/src/internal/redact-uri.ts +69 -15
- package/src/internal/secure-store-pending-session-store.ts +28 -49
- package/src/internal/url-parts.ts +134 -0
- package/src/public/index.ts +2 -24
- package/src/public/payment-result.ts +50 -12
- package/src/public/recovery-result.ts +16 -25
- package/src/public/spare-link-config.ts +56 -43
- package/src/public/spare-link-event.ts +33 -42
- package/src/public/spare-link-host-api.ts +1 -14
- package/src/public/spare-link-instance.ts +57 -65
- package/src/public/spare-link-session.ts +4 -16
- package/src/public/spare-link.ts +1 -1
- package/src/ui/hooks/use-hosted-flow-state.ts +16 -0
- package/src/ui/hosted/hosted-payment-page.tsx +178 -0
- package/src/ui/hosted/hosted-payment-webview.tsx +164 -0
- package/src/ui/screens/index.ts +4 -6
- package/src/ui/screens/page-unavailable-screen.tsx +94 -0
- package/src/ui/spare-link-host.tsx +227 -247
- package/src/ui/widgets/index.ts +1 -2
- package/src/version.ts +1 -1
- package/CHANGELOG.md +0 -25
- package/lib/commonjs/core/client/link-api-client.js +0 -297
- package/lib/commonjs/core/client/link-api-client.js.map +0 -1
- package/lib/commonjs/core/errors/payment-api-error.js +0 -35
- package/lib/commonjs/core/errors/payment-api-error.js.map +0 -1
- package/lib/commonjs/core/models/link-session-status.js +0 -14
- package/lib/commonjs/core/models/link-session-status.js.map +0 -1
- package/lib/commonjs/core/models/payment-type.js +0 -45
- package/lib/commonjs/core/models/payment-type.js.map +0 -1
- package/lib/commonjs/core/models/wire-mappers.js +0 -277
- package/lib/commonjs/core/models/wire-mappers.js.map +0 -1
- package/lib/commonjs/core/services/consent-presenter.js +0 -150
- package/lib/commonjs/core/services/consent-presenter.js.map +0 -1
- package/lib/commonjs/core/services/execute-resume-if-needed.js +0 -216
- package/lib/commonjs/core/services/execute-resume-if-needed.js.map +0 -1
- package/lib/commonjs/core/services/multi-payment-rules-presenter.js +0 -151
- package/lib/commonjs/core/services/multi-payment-rules-presenter.js.map +0 -1
- package/lib/commonjs/core/services/payment-flow-controller.js +0 -547
- package/lib/commonjs/core/services/payment-flow-controller.js.map +0 -1
- package/lib/commonjs/core/services/payment-flow-state.js +0 -110
- package/lib/commonjs/core/services/payment-flow-state.js.map +0 -1
- package/lib/commonjs/core/services/payment-result-mapper.js +0 -49
- package/lib/commonjs/core/services/payment-result-mapper.js.map +0 -1
- package/lib/commonjs/core/services/presentation-utils.js +0 -11
- package/lib/commonjs/core/services/presentation-utils.js.map +0 -1
- package/lib/commonjs/core/services/redirect-buffer.js +0 -40
- package/lib/commonjs/core/services/redirect-buffer.js.map +0 -1
- package/lib/commonjs/core/services/user-friendly-messages.js +0 -46
- package/lib/commonjs/core/services/user-friendly-messages.js.map +0 -1
- package/lib/commonjs/internal/telemetry-collector.js +0 -80
- package/lib/commonjs/internal/telemetry-collector.js.map +0 -1
- package/lib/commonjs/public/constants.js +0 -21
- package/lib/commonjs/public/constants.js.map +0 -1
- package/lib/commonjs/public/spare-link-callbacks.js +0 -6
- package/lib/commonjs/public/spare-link-callbacks.js.map +0 -1
- package/lib/commonjs/ui/consent/charge-bearer-display.js +0 -99
- package/lib/commonjs/ui/consent/charge-bearer-display.js.map +0 -1
- package/lib/commonjs/ui/consent/consent-accordion.js +0 -94
- package/lib/commonjs/ui/consent/consent-accordion.js.map +0 -1
- package/lib/commonjs/ui/consent/consent-summary-section.js +0 -27
- package/lib/commonjs/ui/consent/consent-summary-section.js.map +0 -1
- package/lib/commonjs/ui/consent/cop-information.js +0 -168
- package/lib/commonjs/ui/consent/cop-information.js.map +0 -1
- package/lib/commonjs/ui/consent/international-payment-summary.js +0 -98
- package/lib/commonjs/ui/consent/international-payment-summary.js.map +0 -1
- package/lib/commonjs/ui/consent/label-value-rows.js +0 -59
- package/lib/commonjs/ui/consent/label-value-rows.js.map +0 -1
- package/lib/commonjs/ui/consent/multi-payment-rules-list.js +0 -130
- package/lib/commonjs/ui/consent/multi-payment-rules-list.js.map +0 -1
- package/lib/commonjs/ui/consent/multi-payment-summary.js +0 -99
- package/lib/commonjs/ui/consent/multi-payment-summary.js.map +0 -1
- package/lib/commonjs/ui/consent/single-payment-summary.js +0 -158
- package/lib/commonjs/ui/consent/single-payment-summary.js.map +0 -1
- package/lib/commonjs/ui/consent/terms-link.js +0 -35
- package/lib/commonjs/ui/consent/terms-link.js.map +0 -1
- package/lib/commonjs/ui/hooks/use-payment-flow-state.js.map +0 -1
- package/lib/commonjs/ui/payment-flow-page.js +0 -235
- package/lib/commonjs/ui/payment-flow-page.js.map +0 -1
- package/lib/commonjs/ui/screens/bank-selection-screen.js +0 -215
- package/lib/commonjs/ui/screens/bank-selection-screen.js.map +0 -1
- package/lib/commonjs/ui/screens/consent-details-screen.js +0 -124
- package/lib/commonjs/ui/screens/consent-details-screen.js.map +0 -1
- package/lib/commonjs/ui/screens/mandate-setup-success-screen.js +0 -79
- package/lib/commonjs/ui/screens/mandate-setup-success-screen.js.map +0 -1
- package/lib/commonjs/ui/widgets/layout-w-header.js +0 -106
- package/lib/commonjs/ui/widgets/layout-w-header.js.map +0 -1
- package/lib/commonjs/ui/widgets/stepper.js +0 -124
- package/lib/commonjs/ui/widgets/stepper.js.map +0 -1
- package/lib/module/core/client/link-api-client.js +0 -292
- package/lib/module/core/client/link-api-client.js.map +0 -1
- package/lib/module/core/errors/payment-api-error.js +0 -29
- package/lib/module/core/errors/payment-api-error.js.map +0 -1
- package/lib/module/core/models/link-session-status.js +0 -10
- package/lib/module/core/models/link-session-status.js.map +0 -1
- package/lib/module/core/models/payment-type.js +0 -36
- package/lib/module/core/models/payment-type.js.map +0 -1
- package/lib/module/core/models/wire-mappers.js +0 -263
- package/lib/module/core/models/wire-mappers.js.map +0 -1
- package/lib/module/core/services/consent-presenter.js +0 -140
- package/lib/module/core/services/consent-presenter.js.map +0 -1
- package/lib/module/core/services/execute-resume-if-needed.js +0 -211
- package/lib/module/core/services/execute-resume-if-needed.js.map +0 -1
- package/lib/module/core/services/multi-payment-rules-presenter.js +0 -146
- package/lib/module/core/services/multi-payment-rules-presenter.js.map +0 -1
- package/lib/module/core/services/payment-flow-controller.js +0 -544
- package/lib/module/core/services/payment-flow-controller.js.map +0 -1
- package/lib/module/core/services/payment-flow-state.js +0 -106
- package/lib/module/core/services/payment-flow-state.js.map +0 -1
- package/lib/module/core/services/payment-result-mapper.js +0 -45
- package/lib/module/core/services/payment-result-mapper.js.map +0 -1
- package/lib/module/core/services/presentation-utils.js +0 -7
- package/lib/module/core/services/presentation-utils.js.map +0 -1
- package/lib/module/core/services/redirect-buffer.js +0 -33
- package/lib/module/core/services/redirect-buffer.js.map +0 -1
- package/lib/module/core/services/user-friendly-messages.js +0 -42
- package/lib/module/core/services/user-friendly-messages.js.map +0 -1
- package/lib/module/internal/telemetry-collector.js +0 -75
- package/lib/module/internal/telemetry-collector.js.map +0 -1
- package/lib/module/public/constants.js +0 -17
- package/lib/module/public/constants.js.map +0 -1
- package/lib/module/public/spare-link-callbacks.js +0 -4
- package/lib/module/public/spare-link-callbacks.js.map +0 -1
- package/lib/module/ui/consent/charge-bearer-display.js +0 -95
- package/lib/module/ui/consent/charge-bearer-display.js.map +0 -1
- package/lib/module/ui/consent/consent-accordion.js +0 -90
- package/lib/module/ui/consent/consent-accordion.js.map +0 -1
- package/lib/module/ui/consent/consent-summary-section.js +0 -23
- package/lib/module/ui/consent/consent-summary-section.js.map +0 -1
- package/lib/module/ui/consent/cop-information.js +0 -165
- package/lib/module/ui/consent/cop-information.js.map +0 -1
- package/lib/module/ui/consent/international-payment-summary.js +0 -94
- package/lib/module/ui/consent/international-payment-summary.js.map +0 -1
- package/lib/module/ui/consent/label-value-rows.js +0 -55
- package/lib/module/ui/consent/label-value-rows.js.map +0 -1
- package/lib/module/ui/consent/multi-payment-rules-list.js +0 -125
- package/lib/module/ui/consent/multi-payment-rules-list.js.map +0 -1
- package/lib/module/ui/consent/multi-payment-summary.js +0 -95
- package/lib/module/ui/consent/multi-payment-summary.js.map +0 -1
- package/lib/module/ui/consent/single-payment-summary.js +0 -154
- package/lib/module/ui/consent/single-payment-summary.js.map +0 -1
- package/lib/module/ui/consent/terms-link.js +0 -31
- package/lib/module/ui/consent/terms-link.js.map +0 -1
- package/lib/module/ui/hooks/use-payment-flow-state.js.map +0 -1
- package/lib/module/ui/payment-flow-page.js +0 -232
- package/lib/module/ui/payment-flow-page.js.map +0 -1
- package/lib/module/ui/screens/bank-selection-screen.js +0 -211
- package/lib/module/ui/screens/bank-selection-screen.js.map +0 -1
- package/lib/module/ui/screens/consent-details-screen.js +0 -120
- package/lib/module/ui/screens/consent-details-screen.js.map +0 -1
- package/lib/module/ui/screens/mandate-setup-success-screen.js +0 -75
- package/lib/module/ui/screens/mandate-setup-success-screen.js.map +0 -1
- package/lib/module/ui/widgets/layout-w-header.js +0 -102
- package/lib/module/ui/widgets/layout-w-header.js.map +0 -1
- package/lib/module/ui/widgets/stepper.js +0 -120
- package/lib/module/ui/widgets/stepper.js.map +0 -1
- package/lib/typescript/commonjs/core/client/link-api-client.d.ts +0 -70
- package/lib/typescript/commonjs/core/client/link-api-client.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts +0 -15
- package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/models/link-session-status.d.ts +0 -6
- package/lib/typescript/commonjs/core/models/link-session-status.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/models/payment-type.d.ts +0 -18
- package/lib/typescript/commonjs/core/models/payment-type.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/models/wire-mappers.d.ts +0 -19
- package/lib/typescript/commonjs/core/models/wire-mappers.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/consent-presenter.d.ts +0 -67
- package/lib/typescript/commonjs/core/services/consent-presenter.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts +0 -32
- package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts +0 -9
- package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts +0 -146
- package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts +0 -64
- package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts +0 -5
- package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/presentation-utils.d.ts +0 -5
- package/lib/typescript/commonjs/core/services/presentation-utils.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts +0 -6
- package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts +0 -6
- package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts.map +0 -1
- package/lib/typescript/commonjs/internal/telemetry-collector.d.ts +0 -2
- package/lib/typescript/commonjs/internal/telemetry-collector.d.ts.map +0 -1
- package/lib/typescript/commonjs/public/constants.d.ts +0 -12
- package/lib/typescript/commonjs/public/constants.d.ts.map +0 -1
- package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts +0 -14
- package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts +0 -5
- package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts +0 -10
- package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/cop-information.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/cop-information.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts +0 -10
- package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts +0 -15
- package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/terms-link.d.ts +0 -2
- package/lib/typescript/commonjs/ui/consent/terms-link.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts +0 -9
- package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/payment-flow-page.d.ts +0 -20
- package/lib/typescript/commonjs/ui/payment-flow-page.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts +0 -15
- package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts +0 -13
- package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts +0 -10
- package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts +0 -20
- package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/widgets/stepper.d.ts +0 -15
- package/lib/typescript/commonjs/ui/widgets/stepper.d.ts.map +0 -1
- package/lib/typescript/module/core/client/link-api-client.d.ts +0 -70
- package/lib/typescript/module/core/client/link-api-client.d.ts.map +0 -1
- package/lib/typescript/module/core/errors/payment-api-error.d.ts +0 -15
- package/lib/typescript/module/core/errors/payment-api-error.d.ts.map +0 -1
- package/lib/typescript/module/core/models/link-session-status.d.ts +0 -6
- package/lib/typescript/module/core/models/link-session-status.d.ts.map +0 -1
- package/lib/typescript/module/core/models/payment-type.d.ts +0 -18
- package/lib/typescript/module/core/models/payment-type.d.ts.map +0 -1
- package/lib/typescript/module/core/models/wire-mappers.d.ts +0 -19
- package/lib/typescript/module/core/models/wire-mappers.d.ts.map +0 -1
- package/lib/typescript/module/core/services/consent-presenter.d.ts +0 -67
- package/lib/typescript/module/core/services/consent-presenter.d.ts.map +0 -1
- package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts +0 -32
- package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts.map +0 -1
- package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts +0 -9
- package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
- package/lib/typescript/module/core/services/payment-flow-controller.d.ts +0 -146
- package/lib/typescript/module/core/services/payment-flow-controller.d.ts.map +0 -1
- package/lib/typescript/module/core/services/payment-flow-state.d.ts +0 -64
- package/lib/typescript/module/core/services/payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/module/core/services/payment-result-mapper.d.ts +0 -5
- package/lib/typescript/module/core/services/payment-result-mapper.d.ts.map +0 -1
- package/lib/typescript/module/core/services/presentation-utils.d.ts +0 -5
- package/lib/typescript/module/core/services/presentation-utils.d.ts.map +0 -1
- package/lib/typescript/module/core/services/redirect-buffer.d.ts +0 -6
- package/lib/typescript/module/core/services/redirect-buffer.d.ts.map +0 -1
- package/lib/typescript/module/core/services/user-friendly-messages.d.ts +0 -6
- package/lib/typescript/module/core/services/user-friendly-messages.d.ts.map +0 -1
- package/lib/typescript/module/internal/telemetry-collector.d.ts +0 -2
- package/lib/typescript/module/internal/telemetry-collector.d.ts.map +0 -1
- package/lib/typescript/module/public/constants.d.ts +0 -12
- package/lib/typescript/module/public/constants.d.ts.map +0 -1
- package/lib/typescript/module/public/spare-link-callbacks.d.ts +0 -14
- package/lib/typescript/module/public/spare-link-callbacks.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts +0 -5
- package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/consent-accordion.d.ts +0 -10
- package/lib/typescript/module/ui/consent/consent-accordion.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/consent-summary-section.d.ts +0 -6
- package/lib/typescript/module/ui/consent/consent-summary-section.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/cop-information.d.ts +0 -6
- package/lib/typescript/module/ui/consent/cop-information.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/international-payment-summary.d.ts +0 -6
- package/lib/typescript/module/ui/consent/international-payment-summary.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/label-value-rows.d.ts +0 -10
- package/lib/typescript/module/ui/consent/label-value-rows.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts +0 -15
- package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts +0 -6
- package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/single-payment-summary.d.ts +0 -6
- package/lib/typescript/module/ui/consent/single-payment-summary.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/terms-link.d.ts +0 -2
- package/lib/typescript/module/ui/consent/terms-link.d.ts.map +0 -1
- package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts +0 -9
- package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/module/ui/payment-flow-page.d.ts +0 -20
- package/lib/typescript/module/ui/payment-flow-page.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts +0 -15
- package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/consent-details-screen.d.ts +0 -13
- package/lib/typescript/module/ui/screens/consent-details-screen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts +0 -10
- package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
- package/lib/typescript/module/ui/widgets/layout-w-header.d.ts +0 -20
- package/lib/typescript/module/ui/widgets/layout-w-header.d.ts.map +0 -1
- package/lib/typescript/module/ui/widgets/stepper.d.ts +0 -15
- package/lib/typescript/module/ui/widgets/stepper.d.ts.map +0 -1
- package/src/core/client/link-api-client.ts +0 -414
- package/src/core/errors/payment-api-error.ts +0 -35
- package/src/core/models/link-session-status.ts +0 -7
- package/src/core/models/payment-type.ts +0 -54
- package/src/core/models/wire-mappers.ts +0 -315
- package/src/core/services/consent-presenter.ts +0 -213
- package/src/core/services/execute-resume-if-needed.ts +0 -243
- package/src/core/services/multi-payment-rules-presenter.ts +0 -158
- package/src/core/services/payment-flow-controller.ts +0 -607
- package/src/core/services/payment-flow-state.ts +0 -124
- package/src/core/services/payment-result-mapper.ts +0 -41
- package/src/core/services/presentation-utils.ts +0 -4
- package/src/core/services/redirect-buffer.ts +0 -34
- package/src/core/services/user-friendly-messages.ts +0 -39
- package/src/internal/telemetry-collector.ts +0 -90
- package/src/public/constants.ts +0 -14
- package/src/public/spare-link-callbacks.ts +0 -20
- package/src/ui/consent/charge-bearer-display.tsx +0 -68
- package/src/ui/consent/consent-accordion.tsx +0 -89
- package/src/ui/consent/consent-summary-section.tsx +0 -19
- package/src/ui/consent/cop-information.tsx +0 -121
- package/src/ui/consent/international-payment-summary.tsx +0 -83
- package/src/ui/consent/label-value-rows.tsx +0 -50
- package/src/ui/consent/multi-payment-rules-list.tsx +0 -138
- package/src/ui/consent/multi-payment-summary.tsx +0 -82
- package/src/ui/consent/single-payment-summary.tsx +0 -123
- package/src/ui/consent/terms-link.tsx +0 -27
- package/src/ui/hooks/use-payment-flow-state.ts +0 -16
- package/src/ui/payment-flow-page.tsx +0 -254
- package/src/ui/screens/bank-selection-screen.tsx +0 -209
- package/src/ui/screens/consent-details-screen.tsx +0 -106
- package/src/ui/screens/mandate-setup-success-screen.tsx +0 -72
- package/src/ui/widgets/layout-w-header.tsx +0 -89
- 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 {
|
|
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 —
|
|
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
|
}
|
package/src/core/models/index.ts
CHANGED
|
@@ -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
|
-
*
|
|
47
|
+
* Statuses that mean the request is still payable — not an outcome at all.
|
|
3
48
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
if (
|
|
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
|
-
*
|
|
163
|
+
* The failure code from a payment return URI.
|
|
25
164
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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:
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
32
|
-
|
|
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
|
+
}
|