@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.
- package/README.md +119 -81
- 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/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 +7 -5
- 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/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 +7 -5
- 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/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 +7 -5
- 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/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 +7 -5
- package/lib/typescript/module/version.d.ts.map +1 -1
- package/package.json +24 -23
- 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/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 +7 -5
- package/CHANGELOG.md +0 -66
- 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
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import type { ConsentResponse, CopResponse, LinkSessionResponse, ProviderSummary } from '../models';
|
|
2
|
-
|
|
3
|
-
/** Phases the payment flow controller transitions through. */
|
|
4
|
-
export type PaymentFlowPhase =
|
|
5
|
-
| 'idle'
|
|
6
|
-
| 'hydrating'
|
|
7
|
-
| 'bankSelection'
|
|
8
|
-
| 'consentDetails'
|
|
9
|
-
| 'redirecting'
|
|
10
|
-
| 'awaitingCallback'
|
|
11
|
-
| 'succeeded'
|
|
12
|
-
| 'failed'
|
|
13
|
-
| 'cancelled';
|
|
14
|
-
|
|
15
|
-
export interface PaymentFlowState {
|
|
16
|
-
phase: PaymentFlowPhase;
|
|
17
|
-
session?: LinkSessionResponse;
|
|
18
|
-
providers: ProviderSummary[];
|
|
19
|
-
selectedProvider?: ProviderSummary;
|
|
20
|
-
consent?: ConsentResponse;
|
|
21
|
-
/** Confirmation-of-Payee result, threaded into the consentDetails phase. */
|
|
22
|
-
copResponse?: CopResponse;
|
|
23
|
-
/** True while Confirmation-of-Payee is loading for domestic SIP. */
|
|
24
|
-
isCopLoading?: boolean;
|
|
25
|
-
/**
|
|
26
|
-
* True when this session was actually eligible for Confirmation-of-Payee
|
|
27
|
-
* (UAE tenant, unverified, payment type supports it) — as opposed to
|
|
28
|
-
* merely supporting it by payment type. Lets the presenter distinguish
|
|
29
|
-
* "not applicable" from "was attempted but the response never arrived".
|
|
30
|
-
*/
|
|
31
|
-
copApplicable?: boolean;
|
|
32
|
-
exchangeCode?: string;
|
|
33
|
-
linkSessionId?: string;
|
|
34
|
-
merchantRef?: string;
|
|
35
|
-
errorCode?: string;
|
|
36
|
-
errorMessage?: string;
|
|
37
|
-
providerName?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const EMPTY_PROVIDERS: ProviderSummary[] = [];
|
|
41
|
-
|
|
42
|
-
export const PaymentFlowStates = {
|
|
43
|
-
idle(): PaymentFlowState {
|
|
44
|
-
return { phase: 'idle', providers: EMPTY_PROVIDERS };
|
|
45
|
-
},
|
|
46
|
-
hydrating(): PaymentFlowState {
|
|
47
|
-
return { phase: 'hydrating', providers: EMPTY_PROVIDERS };
|
|
48
|
-
},
|
|
49
|
-
bankSelection(args: {
|
|
50
|
-
session: LinkSessionResponse;
|
|
51
|
-
providers: ProviderSummary[];
|
|
52
|
-
}): PaymentFlowState {
|
|
53
|
-
return { phase: 'bankSelection', session: args.session, providers: args.providers };
|
|
54
|
-
},
|
|
55
|
-
consentDetails(args: {
|
|
56
|
-
session: LinkSessionResponse;
|
|
57
|
-
selectedProvider: ProviderSummary;
|
|
58
|
-
copResponse?: CopResponse;
|
|
59
|
-
isCopLoading?: boolean;
|
|
60
|
-
copApplicable?: boolean;
|
|
61
|
-
}): PaymentFlowState {
|
|
62
|
-
return {
|
|
63
|
-
phase: 'consentDetails',
|
|
64
|
-
session: args.session,
|
|
65
|
-
providers: EMPTY_PROVIDERS,
|
|
66
|
-
selectedProvider: args.selectedProvider,
|
|
67
|
-
...(args.copResponse ? { copResponse: args.copResponse } : {}),
|
|
68
|
-
...(args.isCopLoading !== undefined ? { isCopLoading: args.isCopLoading } : {}),
|
|
69
|
-
...(args.copApplicable !== undefined ? { copApplicable: args.copApplicable } : {}),
|
|
70
|
-
};
|
|
71
|
-
},
|
|
72
|
-
redirecting(args: {
|
|
73
|
-
consent: ConsentResponse;
|
|
74
|
-
selectedProvider?: ProviderSummary;
|
|
75
|
-
}): PaymentFlowState {
|
|
76
|
-
return {
|
|
77
|
-
phase: 'redirecting',
|
|
78
|
-
providers: EMPTY_PROVIDERS,
|
|
79
|
-
consent: args.consent,
|
|
80
|
-
...(args.selectedProvider ? { selectedProvider: args.selectedProvider } : {}),
|
|
81
|
-
};
|
|
82
|
-
},
|
|
83
|
-
awaitingCallback(args: {
|
|
84
|
-
providerName?: string;
|
|
85
|
-
session?: LinkSessionResponse;
|
|
86
|
-
selectedProvider?: ProviderSummary;
|
|
87
|
-
}): PaymentFlowState {
|
|
88
|
-
return {
|
|
89
|
-
phase: 'awaitingCallback',
|
|
90
|
-
providers: EMPTY_PROVIDERS,
|
|
91
|
-
...(args.providerName ? { providerName: args.providerName } : {}),
|
|
92
|
-
...(args.session ? { session: args.session } : {}),
|
|
93
|
-
...(args.selectedProvider ? { selectedProvider: args.selectedProvider } : {}),
|
|
94
|
-
};
|
|
95
|
-
},
|
|
96
|
-
succeeded(args: {
|
|
97
|
-
exchangeCode?: string;
|
|
98
|
-
linkSessionId?: string;
|
|
99
|
-
merchantRef?: string;
|
|
100
|
-
selectedProvider?: ProviderSummary;
|
|
101
|
-
session?: LinkSessionResponse;
|
|
102
|
-
}): PaymentFlowState {
|
|
103
|
-
return {
|
|
104
|
-
phase: 'succeeded',
|
|
105
|
-
providers: EMPTY_PROVIDERS,
|
|
106
|
-
...(args.exchangeCode ? { exchangeCode: args.exchangeCode } : {}),
|
|
107
|
-
...(args.linkSessionId ? { linkSessionId: args.linkSessionId } : {}),
|
|
108
|
-
...(args.merchantRef ? { merchantRef: args.merchantRef } : {}),
|
|
109
|
-
...(args.selectedProvider ? { selectedProvider: args.selectedProvider } : {}),
|
|
110
|
-
...(args.session ? { session: args.session } : {}),
|
|
111
|
-
};
|
|
112
|
-
},
|
|
113
|
-
failed(args: { errorCode: string; errorMessage?: string }): PaymentFlowState {
|
|
114
|
-
return {
|
|
115
|
-
phase: 'failed',
|
|
116
|
-
providers: EMPTY_PROVIDERS,
|
|
117
|
-
errorCode: args.errorCode,
|
|
118
|
-
...(args.errorMessage ? { errorMessage: args.errorMessage } : {}),
|
|
119
|
-
};
|
|
120
|
-
},
|
|
121
|
-
cancelled(): PaymentFlowState {
|
|
122
|
-
return { phase: 'cancelled', providers: EMPTY_PROVIDERS };
|
|
123
|
-
},
|
|
124
|
-
} as const;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { PaymentResult } from '../../public/payment-result';
|
|
2
|
-
import {
|
|
3
|
-
paymentAbandoned,
|
|
4
|
-
paymentCancelled,
|
|
5
|
-
paymentFailed,
|
|
6
|
-
paymentSuccess,
|
|
7
|
-
} from '../../public/payment-result';
|
|
8
|
-
import type { PaymentFlowState } from './payment-flow-state';
|
|
9
|
-
|
|
10
|
-
/** Map a terminal controller state to a {@link PaymentResult}. */
|
|
11
|
-
export function paymentResultFromFlowState(
|
|
12
|
-
state: PaymentFlowState,
|
|
13
|
-
linkToken: string,
|
|
14
|
-
bankId?: string,
|
|
15
|
-
): PaymentResult | null {
|
|
16
|
-
const resolvedBankId = bankId ?? state.selectedProvider?.id;
|
|
17
|
-
switch (state.phase) {
|
|
18
|
-
case 'succeeded':
|
|
19
|
-
return paymentSuccess({
|
|
20
|
-
linkToken,
|
|
21
|
-
...(state.exchangeCode ? { exchangeCode: state.exchangeCode } : {}),
|
|
22
|
-
...(state.linkSessionId ? { linkSessionId: state.linkSessionId } : {}),
|
|
23
|
-
...(state.merchantRef ? { merchantRef: state.merchantRef } : {}),
|
|
24
|
-
...(resolvedBankId ? { bankId: resolvedBankId } : {}),
|
|
25
|
-
resolvedAtMs: Date.now(),
|
|
26
|
-
});
|
|
27
|
-
case 'failed':
|
|
28
|
-
return paymentFailed({
|
|
29
|
-
linkToken,
|
|
30
|
-
errorCode: state.errorCode ?? 'unknown_error',
|
|
31
|
-
resolvedAtMs: Date.now(),
|
|
32
|
-
});
|
|
33
|
-
case 'cancelled':
|
|
34
|
-
return paymentCancelled({
|
|
35
|
-
linkToken,
|
|
36
|
-
...(resolvedBankId ? { bankId: resolvedBankId } : {}),
|
|
37
|
-
resolvedAtMs: Date.now(),
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
return paymentAbandoned({ linkToken, resolvedAtMs: Date.now() });
|
|
41
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/** Module-level buffer for a bank-return URI received before a flow is active. */
|
|
2
|
-
interface BufferedRedirect {
|
|
3
|
-
uri: string;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
let buffered: BufferedRedirect | null = null;
|
|
7
|
-
/** Fingerprint of the last consumed URI — blocks re-buffer after consume / double-delivery. */
|
|
8
|
-
let lastHandledUri: string | null = null;
|
|
9
|
-
|
|
10
|
-
export function setBufferedRedirect(uri: string): void {
|
|
11
|
-
if (uri === buffered?.uri || uri === lastHandledUri) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
buffered = { uri };
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function peekBufferedRedirect(): string | null {
|
|
18
|
-
return buffered?.uri ?? null;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function consumeBufferedRedirect(): string | null {
|
|
22
|
-
const value = buffered?.uri ?? null;
|
|
23
|
-
buffered = null;
|
|
24
|
-
if (value) {
|
|
25
|
-
lastHandledUri = value;
|
|
26
|
-
}
|
|
27
|
-
return value;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** @internal Clears buffer state between tests. */
|
|
31
|
-
export function resetRedirectBufferForTests(): void {
|
|
32
|
-
buffered = null;
|
|
33
|
-
lastHandledUri = null;
|
|
34
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maps machine-readable error codes to safe user-facing copy.
|
|
3
|
-
* Raw backend or bank messages must never be shown directly.
|
|
4
|
-
*/
|
|
5
|
-
export function userFriendlyMessageFor(errorCode: string): string {
|
|
6
|
-
switch (errorCode) {
|
|
7
|
-
case 'network_timeout':
|
|
8
|
-
return 'Connection timed out. Please check your connection and try again.';
|
|
9
|
-
case 'session_expired':
|
|
10
|
-
return 'Your payment session has expired. Please start again.';
|
|
11
|
-
case 'session_cancelled':
|
|
12
|
-
return 'The payment was cancelled.';
|
|
13
|
-
case 'session_already_completed':
|
|
14
|
-
return 'This payment has already been completed.';
|
|
15
|
-
case 'invalid_token':
|
|
16
|
-
return 'The payment link is invalid or has expired.';
|
|
17
|
-
case 'bank_unavailable':
|
|
18
|
-
return 'Your bank is temporarily unavailable. Please try again later.';
|
|
19
|
-
case 'consent_creation_failed':
|
|
20
|
-
return 'Unable to initiate the payment. Please try again.';
|
|
21
|
-
case 'rate_limit_exceeded':
|
|
22
|
-
return 'Too many attempts. Please wait a moment and try again.';
|
|
23
|
-
case 'redirect_failed':
|
|
24
|
-
case 'bank_launch_failed':
|
|
25
|
-
return 'Unable to open your bank app. Please try again.';
|
|
26
|
-
case 'session_timeout':
|
|
27
|
-
return 'The payment timed out waiting for your bank. Please try again.';
|
|
28
|
-
case 'recovery_exhausted':
|
|
29
|
-
return 'This payment session could not be recovered. Please start again.';
|
|
30
|
-
case 'hydration_error':
|
|
31
|
-
case 'network_error':
|
|
32
|
-
case 'SP500':
|
|
33
|
-
return 'Your bank could not complete the payment. Please try again.';
|
|
34
|
-
case 'authorize_failed':
|
|
35
|
-
return 'Payment could not be completed. Please try again.';
|
|
36
|
-
default:
|
|
37
|
-
return 'Something went wrong. Please try again.';
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Best-effort device + geolocation telemetry collector. Each call site catches
|
|
3
|
-
* runtime failures so a permission denial or missing native module degrades
|
|
4
|
-
* to a partial payload instead of throwing.
|
|
5
|
-
*/
|
|
6
|
-
import { Platform } from 'react-native';
|
|
7
|
-
import { SDK_VERSION } from '../version';
|
|
8
|
-
import { createLogger } from './logger';
|
|
9
|
-
|
|
10
|
-
const log = createLogger('TelemetryCollector');
|
|
11
|
-
|
|
12
|
-
const LOCATION_TIMEOUT_MS = 5_000;
|
|
13
|
-
|
|
14
|
-
interface DeviceLike {
|
|
15
|
-
modelName?: string | null;
|
|
16
|
-
osVersion?: string | null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
interface LocationLike {
|
|
20
|
-
requestForegroundPermissionsAsync(): Promise<{ status: 'granted' | 'denied' | 'undetermined' }>;
|
|
21
|
-
getCurrentPositionAsync(opts: { accuracy?: number }): Promise<{
|
|
22
|
-
coords: { latitude: number; longitude: number; accuracy: number | null };
|
|
23
|
-
}>;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async function loadDevice(): Promise<DeviceLike | null> {
|
|
27
|
-
try {
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
29
|
-
return require('expo-device') as DeviceLike;
|
|
30
|
-
} catch {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function loadLocation(): Promise<LocationLike | null> {
|
|
36
|
-
try {
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
38
|
-
return require('expo-location') as LocationLike;
|
|
39
|
-
} catch {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export async function collectTelemetry(): Promise<Record<string, unknown>> {
|
|
45
|
-
log.fine('collect: gathering device telemetry');
|
|
46
|
-
const [deviceMod, locationMod] = await Promise.all([loadDevice(), loadLocation()]);
|
|
47
|
-
|
|
48
|
-
const payload: Record<string, unknown> = {
|
|
49
|
-
platform: 'react_native',
|
|
50
|
-
sdk_version: SDK_VERSION,
|
|
51
|
-
os: Platform.OS,
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const model = deviceMod?.modelName ?? null;
|
|
55
|
-
const osVersion = deviceMod?.osVersion ?? null;
|
|
56
|
-
if (model && osVersion) {
|
|
57
|
-
payload.device_fingerprint = `${model}_${osVersion}`;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (locationMod) {
|
|
61
|
-
try {
|
|
62
|
-
const permission = await locationMod.requestForegroundPermissionsAsync();
|
|
63
|
-
if (permission.status === 'granted') {
|
|
64
|
-
const position = await Promise.race<{
|
|
65
|
-
coords: { latitude: number; longitude: number; accuracy: number | null };
|
|
66
|
-
} | null>([
|
|
67
|
-
locationMod.getCurrentPositionAsync({ accuracy: 3 }),
|
|
68
|
-
new Promise((resolve) => setTimeout(() => resolve(null), LOCATION_TIMEOUT_MS)),
|
|
69
|
-
]);
|
|
70
|
-
if (position) {
|
|
71
|
-
payload.geolocation = {
|
|
72
|
-
latitude: position.coords.latitude,
|
|
73
|
-
longitude: position.coords.longitude,
|
|
74
|
-
accuracy_m: position.coords.accuracy,
|
|
75
|
-
};
|
|
76
|
-
} else {
|
|
77
|
-
payload.geolocation = { unavailable: 'timeout' };
|
|
78
|
-
}
|
|
79
|
-
} else {
|
|
80
|
-
payload.geolocation = { unavailable: 'permission_denied' };
|
|
81
|
-
}
|
|
82
|
-
} catch (e) {
|
|
83
|
-
log.warning(`collect: geolocation failed — ${e instanceof Error ? e.message : String(e)}`);
|
|
84
|
-
payload.geolocation = { unavailable: 'error' };
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
log.fine(`collect: payload keys=${Object.keys(payload).join(',')}`);
|
|
89
|
-
return payload;
|
|
90
|
-
}
|
package/src/public/constants.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Max non-terminal `resumeIfNeeded` recovery attempts before the SDK gives up
|
|
3
|
-
* and resolves the flow as failed with code `recovery_exhausted`.
|
|
4
|
-
*/
|
|
5
|
-
export const kMaxRecoveryAttempts = 3 as const;
|
|
6
|
-
|
|
7
|
-
/** Default per-request HTTP timeout in milliseconds (15s). */
|
|
8
|
-
export const DEFAULT_REQUEST_TIMEOUT_MS = 15_000 as const;
|
|
9
|
-
|
|
10
|
-
/** How long the SDK waits for a bank callback before auto-failing with `session_timeout`. */
|
|
11
|
-
export const DEFAULT_AWAITING_CALLBACK_TIMEOUT_MS = 5 * 60 * 1000;
|
|
12
|
-
|
|
13
|
-
/** Polling interval while the flow is in awaitingCallback (status endpoint). */
|
|
14
|
-
export const DEFAULT_AWAITING_CALLBACK_POLL_MS = 10_000;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { PaymentResult } from './payment-result';
|
|
2
|
-
import type { SpareLinkEventType } from './spare-link-event';
|
|
3
|
-
|
|
4
|
-
/** Called on successful payment. Both args may be null when recovered. */
|
|
5
|
-
export type SpareLinkSuccessCallback = (
|
|
6
|
-
exchangeCode: string | undefined,
|
|
7
|
-
linkSessionId: string | undefined,
|
|
8
|
-
) => void;
|
|
9
|
-
|
|
10
|
-
/** Called when the flow resolves to any terminal state (success or failure). */
|
|
11
|
-
export type SpareLinkExitCallback = (result: PaymentResult) => void;
|
|
12
|
-
|
|
13
|
-
/** Called for intermediate lifecycle events (string tag). Best-effort — exceptions are caught. */
|
|
14
|
-
export type SpareLinkEventCallback = (event: SpareLinkEventType) => void;
|
|
15
|
-
|
|
16
|
-
export interface SpareLinkCallbacks {
|
|
17
|
-
onSuccess?: SpareLinkSuccessCallback;
|
|
18
|
-
onExit?: SpareLinkExitCallback;
|
|
19
|
-
onEvent?: SpareLinkEventCallback;
|
|
20
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Ionicons } from '@expo/vector-icons';
|
|
2
|
-
import { StyleSheet, Text, View } from 'react-native';
|
|
3
|
-
import { Colors, FONT_FAMILY } from '../theme';
|
|
4
|
-
|
|
5
|
-
export interface ChargeBearerDisplayProps {
|
|
6
|
-
chargeBearer: string | undefined;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const OPTIONS = [
|
|
10
|
-
{ label: 'Shared', apiValue: 'Shared' },
|
|
11
|
-
{ label: 'Debtor', apiValue: 'BorneByDebtor' },
|
|
12
|
-
{ label: 'Creditor', apiValue: 'BorneByCreditor' },
|
|
13
|
-
] as const;
|
|
14
|
-
|
|
15
|
-
export function ChargeBearerDisplay(props: ChargeBearerDisplayProps): JSX.Element {
|
|
16
|
-
const bearer = props.chargeBearer?.trim();
|
|
17
|
-
return (
|
|
18
|
-
<View style={styles.card} testID="charge-bearer-display">
|
|
19
|
-
<Text style={styles.title}>Charges model</Text>
|
|
20
|
-
<View style={styles.options}>
|
|
21
|
-
{OPTIONS.map((option) => {
|
|
22
|
-
const selected = bearer === option.apiValue;
|
|
23
|
-
return (
|
|
24
|
-
<View key={option.apiValue} style={styles.option}>
|
|
25
|
-
{selected ? (
|
|
26
|
-
<Ionicons name="checkmark-circle" size={20} color={Colors.spareBlue} />
|
|
27
|
-
) : (
|
|
28
|
-
<View style={styles.unselectedMarker} />
|
|
29
|
-
)}
|
|
30
|
-
<Text style={[styles.optionLabel, selected && styles.optionLabelSelected]}>
|
|
31
|
-
{option.label}
|
|
32
|
-
</Text>
|
|
33
|
-
</View>
|
|
34
|
-
);
|
|
35
|
-
})}
|
|
36
|
-
</View>
|
|
37
|
-
</View>
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const styles = StyleSheet.create({
|
|
42
|
-
card: {
|
|
43
|
-
backgroundColor: Colors.surfaceCard,
|
|
44
|
-
borderRadius: 16,
|
|
45
|
-
paddingVertical: 14,
|
|
46
|
-
paddingHorizontal: 20,
|
|
47
|
-
marginBottom: 14,
|
|
48
|
-
gap: 16,
|
|
49
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
50
|
-
borderColor: Colors.divider,
|
|
51
|
-
shadowColor: '#000000',
|
|
52
|
-
shadowOpacity: 0.06,
|
|
53
|
-
shadowRadius: 6,
|
|
54
|
-
shadowOffset: { width: 0, height: 2 },
|
|
55
|
-
elevation: 2,
|
|
56
|
-
},
|
|
57
|
-
title: {
|
|
58
|
-
fontFamily: FONT_FAMILY,
|
|
59
|
-
fontSize: 14,
|
|
60
|
-
fontWeight: '700',
|
|
61
|
-
color: Colors.textPrimary,
|
|
62
|
-
},
|
|
63
|
-
options: { flexDirection: 'row', flexWrap: 'wrap', gap: 24 },
|
|
64
|
-
option: { flexDirection: 'row', alignItems: 'center', gap: 4 },
|
|
65
|
-
unselectedMarker: { width: 20, height: 20 },
|
|
66
|
-
optionLabel: { fontFamily: FONT_FAMILY, fontSize: 14, color: Colors.textMuted },
|
|
67
|
-
optionLabelSelected: { color: Colors.textPrimary, fontWeight: '600' },
|
|
68
|
-
});
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Ionicons } from '@expo/vector-icons';
|
|
2
|
-
import { useState } from 'react';
|
|
3
|
-
import { Pressable, StyleSheet, Text, View } from 'react-native';
|
|
4
|
-
import { Colors } from '../theme';
|
|
5
|
-
import { linkFontFamilyForWeight } from '../theme/fonts';
|
|
6
|
-
|
|
7
|
-
export interface ConsentAccordionItem {
|
|
8
|
-
header: string;
|
|
9
|
-
children: React.ReactNode;
|
|
10
|
-
initiallyExpanded?: boolean;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface ConsentAccordionProps {
|
|
14
|
-
items: ConsentAccordionItem[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function ConsentAccordion(props: ConsentAccordionProps): JSX.Element {
|
|
18
|
-
return (
|
|
19
|
-
<View style={styles.wrap} testID="consent-accordion">
|
|
20
|
-
{props.items.map((item, index) => (
|
|
21
|
-
<View key={item.header}>
|
|
22
|
-
<AccordionSection {...item} />
|
|
23
|
-
{index < props.items.length - 1 ? (
|
|
24
|
-
<View style={styles.divider} testID="consent-accordion-divider" />
|
|
25
|
-
) : null}
|
|
26
|
-
</View>
|
|
27
|
-
))}
|
|
28
|
-
</View>
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function AccordionSection(props: ConsentAccordionItem): JSX.Element {
|
|
33
|
-
const [expanded, setExpanded] = useState(props.initiallyExpanded ?? true);
|
|
34
|
-
return (
|
|
35
|
-
<View style={styles.section}>
|
|
36
|
-
<Pressable
|
|
37
|
-
accessibilityRole="button"
|
|
38
|
-
onPress={() => setExpanded((e) => !e)}
|
|
39
|
-
style={styles.header}
|
|
40
|
-
>
|
|
41
|
-
<Text style={styles.headerText}>{props.header}</Text>
|
|
42
|
-
<Ionicons
|
|
43
|
-
name={expanded ? 'chevron-up' : 'chevron-down'}
|
|
44
|
-
size={18}
|
|
45
|
-
color={Colors.spareBlue}
|
|
46
|
-
/>
|
|
47
|
-
</Pressable>
|
|
48
|
-
{expanded ? <View style={styles.body}>{props.children}</View> : null}
|
|
49
|
-
</View>
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const styles = StyleSheet.create({
|
|
54
|
-
wrap: {
|
|
55
|
-
backgroundColor: Colors.cardMutedBg,
|
|
56
|
-
borderRadius: 16,
|
|
57
|
-
paddingVertical: 8,
|
|
58
|
-
paddingHorizontal: 0,
|
|
59
|
-
marginBottom: 14,
|
|
60
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
61
|
-
borderColor: Colors.divider,
|
|
62
|
-
shadowColor: '#404029',
|
|
63
|
-
shadowOpacity: 0.08,
|
|
64
|
-
shadowRadius: 4,
|
|
65
|
-
shadowOffset: { width: 0, height: 1 },
|
|
66
|
-
elevation: 2,
|
|
67
|
-
},
|
|
68
|
-
section: { paddingVertical: 8 },
|
|
69
|
-
header: {
|
|
70
|
-
flexDirection: 'row',
|
|
71
|
-
justifyContent: 'space-between',
|
|
72
|
-
alignItems: 'center',
|
|
73
|
-
paddingHorizontal: 20,
|
|
74
|
-
minHeight: 48,
|
|
75
|
-
},
|
|
76
|
-
headerText: {
|
|
77
|
-
fontFamily: linkFontFamilyForWeight('700'),
|
|
78
|
-
fontSize: 16,
|
|
79
|
-
fontWeight: '700',
|
|
80
|
-
color: Colors.textPrimary,
|
|
81
|
-
},
|
|
82
|
-
body: { paddingTop: 4, paddingBottom: 12 },
|
|
83
|
-
divider: {
|
|
84
|
-
height: StyleSheet.hairlineWidth,
|
|
85
|
-
backgroundColor: Colors.divider,
|
|
86
|
-
marginHorizontal: 20,
|
|
87
|
-
marginVertical: 4,
|
|
88
|
-
},
|
|
89
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { ConsentSummaryData } from '../../core/services/consent-presenter';
|
|
2
|
-
import { InternationalPaymentSummary } from './international-payment-summary';
|
|
3
|
-
import { MultiPaymentSummary } from './multi-payment-summary';
|
|
4
|
-
import { SinglePaymentSummary } from './single-payment-summary';
|
|
5
|
-
|
|
6
|
-
export interface ConsentSummarySectionProps {
|
|
7
|
-
data: ConsentSummaryData;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function ConsentSummarySection(props: ConsentSummarySectionProps): JSX.Element {
|
|
11
|
-
switch (props.data.variant) {
|
|
12
|
-
case 'singlePayment':
|
|
13
|
-
return <SinglePaymentSummary data={props.data} />;
|
|
14
|
-
case 'international':
|
|
15
|
-
return <InternationalPaymentSummary data={props.data} />;
|
|
16
|
-
case 'multiPayment':
|
|
17
|
-
return <MultiPaymentSummary data={props.data} />;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { Ionicons } from '@expo/vector-icons';
|
|
2
|
-
import { useEffect, useRef } from 'react';
|
|
3
|
-
import { Animated, StyleSheet, Text, View } from 'react-native';
|
|
4
|
-
import type { CopDisplayData, CopMatchIndicator } from '../../core/services/consent-presenter';
|
|
5
|
-
import { Colors, FONT_FAMILY } from '../theme';
|
|
6
|
-
|
|
7
|
-
/** Matches {@link LabelValueRows} default horizontal inset inside accordions. */
|
|
8
|
-
const ACCORDION_BODY_INSET = 20;
|
|
9
|
-
|
|
10
|
-
const COP_COLORS: Record<CopMatchIndicator, string> = {
|
|
11
|
-
match: '#81C784',
|
|
12
|
-
partialMatch: '#E57373',
|
|
13
|
-
noMatch: '#FFB74D',
|
|
14
|
-
unknown: Colors.textMuted,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const COP_ICONS: Record<CopMatchIndicator, keyof typeof Ionicons.glyphMap> = {
|
|
18
|
-
match: 'checkmark-circle-outline',
|
|
19
|
-
partialMatch: 'warning-outline',
|
|
20
|
-
noMatch: 'close-circle-outline',
|
|
21
|
-
unknown: 'information-circle-outline',
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export function CopLoadingPlaceholder(): JSX.Element {
|
|
25
|
-
const opacity = useRef(new Animated.Value(0.35)).current;
|
|
26
|
-
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
const animation = Animated.loop(
|
|
29
|
-
Animated.sequence([
|
|
30
|
-
Animated.timing(opacity, { toValue: 1, duration: 450, useNativeDriver: true }),
|
|
31
|
-
Animated.timing(opacity, { toValue: 0.35, duration: 450, useNativeDriver: true }),
|
|
32
|
-
]),
|
|
33
|
-
);
|
|
34
|
-
animation.start();
|
|
35
|
-
return () => animation.stop();
|
|
36
|
-
}, [opacity]);
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<View style={styles.loadingRow} testID="consent-cop-loading">
|
|
40
|
-
<Animated.View style={[styles.loadingBar, styles.loadingBarWide, { opacity }]} />
|
|
41
|
-
<Animated.View style={[styles.loadingBar, styles.loadingBarNarrow, { opacity }]} />
|
|
42
|
-
</View>
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function CopInformation(props: { display: CopDisplayData }): JSX.Element {
|
|
47
|
-
const { display } = props;
|
|
48
|
-
const color = COP_COLORS[display.indicator];
|
|
49
|
-
const icon = COP_ICONS[display.indicator];
|
|
50
|
-
|
|
51
|
-
if (display.indicator === 'match') {
|
|
52
|
-
return (
|
|
53
|
-
<View style={styles.matchRow} testID="consent-cop-information">
|
|
54
|
-
<Text style={[styles.statusLabel, { color }]}>{display.statusLabel}</Text>
|
|
55
|
-
<Ionicons name={icon} size={18} color={color} />
|
|
56
|
-
</View>
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return (
|
|
61
|
-
<View style={styles.column} testID="consent-cop-information">
|
|
62
|
-
<View style={styles.statusRow}>
|
|
63
|
-
<View style={styles.statusLeft}>
|
|
64
|
-
<Ionicons name={icon} size={18} color={color} />
|
|
65
|
-
<Text style={[styles.statusLabel, { color }]}>{display.statusLabel}</Text>
|
|
66
|
-
</View>
|
|
67
|
-
{display.maskedName ? <Text style={styles.maskedName}>{display.maskedName}</Text> : null}
|
|
68
|
-
</View>
|
|
69
|
-
{display.paragraphs.map((paragraph) => (
|
|
70
|
-
<Text key={paragraph} style={[styles.paragraph, { color }]}>
|
|
71
|
-
{paragraph}
|
|
72
|
-
</Text>
|
|
73
|
-
))}
|
|
74
|
-
</View>
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const styles = StyleSheet.create({
|
|
79
|
-
loadingRow: {
|
|
80
|
-
flexDirection: 'row',
|
|
81
|
-
justifyContent: 'space-between',
|
|
82
|
-
alignItems: 'center',
|
|
83
|
-
paddingTop: 4,
|
|
84
|
-
paddingHorizontal: ACCORDION_BODY_INSET,
|
|
85
|
-
},
|
|
86
|
-
loadingBar: {
|
|
87
|
-
height: 12,
|
|
88
|
-
backgroundColor: '#E5E7EB',
|
|
89
|
-
borderRadius: 4,
|
|
90
|
-
},
|
|
91
|
-
loadingBarWide: { width: 96 },
|
|
92
|
-
loadingBarNarrow: { width: 48 },
|
|
93
|
-
matchRow: {
|
|
94
|
-
flexDirection: 'row',
|
|
95
|
-
justifyContent: 'space-between',
|
|
96
|
-
alignItems: 'center',
|
|
97
|
-
paddingTop: 4,
|
|
98
|
-
paddingHorizontal: ACCORDION_BODY_INSET,
|
|
99
|
-
},
|
|
100
|
-
column: {
|
|
101
|
-
gap: 8,
|
|
102
|
-
paddingTop: 4,
|
|
103
|
-
paddingHorizontal: ACCORDION_BODY_INSET,
|
|
104
|
-
},
|
|
105
|
-
statusRow: {
|
|
106
|
-
flexDirection: 'row',
|
|
107
|
-
alignItems: 'flex-start',
|
|
108
|
-
justifyContent: 'space-between',
|
|
109
|
-
gap: 8,
|
|
110
|
-
},
|
|
111
|
-
statusLeft: { flexDirection: 'row', alignItems: 'center', gap: 4, flex: 1 },
|
|
112
|
-
statusLabel: { fontFamily: FONT_FAMILY, fontSize: 14, fontWeight: '500' },
|
|
113
|
-
maskedName: {
|
|
114
|
-
fontFamily: FONT_FAMILY,
|
|
115
|
-
fontSize: 14,
|
|
116
|
-
color: Colors.textMuted,
|
|
117
|
-
textAlign: 'right',
|
|
118
|
-
flex: 1,
|
|
119
|
-
},
|
|
120
|
-
paragraph: { fontFamily: FONT_FAMILY, fontSize: 14, lineHeight: 22, fontWeight: '400' },
|
|
121
|
-
});
|