@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,16 +1,18 @@
|
|
|
1
1
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
-
import { ActivityIndicator, Modal,
|
|
2
|
+
import { ActivityIndicator, Modal, StyleSheet, View } from 'react-native';
|
|
3
|
+
// `react-native`'s own SafeAreaView applies nothing on Android, which left the
|
|
4
|
+
// hosted page's header under the status bar there. This one insets both platforms.
|
|
5
|
+
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
3
6
|
import { enableScreens } from 'react-native-screens';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
import {
|
|
8
|
+
type PaymentReturnReport,
|
|
9
|
+
isPaymentReturnCallbackUri,
|
|
10
|
+
readPaymentReturn,
|
|
11
|
+
} from '../core/models/payment-return-params';
|
|
12
|
+
import { type BankLauncher, HostedFlowController } from '../core/services/hosted-flow-controller';
|
|
8
13
|
import type { PendingSessionStore } from '../core/services/pending-session-store';
|
|
9
|
-
import { setBufferedRedirect } from '../core/services/redirect-buffer';
|
|
10
|
-
import { userFriendlyMessageFor } from '../core/services/user-friendly-messages';
|
|
11
|
-
import { launchBankRedirect as defaultLaunchBankRedirect } from '../internal/bank-redirect';
|
|
12
14
|
import { createLogger } from '../internal/logger';
|
|
13
|
-
import {
|
|
15
|
+
import { redactPaymentReturnUri } from '../internal/redact-uri';
|
|
14
16
|
import type { PaymentResult } from '../public/payment-result';
|
|
15
17
|
import {
|
|
16
18
|
paymentAbandoned,
|
|
@@ -19,10 +21,9 @@ import {
|
|
|
19
21
|
paymentSuccess,
|
|
20
22
|
} from '../public/payment-result';
|
|
21
23
|
import type { RecoveryResult } from '../public/recovery-result';
|
|
22
|
-
import {
|
|
23
|
-
import { type
|
|
24
|
-
import {
|
|
25
|
-
import { PaymentFlowPage } from './payment-flow-page';
|
|
24
|
+
import { SpareLinkEvents } from '../public/spare-link-event';
|
|
25
|
+
import { type SpareLink, noRecovery } from '../public/spare-link-instance';
|
|
26
|
+
import { HostedPaymentPage } from './hosted/hosted-payment-page';
|
|
26
27
|
import { Colors } from './theme';
|
|
27
28
|
import { useLinkFonts } from './theme/fonts';
|
|
28
29
|
import { ModalDismissButton } from './widgets/modal-dismiss-button';
|
|
@@ -32,10 +33,9 @@ enableScreens();
|
|
|
32
33
|
const log = createLogger('SpareLinkHost');
|
|
33
34
|
|
|
34
35
|
interface ActiveFlow {
|
|
35
|
-
controller:
|
|
36
|
-
|
|
36
|
+
controller: HostedFlowController;
|
|
37
|
+
reference: string;
|
|
37
38
|
resolve: (result: PaymentResult) => void;
|
|
38
|
-
onSessionLoaded?: (linkSessionId: string) => void;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
export interface SpareLinkHostProps {
|
|
@@ -46,14 +46,15 @@ export interface SpareLinkHostProps {
|
|
|
46
46
|
* When omitted, uses `spareLink.pendingSessionStore`.
|
|
47
47
|
*/
|
|
48
48
|
pendingSessionStore?: PendingSessionStore;
|
|
49
|
-
|
|
49
|
+
/** Override how a bank authorization URL is opened. Tests inject a fake. */
|
|
50
|
+
launchBankRedirect?: BankLauncher;
|
|
50
51
|
showDismissButton?: boolean;
|
|
51
52
|
children?: React.ReactNode;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
/**
|
|
55
56
|
* Host component that mounts the SDK modal and connects a {@link SpareLink}
|
|
56
|
-
* instance —
|
|
57
|
+
* instance — one instance, one host.
|
|
57
58
|
*/
|
|
58
59
|
export function SpareLinkHost(props: SpareLinkHostProps): JSX.Element {
|
|
59
60
|
const { spareLink, showDismissButton = true, launchBankRedirect } = props;
|
|
@@ -62,37 +63,38 @@ export function SpareLinkHost(props: SpareLinkHostProps): JSX.Element {
|
|
|
62
63
|
const [active, setActive] = useState<ActiveFlow | null>(null);
|
|
63
64
|
const activeRef = useRef<ActiveFlow | null>(null);
|
|
64
65
|
|
|
66
|
+
/** A return that arrived before there was a flow to give it to. */
|
|
67
|
+
const bufferedRedirect = useRef<string | null>(null);
|
|
68
|
+
|
|
65
69
|
useEffect(() => {
|
|
66
70
|
activeRef.current = active;
|
|
67
71
|
}, [active]);
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
);
|
|
73
|
+
/**
|
|
74
|
+
* Serializes every write to the pending-session store.
|
|
75
|
+
*
|
|
76
|
+
* The store is pluggable, so it cannot be assumed to order its own writes: a
|
|
77
|
+
* `clear` overtaking a slow `save` would leave a record for a payment that has
|
|
78
|
+
* already resolved, and the next cold start would offer to recover it.
|
|
79
|
+
*/
|
|
80
|
+
const persistQueue = useRef<Promise<unknown>>(Promise.resolve());
|
|
81
|
+
const enqueuePersist = useCallback((op: () => Promise<void>): Promise<void> => {
|
|
82
|
+
const next = persistQueue.current.then(op, op);
|
|
83
|
+
// Kept un-rejected so one failure does not poison the queue behind it.
|
|
84
|
+
persistQueue.current = next.catch(() => undefined);
|
|
85
|
+
return next;
|
|
86
|
+
}, []);
|
|
87
|
+
|
|
88
|
+
const clearPending = useCallback(() => {
|
|
89
|
+
if (!pendingSessionStore) return;
|
|
90
|
+
void enqueuePersist(() => pendingSessionStore.clear()).catch(() => {
|
|
91
|
+
log.warning('could not clear the pending payment — continuing');
|
|
92
|
+
});
|
|
93
|
+
}, [pendingSessionStore, enqueuePersist]);
|
|
90
94
|
|
|
91
95
|
const close = useCallback(
|
|
92
96
|
(flow: ActiveFlow, result: PaymentResult) => {
|
|
93
|
-
|
|
94
|
-
log.warning('close: pendingSessionStore.clear() failed — continuing');
|
|
95
|
-
});
|
|
97
|
+
clearPending();
|
|
96
98
|
flow.resolve(result);
|
|
97
99
|
flow.controller.dispose();
|
|
98
100
|
if (activeRef.current === flow) {
|
|
@@ -100,22 +102,46 @@ export function SpareLinkHost(props: SpareLinkHostProps): JSX.Element {
|
|
|
100
102
|
setActive(null);
|
|
101
103
|
}
|
|
102
104
|
},
|
|
103
|
-
[
|
|
105
|
+
[clearPending],
|
|
104
106
|
);
|
|
105
107
|
|
|
108
|
+
/** Maps a resolved flow onto the result the caller awaits. */
|
|
109
|
+
const resultFor = useCallback((flow: ActiveFlow): PaymentResult => {
|
|
110
|
+
const s = flow.controller.state;
|
|
111
|
+
const base = {
|
|
112
|
+
reference: s.reference,
|
|
113
|
+
...reportedFields(s.report),
|
|
114
|
+
resolvedAtMs: Date.now(),
|
|
115
|
+
};
|
|
116
|
+
switch (s.phase) {
|
|
117
|
+
case 'succeeded':
|
|
118
|
+
return paymentSuccess(base);
|
|
119
|
+
case 'cancelled':
|
|
120
|
+
return paymentCancelled(base);
|
|
121
|
+
case 'failed':
|
|
122
|
+
return paymentFailed({ ...base, errorCode: s.errorCode ?? 'internal_error' });
|
|
123
|
+
default:
|
|
124
|
+
// Anything else resolving is the payer leaving mid-flow, which may still
|
|
125
|
+
// complete at the bank — so it is reported as unresolved, not as a failure.
|
|
126
|
+
return paymentAbandoned(base);
|
|
127
|
+
}
|
|
128
|
+
}, []);
|
|
129
|
+
|
|
130
|
+
const onResolved = useCallback(() => {
|
|
131
|
+
const current = activeRef.current;
|
|
132
|
+
if (!current) return;
|
|
133
|
+
close(current, resultFor(current));
|
|
134
|
+
}, [close, resultFor]);
|
|
135
|
+
|
|
106
136
|
const startFlow = useCallback(
|
|
107
|
-
(args: {
|
|
108
|
-
linkToken: string;
|
|
109
|
-
resolve: (result: PaymentResult) => void;
|
|
110
|
-
onSessionLoaded?: (linkSessionId: string) => void;
|
|
111
|
-
}) => {
|
|
137
|
+
(args: { reference: string; resolve: (result: PaymentResult) => void }) => {
|
|
112
138
|
if (activeRef.current) {
|
|
113
|
-
log.warning('start: a payment
|
|
139
|
+
log.warning('start: a payment is already in progress — rejecting concurrent call');
|
|
114
140
|
args.resolve(
|
|
115
141
|
paymentFailed({
|
|
116
|
-
|
|
142
|
+
reference: args.reference,
|
|
117
143
|
errorCode: 'concurrent_start',
|
|
118
|
-
message: 'A payment
|
|
144
|
+
message: 'A payment is already in progress.',
|
|
119
145
|
resolvedAtMs: Date.now(),
|
|
120
146
|
}),
|
|
121
147
|
);
|
|
@@ -123,159 +149,142 @@ export function SpareLinkHost(props: SpareLinkHostProps): JSX.Element {
|
|
|
123
149
|
}
|
|
124
150
|
|
|
125
151
|
log.info(`start: tenant=${spareLink.tenant}, environment=${spareLink.environment}`);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
baseUrl: spareLink.resolvedBaseUrl,
|
|
131
|
-
tenant: tenantCountryCode(spareLink.tenant),
|
|
132
|
-
...(spareLink.fetch ? { fetch: spareLink.fetch } : {}),
|
|
133
|
-
...(spareLink.requestTimeoutMs !== undefined
|
|
134
|
-
? { requestTimeoutMs: spareLink.requestTimeoutMs }
|
|
135
|
-
: {}),
|
|
136
|
-
}),
|
|
137
|
-
collectTelemetry,
|
|
138
|
-
...(pendingSessionStore ? { pendingSessionStore } : {}),
|
|
139
|
-
onEvent: (event) => {
|
|
140
|
-
emitMappedEvent(args.linkToken, event as SpareLinkEventType);
|
|
141
|
-
if (event === 'sessionLoaded') {
|
|
142
|
-
const linkSessionId = controller.state.linkSessionId;
|
|
143
|
-
if (linkSessionId) {
|
|
144
|
-
args.onSessionLoaded?.(linkSessionId);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
},
|
|
152
|
+
|
|
153
|
+
const controller = new HostedFlowController({
|
|
154
|
+
reference: args.reference,
|
|
155
|
+
...(launchBankRedirect ? { bankLauncher: launchBankRedirect } : {}),
|
|
148
156
|
});
|
|
149
157
|
|
|
150
158
|
const flow: ActiveFlow = {
|
|
151
159
|
controller,
|
|
152
|
-
|
|
160
|
+
reference: args.reference,
|
|
153
161
|
resolve: args.resolve,
|
|
154
|
-
...(args.onSessionLoaded ? { onSessionLoaded: args.onSessionLoaded } : {}),
|
|
155
162
|
};
|
|
156
|
-
activeRef.current = flow;
|
|
157
|
-
setActive(flow);
|
|
158
163
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
message: 'Unable to load payment session. Please try again.',
|
|
167
|
-
resolvedAtMs: Date.now(),
|
|
168
|
-
}),
|
|
169
|
-
);
|
|
164
|
+
controller.subscribe(() => {
|
|
165
|
+
const phase = controller.state.phase;
|
|
166
|
+
if (phase === 'hosted') {
|
|
167
|
+
spareLink.emitEvent(SpareLinkEvents.pageReady(args.reference));
|
|
168
|
+
} else if (phase === 'redirecting') {
|
|
169
|
+
spareLink.emitEvent(SpareLinkEvents.redirectToBank(args.reference));
|
|
170
|
+
}
|
|
170
171
|
});
|
|
172
|
+
|
|
173
|
+
// Claimed synchronously so a second `start` in the same tick is rejected by
|
|
174
|
+
// the guard above rather than racing this one.
|
|
175
|
+
activeRef.current = flow;
|
|
176
|
+
|
|
177
|
+
// Recorded *before* the page is presented, so the payer cannot reach their
|
|
178
|
+
// bank on a payment a cold start would not know about. A store that cannot
|
|
179
|
+
// write is not a reason to refuse the payment.
|
|
180
|
+
const present = () => {
|
|
181
|
+
if (activeRef.current !== flow) return;
|
|
182
|
+
setActive(flow);
|
|
183
|
+
|
|
184
|
+
// A return can beat the page onto the screen when the app was resumed
|
|
185
|
+
// rather than launched, so replay one that arrived before there was a flow.
|
|
186
|
+
const buffered = bufferedRedirect.current;
|
|
187
|
+
if (buffered) {
|
|
188
|
+
bufferedRedirect.current = null;
|
|
189
|
+
controller.handleReturn(buffered);
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
if (!pendingSessionStore) {
|
|
194
|
+
present();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
void enqueuePersist(() => pendingSessionStore.save({ reference: args.reference }))
|
|
199
|
+
.catch(() => {
|
|
200
|
+
log.warning('could not record the pending payment — continuing');
|
|
201
|
+
})
|
|
202
|
+
.finally(present);
|
|
171
203
|
},
|
|
172
|
-
[spareLink, pendingSessionStore,
|
|
204
|
+
[spareLink, pendingSessionStore, launchBankRedirect, enqueuePersist],
|
|
173
205
|
);
|
|
174
206
|
|
|
175
207
|
const handleRedirect = useCallback(
|
|
176
208
|
async (uri: URL | string): Promise<boolean> => {
|
|
177
|
-
const current = activeRef.current;
|
|
178
209
|
const asString = typeof uri === 'string' ? uri : uri.toString();
|
|
210
|
+
log.info(`handleRedirect: ${redactPaymentReturnUri(asString)}`);
|
|
211
|
+
|
|
212
|
+
if (!isPaymentReturnCallbackUri(asString)) return false;
|
|
213
|
+
|
|
214
|
+
const current = activeRef.current;
|
|
179
215
|
if (!current) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
setBufferedRedirect(asString);
|
|
185
|
-
log.info('handleRedirect: no active controller — buffering URI for recovery');
|
|
216
|
+
log.info('handleRedirect: no active payment — holding for recovery');
|
|
217
|
+
bufferedRedirect.current = asString;
|
|
186
218
|
return true;
|
|
187
219
|
}
|
|
188
|
-
if (!isPaymentReturnCallbackUri(asString)) {
|
|
189
|
-
log.fine('handleRedirect: URI does not belong to payment flow — ignoring');
|
|
190
|
-
return false;
|
|
191
|
-
}
|
|
192
|
-
log.info('handleRedirect: forwarding to controller');
|
|
193
|
-
try {
|
|
194
|
-
current.controller.handleCallback(uri);
|
|
195
|
-
spareLink.emitEvent(SpareLinkEvents.bankCallbackReceived(current.linkToken));
|
|
196
|
-
return true;
|
|
197
|
-
} catch {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
},
|
|
201
|
-
[spareLink],
|
|
202
|
-
);
|
|
203
220
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
linkToken: string;
|
|
208
|
-
resolve?: (result: PaymentResult) => void;
|
|
209
|
-
}) => {
|
|
210
|
-
if (activeRef.current) {
|
|
211
|
-
args.controller.dispose();
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const flow: ActiveFlow = {
|
|
215
|
-
controller: args.controller,
|
|
216
|
-
linkToken: args.linkToken,
|
|
217
|
-
resolve:
|
|
218
|
-
args.resolve ??
|
|
219
|
-
(() => {
|
|
220
|
-
/* recovery UI only */
|
|
221
|
-
}),
|
|
222
|
-
};
|
|
223
|
-
activeRef.current = flow;
|
|
224
|
-
setActive(flow);
|
|
225
|
-
spareLink.emitEvent(SpareLinkEvents.initialized(args.linkToken));
|
|
221
|
+
spareLink.emitEvent(SpareLinkEvents.bankCallbackReceived(current.reference));
|
|
222
|
+
current.controller.handleReturn(asString);
|
|
223
|
+
return true;
|
|
226
224
|
},
|
|
227
225
|
[spareLink],
|
|
228
226
|
);
|
|
229
227
|
|
|
230
228
|
const resumeIfNeeded = useCallback(async (): Promise<RecoveryResult> => {
|
|
231
|
-
if (
|
|
229
|
+
if (activeRef.current) return noRecovery('flowAlreadyActive');
|
|
230
|
+
if (!pendingSessionStore) return noRecovery('persistenceUnavailable');
|
|
231
|
+
|
|
232
|
+
let record: { reference: string } | null = null;
|
|
233
|
+
try {
|
|
234
|
+
record = await pendingSessionStore.load();
|
|
235
|
+
} catch {
|
|
236
|
+
log.warning('resumeIfNeeded: could not read the pending payment');
|
|
232
237
|
return noRecovery('persistenceUnavailable');
|
|
233
238
|
}
|
|
234
|
-
if (activeRef.current) {
|
|
235
|
-
return noRecovery('flowAlreadyActive');
|
|
236
|
-
}
|
|
237
239
|
|
|
238
|
-
|
|
239
|
-
let openedLinkToken: string | undefined;
|
|
240
|
-
|
|
241
|
-
const terminal = await executeResumeIfNeeded(
|
|
242
|
-
{
|
|
243
|
-
config: {
|
|
244
|
-
environment: spareLink.environment,
|
|
245
|
-
tenant: spareLink.tenant,
|
|
246
|
-
...(spareLink.baseUrl ? { baseUrl: spareLink.baseUrl } : {}),
|
|
247
|
-
...(spareLink.fetch ? { fetch: spareLink.fetch } : {}),
|
|
248
|
-
...(spareLink.requestTimeoutMs !== undefined
|
|
249
|
-
? { requestTimeoutMs: spareLink.requestTimeoutMs }
|
|
250
|
-
: {}),
|
|
251
|
-
},
|
|
252
|
-
},
|
|
253
|
-
{
|
|
254
|
-
pendingSessionStore,
|
|
255
|
-
isFlowActive: () => activeRef.current != null,
|
|
256
|
-
openRecoveryFlow: ({ controller, config }) => {
|
|
257
|
-
flowOpened = true;
|
|
258
|
-
openedLinkToken = config.linkToken;
|
|
259
|
-
openRecoveryFlow({
|
|
260
|
-
controller,
|
|
261
|
-
linkToken: config.linkToken,
|
|
262
|
-
resolve: (result) => {
|
|
263
|
-
spareLink.emitTerminal(result);
|
|
264
|
-
},
|
|
265
|
-
});
|
|
266
|
-
},
|
|
267
|
-
},
|
|
268
|
-
);
|
|
240
|
+
if (!record) return noRecovery('noPendingSession');
|
|
269
241
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
242
|
+
const buffered = bufferedRedirect.current;
|
|
243
|
+
if (buffered) {
|
|
244
|
+
const { outcome, report } = readPaymentReturn(buffered);
|
|
245
|
+
|
|
246
|
+
// The buffered link is only this payment's if it says so. Pairing whatever
|
|
247
|
+
// arrived with whatever was persisted is how a callback for one payment
|
|
248
|
+
// resolves another.
|
|
249
|
+
if (report.reference !== undefined && report.reference !== record.reference) {
|
|
250
|
+
log.warning('resumeIfNeeded: the buffered return names a different payment — keeping it');
|
|
251
|
+
return noRecovery('outcomeUnknown', record.reference);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
bufferedRedirect.current = null;
|
|
255
|
+
clearPending();
|
|
256
|
+
|
|
257
|
+
const base = {
|
|
258
|
+
reference: record.reference,
|
|
259
|
+
...reportedFields(report),
|
|
260
|
+
resolvedAtMs: Date.now(),
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
// A return that did not say what happened is not a failure — the backend
|
|
264
|
+
// holds the outcome, which is what `outcomeUnknown` tells the caller.
|
|
265
|
+
if (outcome === 'unknown') {
|
|
266
|
+
log.info('resumeIfNeeded: the buffered return did not say what happened');
|
|
267
|
+
return noRecovery('outcomeUnknown', record.reference);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const result: PaymentResult =
|
|
271
|
+
outcome === 'processed'
|
|
272
|
+
? paymentSuccess(base)
|
|
273
|
+
: paymentFailed({
|
|
274
|
+
...base,
|
|
275
|
+
errorCode: report.errorCode ?? 'authorize_failed',
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
spareLink.emitTerminal(result);
|
|
279
|
+
return { kind: 'recovered', result };
|
|
276
280
|
}
|
|
277
|
-
|
|
278
|
-
|
|
281
|
+
|
|
282
|
+
log.info(
|
|
283
|
+
'resumeIfNeeded: a payment was pending and no return arrived — the backend holds the outcome',
|
|
284
|
+
);
|
|
285
|
+
clearPending();
|
|
286
|
+
return noRecovery('outcomeUnknown', record.reference);
|
|
287
|
+
}, [pendingSessionStore, spareLink, clearPending]);
|
|
279
288
|
|
|
280
289
|
useEffect(() => {
|
|
281
290
|
const detach = spareLink._attachHost({
|
|
@@ -287,67 +296,34 @@ export function SpareLinkHost(props: SpareLinkHostProps): JSX.Element {
|
|
|
287
296
|
return detach;
|
|
288
297
|
}, [spareLink, startFlow, handleRedirect, resumeIfNeeded]);
|
|
289
298
|
|
|
290
|
-
|
|
299
|
+
/**
|
|
300
|
+
* A dismiss mid-flow means the payer left, which the caller must hear about — a
|
|
301
|
+
* silent close would strand whoever is awaiting the result.
|
|
302
|
+
*/
|
|
303
|
+
const onDismissPressed = useCallback(() => {
|
|
291
304
|
const current = activeRef.current;
|
|
292
305
|
if (!current) return;
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
case 'succeeded':
|
|
297
|
-
result = paymentSuccess({
|
|
298
|
-
linkToken: current.linkToken,
|
|
299
|
-
...(s.exchangeCode ? { exchangeCode: s.exchangeCode } : {}),
|
|
300
|
-
...(s.linkSessionId ? { linkSessionId: s.linkSessionId } : {}),
|
|
301
|
-
...(s.merchantRef ? { merchantRef: s.merchantRef } : {}),
|
|
302
|
-
...(s.selectedProvider ? { bankId: s.selectedProvider.id } : {}),
|
|
303
|
-
...(s.session?.request?.type ? { paymentType: s.session.request.type } : {}),
|
|
304
|
-
resolvedAtMs: Date.now(),
|
|
305
|
-
});
|
|
306
|
-
break;
|
|
307
|
-
case 'failed': {
|
|
308
|
-
const errorCode = s.errorCode ?? 'unknown_error';
|
|
309
|
-
result = paymentFailed({
|
|
310
|
-
linkToken: current.linkToken,
|
|
311
|
-
errorCode,
|
|
312
|
-
message: userFriendlyMessageFor(errorCode),
|
|
313
|
-
resolvedAtMs: Date.now(),
|
|
314
|
-
});
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
317
|
-
case 'cancelled':
|
|
318
|
-
result = paymentCancelled({
|
|
319
|
-
linkToken: current.linkToken,
|
|
320
|
-
resolvedAtMs: Date.now(),
|
|
321
|
-
});
|
|
322
|
-
break;
|
|
323
|
-
default:
|
|
324
|
-
result = paymentAbandoned({
|
|
325
|
-
linkToken: current.linkToken,
|
|
326
|
-
resolvedAtMs: Date.now(),
|
|
327
|
-
});
|
|
328
|
-
break;
|
|
329
|
-
}
|
|
330
|
-
close(current, result);
|
|
331
|
-
}, [close]);
|
|
306
|
+
current.controller.abandon();
|
|
307
|
+
close(current, resultFor(current));
|
|
308
|
+
}, [close, resultFor]);
|
|
332
309
|
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
if (!
|
|
336
|
-
|
|
337
|
-
|
|
310
|
+
const modalBody = useMemo(() => {
|
|
311
|
+
if (!active) return null;
|
|
312
|
+
if (!fontsLoaded) {
|
|
313
|
+
return (
|
|
314
|
+
<View style={styles.fontLoading}>
|
|
315
|
+
<ActivityIndicator size="large" color={Colors.spareBlue} />
|
|
316
|
+
</View>
|
|
317
|
+
);
|
|
338
318
|
}
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
319
|
+
return (
|
|
320
|
+
<HostedPaymentPage
|
|
321
|
+
controller={active.controller}
|
|
322
|
+
baseUrl={spareLink.resolvedBaseUrl}
|
|
323
|
+
onResolved={onResolved}
|
|
324
|
+
/>
|
|
343
325
|
);
|
|
344
|
-
|
|
345
|
-
}, [onResolved, spareLink]);
|
|
346
|
-
|
|
347
|
-
const launcher = useMemo(
|
|
348
|
-
() => launchBankRedirect ?? defaultLaunchBankRedirect,
|
|
349
|
-
[launchBankRedirect],
|
|
350
|
-
);
|
|
326
|
+
}, [active, fontsLoaded, spareLink, onResolved]);
|
|
351
327
|
|
|
352
328
|
return (
|
|
353
329
|
<>
|
|
@@ -366,21 +342,7 @@ export function SpareLinkHost(props: SpareLinkHostProps): JSX.Element {
|
|
|
366
342
|
testID="spare-link-modal-root"
|
|
367
343
|
>
|
|
368
344
|
<ModalDismissButton visible={showDismissButton} onPress={onDismissPressed} />
|
|
369
|
-
{active ?
|
|
370
|
-
<View style={styles.flowWrap}>
|
|
371
|
-
{fontsLoaded ? (
|
|
372
|
-
<PaymentFlowPage
|
|
373
|
-
controller={active.controller}
|
|
374
|
-
onResolved={onResolved}
|
|
375
|
-
launchBankRedirect={launcher}
|
|
376
|
-
/>
|
|
377
|
-
) : (
|
|
378
|
-
<View style={styles.fontLoading}>
|
|
379
|
-
<ActivityIndicator size="large" color={Colors.spareBlue} />
|
|
380
|
-
</View>
|
|
381
|
-
)}
|
|
382
|
-
</View>
|
|
383
|
-
) : null}
|
|
345
|
+
{active ? <View style={styles.flowWrap}>{modalBody}</View> : null}
|
|
384
346
|
</SafeAreaView>
|
|
385
347
|
</Modal>
|
|
386
348
|
</>
|
|
@@ -392,3 +354,21 @@ const styles = StyleSheet.create({
|
|
|
392
354
|
flowWrap: { flex: 1 },
|
|
393
355
|
fontLoading: { flex: 1, alignItems: 'center', justifyContent: 'center' },
|
|
394
356
|
});
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Lifts what the return reported onto the result the caller awaits.
|
|
360
|
+
*
|
|
361
|
+
* `errorCode` is not among them: a failure's code has a fallback the report does
|
|
362
|
+
* not, so it is set where the failure is built.
|
|
363
|
+
*/
|
|
364
|
+
function reportedFields(report: PaymentReturnReport | undefined) {
|
|
365
|
+
if (!report) return {};
|
|
366
|
+
return {
|
|
367
|
+
...(report.merchantRef ? { merchantRef: report.merchantRef } : {}),
|
|
368
|
+
...(report.paymentId ? { paymentId: report.paymentId } : {}),
|
|
369
|
+
...(report.mandateId ? { mandateId: report.mandateId } : {}),
|
|
370
|
+
...(report.signature ? { signature: report.signature } : {}),
|
|
371
|
+
...(report.errorReason ? { errorReason: report.errorReason } : {}),
|
|
372
|
+
...(report.errorDescription ? { message: report.errorDescription } : {}),
|
|
373
|
+
};
|
|
374
|
+
}
|
package/src/ui/widgets/index.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { CustomStepper, type CustomStepperProps } from './stepper';
|
|
2
|
-
export { LayoutWHeader, type LayoutWHeaderProps } from './layout-w-header';
|
|
3
1
|
export { Footer, type FooterProps } from './footer';
|
|
4
2
|
export { GradientSpinner, type GradientSpinnerProps } from './gradient-spinner';
|
|
5
3
|
export { HandoffScreenLayout, type HandoffScreenLayoutProps } from './handoff-screen-layout';
|
|
4
|
+
export { ModalDismissButton, type ModalDismissButtonProps } from './modal-dismiss-button';
|
package/src/version.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SDK version reported in telemetry and the default User-Agent.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* SDK version reported in telemetry and the default User-Agent.
|
|
3
|
+
*
|
|
4
|
+
* GENERATED FILE — do not edit by hand. Written from package.json by
|
|
5
|
+
* scripts/sync-sdk-version.mjs (run by the root `version` npm script after
|
|
6
|
+
* `changeset version`). The src/index.ts smoke test asserts this matches
|
|
7
|
+
* package.json's version.
|
|
6
8
|
*/
|
|
7
|
-
export const SDK_VERSION = '
|
|
9
|
+
export const SDK_VERSION = '1.0.0' as const;
|