@agent-cards/sdk 0.23.9 → 0.23.10
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 +40 -0
- package/PREFLIGHT.md +7 -5
- package/README.md +181 -92
- 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 +163 -9
- package/dist/cdp.js +79 -34
- package/dist/client.d.ts +61 -31
- package/dist/client.js +99 -42
- 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 +1 -1
- package/dist/elavon-converge.generated.js +7 -4
- package/dist/elavon-converge.js +4 -3
- 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/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.js +51 -29
- 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 +200 -33
- 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 +146 -49
- package/dist/verifone.generated.js +192 -17
- package/dist/verifone.js +1 -1
- 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.js
CHANGED
|
@@ -72,7 +72,7 @@ import { isFiservCaptureHost, isFiservPausableBody } from './fiserv.js';
|
|
|
72
72
|
import { CYBERSOURCE_FLEX_PSP, isCybersourceFlexHost } from './cybersource-flex.js';
|
|
73
73
|
import { cardEndpointCarriesCard, cardEndpointDetail, cardEndpointFor, cardEndpointLive, cardEndpointPasses, cardEndpointResendFor, cardEndpointReviewed, } from './card-endpoint.js';
|
|
74
74
|
import { cardEndpointStoppedPage, refusedNavigationOutcome } from './card-endpoint-page.js';
|
|
75
|
-
import { PAYRAILS_HOLDING_REASONS, PAYRAILS_SESSION_MESSAGE, isPayrailsHost, isPayrailsStaticHost, payrailsKeyRefusal, payrailsRequestKind, payrailsSaveRefusal, } from './payrails.js';
|
|
75
|
+
import { PAYRAILS_HOLDING_REASONS, PAYRAILS_SESSION_MESSAGE, isPayrailsHost, isPayrailsPaymentUrl, isPayrailsStaticHost, payrailsKeyRefusal, payrailsPaymentRefusal, payrailsRequestKind, payrailsSaveRefusal, } from './payrails.js';
|
|
76
76
|
import { classifyVerifoneProfileRequest, verifoneTemplatedUrl } from './verifone.js';
|
|
77
77
|
import { ekashuEntryUrl, isEkashuEntry, isEkashuHost } from './ekashu.js';
|
|
78
78
|
import { PAYPAL_HOSTED_FIELDS_REASON, isPaypalHostedFieldsConfirm, paypalHostedFieldsBody } from './paypal-hosted-fields.js';
|
|
@@ -953,14 +953,17 @@ async function pelecardBlock(ctx, reason) {
|
|
|
953
953
|
// - the page's CVC and expiry requests are held until that request's
|
|
954
954
|
// approval ends, then answered with its answer, never forwarded; they fail
|
|
955
955
|
// when it failed or never began;
|
|
956
|
-
// - the holder request
|
|
956
|
+
// - the holder request, and the ReD Shield device fingerprint the widget
|
|
957
|
+
// posts on load, continue untouched;
|
|
957
958
|
// - the /payment submission continues once per answered card-number request,
|
|
958
959
|
// as a frame navigation, with the placeholder expiry a classic-mode page
|
|
959
960
|
// puts there removed (only where the browser sends a replaced navigation
|
|
960
961
|
// body, else aci_expiry_unstrippable), or is refused with the judge's code;
|
|
961
962
|
// - anything else is refused with payment-core's code: a request that asks ACI
|
|
962
963
|
// 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.
|
|
964
|
+
// also retires a ready preparation) or one the widget never sends. Only a
|
|
965
|
+
// refused request that names the card number fails the checkout's waiting
|
|
966
|
+
// CVC and expiry requests (AciGate.refused).
|
|
964
967
|
// Everything else on ACI's hosts (the widget script, /bins, /v1/collect, GETs)
|
|
965
968
|
// is not a POST to a checkout and defers. Synchronous for the card-number
|
|
966
969
|
// request, so it pauses in the microtask it paused in.
|
|
@@ -969,7 +972,7 @@ const aciPreClaim = (ctx) => {
|
|
|
969
972
|
if (!leg)
|
|
970
973
|
return undefined;
|
|
971
974
|
if (leg.leg === 'refuse') {
|
|
972
|
-
ctx.aci.refused(leg);
|
|
975
|
+
ctx.aci.refused(leg, ctx.request.body);
|
|
973
976
|
return aciRefuse(ctx, leg.code);
|
|
974
977
|
}
|
|
975
978
|
if (leg.leg === 'pass')
|
|
@@ -1204,9 +1207,17 @@ async function primerUnsupported(ctx, reason) {
|
|
|
1204
1207
|
// static host (assets.payrails.io) is the one exception: it serves the SDK's and the secure
|
|
1205
1208
|
// frame's files and takes no payment, so another script's bodyless POST there continues
|
|
1206
1209
|
// untouched on both adapters;
|
|
1207
|
-
// -
|
|
1208
|
-
//
|
|
1209
|
-
//
|
|
1210
|
+
// - the card form's payment (an encrypted card inside paymentComposition) on exactly an
|
|
1211
|
+
// execution's authorize link the registry recognizes is judged like a save below, by
|
|
1212
|
+
// payment-core's payment guard: a payment that stores the card at the merchant aborts as
|
|
1213
|
+
// `payrails_card_on_file_consent_required`, a shape this build does not take over as
|
|
1214
|
+
// `unsupported_payrails_card_payment`, and the attachment holds. A sound one is bound to the one
|
|
1215
|
+
// captured session its token, execution, host and providerConfigId name, and pauses carrying
|
|
1216
|
+
// the session's key and holderReference, which the payment's JWE carries;
|
|
1217
|
+
// - any other payment that carries an encrypted card inside paymentComposition (a stored card
|
|
1218
|
+
// with a CVC field, a split payment, another link, or one the registry does not recognize)
|
|
1219
|
+
// aborts as an unsupported checkout, `unsupported_payrails_card_payment`, and the attachment
|
|
1220
|
+
// holds;
|
|
1210
1221
|
// - a card save the registry recognizes is judged first by payment-core's guard and its
|
|
1211
1222
|
// card-on-file policy: a refusal aborts as an unsupported checkout with that code, and the
|
|
1212
1223
|
// attachment holds. Then it is bound to the one captured session its token, URL,
|
|
@@ -1214,9 +1225,9 @@ async function primerUnsupported(ctx, reason) {
|
|
|
1214
1225
|
// the page's frame wrapped. A miss aborts that request alone (`payrails_session_unavailable`,
|
|
1215
1226
|
// or the key's code) with a message to reload the checkout, and the attachment does not hold,
|
|
1216
1227
|
// 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
|
|
1228
|
+
// - anything else defers to the arbiter: a save or payment with no card pauses there and the
|
|
1229
|
+
// claim flow continues it (passWithoutCard), and every other request continues.
|
|
1230
|
+
// Synchronous unless answer bodies are still being read (the request then waits for them, briefly)
|
|
1220
1231
|
// or the request aborts.
|
|
1221
1232
|
const payrailsPreClaim = (ctx) => {
|
|
1222
1233
|
const capture = ctx.payrails;
|
|
@@ -1227,23 +1238,33 @@ const payrailsPreClaim = (ctx) => {
|
|
|
1227
1238
|
if (body === null || body === '')
|
|
1228
1239
|
return isPayrailsStaticHost(url) ? undefined : payrailsUnreadable(ctx);
|
|
1229
1240
|
const kind = payrailsRequestKind(url, method, body);
|
|
1230
|
-
if (kind === 'card_payment')
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1241
|
+
if (kind === 'card_payment') {
|
|
1242
|
+
if (!isPayrailsPaymentUrl(url) || !ctx.vault.isCardRequest(url, method))
|
|
1243
|
+
return payrailsUnsupported(ctx, 'unsupported_payrails_card_payment');
|
|
1244
|
+
const refusal = payrailsPaymentRefusal(body);
|
|
1245
|
+
if (refusal)
|
|
1246
|
+
return payrailsUnsupported(ctx, refusal);
|
|
1247
|
+
}
|
|
1248
|
+
else {
|
|
1249
|
+
if (kind !== 'card' || !ctx.vault.isCardRequest(url, method))
|
|
1250
|
+
return undefined;
|
|
1251
|
+
const refusal = payrailsSaveRefusal(body);
|
|
1252
|
+
if (refusal)
|
|
1253
|
+
return payrailsUnsupported(ctx, refusal);
|
|
1254
|
+
}
|
|
1237
1255
|
return capture.pending ? capture.settle().then(() => payrailsBind(ctx, capture, body)) : payrailsBind(ctx, capture, body);
|
|
1238
1256
|
};
|
|
1239
1257
|
function payrailsBind(ctx, capture, body) {
|
|
1240
|
-
const
|
|
1241
|
-
if (
|
|
1258
|
+
const bound = capture.bind({ url: ctx.request.url, headers: ctx.request.headers, body });
|
|
1259
|
+
if (bound === null)
|
|
1242
1260
|
return payrailsUnsupported(ctx, 'payrails_session_unavailable');
|
|
1243
|
-
const refusal = payrailsKeyRefusal(key, body);
|
|
1261
|
+
const refusal = payrailsKeyRefusal(bound.key, body);
|
|
1244
1262
|
if (refusal)
|
|
1245
1263
|
return payrailsUnsupported(ctx, refusal);
|
|
1246
|
-
|
|
1264
|
+
// A save names its own holderReference; a card-form payment's JWE needs the session's.
|
|
1265
|
+
const payrails = isPayrailsPaymentUrl(ctx.request.url)
|
|
1266
|
+
? { encryption_public_key: bound.key, holder_reference: bound.holderReference } : { encryption_public_key: bound.key };
|
|
1267
|
+
return { kind: 'pause', stripeStep: ctx.stripeStep, payrails };
|
|
1247
1268
|
}
|
|
1248
1269
|
async function payrailsUnreadable(ctx) {
|
|
1249
1270
|
ctx.onEvent?.({ type: 'blocked', detail: 'unreadable_payrails_request' });
|
|
@@ -1263,8 +1284,8 @@ async function payrailsUnsupported(ctx, reason) {
|
|
|
1263
1284
|
return { kind: 'abort' };
|
|
1264
1285
|
}
|
|
1265
1286
|
// 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
|
|
1287
|
+
// /hosted-payments/service/payment/hpp/process on api.convergepay.com,
|
|
1288
|
+
// www.convergepay.com or api.demo.convergepay.com, also carries electronic check and financing payments
|
|
1268
1289
|
// with no card, and card-shaped bodies the Vault never pays: a wallet with a card
|
|
1269
1290
|
// number the server supplied, the debit, gift card and push-to-card tabs, the
|
|
1270
1291
|
// follow-ups after a 3-D Secure, Pay Defense or surcharge step, a CAPTCHA, a
|
|
@@ -1356,12 +1377,13 @@ async function eprotectGiveUp(ctx, attempt, code) {
|
|
|
1356
1377
|
// temp_card_id bodies with no new card, and the page builds the transaction object itself, so a
|
|
1357
1378
|
// POST the registry recognizes on a WSPay host is judged here, before the terminal arbiter would
|
|
1358
1379
|
// pause it, by the whole-request check the API runs at create:
|
|
1359
|
-
// - a new card
|
|
1360
|
-
//
|
|
1361
|
-
//
|
|
1362
|
-
//
|
|
1363
|
-
//
|
|
1364
|
-
//
|
|
1380
|
+
// - a new card defers, and the arbiter pauses it for approval. A confirm that asks WSPay to
|
|
1381
|
+
// keep the card on file defers too: the approval asks the cardholder, and the API's create
|
|
1382
|
+
// judges whether it is the card guarantee it pays;
|
|
1383
|
+
// - anything else aborts with a `blocked` event, `unsupported_wspay_payment_method`, with no
|
|
1384
|
+
// claim, create or prompt. Like Braintree's unsupported operation it neither holds the
|
|
1385
|
+
// attachment nor changes its state, so the page's next confirm (a new card instead of a
|
|
1386
|
+
// saved one) is judged afresh.
|
|
1365
1387
|
// Nothing is decided without the registry: an SDK that did not sync with the wspay_confirm
|
|
1366
1388
|
// capability, or whose org Agentcard has not enabled for WSPay (the API then serves no WSPay
|
|
1367
1389
|
// recognizer), never recognizes a WSPay host, so the gate defers and the request continues as
|
|
@@ -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": [
|