@agent-cards/checkout 0.13.0 → 0.14.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/CHANGELOG.md +2 -0
- package/PREFLIGHT.md +1 -0
- package/README.md +15 -4
- package/dist/builtin-registry.generated.js +1 -1
- package/dist/preflight-capabilities.generated.d.ts +63 -0
- package/dist/preflight-capabilities.generated.js +97 -0
- package/dist/preflight-catalog.json +145 -0
- package/dist/preflight-schemas.json +6 -0
- package/dist/preflight.generated.d.ts +63 -0
- package/dist/preflight.generated.js +2 -2
- package/dist/prepared-processor.d.ts +1 -1
- package/dist/prepared-processor.js +6 -1
- package/dist/spreedly.generated.d.ts +10 -0
- package/dist/spreedly.generated.js +332 -0
- package/dist/stripe-checkout.generated.js +9 -1
- package/examples/preflight/kernel-native/inventory.json +10 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
- Approve Spreedly's native hosted-card checkout with `prepare({ psp: 'spreedly', environment: 'shared' })`. The Vault tokenizes the selected card over the encrypted relay and returns the native response. Matching API, Vault, relay and database releases are required; tokenization alone does not confirm payment. Saved-card updates and other Spreedly flows remain unsupported.
|
|
6
|
+
|
|
5
7
|
- Identify hosted, regional, and versioned processor variants seen on live checkouts: Adyen secured fields on the regional live hosts and any release, the Square card element frame, dLocal Smart Fields releases, Mercado Pago secure fields and the guest Checkout Pro card form, and the Rapyd hosted checkout page. The Tranzila terminal-root page, the Authorize.Net hosted payment form, and Worldpay hosted payment pages identify their processor and return `unknown` with `processor_variant_unverified`. The catalog is `2026-09-15.1`; issue native profiles against it.
|
|
6
8
|
|
|
7
9
|
- Report a sole script-only candidate as `psp` only when the observation is complete. On a partial scan the script stays in `candidates` as `undetermined`, so a co-loaded SDK is never presented as the selected processor.
|
package/PREFLIGHT.md
CHANGED
|
@@ -171,6 +171,7 @@ The catalog includes reviewed discovery rules and direct SDK implementation capa
|
|
|
171
171
|
| Mollie | `token` |
|
|
172
172
|
| Paysafe | `token` |
|
|
173
173
|
| Recurly | `token` |
|
|
174
|
+
| Spreedly | `token` |
|
|
174
175
|
| Moneris | `token` |
|
|
175
176
|
| Bambora | `token` |
|
|
176
177
|
| Global Payments | `token` |
|
package/README.md
CHANGED
|
@@ -84,8 +84,8 @@ Agentcard derives it.
|
|
|
84
84
|
Then let your agent click "Pay" like it always does. `attachToCdp` pauses the
|
|
85
85
|
request for approval and resumes it only while the merchant request remains
|
|
86
86
|
live. Merchant timeouts still apply: Square's observed tokenization deadline
|
|
87
|
-
is about 10 seconds,
|
|
88
|
-
`controller.prepare()` before the first Pay action as shown below.
|
|
87
|
+
is about 10 seconds, Braintree's native request timeout is 60 seconds, and Adyen Web's own request timeout abandons its Sessions payment call 60 seconds after Pay (observed on Adyen Web 6.41 and 6.44), each including approval and handoff. These are the processors' limits, not ones the SDK enforces: the SDK's own authorization wait stays 15 minutes. For human approval, use
|
|
88
|
+
`controller.prepare()` before the first Pay action as shown below. Adyen is not on the `prepare()` list yet, so an Adyen approval has to land within Adyen Web's minute.
|
|
89
89
|
|
|
90
90
|
Playwright:
|
|
91
91
|
|
|
@@ -136,7 +136,7 @@ Coverage is specific to the processor request format, merchant setup, browser tr
|
|
|
136
136
|
| Checkout.com | supported |
|
|
137
137
|
| Mercado Pago | Card tokenization and prepared checkout are implemented. Guest Checkout Pro in Mexico also corrects the issuer for one native card association when the selected card has the same brand and type. One live MXN 40 Lotería Chida purchase with published SDK 0.10.0 completed automatically through Pay; the merchant confirmed paid status and PDF fulfillment. The historical SDK result remains unknown because the private receipt adapter rejected a relative download URL; a separate read with the corrected adapter confirms that same paid receipt. Independent processor capture/settlement and other country or integration paths remain unverified. |
|
|
138
138
|
| VGS Collect (Very Good Security; Wolt) | not supported: VGS's proxy aliases only submissions from its own iframe, so a replay from the cardholder's device is refused by the merchant (verified on Wolt, 2026-09-03). Not recognized, so the agent's browser is not paused there |
|
|
139
|
-
| Adyen | supported (mode `cse`): the vault encrypts the card for Adyen on the cardholder's device and your browser sends it |
|
|
139
|
+
| Adyen | supported (mode `cse`): the vault encrypts the card for Adyen on the cardholder's device and your browser sends it. Sessions flow only: the paused request is `/checkoutshopper/v1/sessions/{id}/payments` on Adyen's own hosts; a merchant that posts the encrypted fields to its own server is not recognized, so nothing pauses there. Approval starts at Pay and must land before Adyen Web's own request timeout (observed at 60 seconds on Adyen Web 6.41 and 6.44; not enforced by the SDK); `prepare()` is not available for Adyen yet |
|
|
140
140
|
| Tranzila | supported (mode `hosted_form`): the cardholder finishes on Tranzila's own page; the paused form navigation resolves to a synthetic page, and you poll the merchant's order state |
|
|
141
141
|
|
|
142
142
|
The recognizer list is fetched from the API at runtime (`vault.syncRegistry()`),
|
|
@@ -514,8 +514,19 @@ await page.getByRole('button', { name: 'Pay', exact: true }).click();
|
|
|
514
514
|
| Bambora | `shared` | `/scripts/tokenization/tokens` on `api.bam.shift4api.net` or `api.na.bambora.com` |
|
|
515
515
|
| Mercado Pago | `shared` | `api.mercadopago.com/v1/card_tokens` with a fresh card body |
|
|
516
516
|
| Recurly | `shared` | Form-encoded POST to `/js/v1/token` on `api.recurly.com` or `api.eu.recurly.com` |
|
|
517
|
+
| Spreedly | `shared` | Native iframe JSON POST to `/v1/payment_methods/restricted.json` on `core.spreedly.com` |
|
|
517
518
|
|
|
518
|
-
Use `environment: 'shared'` for Bambora, Mercado Pago and
|
|
519
|
+
Use `environment: 'shared'` for Bambora, Mercado Pago, Recurly and Spreedly because the same endpoint serves test and live requests. Agentcard cannot establish the processor's test mode from that URL or a credential prefix. Configure test mode through the merchant's processor account when testing. Agentcard's own `sandbox` flag remains separate. Prepared Worldpay, Bambora, Mercado Pago and Recurly requests reject saved-card and recurring request bodies; a refused request retires the local preparation. Reconcile any existing merchant attempt before creating a new attachment.
|
|
520
|
+
|
|
521
|
+
Prepare a Spreedly checkout before submitting the merchant's card form:
|
|
522
|
+
|
|
523
|
+
```ts
|
|
524
|
+
await controller.prepare({ psp: 'spreedly', environment: 'shared' });
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
After approval, submit the form once. The Vault replaces the card fields on your device and sends the native request through an encrypted connection to Spreedly. The merchant's environment and signed session stay unchanged. The API, Vault, relay and preparation migration must support Spreedly before you use this flow; the API refuses preparations while its relay rollout flag is disabled.
|
|
528
|
+
|
|
529
|
+
Initial coverage includes the hosted iframe's new-card request. Saved-card CVV updates, Express, wallets, bank accounts and gateway purchase APIs require separate support. A returned card token does not confirm payment; wait for the merchant's result before reporting success. Autopilot is unavailable for Spreedly.
|
|
519
530
|
|
|
520
531
|
Prepare Recurly before clicking the merchant's payment button:
|
|
521
532
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const BUILTIN_REGISTRY = [{ "psp": "shopify", "match": /(checkout\.pci\.shopifyinc\.com|deposit\.[a-z0-9-]+\.shopifycs\.com)\/sessions/i, "hosts": ["^checkout\\.pci\\.shopifyinc\\.com$", "^deposit\\.[a-z0-9-]+\\.shopifycs\\.com$"], "encoding": "json", "passthroughHeaders": [/^shopify-identification-signature$/i] }, { "psp": "stripe", "match": /api\.stripe\.com\/v1\/(payment_methods|tokens|setup_intents\/seti_\w+\/confirm|payment_intents\/pi_\w+\/confirm)/i, "hosts": ["^api\\.stripe\\.com$"], "encoding": "form", "passthroughHeaders": [/^authorization$/i, /^stripe-version$/i, /^x-stripe-client-user-agent$/i] }, { "psp": "braintree", "match": /payments(\.sandbox)?\.braintree-api\.com\/graphql/i, "hosts": ["^payments\\.braintree-api\\.com$", "^payments\\.sandbox\\.braintree-api\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i, /^braintree-version$/i] }, { "psp": "checkout_com", "match": /(api|card-acquisition-gateway)(\.sandbox)?\.checkout\.com\/tokens/i, "hosts": ["^api\\.checkout\\.com$", "^api\\.sandbox\\.checkout\\.com$", "^card-acquisition-gateway\\.checkout\\.com$", "^card-acquisition-gateway\\.sandbox\\.checkout\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i] }, { "psp": "adyen", "match": /(checkoutshopper-(test|live(-[a-z]+)?)\.adyen\.com|([a-z0-9-]+\.)*adyenpayments\.com)\/checkoutshopper\/v1\/sessions\/[A-Za-z0-9_-]+\/payments/i, "hosts": ["^checkoutshopper-(test|live(-[a-z]+)?)\\.adyen\\.com$", "^([a-z0-9-]+\\.)*adyenpayments\\.com$"], "encoding": "json", "passthroughHeaders": [], "clientSideEncrypted": true, "mode": "cse" }, { "psp": "tranzila", "match": /(direct\.tranzila\.com\/process\/n\/|directng\.tranzila\.com\/process\/?)/i, "hosts": ["^direct\\.tranzila\\.com$", "^directng\\.tranzila\\.com$"], "encoding": "form", "passthroughHeaders": [], "mode": "hosted_form" }, { "psp": "square", "match": /pci-connect\.squareup(?:sandbox)?\.com\/v2\/card-nonce/i, "hosts": ["^pci-connect\\.squareup\\.com$", "^pci-connect\\.squareupsandbox\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "authorize_net", "match": /(api2|apitest)\.authorize\.net\/xml\/v1\/request\.api/i, "hosts": ["^api2\\.authorize\\.net$", "^apitest\\.authorize\\.net$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "worldpay", "match": /(try\.)?access\.worldpay\.com\/(sessions\/card|verifiedTokens\/sessions)/i, "hosts": ["^access\\.worldpay\\.com$", "^try\\.access\\.worldpay\\.com$"], "encoding": "json", "passthroughHeaders": [/^accept$/i] }, { "psp": "nuvei", "match": /(secure|ppp-test)\.safecharge\.com\/ppp\/api\/v1\/(?:cardTokenization|clientPayment|websdk\/initPaymentWithCardTokenization)\.do/i, "hosts": ["^secure\\.safecharge\\.com$", "^ppp-test\\.safecharge\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "airwallex", "match": /(checkout(\.sandbox)?\.airwallex\.com|pci-api(\.sandbox)?\.airwallex\.com)\/api\/v1\/pa\/(payment_intents\/[^/?#]+\/confirm|payment_consents\/[^/?#]+\/verify|payment_methods\/create)(\?|$)/i, "hosts": ["^checkout\\.airwallex\\.com$", "^checkout\\.sandbox\\.airwallex\\.com$", "^pci-api\\.airwallex\\.com$", "^pci-api\\.sandbox\\.airwallex\\.com$"], "encoding": "json", "passthroughHeaders": [/^client-secret$/i, /^authorization$/i, /^x-auth-token$/i, /^x-on-behalf-of$/i, /^x-api-version$/i] }, { "psp": "rapyd", "match": /(api|sandboxapi)\.rapyd\.net\/v1\/(?:hosted\/collect\/card\/[^/?#]+\/payment_method|checkout\/checkout_[A-Za-z0-9]+)(?:[?#]|$)/i, "hosts": ["^api\\.rapyd\\.net$", "^sandboxapi\\.rapyd\\.net$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "dlocal", "match": /ppmcc(-sandbox)?\.dlocal\.com\/cvault\/credit-card\/temporal/i, "hosts": ["^ppmcc\\.dlocal\\.com$", "^ppmcc-sandbox\\.dlocal\\.com$"], "encoding": "json", "passthroughHeaders": [/^x-fields-api-key$/i, /^x-uow$/i, /^x-dlocal-infrav2$/i] }, { "psp": "ebanx", "match": /(?:(?:customer-frontier|customer|api-local-latam|api|sandbox-local-latam|sandbox)\.ebanx\.com|(?:api-diamond|api|sandbox)\.ebanxpay\.com)\/ws\/token/i, "hosts": ["^customer\\.ebanx\\.com$", "^customer-frontier\\.ebanx\\.com$", "^api\\.ebanx\\.com$", "^sandbox\\.ebanx\\.com$", "^api-local-latam\\.ebanx\\.com$", "^sandbox-local-latam\\.ebanx\\.com$", "^api-diamond\\.ebanxpay\\.com$", "^api\\.ebanxpay\\.com$", "^sandbox\\.ebanxpay\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "mercado_pago", "match": /api\.mercadopago\.com\/v1\/card_tokens(?![\w/-])/i, "hosts": ["^api\\.mercadopago\\.com$"], "encoding": "json", "passthroughHeaders": [/^x-product-id$/i] }, { "psp": "payu", "match": /(secure\.payu\.com|(merch-prod|secure)\.snd\.payu\.com)\/api\/front\/tokens/i, "hosts": ["^secure\\.payu\\.com$", "^(merch-prod|secure)\\.snd\\.payu\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "razorpay", "match": /api\.razorpay\.com\/v1\/(?:standard_checkout\/)?payments\/create\/(?:ajax|checkout|fees)/i, "hosts": ["^api\\.razorpay\\.com$"], "encoding": "form", "passthroughHeaders": [/^x-razorpay-sessionid$/i, /^x-customer-access-token$/i] }, { "psp": "mollie", "match": /api\.cc\.mollie\.com\/v1\/card-tokens/i, "hosts": ["^api\\.cc\\.mollie\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "paysafe", "match": /(?:api(\.test)?\.paysafe\.com\/(?:paymenthub\/v1\/singleusepaymenthandles|js\/api\/v1\/tokenize)|hosted(\.test)?\.paysafe\.com\/checkout\/api\/v1\/tokenize)(?![\w/-])/i, "hosts": ["^api\\.paysafe\\.com$", "^api\\.test\\.paysafe\\.com$", "^hosted\\.paysafe\\.com$", "^hosted\\.test\\.paysafe\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i, /^x-paysafe-credentials$/i, /^correlationid$/i] }, { "psp": "recurly", "match": /api(\.eu)?\.recurly\.com\/js\/v1\/token(?![\w-])/i, "hosts": ["^api\\.recurly\\.com$", "^api\\.eu\\.recurly\\.com$"], "encoding": "form", "passthroughHeaders": [/^recurly-credential-checkout-hostname$/i] }, { "psp": "moneris", "match": /(www3|esqa|gateway|gatewayqa|gatewayt|gatewaydev)\.moneris\.com\/HPPtoken\/request\.php/i, "hosts": ["^www3\\.moneris\\.com$", "^esqa\\.moneris\\.com$", "^gateway\\.moneris\\.com$", "^gatewayqa\\.moneris\\.com$", "^gatewayt\\.moneris\\.com$", "^gatewaydev\\.moneris\\.com$"], "encoding": "form", "passthroughHeaders": [] }, { "psp": "bambora", "match": /(api\.na\.bambora\.com|api\.bam\.shift4api\.net)\/scripts\/tokenization\/tokens/i, "hosts": ["^api\\.na\\.bambora\\.com$", "^api\\.bam\\.shift4api\\.net$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "global_payments", "match": /(?:api\.heartlandportico\.com\/SecureSubmit\.v1\/api\/token|cert\.api2\.heartlandportico\.com\/Hps\.Exchange\.PosGateway\.Hpf\.v1\/api\/token|apis(?:\.sandbox)?(?:\.eu)?\.globalpay\.com\/ucp\/(?:merchants\/[^/]+\/)?payment-methods)/i, "hosts": ["^api\\.heartlandportico\\.com$", "^cert\\.api2\\.heartlandportico\\.com$", "^apis\\.globalpay\\.com$", "^apis\\.sandbox\\.globalpay\\.com$", "^apis\\.eu\\.globalpay\\.com$", "^apis\\.sandbox\\.eu\\.globalpay\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i, /^x-gp-version$/i] }];
|
|
1
|
+
export const BUILTIN_REGISTRY = [{ "psp": "spreedly", "match": /core\.spreedly\.com\/v1\/payment_methods\/restricted\.json/i, "hosts": ["^core\\.spreedly\\.com$"], "encoding": "json", "passthroughHeaders": [/^spreedly-environment-key$/i] }, { "psp": "shopify", "match": /(checkout\.pci\.shopifyinc\.com|deposit\.[a-z0-9-]+\.shopifycs\.com)\/sessions/i, "hosts": ["^checkout\\.pci\\.shopifyinc\\.com$", "^deposit\\.[a-z0-9-]+\\.shopifycs\\.com$"], "encoding": "json", "passthroughHeaders": [/^shopify-identification-signature$/i] }, { "psp": "stripe", "match": /api\.stripe\.com\/v1\/(payment_methods|tokens|setup_intents\/seti_\w+\/confirm|payment_intents\/pi_\w+\/confirm)/i, "hosts": ["^api\\.stripe\\.com$"], "encoding": "form", "passthroughHeaders": [/^authorization$/i, /^stripe-version$/i, /^x-stripe-client-user-agent$/i] }, { "psp": "braintree", "match": /payments(\.sandbox)?\.braintree-api\.com\/graphql/i, "hosts": ["^payments\\.braintree-api\\.com$", "^payments\\.sandbox\\.braintree-api\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i, /^braintree-version$/i] }, { "psp": "checkout_com", "match": /(api|card-acquisition-gateway)(\.sandbox)?\.checkout\.com\/tokens/i, "hosts": ["^api\\.checkout\\.com$", "^api\\.sandbox\\.checkout\\.com$", "^card-acquisition-gateway\\.checkout\\.com$", "^card-acquisition-gateway\\.sandbox\\.checkout\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i] }, { "psp": "adyen", "match": /(checkoutshopper-(test|live(-[a-z]+)?)\.adyen\.com|([a-z0-9-]+\.)*adyenpayments\.com)\/checkoutshopper\/v1\/sessions\/[A-Za-z0-9_-]+\/payments/i, "hosts": ["^checkoutshopper-(test|live(-[a-z]+)?)\\.adyen\\.com$", "^([a-z0-9-]+\\.)*adyenpayments\\.com$"], "encoding": "json", "passthroughHeaders": [], "clientSideEncrypted": true, "mode": "cse" }, { "psp": "tranzila", "match": /(direct\.tranzila\.com\/process\/n\/|directng\.tranzila\.com\/process\/?)/i, "hosts": ["^direct\\.tranzila\\.com$", "^directng\\.tranzila\\.com$"], "encoding": "form", "passthroughHeaders": [], "mode": "hosted_form" }, { "psp": "square", "match": /pci-connect\.squareup(?:sandbox)?\.com\/v2\/card-nonce/i, "hosts": ["^pci-connect\\.squareup\\.com$", "^pci-connect\\.squareupsandbox\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "authorize_net", "match": /(api2|apitest)\.authorize\.net\/xml\/v1\/request\.api/i, "hosts": ["^api2\\.authorize\\.net$", "^apitest\\.authorize\\.net$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "worldpay", "match": /(try\.)?access\.worldpay\.com\/(sessions\/card|verifiedTokens\/sessions)/i, "hosts": ["^access\\.worldpay\\.com$", "^try\\.access\\.worldpay\\.com$"], "encoding": "json", "passthroughHeaders": [/^accept$/i] }, { "psp": "nuvei", "match": /(secure|ppp-test)\.safecharge\.com\/ppp\/api\/v1\/(?:cardTokenization|clientPayment|websdk\/initPaymentWithCardTokenization)\.do/i, "hosts": ["^secure\\.safecharge\\.com$", "^ppp-test\\.safecharge\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "airwallex", "match": /(checkout(\.sandbox)?\.airwallex\.com|pci-api(\.sandbox)?\.airwallex\.com)\/api\/v1\/pa\/(payment_intents\/[^/?#]+\/confirm|payment_consents\/[^/?#]+\/verify|payment_methods\/create)(\?|$)/i, "hosts": ["^checkout\\.airwallex\\.com$", "^checkout\\.sandbox\\.airwallex\\.com$", "^pci-api\\.airwallex\\.com$", "^pci-api\\.sandbox\\.airwallex\\.com$"], "encoding": "json", "passthroughHeaders": [/^client-secret$/i, /^authorization$/i, /^x-auth-token$/i, /^x-on-behalf-of$/i, /^x-api-version$/i] }, { "psp": "rapyd", "match": /(api|sandboxapi)\.rapyd\.net\/v1\/(?:hosted\/collect\/card\/[^/?#]+\/payment_method|checkout\/checkout_[A-Za-z0-9]+)(?:[?#]|$)/i, "hosts": ["^api\\.rapyd\\.net$", "^sandboxapi\\.rapyd\\.net$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "dlocal", "match": /ppmcc(-sandbox)?\.dlocal\.com\/cvault\/credit-card\/temporal/i, "hosts": ["^ppmcc\\.dlocal\\.com$", "^ppmcc-sandbox\\.dlocal\\.com$"], "encoding": "json", "passthroughHeaders": [/^x-fields-api-key$/i, /^x-uow$/i, /^x-dlocal-infrav2$/i] }, { "psp": "ebanx", "match": /(?:(?:customer-frontier|customer|api-local-latam|api|sandbox-local-latam|sandbox)\.ebanx\.com|(?:api-diamond|api|sandbox)\.ebanxpay\.com)\/ws\/token/i, "hosts": ["^customer\\.ebanx\\.com$", "^customer-frontier\\.ebanx\\.com$", "^api\\.ebanx\\.com$", "^sandbox\\.ebanx\\.com$", "^api-local-latam\\.ebanx\\.com$", "^sandbox-local-latam\\.ebanx\\.com$", "^api-diamond\\.ebanxpay\\.com$", "^api\\.ebanxpay\\.com$", "^sandbox\\.ebanxpay\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "mercado_pago", "match": /api\.mercadopago\.com\/v1\/card_tokens(?![\w/-])/i, "hosts": ["^api\\.mercadopago\\.com$"], "encoding": "json", "passthroughHeaders": [/^x-product-id$/i] }, { "psp": "payu", "match": /(secure\.payu\.com|(merch-prod|secure)\.snd\.payu\.com)\/api\/front\/tokens/i, "hosts": ["^secure\\.payu\\.com$", "^(merch-prod|secure)\\.snd\\.payu\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "razorpay", "match": /api\.razorpay\.com\/v1\/(?:standard_checkout\/)?payments\/create\/(?:ajax|checkout|fees)/i, "hosts": ["^api\\.razorpay\\.com$"], "encoding": "form", "passthroughHeaders": [/^x-razorpay-sessionid$/i, /^x-customer-access-token$/i] }, { "psp": "mollie", "match": /api\.cc\.mollie\.com\/v1\/card-tokens/i, "hosts": ["^api\\.cc\\.mollie\\.com$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "paysafe", "match": /(?:api(\.test)?\.paysafe\.com\/(?:paymenthub\/v1\/singleusepaymenthandles|js\/api\/v1\/tokenize)|hosted(\.test)?\.paysafe\.com\/checkout\/api\/v1\/tokenize)(?![\w/-])/i, "hosts": ["^api\\.paysafe\\.com$", "^api\\.test\\.paysafe\\.com$", "^hosted\\.paysafe\\.com$", "^hosted\\.test\\.paysafe\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i, /^x-paysafe-credentials$/i, /^correlationid$/i] }, { "psp": "recurly", "match": /api(\.eu)?\.recurly\.com\/js\/v1\/token(?![\w-])/i, "hosts": ["^api\\.recurly\\.com$", "^api\\.eu\\.recurly\\.com$"], "encoding": "form", "passthroughHeaders": [/^recurly-credential-checkout-hostname$/i] }, { "psp": "moneris", "match": /(www3|esqa|gateway|gatewayqa|gatewayt|gatewaydev)\.moneris\.com\/HPPtoken\/request\.php/i, "hosts": ["^www3\\.moneris\\.com$", "^esqa\\.moneris\\.com$", "^gateway\\.moneris\\.com$", "^gatewayqa\\.moneris\\.com$", "^gatewayt\\.moneris\\.com$", "^gatewaydev\\.moneris\\.com$"], "encoding": "form", "passthroughHeaders": [] }, { "psp": "bambora", "match": /(api\.na\.bambora\.com|api\.bam\.shift4api\.net)\/scripts\/tokenization\/tokens/i, "hosts": ["^api\\.na\\.bambora\\.com$", "^api\\.bam\\.shift4api\\.net$"], "encoding": "json", "passthroughHeaders": [] }, { "psp": "global_payments", "match": /(?:api\.heartlandportico\.com\/SecureSubmit\.v1\/api\/token|cert\.api2\.heartlandportico\.com\/Hps\.Exchange\.PosGateway\.Hpf\.v1\/api\/token|apis(?:\.sandbox)?(?:\.eu)?\.globalpay\.com\/ucp\/(?:merchants\/[^/]+\/)?payment-methods)/i, "hosts": ["^api\\.heartlandportico\\.com$", "^cert\\.api2\\.heartlandportico\\.com$", "^apis\\.globalpay\\.com$", "^apis\\.sandbox\\.globalpay\\.com$", "^apis\\.eu\\.globalpay\\.com$", "^apis\\.sandbox\\.eu\\.globalpay\\.com$"], "encoding": "json", "passthroughHeaders": [/^authorization$/i, /^x-gp-version$/i] }];
|
|
@@ -3,6 +3,69 @@ export declare const CHECKOUT_PREFLIGHT_CAPABILITIES: {
|
|
|
3
3
|
readonly scope: "processor_integration";
|
|
4
4
|
readonly integration: "direct_sdk";
|
|
5
5
|
readonly processors: readonly [{
|
|
6
|
+
readonly psp: "spreedly";
|
|
7
|
+
readonly status: "supported";
|
|
8
|
+
readonly mode: "token";
|
|
9
|
+
readonly operations: readonly [{
|
|
10
|
+
readonly id: "spreedly.card_request";
|
|
11
|
+
readonly effect: "processor_specific_card_request";
|
|
12
|
+
readonly amount_binding: "unestablished";
|
|
13
|
+
readonly psp: "spreedly";
|
|
14
|
+
readonly version: 1;
|
|
15
|
+
readonly mode: "token";
|
|
16
|
+
readonly autopilot_eligible: false;
|
|
17
|
+
readonly requires: "reviewed_final_payment_and_continuation_evidence";
|
|
18
|
+
}];
|
|
19
|
+
readonly scenarios: {
|
|
20
|
+
readonly one_time: {
|
|
21
|
+
readonly status: "supported";
|
|
22
|
+
readonly reason: "card_request_adapter_implemented";
|
|
23
|
+
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation"];
|
|
24
|
+
};
|
|
25
|
+
readonly save_card: {
|
|
26
|
+
readonly status: "conditional";
|
|
27
|
+
readonly reason: "merchant_card_storage_and_consent_required";
|
|
28
|
+
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation", "stored_card_consent", "merchant_card_saved"];
|
|
29
|
+
};
|
|
30
|
+
readonly subscription_initial: {
|
|
31
|
+
readonly status: "conditional";
|
|
32
|
+
readonly reason: "merchant_card_storage_and_consent_required";
|
|
33
|
+
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation", "stored_card_consent", "merchant_subscription_confirmation"];
|
|
34
|
+
};
|
|
35
|
+
readonly subscription_renewal: {
|
|
36
|
+
readonly status: "outside_vault";
|
|
37
|
+
readonly reason: "renewal_managed_by_merchant";
|
|
38
|
+
readonly requirements: readonly ["verify_merchant_billing"];
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
readonly limitations: readonly ["Only the listed request format is recognized; a recognized processor is not verified merchant coverage.", "The adapter handles the Spreedly iframe v1 restricted endpoint for new credit cards through the encrypted relay.", "The merchant environment and optional signed iframe session must remain valid. Expired signatures require a fresh merchant checkout.", "Spreedly creates a payment-method token; the merchant still completes any gateway payment and authentication."];
|
|
42
|
+
readonly unsupported_variants: readonly [{
|
|
43
|
+
readonly variant: "general_javascript_api";
|
|
44
|
+
readonly status: "unsupported";
|
|
45
|
+
readonly constraint: "direct_sdk";
|
|
46
|
+
readonly reason: "The general payment_methods.json endpoint is outside the reviewed native iframe path.";
|
|
47
|
+
}, {
|
|
48
|
+
readonly variant: "saved_card_or_recache";
|
|
49
|
+
readonly status: "unsupported";
|
|
50
|
+
readonly constraint: "direct_sdk";
|
|
51
|
+
readonly reason: "Stored tokens and CVV-only recache requests are outside new-card tokenization.";
|
|
52
|
+
}, {
|
|
53
|
+
readonly variant: "click_to_pay_or_bank_account";
|
|
54
|
+
readonly status: "unsupported";
|
|
55
|
+
readonly constraint: "direct_sdk";
|
|
56
|
+
readonly reason: "Click to Pay and bank-account request shapes require separate validation.";
|
|
57
|
+
}, {
|
|
58
|
+
readonly variant: "gateway_purchase_or_distribution";
|
|
59
|
+
readonly status: "unsupported";
|
|
60
|
+
readonly constraint: "direct_sdk";
|
|
61
|
+
readonly reason: "Gateway transactions and payment-method distribution are outside the card tokenization adapter.";
|
|
62
|
+
}];
|
|
63
|
+
readonly processor_amount: "none";
|
|
64
|
+
readonly challenge_surface: "merchant_browser";
|
|
65
|
+
readonly merchant_confirmation_required: true;
|
|
66
|
+
readonly live_validation: "not_established_by_catalog";
|
|
67
|
+
readonly sources: readonly ["src/definitions.js", "src/operations.js", "src/backend.js", "src/spreedly.js", "../checkout/src/prepared-processor.ts"];
|
|
68
|
+
}, {
|
|
6
69
|
readonly psp: "shopify";
|
|
7
70
|
readonly status: "supported";
|
|
8
71
|
readonly mode: "token";
|
|
@@ -5,6 +5,103 @@ export const CHECKOUT_PREFLIGHT_CAPABILITIES = {
|
|
|
5
5
|
"scope": "processor_integration",
|
|
6
6
|
"integration": "direct_sdk",
|
|
7
7
|
"processors": [
|
|
8
|
+
{
|
|
9
|
+
"psp": "spreedly",
|
|
10
|
+
"status": "supported",
|
|
11
|
+
"mode": "token",
|
|
12
|
+
"operations": [
|
|
13
|
+
{
|
|
14
|
+
"id": "spreedly.card_request",
|
|
15
|
+
"effect": "processor_specific_card_request",
|
|
16
|
+
"amount_binding": "unestablished",
|
|
17
|
+
"psp": "spreedly",
|
|
18
|
+
"version": 1,
|
|
19
|
+
"mode": "token",
|
|
20
|
+
"autopilot_eligible": false,
|
|
21
|
+
"requires": "reviewed_final_payment_and_continuation_evidence"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"scenarios": {
|
|
25
|
+
"one_time": {
|
|
26
|
+
"status": "supported",
|
|
27
|
+
"reason": "card_request_adapter_implemented",
|
|
28
|
+
"requirements": [
|
|
29
|
+
"actual_payment_request_validation",
|
|
30
|
+
"merchant_confirmation"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"save_card": {
|
|
34
|
+
"status": "conditional",
|
|
35
|
+
"reason": "merchant_card_storage_and_consent_required",
|
|
36
|
+
"requirements": [
|
|
37
|
+
"actual_payment_request_validation",
|
|
38
|
+
"merchant_confirmation",
|
|
39
|
+
"stored_card_consent",
|
|
40
|
+
"merchant_card_saved"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"subscription_initial": {
|
|
44
|
+
"status": "conditional",
|
|
45
|
+
"reason": "merchant_card_storage_and_consent_required",
|
|
46
|
+
"requirements": [
|
|
47
|
+
"actual_payment_request_validation",
|
|
48
|
+
"merchant_confirmation",
|
|
49
|
+
"stored_card_consent",
|
|
50
|
+
"merchant_subscription_confirmation"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"subscription_renewal": {
|
|
54
|
+
"status": "outside_vault",
|
|
55
|
+
"reason": "renewal_managed_by_merchant",
|
|
56
|
+
"requirements": [
|
|
57
|
+
"verify_merchant_billing"
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"limitations": [
|
|
62
|
+
"Only the listed request format is recognized; a recognized processor is not verified merchant coverage.",
|
|
63
|
+
"The adapter handles the Spreedly iframe v1 restricted endpoint for new credit cards through the encrypted relay.",
|
|
64
|
+
"The merchant environment and optional signed iframe session must remain valid. Expired signatures require a fresh merchant checkout.",
|
|
65
|
+
"Spreedly creates a payment-method token; the merchant still completes any gateway payment and authentication."
|
|
66
|
+
],
|
|
67
|
+
"unsupported_variants": [
|
|
68
|
+
{
|
|
69
|
+
"variant": "general_javascript_api",
|
|
70
|
+
"status": "unsupported",
|
|
71
|
+
"constraint": "direct_sdk",
|
|
72
|
+
"reason": "The general payment_methods.json endpoint is outside the reviewed native iframe path."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"variant": "saved_card_or_recache",
|
|
76
|
+
"status": "unsupported",
|
|
77
|
+
"constraint": "direct_sdk",
|
|
78
|
+
"reason": "Stored tokens and CVV-only recache requests are outside new-card tokenization."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"variant": "click_to_pay_or_bank_account",
|
|
82
|
+
"status": "unsupported",
|
|
83
|
+
"constraint": "direct_sdk",
|
|
84
|
+
"reason": "Click to Pay and bank-account request shapes require separate validation."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"variant": "gateway_purchase_or_distribution",
|
|
88
|
+
"status": "unsupported",
|
|
89
|
+
"constraint": "direct_sdk",
|
|
90
|
+
"reason": "Gateway transactions and payment-method distribution are outside the card tokenization adapter."
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"processor_amount": "none",
|
|
94
|
+
"challenge_surface": "merchant_browser",
|
|
95
|
+
"merchant_confirmation_required": true,
|
|
96
|
+
"live_validation": "not_established_by_catalog",
|
|
97
|
+
"sources": [
|
|
98
|
+
"src/definitions.js",
|
|
99
|
+
"src/operations.js",
|
|
100
|
+
"src/backend.js",
|
|
101
|
+
"src/spreedly.js",
|
|
102
|
+
"../checkout/src/prepared-processor.ts"
|
|
103
|
+
]
|
|
104
|
+
},
|
|
8
105
|
{
|
|
9
106
|
"psp": "shopify",
|
|
10
107
|
"status": "supported",
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
"raw_url_length": 65536
|
|
12
12
|
},
|
|
13
13
|
"known_psps": [
|
|
14
|
+
{
|
|
15
|
+
"psp": "spreedly",
|
|
16
|
+
"detection": "reviewed_rules"
|
|
17
|
+
},
|
|
14
18
|
{
|
|
15
19
|
"psp": "shopify",
|
|
16
20
|
"detection": "reviewed_rules"
|
|
@@ -1524,6 +1528,44 @@
|
|
|
1524
1528
|
"hostname_pattern": "^hosted\\.test\\.paysafe\\.com$",
|
|
1525
1529
|
"pathname_pattern": "^\\/js\\/v1\\/latest\\/index\\.html$"
|
|
1526
1530
|
},
|
|
1531
|
+
{
|
|
1532
|
+
"id": "spreedly-iframe-v1-script",
|
|
1533
|
+
"psp": "spreedly",
|
|
1534
|
+
"kinds": [
|
|
1535
|
+
"script"
|
|
1536
|
+
],
|
|
1537
|
+
"origin": "https://core.spreedly.com",
|
|
1538
|
+
"path_pattern": "^/iframe/iframe-v1\\.min\\.js$",
|
|
1539
|
+
"sources": [
|
|
1540
|
+
{
|
|
1541
|
+
"kind": "primary_source",
|
|
1542
|
+
"reference": "https://core.spreedly.com/iframe/iframe-v1.min.js",
|
|
1543
|
+
"reviewed_on": "2026-09-16"
|
|
1544
|
+
}
|
|
1545
|
+
],
|
|
1546
|
+
"hostname_pattern": "^core\\.spreedly\\.com$",
|
|
1547
|
+
"pathname_pattern": "^\\/iframe\\/iframe-v1\\.min\\.js$"
|
|
1548
|
+
},
|
|
1549
|
+
{
|
|
1550
|
+
"id": "spreedly-native-card-frame",
|
|
1551
|
+
"psp": "spreedly",
|
|
1552
|
+
"kinds": [
|
|
1553
|
+
"frame",
|
|
1554
|
+
"iframe",
|
|
1555
|
+
"document"
|
|
1556
|
+
],
|
|
1557
|
+
"origin": "https://core.spreedly.com",
|
|
1558
|
+
"path_pattern": "^/v1/embedded/(?:number|cvv)-frame-1\\.[0-9]{1,4}\\.html$",
|
|
1559
|
+
"sources": [
|
|
1560
|
+
{
|
|
1561
|
+
"kind": "primary_source",
|
|
1562
|
+
"reference": "https://core.spreedly.com/iframe/iframe-v1.min.js",
|
|
1563
|
+
"reviewed_on": "2026-09-16"
|
|
1564
|
+
}
|
|
1565
|
+
],
|
|
1566
|
+
"hostname_pattern": "^core\\.spreedly\\.com$",
|
|
1567
|
+
"pathname_pattern": "^\\/v1\\/embedded\\/(?:number|cvv)-frame-1\\.[0-9]{1,4}\\.html$"
|
|
1568
|
+
},
|
|
1527
1569
|
{
|
|
1528
1570
|
"id": "recurly-js-v4",
|
|
1529
1571
|
"psp": "recurly",
|
|
@@ -2415,6 +2457,103 @@
|
|
|
2415
2457
|
}
|
|
2416
2458
|
],
|
|
2417
2459
|
"processors": [
|
|
2460
|
+
{
|
|
2461
|
+
"psp": "spreedly",
|
|
2462
|
+
"status": "supported",
|
|
2463
|
+
"mode": "token",
|
|
2464
|
+
"operations": [
|
|
2465
|
+
{
|
|
2466
|
+
"id": "spreedly.card_request",
|
|
2467
|
+
"effect": "processor_specific_card_request",
|
|
2468
|
+
"amount_binding": "unestablished",
|
|
2469
|
+
"psp": "spreedly",
|
|
2470
|
+
"version": 1,
|
|
2471
|
+
"mode": "token",
|
|
2472
|
+
"autopilot_eligible": false,
|
|
2473
|
+
"requires": "reviewed_final_payment_and_continuation_evidence"
|
|
2474
|
+
}
|
|
2475
|
+
],
|
|
2476
|
+
"scenarios": {
|
|
2477
|
+
"one_time": {
|
|
2478
|
+
"status": "supported",
|
|
2479
|
+
"reason": "card_request_adapter_implemented",
|
|
2480
|
+
"requirements": [
|
|
2481
|
+
"actual_payment_request_validation",
|
|
2482
|
+
"merchant_confirmation"
|
|
2483
|
+
]
|
|
2484
|
+
},
|
|
2485
|
+
"save_card": {
|
|
2486
|
+
"status": "conditional",
|
|
2487
|
+
"reason": "merchant_card_storage_and_consent_required",
|
|
2488
|
+
"requirements": [
|
|
2489
|
+
"actual_payment_request_validation",
|
|
2490
|
+
"merchant_confirmation",
|
|
2491
|
+
"stored_card_consent",
|
|
2492
|
+
"merchant_card_saved"
|
|
2493
|
+
]
|
|
2494
|
+
},
|
|
2495
|
+
"subscription_initial": {
|
|
2496
|
+
"status": "conditional",
|
|
2497
|
+
"reason": "merchant_card_storage_and_consent_required",
|
|
2498
|
+
"requirements": [
|
|
2499
|
+
"actual_payment_request_validation",
|
|
2500
|
+
"merchant_confirmation",
|
|
2501
|
+
"stored_card_consent",
|
|
2502
|
+
"merchant_subscription_confirmation"
|
|
2503
|
+
]
|
|
2504
|
+
},
|
|
2505
|
+
"subscription_renewal": {
|
|
2506
|
+
"status": "outside_vault",
|
|
2507
|
+
"reason": "renewal_managed_by_merchant",
|
|
2508
|
+
"requirements": [
|
|
2509
|
+
"verify_merchant_billing"
|
|
2510
|
+
]
|
|
2511
|
+
}
|
|
2512
|
+
},
|
|
2513
|
+
"limitations": [
|
|
2514
|
+
"Only the listed request format is recognized; a recognized processor is not verified merchant coverage.",
|
|
2515
|
+
"The adapter handles the Spreedly iframe v1 restricted endpoint for new credit cards through the encrypted relay.",
|
|
2516
|
+
"The merchant environment and optional signed iframe session must remain valid. Expired signatures require a fresh merchant checkout.",
|
|
2517
|
+
"Spreedly creates a payment-method token; the merchant still completes any gateway payment and authentication."
|
|
2518
|
+
],
|
|
2519
|
+
"unsupported_variants": [
|
|
2520
|
+
{
|
|
2521
|
+
"variant": "general_javascript_api",
|
|
2522
|
+
"status": "unsupported",
|
|
2523
|
+
"constraint": "direct_sdk",
|
|
2524
|
+
"reason": "The general payment_methods.json endpoint is outside the reviewed native iframe path."
|
|
2525
|
+
},
|
|
2526
|
+
{
|
|
2527
|
+
"variant": "saved_card_or_recache",
|
|
2528
|
+
"status": "unsupported",
|
|
2529
|
+
"constraint": "direct_sdk",
|
|
2530
|
+
"reason": "Stored tokens and CVV-only recache requests are outside new-card tokenization."
|
|
2531
|
+
},
|
|
2532
|
+
{
|
|
2533
|
+
"variant": "click_to_pay_or_bank_account",
|
|
2534
|
+
"status": "unsupported",
|
|
2535
|
+
"constraint": "direct_sdk",
|
|
2536
|
+
"reason": "Click to Pay and bank-account request shapes require separate validation."
|
|
2537
|
+
},
|
|
2538
|
+
{
|
|
2539
|
+
"variant": "gateway_purchase_or_distribution",
|
|
2540
|
+
"status": "unsupported",
|
|
2541
|
+
"constraint": "direct_sdk",
|
|
2542
|
+
"reason": "Gateway transactions and payment-method distribution are outside the card tokenization adapter."
|
|
2543
|
+
}
|
|
2544
|
+
],
|
|
2545
|
+
"processor_amount": "none",
|
|
2546
|
+
"challenge_surface": "merchant_browser",
|
|
2547
|
+
"merchant_confirmation_required": true,
|
|
2548
|
+
"live_validation": "not_established_by_catalog",
|
|
2549
|
+
"sources": [
|
|
2550
|
+
"src/definitions.js",
|
|
2551
|
+
"src/operations.js",
|
|
2552
|
+
"src/backend.js",
|
|
2553
|
+
"src/spreedly.js",
|
|
2554
|
+
"../checkout/src/prepared-processor.ts"
|
|
2555
|
+
]
|
|
2556
|
+
},
|
|
2418
2557
|
{
|
|
2419
2558
|
"psp": "shopify",
|
|
2420
2559
|
"status": "supported",
|
|
@@ -4271,6 +4410,12 @@
|
|
|
4271
4410
|
"version": "bundled"
|
|
4272
4411
|
},
|
|
4273
4412
|
"processor_entries": [
|
|
4413
|
+
{
|
|
4414
|
+
"psp": "spreedly",
|
|
4415
|
+
"mode": "token",
|
|
4416
|
+
"scenario": "one_time",
|
|
4417
|
+
"status": "supported"
|
|
4418
|
+
},
|
|
4274
4419
|
{
|
|
4275
4420
|
"psp": "shopify",
|
|
4276
4421
|
"mode": "token",
|
|
@@ -209,6 +209,7 @@
|
|
|
209
209
|
"properties": {
|
|
210
210
|
"psp": {
|
|
211
211
|
"enum": [
|
|
212
|
+
"spreedly",
|
|
212
213
|
"shopify",
|
|
213
214
|
"stripe",
|
|
214
215
|
"braintree",
|
|
@@ -441,6 +442,8 @@
|
|
|
441
442
|
"paysafe-js-v1-latest",
|
|
442
443
|
"paysafe-js-v1-fields",
|
|
443
444
|
"paysafe-js-v1-fields-host-2",
|
|
445
|
+
"spreedly-iframe-v1-script",
|
|
446
|
+
"spreedly-native-card-frame",
|
|
444
447
|
"recurly-js-v4",
|
|
445
448
|
"recurly-hosted-field-v1",
|
|
446
449
|
"recurly-hosted-field-v1-host-2",
|
|
@@ -617,6 +620,7 @@
|
|
|
617
620
|
"properties": {
|
|
618
621
|
"psp": {
|
|
619
622
|
"enum": [
|
|
623
|
+
"spreedly",
|
|
620
624
|
"shopify",
|
|
621
625
|
"stripe",
|
|
622
626
|
"braintree",
|
|
@@ -958,6 +962,8 @@
|
|
|
958
962
|
"paysafe-js-v1-latest",
|
|
959
963
|
"paysafe-js-v1-fields",
|
|
960
964
|
"paysafe-js-v1-fields-host-2",
|
|
965
|
+
"spreedly-iframe-v1-script",
|
|
966
|
+
"spreedly-native-card-frame",
|
|
961
967
|
"recurly-js-v4",
|
|
962
968
|
"recurly-hosted-field-v1",
|
|
963
969
|
"recurly-hosted-field-v1-host-2",
|
|
@@ -150,6 +150,69 @@ export declare function getCheckoutPreflightCatalog(): {
|
|
|
150
150
|
variant_unverified?: string;
|
|
151
151
|
}[];
|
|
152
152
|
processors: readonly [{
|
|
153
|
+
readonly psp: "spreedly";
|
|
154
|
+
readonly status: "supported";
|
|
155
|
+
readonly mode: "token";
|
|
156
|
+
readonly operations: readonly [{
|
|
157
|
+
readonly id: "spreedly.card_request";
|
|
158
|
+
readonly effect: "processor_specific_card_request";
|
|
159
|
+
readonly amount_binding: "unestablished";
|
|
160
|
+
readonly psp: "spreedly";
|
|
161
|
+
readonly version: 1;
|
|
162
|
+
readonly mode: "token";
|
|
163
|
+
readonly autopilot_eligible: false;
|
|
164
|
+
readonly requires: "reviewed_final_payment_and_continuation_evidence";
|
|
165
|
+
}];
|
|
166
|
+
readonly scenarios: {
|
|
167
|
+
readonly one_time: {
|
|
168
|
+
readonly status: "supported";
|
|
169
|
+
readonly reason: "card_request_adapter_implemented";
|
|
170
|
+
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation"];
|
|
171
|
+
};
|
|
172
|
+
readonly save_card: {
|
|
173
|
+
readonly status: "conditional";
|
|
174
|
+
readonly reason: "merchant_card_storage_and_consent_required";
|
|
175
|
+
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation", "stored_card_consent", "merchant_card_saved"];
|
|
176
|
+
};
|
|
177
|
+
readonly subscription_initial: {
|
|
178
|
+
readonly status: "conditional";
|
|
179
|
+
readonly reason: "merchant_card_storage_and_consent_required";
|
|
180
|
+
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation", "stored_card_consent", "merchant_subscription_confirmation"];
|
|
181
|
+
};
|
|
182
|
+
readonly subscription_renewal: {
|
|
183
|
+
readonly status: "outside_vault";
|
|
184
|
+
readonly reason: "renewal_managed_by_merchant";
|
|
185
|
+
readonly requirements: readonly ["verify_merchant_billing"];
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
readonly limitations: readonly ["Only the listed request format is recognized; a recognized processor is not verified merchant coverage.", "The adapter handles the Spreedly iframe v1 restricted endpoint for new credit cards through the encrypted relay.", "The merchant environment and optional signed iframe session must remain valid. Expired signatures require a fresh merchant checkout.", "Spreedly creates a payment-method token; the merchant still completes any gateway payment and authentication."];
|
|
189
|
+
readonly unsupported_variants: readonly [{
|
|
190
|
+
readonly variant: "general_javascript_api";
|
|
191
|
+
readonly status: "unsupported";
|
|
192
|
+
readonly constraint: "direct_sdk";
|
|
193
|
+
readonly reason: "The general payment_methods.json endpoint is outside the reviewed native iframe path.";
|
|
194
|
+
}, {
|
|
195
|
+
readonly variant: "saved_card_or_recache";
|
|
196
|
+
readonly status: "unsupported";
|
|
197
|
+
readonly constraint: "direct_sdk";
|
|
198
|
+
readonly reason: "Stored tokens and CVV-only recache requests are outside new-card tokenization.";
|
|
199
|
+
}, {
|
|
200
|
+
readonly variant: "click_to_pay_or_bank_account";
|
|
201
|
+
readonly status: "unsupported";
|
|
202
|
+
readonly constraint: "direct_sdk";
|
|
203
|
+
readonly reason: "Click to Pay and bank-account request shapes require separate validation.";
|
|
204
|
+
}, {
|
|
205
|
+
readonly variant: "gateway_purchase_or_distribution";
|
|
206
|
+
readonly status: "unsupported";
|
|
207
|
+
readonly constraint: "direct_sdk";
|
|
208
|
+
readonly reason: "Gateway transactions and payment-method distribution are outside the card tokenization adapter.";
|
|
209
|
+
}];
|
|
210
|
+
readonly processor_amount: "none";
|
|
211
|
+
readonly challenge_surface: "merchant_browser";
|
|
212
|
+
readonly merchant_confirmation_required: true;
|
|
213
|
+
readonly live_validation: "not_established_by_catalog";
|
|
214
|
+
readonly sources: readonly ["src/definitions.js", "src/operations.js", "src/backend.js", "src/spreedly.js", "../checkout/src/prepared-processor.ts"];
|
|
215
|
+
}, {
|
|
153
216
|
readonly psp: "shopify";
|
|
154
217
|
readonly status: "supported";
|
|
155
218
|
readonly mode: "token";
|