@agent-cards/sdk 0.23.9 → 0.23.11
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 +48 -0
- package/PREFLIGHT.md +7 -5
- package/README.md +211 -102
- package/dist/aci.d.ts +7 -5
- package/dist/aci.generated.d.ts +2 -1
- package/dist/aci.generated.js +14 -4
- package/dist/aci.js +28 -7
- package/dist/amadeus-checkout.generated.js +2 -2
- package/dist/builtin-registry.generated.js +1 -1
- package/dist/card-fields.generated.js +165 -10
- package/dist/cdp.js +86 -34
- package/dist/client.d.ts +73 -33
- package/dist/client.js +136 -45
- package/dist/creditguard.generated.d.ts +1 -1
- package/dist/creditguard.generated.js +1 -3
- package/dist/cse-body.d.ts +7 -6
- package/dist/cse-body.js +8 -7
- package/dist/datatrans.generated.js +8 -5
- package/dist/elavon-converge.d.ts +5 -2
- package/dist/elavon-converge.generated.js +9 -5
- package/dist/elavon-converge.js +8 -4
- package/dist/fiserv.d.ts +9 -5
- package/dist/fiserv.generated.d.ts +3 -3
- package/dist/fiserv.generated.js +50 -20
- package/dist/fiserv.js +10 -6
- package/dist/lifecycle.d.ts +9 -1
- package/dist/lifecycle.js +34 -0
- package/dist/payrails.d.ts +78 -18
- package/dist/payrails.generated.d.ts +12 -2
- package/dist/payrails.generated.js +213 -18
- package/dist/payrails.js +165 -44
- package/dist/pre-claim.d.ts +7 -0
- package/dist/pre-claim.js +98 -36
- package/dist/preflight-capabilities.generated.d.ts +0 -106
- package/dist/preflight-capabilities.generated.js +0 -153
- package/dist/preflight-catalog.json +61 -181
- package/dist/preflight-schemas.json +6 -6
- package/dist/preflight.generated.d.ts +0 -106
- package/dist/preflight.generated.js +27 -15
- package/dist/preparation.d.ts +2 -0
- package/dist/preparation.js +4 -2
- package/dist/prepared-processor.d.ts +19 -5
- package/dist/prepared-processor.js +21 -5
- package/dist/primer.generated.d.ts +5 -1
- package/dist/primer.generated.js +202 -34
- package/dist/registry.d.ts +18 -12
- package/dist/registry.js +11 -8
- package/dist/shiji-sts.d.ts +24 -22
- package/dist/shiji-sts.generated.d.ts +1 -1
- package/dist/shiji-sts.generated.js +12 -8
- package/dist/shiji-sts.js +49 -46
- package/dist/stripe-checkout.generated.js +157 -49
- package/dist/verifone.generated.js +192 -17
- package/dist/verifone.js +1 -1
- package/dist/worldline-mycheckout.d.ts +27 -0
- package/dist/worldline-mycheckout.generated.d.ts +29 -0
- package/dist/worldline-mycheckout.generated.js +162 -0
- package/dist/worldline-mycheckout.js +93 -0
- package/dist/wspay.d.ts +17 -16
- package/dist/wspay.generated.d.ts +6 -1
- package/dist/wspay.generated.js +13 -3
- package/dist/wspay.js +9 -11
- package/examples/preflight/kernel-native/README.md +1 -1
- package/examples/preflight/kernel-native/inventory.json +1 -19
- package/package.json +3 -3
package/dist/pre-claim.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { type CybersourceFlexDecision, type CybersourceFlexPause, type FlexReque
|
|
|
12
12
|
import { type CardEndpointProfile } from './card-endpoint.js';
|
|
13
13
|
import { type PayrailsSessionCapture, type PayrailsSidecar } from './payrails.js';
|
|
14
14
|
import { type VerifoneProfile } from './verifone.js';
|
|
15
|
+
import { type WorldlineMyCheckoutProducts } from './worldline-mycheckout.js';
|
|
15
16
|
/** The native Stripe step the gate claimed, or null when none was: exactly what StripeCheckoutGate.claim returns. */
|
|
16
17
|
type StripeStep = ReturnType<StripeCheckoutGate['claim']>;
|
|
17
18
|
/** A synthetic response a gate fulfills locally. The effect applies CORS and encoding. */
|
|
@@ -183,6 +184,11 @@ export interface PreClaimContext {
|
|
|
183
184
|
companions: ShijiStsCompanions;
|
|
184
185
|
page: () => string | Promise<string>;
|
|
185
186
|
};
|
|
187
|
+
/**
|
|
188
|
+
* The card products this attachment saw a Worldline MyCheckout page choose (worldline-mycheckout.ts).
|
|
189
|
+
* Absent, no MyCheckout card submit is held to a product here.
|
|
190
|
+
*/
|
|
191
|
+
worldlineMyCheckout?: WorldlineMyCheckoutProducts;
|
|
186
192
|
}
|
|
187
193
|
/**
|
|
188
194
|
* The URL an event may name for a request. For an armed merchant profile's
|
|
@@ -204,6 +210,7 @@ export declare const fiservPreClaim: PreClaimGate;
|
|
|
204
210
|
export declare const ekashuPreClaim: PreClaimGate;
|
|
205
211
|
export declare const paypalHostedFieldsPreClaim: PreClaimGate;
|
|
206
212
|
export declare const cybersourceSecureAcceptancePreClaim: PreClaimGate;
|
|
213
|
+
export declare const worldlineMyCheckoutPreClaim: PreClaimGate;
|
|
207
214
|
/** The processor gates, in order. A new family adds one entry here; the terminal
|
|
208
215
|
* arbiter runs after all of them and is not part of this list. A gate appended
|
|
209
216
|
* after Stripe is never offered a step Stripe claimed: Stripe answers, aborts or
|
package/dist/pre-claim.js
CHANGED
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
// no new card, Shiji STS's getTokenId and getCvvId, which also carry
|
|
18
18
|
// requests the vault must never pay, and PayPal's legacy Hosted Fields
|
|
19
19
|
// confirm and CyberSource Secure Acceptance's Silent Order POST, whose card
|
|
20
|
-
// no Vault mode takes over
|
|
20
|
+
// no Vault mode takes over, and Worldline MyCheckout's card form, held to the
|
|
21
|
+
// card product its page chose.
|
|
21
22
|
// The first three used to be
|
|
22
23
|
// written inline in Fetch.requestPaused and again in the page.route handler, so
|
|
23
24
|
// a decision could drift between the two adapters and a new family had to be
|
|
@@ -72,11 +73,12 @@ import { isFiservCaptureHost, isFiservPausableBody } from './fiserv.js';
|
|
|
72
73
|
import { CYBERSOURCE_FLEX_PSP, isCybersourceFlexHost } from './cybersource-flex.js';
|
|
73
74
|
import { cardEndpointCarriesCard, cardEndpointDetail, cardEndpointFor, cardEndpointLive, cardEndpointPasses, cardEndpointResendFor, cardEndpointReviewed, } from './card-endpoint.js';
|
|
74
75
|
import { cardEndpointStoppedPage, refusedNavigationOutcome } from './card-endpoint-page.js';
|
|
75
|
-
import { PAYRAILS_HOLDING_REASONS, PAYRAILS_SESSION_MESSAGE, isPayrailsHost, isPayrailsStaticHost, payrailsKeyRefusal, payrailsRequestKind, payrailsSaveRefusal, } from './payrails.js';
|
|
76
|
+
import { PAYRAILS_HOLDING_REASONS, PAYRAILS_SESSION_MESSAGE, isPayrailsHost, isPayrailsPaymentUrl, isPayrailsStaticHost, payrailsKeyRefusal, payrailsPaymentRefusal, payrailsRequestKind, payrailsSaveRefusal, } from './payrails.js';
|
|
76
77
|
import { classifyVerifoneProfileRequest, verifoneTemplatedUrl } from './verifone.js';
|
|
77
78
|
import { ekashuEntryUrl, isEkashuEntry, isEkashuHost } from './ekashu.js';
|
|
78
79
|
import { PAYPAL_HOSTED_FIELDS_REASON, isPaypalHostedFieldsConfirm, paypalHostedFieldsBody } from './paypal-hosted-fields.js';
|
|
79
80
|
import { CYBERSOURCE_SECURE_ACCEPTANCE_REASON, CYBERSOURCE_SECURE_ACCEPTANCE_RECIPIENT, cybersourceSecureAcceptanceRequest, isCybersourceSecureAcceptanceUrl, isSecureAcceptanceFramePost, } from './cybersource-secure-acceptance.js';
|
|
81
|
+
import { isWorldlineMyCheckoutEndpoint } from './worldline-mycheckout.js';
|
|
80
82
|
/**
|
|
81
83
|
* The URL an event may name for a request. For an armed merchant profile's
|
|
82
84
|
* endpoint or a sibling of it: the endpoint origin, the path TEMPLATE and the
|
|
@@ -953,14 +955,17 @@ async function pelecardBlock(ctx, reason) {
|
|
|
953
955
|
// - the page's CVC and expiry requests are held until that request's
|
|
954
956
|
// approval ends, then answered with its answer, never forwarded; they fail
|
|
955
957
|
// when it failed or never began;
|
|
956
|
-
// - the holder request
|
|
958
|
+
// - the holder request, and the ReD Shield device fingerprint the widget
|
|
959
|
+
// posts on load, continue untouched;
|
|
957
960
|
// - the /payment submission continues once per answered card-number request,
|
|
958
961
|
// as a frame navigation, with the placeholder expiry a classic-mode page
|
|
959
962
|
// puts there removed (only where the browser sends a replaced navigation
|
|
960
963
|
// body, else aci_expiry_unstrippable), or is refused with the judge's code;
|
|
961
964
|
// - anything else is refused with payment-core's code: a request that asks ACI
|
|
962
965
|
// to keep the card or pay with a stored one (aci_card_on_file_refused, which
|
|
963
|
-
// also retires a ready preparation) or one the widget never sends.
|
|
966
|
+
// also retires a ready preparation) or one the widget never sends. Only a
|
|
967
|
+
// refused request that names the card number fails the checkout's waiting
|
|
968
|
+
// CVC and expiry requests (AciGate.refused).
|
|
964
969
|
// Everything else on ACI's hosts (the widget script, /bins, /v1/collect, GETs)
|
|
965
970
|
// is not a POST to a checkout and defers. Synchronous for the card-number
|
|
966
971
|
// request, so it pauses in the microtask it paused in.
|
|
@@ -969,7 +974,7 @@ const aciPreClaim = (ctx) => {
|
|
|
969
974
|
if (!leg)
|
|
970
975
|
return undefined;
|
|
971
976
|
if (leg.leg === 'refuse') {
|
|
972
|
-
ctx.aci.refused(leg);
|
|
977
|
+
ctx.aci.refused(leg, ctx.request.body);
|
|
973
978
|
return aciRefuse(ctx, leg.code);
|
|
974
979
|
}
|
|
975
980
|
if (leg.leg === 'pass')
|
|
@@ -1204,9 +1209,17 @@ async function primerUnsupported(ctx, reason) {
|
|
|
1204
1209
|
// static host (assets.payrails.io) is the one exception: it serves the SDK's and the secure
|
|
1205
1210
|
// frame's files and takes no payment, so another script's bodyless POST there continues
|
|
1206
1211
|
// untouched on both adapters;
|
|
1207
|
-
// -
|
|
1208
|
-
//
|
|
1209
|
-
//
|
|
1212
|
+
// - the card form's payment (an encrypted card inside paymentComposition) on exactly an
|
|
1213
|
+
// execution's authorize link the registry recognizes is judged like a save below, by
|
|
1214
|
+
// payment-core's payment guard: a payment that stores the card at the merchant aborts as
|
|
1215
|
+
// `payrails_card_on_file_consent_required`, a shape this build does not take over as
|
|
1216
|
+
// `unsupported_payrails_card_payment`, and the attachment holds. A sound one is bound to the one
|
|
1217
|
+
// captured session its token, execution, host and providerConfigId name, and pauses carrying
|
|
1218
|
+
// the session's key and holderReference, which the payment's JWE carries;
|
|
1219
|
+
// - any other payment that carries an encrypted card inside paymentComposition (a stored card
|
|
1220
|
+
// with a CVC field, a split payment, another link, or one the registry does not recognize)
|
|
1221
|
+
// aborts as an unsupported checkout, `unsupported_payrails_card_payment`, and the attachment
|
|
1222
|
+
// holds;
|
|
1210
1223
|
// - a card save the registry recognizes is judged first by payment-core's guard and its
|
|
1211
1224
|
// card-on-file policy: a refusal aborts as an unsupported checkout with that code, and the
|
|
1212
1225
|
// attachment holds. Then it is bound to the one captured session its token, URL,
|
|
@@ -1214,9 +1227,9 @@ async function primerUnsupported(ctx, reason) {
|
|
|
1214
1227
|
// the page's frame wrapped. A miss aborts that request alone (`payrails_session_unavailable`,
|
|
1215
1228
|
// or the key's code) with a message to reload the checkout, and the attachment does not hold,
|
|
1216
1229
|
// so the save after a reload is judged afresh. A bound save pauses carrying the key;
|
|
1217
|
-
// - anything else defers to the arbiter: a save with no card pauses there and the
|
|
1218
|
-
// continues it (passWithoutCard), and every other request continues.
|
|
1219
|
-
// Synchronous unless answer bodies are still being read (the
|
|
1230
|
+
// - anything else defers to the arbiter: a save or payment with no card pauses there and the
|
|
1231
|
+
// claim flow continues it (passWithoutCard), and every other request continues.
|
|
1232
|
+
// Synchronous unless answer bodies are still being read (the request then waits for them, briefly)
|
|
1220
1233
|
// or the request aborts.
|
|
1221
1234
|
const payrailsPreClaim = (ctx) => {
|
|
1222
1235
|
const capture = ctx.payrails;
|
|
@@ -1227,23 +1240,33 @@ const payrailsPreClaim = (ctx) => {
|
|
|
1227
1240
|
if (body === null || body === '')
|
|
1228
1241
|
return isPayrailsStaticHost(url) ? undefined : payrailsUnreadable(ctx);
|
|
1229
1242
|
const kind = payrailsRequestKind(url, method, body);
|
|
1230
|
-
if (kind === 'card_payment')
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1243
|
+
if (kind === 'card_payment') {
|
|
1244
|
+
if (!isPayrailsPaymentUrl(url) || !ctx.vault.isCardRequest(url, method))
|
|
1245
|
+
return payrailsUnsupported(ctx, 'unsupported_payrails_card_payment');
|
|
1246
|
+
const refusal = payrailsPaymentRefusal(body);
|
|
1247
|
+
if (refusal)
|
|
1248
|
+
return payrailsUnsupported(ctx, refusal);
|
|
1249
|
+
}
|
|
1250
|
+
else {
|
|
1251
|
+
if (kind !== 'card' || !ctx.vault.isCardRequest(url, method))
|
|
1252
|
+
return undefined;
|
|
1253
|
+
const refusal = payrailsSaveRefusal(body);
|
|
1254
|
+
if (refusal)
|
|
1255
|
+
return payrailsUnsupported(ctx, refusal);
|
|
1256
|
+
}
|
|
1237
1257
|
return capture.pending ? capture.settle().then(() => payrailsBind(ctx, capture, body)) : payrailsBind(ctx, capture, body);
|
|
1238
1258
|
};
|
|
1239
1259
|
function payrailsBind(ctx, capture, body) {
|
|
1240
|
-
const
|
|
1241
|
-
if (
|
|
1260
|
+
const bound = capture.bind({ url: ctx.request.url, headers: ctx.request.headers, body });
|
|
1261
|
+
if (bound === null)
|
|
1242
1262
|
return payrailsUnsupported(ctx, 'payrails_session_unavailable');
|
|
1243
|
-
const refusal = payrailsKeyRefusal(key, body);
|
|
1263
|
+
const refusal = payrailsKeyRefusal(bound.key, body);
|
|
1244
1264
|
if (refusal)
|
|
1245
1265
|
return payrailsUnsupported(ctx, refusal);
|
|
1246
|
-
|
|
1266
|
+
// A save names its own holderReference; a card-form payment's JWE needs the session's.
|
|
1267
|
+
const payrails = isPayrailsPaymentUrl(ctx.request.url)
|
|
1268
|
+
? { encryption_public_key: bound.key, holder_reference: bound.holderReference } : { encryption_public_key: bound.key };
|
|
1269
|
+
return { kind: 'pause', stripeStep: ctx.stripeStep, payrails };
|
|
1247
1270
|
}
|
|
1248
1271
|
async function payrailsUnreadable(ctx) {
|
|
1249
1272
|
ctx.onEvent?.({ type: 'blocked', detail: 'unreadable_payrails_request' });
|
|
@@ -1263,15 +1286,15 @@ async function payrailsUnsupported(ctx, reason) {
|
|
|
1263
1286
|
return { kind: 'abort' };
|
|
1264
1287
|
}
|
|
1265
1288
|
// Elavon Converge's Hosted Payment Page (elavon-converge.ts). Its card URL, POST
|
|
1266
|
-
// /hosted-payments/service/payment/hpp/process on api.convergepay.com
|
|
1267
|
-
// api.demo.convergepay.com, also carries electronic check and financing payments
|
|
1289
|
+
// /hosted-payments/service/payment/hpp/process on api.convergepay.com,
|
|
1290
|
+
// www.convergepay.com or api.demo.convergepay.com, also carries electronic check and financing payments
|
|
1268
1291
|
// with no card, and card-shaped bodies the Vault never pays: a wallet with a card
|
|
1269
1292
|
// number the server supplied, the debit, gift card and push-to-card tabs, the
|
|
1270
|
-
// follow-ups after a 3-D Secure, Pay Defense or surcharge step, a CAPTCHA
|
|
1271
|
-
//
|
|
1272
|
-
// currency. So a POST the registry recognizes
|
|
1273
|
-
// card is judged here, before the terminal
|
|
1274
|
-
// whole-request check the API runs at create:
|
|
1293
|
+
// follow-ups after a 3-D Secure, Pay Defense or surcharge step, a CAPTCHA answer
|
|
1294
|
+
// that is not a solved reCAPTCHA token, a service fee, recurring or installment
|
|
1295
|
+
// fields, card saving, a tip, another currency. So a POST the registry recognizes
|
|
1296
|
+
// on a Converge host that carries a card is judged here, before the terminal
|
|
1297
|
+
// arbiter would pause it, by the whole-request check the API runs at create:
|
|
1275
1298
|
// - the page's own first credit card sale defers, and the arbiter pauses it
|
|
1276
1299
|
// for approval;
|
|
1277
1300
|
// - anything else aborts with a `blocked` event naming payment-core's code
|
|
@@ -1356,12 +1379,13 @@ async function eprotectGiveUp(ctx, attempt, code) {
|
|
|
1356
1379
|
// temp_card_id bodies with no new card, and the page builds the transaction object itself, so a
|
|
1357
1380
|
// POST the registry recognizes on a WSPay host is judged here, before the terminal arbiter would
|
|
1358
1381
|
// pause it, by the whole-request check the API runs at create:
|
|
1359
|
-
// - a new card
|
|
1360
|
-
//
|
|
1361
|
-
//
|
|
1362
|
-
//
|
|
1363
|
-
//
|
|
1364
|
-
//
|
|
1382
|
+
// - a new card defers, and the arbiter pauses it for approval. A confirm that asks WSPay to
|
|
1383
|
+
// keep the card on file defers too: the approval asks the cardholder, and the API's create
|
|
1384
|
+
// judges whether it is the card guarantee it pays;
|
|
1385
|
+
// - anything else aborts with a `blocked` event, `unsupported_wspay_payment_method`, with no
|
|
1386
|
+
// claim, create or prompt. Like Braintree's unsupported operation it neither holds the
|
|
1387
|
+
// attachment nor changes its state, so the page's next confirm (a new card instead of a
|
|
1388
|
+
// saved one) is judged afresh.
|
|
1365
1389
|
// Nothing is decided without the registry: an SDK that did not sync with the wspay_confirm
|
|
1366
1390
|
// capability, or whose org Agentcard has not enabled for WSPay (the API then serves no WSPay
|
|
1367
1391
|
// recognizer), never recognizes a WSPay host, so the gate defers and the request continues as
|
|
@@ -1675,6 +1699,44 @@ async function cybersourceSecureAcceptanceStop(ctx) {
|
|
|
1675
1699
|
await ctx.effects.abort().catch(() => { });
|
|
1676
1700
|
return { kind: 'abort' };
|
|
1677
1701
|
}
|
|
1702
|
+
// Worldline MyCheckout (worldline-mycheckout.ts). Once the registry serves its recognizer (a build
|
|
1703
|
+
// that declares worldline_mycheckout_form, for an org Agentcard turned Worldline on for), every POST
|
|
1704
|
+
// to its four card-form endpoints reaches this gate first:
|
|
1705
|
+
// - a product selection (no card, and neither the Pay nor the cancel pair: the post of the page's
|
|
1706
|
+
// select-payment-product step) is remembered for its hosted checkout and defers, and the adapter
|
|
1707
|
+
// continues it untouched as before (passWithoutCard);
|
|
1708
|
+
// - a card submit whose paymentProductId is another product than the one chosen for its hosted
|
|
1709
|
+
// checkout aborts with a `blocked` event, `worldline_mycheckout_product_changed`, and one that
|
|
1710
|
+
// names no product with `worldline_mycheckout_product_missing`, with no claim, create or prompt.
|
|
1711
|
+
// The page's IIN lookup on the agent's placeholder switched the product, and the cardholder's
|
|
1712
|
+
// device, which checks only the real card's network, would submit the card under that product.
|
|
1713
|
+
// Like Converge's refusals it neither holds the attachment nor changes its state, so the page's
|
|
1714
|
+
// next submit is judged afresh;
|
|
1715
|
+
// - anything else defers: a card submit with the chosen product, one on the card group, one on a
|
|
1716
|
+
// hosted checkout whose choice this attachment never saw, the page's cancel, a redirect product.
|
|
1717
|
+
// Synchronous until the abort, so a card submit pauses with no await. Exported for the gate
|
|
1718
|
+
// registry's tests.
|
|
1719
|
+
export const worldlineMyCheckoutPreClaim = (ctx) => {
|
|
1720
|
+
const { url, method } = ctx.request;
|
|
1721
|
+
if (!ctx.worldlineMyCheckout || String(method).toUpperCase() !== 'POST' || !isWorldlineMyCheckoutEndpoint(url)
|
|
1722
|
+
|| !ctx.vault.isCardRequest(url, method))
|
|
1723
|
+
return undefined;
|
|
1724
|
+
let body;
|
|
1725
|
+
// A reader that throws (Playwright's postData() can) proves nothing either way.
|
|
1726
|
+
try {
|
|
1727
|
+
body = ctx.request.body;
|
|
1728
|
+
}
|
|
1729
|
+
catch {
|
|
1730
|
+
body = null;
|
|
1731
|
+
}
|
|
1732
|
+
const refusal = ctx.worldlineMyCheckout.judge(url, body);
|
|
1733
|
+
return refusal === null ? undefined : worldlineMyCheckoutBlock(ctx, refusal);
|
|
1734
|
+
};
|
|
1735
|
+
async function worldlineMyCheckoutBlock(ctx, reason) {
|
|
1736
|
+
ctx.onEvent?.({ type: 'blocked', detail: reason });
|
|
1737
|
+
await ctx.effects.abort();
|
|
1738
|
+
return { kind: 'abort' };
|
|
1739
|
+
}
|
|
1678
1740
|
// The terminal arbiter, always last. A request that no gate claimed and that is
|
|
1679
1741
|
// neither a native Stripe step nor a recognized card request continues, unless
|
|
1680
1742
|
// it matches a declared payment endpoint we do not support (then it aborts as an
|
|
@@ -1709,7 +1771,7 @@ async function unsupportedContinue(ctx) {
|
|
|
1709
1771
|
* after Stripe is never offered a step Stripe claimed: Stripe answers, aborts or
|
|
1710
1772
|
* pauses each one itself. */
|
|
1711
1773
|
export const PSP_PRE_CLAIM_GATES = [cardEndpointResendPreClaim, cardEndpointPreClaim, mercadoPreClaim, juspayPreClaim, braintreePreClaim, stripePreClaim, merchantHostedPreClaim, verifonePreClaim, fiservPreClaim, gmoPreClaim, cybersourceFlexPreClaim, datatransPreClaim, pelecardPreClaim, aciPreClaim, creditguardPreClaim, primerPreClaim, payrailsPreClaim, convergePreClaim, eprotectPreClaim, wspayPreClaim, shijiStsPreClaim, ekashuPreClaim, paypalHostedFieldsPreClaim,
|
|
1712
|
-
cybersourceSecureAcceptancePreClaim];
|
|
1774
|
+
cybersourceSecureAcceptancePreClaim, worldlineMyCheckoutPreClaim];
|
|
1713
1775
|
/** Run each gate in order; the first to return a decision wins. If none does,
|
|
1714
1776
|
* the terminal arbiter decides between continue, abort (unsupported) and pause.
|
|
1715
1777
|
* Returns synchronously while every gate defers synchronously (an ordinary card
|
|
@@ -1097,54 +1097,6 @@ export declare const CHECKOUT_PREFLIGHT_CAPABILITIES: {
|
|
|
1097
1097
|
readonly merchant_confirmation_required: true;
|
|
1098
1098
|
readonly live_validation: "not_established_by_catalog";
|
|
1099
1099
|
readonly sources: readonly ["src/definitions.js", "src/operations.js", "src/backend.js"];
|
|
1100
|
-
}, {
|
|
1101
|
-
readonly psp: "moneris";
|
|
1102
|
-
readonly status: "supported";
|
|
1103
|
-
readonly mode: "token";
|
|
1104
|
-
readonly operations: readonly [{
|
|
1105
|
-
readonly id: "moneris.card_request";
|
|
1106
|
-
readonly effect: "processor_specific_card_request";
|
|
1107
|
-
readonly amount_binding: "unestablished";
|
|
1108
|
-
readonly psp: "moneris";
|
|
1109
|
-
readonly version: 1;
|
|
1110
|
-
readonly mode: "token";
|
|
1111
|
-
readonly autopilot_eligible: false;
|
|
1112
|
-
readonly requires: "reviewed_final_payment_and_continuation_evidence";
|
|
1113
|
-
}];
|
|
1114
|
-
readonly scenarios: {
|
|
1115
|
-
readonly one_time: {
|
|
1116
|
-
readonly status: "supported";
|
|
1117
|
-
readonly reason: "card_request_adapter_implemented";
|
|
1118
|
-
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation"];
|
|
1119
|
-
};
|
|
1120
|
-
readonly save_card: {
|
|
1121
|
-
readonly status: "conditional";
|
|
1122
|
-
readonly reason: "merchant_card_storage_and_consent_required";
|
|
1123
|
-
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation", "stored_card_consent", "merchant_card_saved"];
|
|
1124
|
-
};
|
|
1125
|
-
readonly subscription_initial: {
|
|
1126
|
-
readonly status: "conditional";
|
|
1127
|
-
readonly reason: "merchant_card_storage_and_consent_required";
|
|
1128
|
-
readonly requirements: readonly ["actual_payment_request_validation", "merchant_confirmation", "stored_card_consent", "merchant_subscription_confirmation"];
|
|
1129
|
-
};
|
|
1130
|
-
readonly subscription_renewal: {
|
|
1131
|
-
readonly status: "outside_vault";
|
|
1132
|
-
readonly reason: "renewal_managed_by_merchant";
|
|
1133
|
-
readonly requirements: readonly ["verify_merchant_billing"];
|
|
1134
|
-
};
|
|
1135
|
-
};
|
|
1136
|
-
readonly limitations: readonly ["Only the listed request format is recognized; a recognized processor is not verified merchant coverage.", "The implemented integration is Moneris Hosted Tokenization."];
|
|
1137
|
-
readonly unsupported_variants: readonly [{
|
|
1138
|
-
readonly variant: "moneris_checkout_chkt";
|
|
1139
|
-
readonly status: "unsupported";
|
|
1140
|
-
readonly constraint: "direct_sdk";
|
|
1141
|
-
readonly reason: "Moneris Checkout uses a different path from Hosted Tokenization and is not implemented.";
|
|
1142
|
-
}];
|
|
1143
|
-
readonly processor_amount: "none";
|
|
1144
|
-
readonly challenge_surface: "merchant_browser";
|
|
1145
|
-
readonly merchant_confirmation_required: true;
|
|
1146
|
-
readonly live_validation: "not_established_by_catalog";
|
|
1147
|
-
readonly sources: readonly ["src/definitions.js", "src/operations.js", "src/backend.js"];
|
|
1148
1100
|
}, {
|
|
1149
1101
|
readonly psp: "bambora";
|
|
1150
1102
|
readonly status: "supported";
|
|
@@ -1236,64 +1188,6 @@ export declare const CHECKOUT_PREFLIGHT_CAPABILITIES: {
|
|
|
1236
1188
|
readonly merchant_confirmation_required: true;
|
|
1237
1189
|
readonly live_validation: "not_established_by_catalog";
|
|
1238
1190
|
readonly sources: readonly ["src/definitions.js", "src/operations.js", "src/backend.js"];
|
|
1239
|
-
}, {
|
|
1240
|
-
readonly psp: "gravy";
|
|
1241
|
-
readonly status: "unsupported";
|
|
1242
|
-
readonly mode: "token";
|
|
1243
|
-
readonly operations: readonly [{
|
|
1244
|
-
readonly id: "gravy.card_request";
|
|
1245
|
-
readonly effect: "processor_specific_card_request";
|
|
1246
|
-
readonly amount_binding: "unestablished";
|
|
1247
|
-
readonly psp: "gravy";
|
|
1248
|
-
readonly version: 1;
|
|
1249
|
-
readonly mode: "token";
|
|
1250
|
-
readonly autopilot_eligible: false;
|
|
1251
|
-
readonly requires: "reviewed_final_payment_and_continuation_evidence";
|
|
1252
|
-
}];
|
|
1253
|
-
readonly scenarios: {
|
|
1254
|
-
readonly one_time: {
|
|
1255
|
-
readonly status: "unsupported";
|
|
1256
|
-
readonly reason: "request_method_not_supported";
|
|
1257
|
-
readonly requirements: readonly [];
|
|
1258
|
-
};
|
|
1259
|
-
readonly save_card: {
|
|
1260
|
-
readonly status: "unsupported";
|
|
1261
|
-
readonly reason: "request_method_not_supported";
|
|
1262
|
-
readonly requirements: readonly [];
|
|
1263
|
-
};
|
|
1264
|
-
readonly subscription_initial: {
|
|
1265
|
-
readonly status: "unsupported";
|
|
1266
|
-
readonly reason: "request_method_not_supported";
|
|
1267
|
-
readonly requirements: readonly [];
|
|
1268
|
-
};
|
|
1269
|
-
readonly subscription_renewal: {
|
|
1270
|
-
readonly status: "outside_vault";
|
|
1271
|
-
readonly reason: "renewal_managed_by_merchant";
|
|
1272
|
-
readonly requirements: readonly ["verify_merchant_billing"];
|
|
1273
|
-
};
|
|
1274
|
-
};
|
|
1275
|
-
readonly limitations: readonly ["Only the listed request format is recognized; a recognized processor is not verified merchant coverage.", "The adapter covers the Secure Fields new-card request that updates a Gravy checkout session on the merchant's own api.<merchant>.gr4vy.app host, in sandbox and production.", "Gravy publishes this request as an HTTP PUT. The SDK and the shared core pause POST requests only, so the recognizer identifies and fills the request but intercepts nothing, and the direct SDK reports Gravy unsupported until a recognizer can declare its method.", "The request shape follows Gravy's published Secure Fields contract and has not been confirmed by a capture from a live merchant form.", "Updating the session stores the card with Gravy; the merchant creates the transaction from the session on its own server, so a completed request is not a payment."];
|
|
1276
|
-
readonly unsupported_variants: readonly [{
|
|
1277
|
-
readonly variant: "embed_hosted_checkout";
|
|
1278
|
-
readonly status: "unsupported";
|
|
1279
|
-
readonly constraint: "direct_sdk";
|
|
1280
|
-
readonly reason: "Gravy Embed renders its own form in a frame on embed.<merchant>.gr4vy.app and is outside the Secure Fields request path.";
|
|
1281
|
-
}, {
|
|
1282
|
-
readonly variant: "stored_payment_method_or_security_code_only";
|
|
1283
|
-
readonly status: "unsupported";
|
|
1284
|
-
readonly constraint: "direct_sdk";
|
|
1285
|
-
readonly reason: "Saved payment methods and security-code-only updates are outside new-card session updates.";
|
|
1286
|
-
}, {
|
|
1287
|
-
readonly variant: "checkout_session_create_or_transaction";
|
|
1288
|
-
readonly status: "unsupported";
|
|
1289
|
-
readonly constraint: "direct_sdk";
|
|
1290
|
-
readonly reason: "Creating the session and creating the transaction happen on the merchant server and carry no card from the browser.";
|
|
1291
|
-
}];
|
|
1292
|
-
readonly processor_amount: "none";
|
|
1293
|
-
readonly challenge_surface: "merchant_browser";
|
|
1294
|
-
readonly merchant_confirmation_required: true;
|
|
1295
|
-
readonly live_validation: "not_established_by_catalog";
|
|
1296
|
-
readonly sources: readonly ["src/definitions.js", "src/operations.js", "src/backend.js", "test/fixtures/gravy-secure-fields.json"];
|
|
1297
1191
|
}];
|
|
1298
1192
|
readonly exclusions: readonly [{
|
|
1299
1193
|
readonly psp: "vgs";
|
|
@@ -1690,81 +1690,6 @@ export const CHECKOUT_PREFLIGHT_CAPABILITIES = {
|
|
|
1690
1690
|
"src/backend.js"
|
|
1691
1691
|
]
|
|
1692
1692
|
},
|
|
1693
|
-
{
|
|
1694
|
-
"psp": "moneris",
|
|
1695
|
-
"status": "supported",
|
|
1696
|
-
"mode": "token",
|
|
1697
|
-
"operations": [
|
|
1698
|
-
{
|
|
1699
|
-
"id": "moneris.card_request",
|
|
1700
|
-
"effect": "processor_specific_card_request",
|
|
1701
|
-
"amount_binding": "unestablished",
|
|
1702
|
-
"psp": "moneris",
|
|
1703
|
-
"version": 1,
|
|
1704
|
-
"mode": "token",
|
|
1705
|
-
"autopilot_eligible": false,
|
|
1706
|
-
"requires": "reviewed_final_payment_and_continuation_evidence"
|
|
1707
|
-
}
|
|
1708
|
-
],
|
|
1709
|
-
"scenarios": {
|
|
1710
|
-
"one_time": {
|
|
1711
|
-
"status": "supported",
|
|
1712
|
-
"reason": "card_request_adapter_implemented",
|
|
1713
|
-
"requirements": [
|
|
1714
|
-
"actual_payment_request_validation",
|
|
1715
|
-
"merchant_confirmation"
|
|
1716
|
-
]
|
|
1717
|
-
},
|
|
1718
|
-
"save_card": {
|
|
1719
|
-
"status": "conditional",
|
|
1720
|
-
"reason": "merchant_card_storage_and_consent_required",
|
|
1721
|
-
"requirements": [
|
|
1722
|
-
"actual_payment_request_validation",
|
|
1723
|
-
"merchant_confirmation",
|
|
1724
|
-
"stored_card_consent",
|
|
1725
|
-
"merchant_card_saved"
|
|
1726
|
-
]
|
|
1727
|
-
},
|
|
1728
|
-
"subscription_initial": {
|
|
1729
|
-
"status": "conditional",
|
|
1730
|
-
"reason": "merchant_card_storage_and_consent_required",
|
|
1731
|
-
"requirements": [
|
|
1732
|
-
"actual_payment_request_validation",
|
|
1733
|
-
"merchant_confirmation",
|
|
1734
|
-
"stored_card_consent",
|
|
1735
|
-
"merchant_subscription_confirmation"
|
|
1736
|
-
]
|
|
1737
|
-
},
|
|
1738
|
-
"subscription_renewal": {
|
|
1739
|
-
"status": "outside_vault",
|
|
1740
|
-
"reason": "renewal_managed_by_merchant",
|
|
1741
|
-
"requirements": [
|
|
1742
|
-
"verify_merchant_billing"
|
|
1743
|
-
]
|
|
1744
|
-
}
|
|
1745
|
-
},
|
|
1746
|
-
"limitations": [
|
|
1747
|
-
"Only the listed request format is recognized; a recognized processor is not verified merchant coverage.",
|
|
1748
|
-
"The implemented integration is Moneris Hosted Tokenization."
|
|
1749
|
-
],
|
|
1750
|
-
"unsupported_variants": [
|
|
1751
|
-
{
|
|
1752
|
-
"variant": "moneris_checkout_chkt",
|
|
1753
|
-
"status": "unsupported",
|
|
1754
|
-
"constraint": "direct_sdk",
|
|
1755
|
-
"reason": "Moneris Checkout uses a different path from Hosted Tokenization and is not implemented."
|
|
1756
|
-
}
|
|
1757
|
-
],
|
|
1758
|
-
"processor_amount": "none",
|
|
1759
|
-
"challenge_surface": "merchant_browser",
|
|
1760
|
-
"merchant_confirmation_required": true,
|
|
1761
|
-
"live_validation": "not_established_by_catalog",
|
|
1762
|
-
"sources": [
|
|
1763
|
-
"src/definitions.js",
|
|
1764
|
-
"src/operations.js",
|
|
1765
|
-
"src/backend.js"
|
|
1766
|
-
]
|
|
1767
|
-
},
|
|
1768
1693
|
{
|
|
1769
1694
|
"psp": "bambora",
|
|
1770
1695
|
"status": "supported",
|
|
@@ -1907,84 +1832,6 @@ export const CHECKOUT_PREFLIGHT_CAPABILITIES = {
|
|
|
1907
1832
|
"src/operations.js",
|
|
1908
1833
|
"src/backend.js"
|
|
1909
1834
|
]
|
|
1910
|
-
},
|
|
1911
|
-
{
|
|
1912
|
-
"psp": "gravy",
|
|
1913
|
-
"status": "unsupported",
|
|
1914
|
-
"mode": "token",
|
|
1915
|
-
"operations": [
|
|
1916
|
-
{
|
|
1917
|
-
"id": "gravy.card_request",
|
|
1918
|
-
"effect": "processor_specific_card_request",
|
|
1919
|
-
"amount_binding": "unestablished",
|
|
1920
|
-
"psp": "gravy",
|
|
1921
|
-
"version": 1,
|
|
1922
|
-
"mode": "token",
|
|
1923
|
-
"autopilot_eligible": false,
|
|
1924
|
-
"requires": "reviewed_final_payment_and_continuation_evidence"
|
|
1925
|
-
}
|
|
1926
|
-
],
|
|
1927
|
-
"scenarios": {
|
|
1928
|
-
"one_time": {
|
|
1929
|
-
"status": "unsupported",
|
|
1930
|
-
"reason": "request_method_not_supported",
|
|
1931
|
-
"requirements": []
|
|
1932
|
-
},
|
|
1933
|
-
"save_card": {
|
|
1934
|
-
"status": "unsupported",
|
|
1935
|
-
"reason": "request_method_not_supported",
|
|
1936
|
-
"requirements": []
|
|
1937
|
-
},
|
|
1938
|
-
"subscription_initial": {
|
|
1939
|
-
"status": "unsupported",
|
|
1940
|
-
"reason": "request_method_not_supported",
|
|
1941
|
-
"requirements": []
|
|
1942
|
-
},
|
|
1943
|
-
"subscription_renewal": {
|
|
1944
|
-
"status": "outside_vault",
|
|
1945
|
-
"reason": "renewal_managed_by_merchant",
|
|
1946
|
-
"requirements": [
|
|
1947
|
-
"verify_merchant_billing"
|
|
1948
|
-
]
|
|
1949
|
-
}
|
|
1950
|
-
},
|
|
1951
|
-
"limitations": [
|
|
1952
|
-
"Only the listed request format is recognized; a recognized processor is not verified merchant coverage.",
|
|
1953
|
-
"The adapter covers the Secure Fields new-card request that updates a Gravy checkout session on the merchant's own api.<merchant>.gr4vy.app host, in sandbox and production.",
|
|
1954
|
-
"Gravy publishes this request as an HTTP PUT. The SDK and the shared core pause POST requests only, so the recognizer identifies and fills the request but intercepts nothing, and the direct SDK reports Gravy unsupported until a recognizer can declare its method.",
|
|
1955
|
-
"The request shape follows Gravy's published Secure Fields contract and has not been confirmed by a capture from a live merchant form.",
|
|
1956
|
-
"Updating the session stores the card with Gravy; the merchant creates the transaction from the session on its own server, so a completed request is not a payment."
|
|
1957
|
-
],
|
|
1958
|
-
"unsupported_variants": [
|
|
1959
|
-
{
|
|
1960
|
-
"variant": "embed_hosted_checkout",
|
|
1961
|
-
"status": "unsupported",
|
|
1962
|
-
"constraint": "direct_sdk",
|
|
1963
|
-
"reason": "Gravy Embed renders its own form in a frame on embed.<merchant>.gr4vy.app and is outside the Secure Fields request path."
|
|
1964
|
-
},
|
|
1965
|
-
{
|
|
1966
|
-
"variant": "stored_payment_method_or_security_code_only",
|
|
1967
|
-
"status": "unsupported",
|
|
1968
|
-
"constraint": "direct_sdk",
|
|
1969
|
-
"reason": "Saved payment methods and security-code-only updates are outside new-card session updates."
|
|
1970
|
-
},
|
|
1971
|
-
{
|
|
1972
|
-
"variant": "checkout_session_create_or_transaction",
|
|
1973
|
-
"status": "unsupported",
|
|
1974
|
-
"constraint": "direct_sdk",
|
|
1975
|
-
"reason": "Creating the session and creating the transaction happen on the merchant server and carry no card from the browser."
|
|
1976
|
-
}
|
|
1977
|
-
],
|
|
1978
|
-
"processor_amount": "none",
|
|
1979
|
-
"challenge_surface": "merchant_browser",
|
|
1980
|
-
"merchant_confirmation_required": true,
|
|
1981
|
-
"live_validation": "not_established_by_catalog",
|
|
1982
|
-
"sources": [
|
|
1983
|
-
"src/definitions.js",
|
|
1984
|
-
"src/operations.js",
|
|
1985
|
-
"src/backend.js",
|
|
1986
|
-
"test/fixtures/gravy-secure-fields.json"
|
|
1987
|
-
]
|
|
1988
1835
|
}
|
|
1989
1836
|
],
|
|
1990
1837
|
"exclusions": [
|