@agent-cards/sdk 0.23.25 → 0.23.27
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 +16 -0
- package/README.md +37 -1
- package/dist/agent-amount.generated.js +1 -1
- package/dist/capabilities.generated.js +1 -1
- package/dist/card-fields.generated.js +207 -117
- package/dist/client.d.ts +47 -0
- package/dist/client.js +50 -1
- package/dist/merchant-card-endpoints.generated.js +68 -1
- package/dist/primer.generated.js +222 -132
- package/dist/stripe-checkout.generated.js +74 -44
- package/dist/tap-payments.generated.d.ts +10 -9
- package/dist/tap-payments.generated.js +28 -43
- package/package.json +2 -2
package/dist/client.d.ts
CHANGED
|
@@ -447,6 +447,18 @@ export declare const SUPPORTED_REGISTRY_FEATURES: readonly string[];
|
|
|
447
447
|
* page the create names. Served on the same terms: only to a build that lists it, for a company
|
|
448
448
|
* Agentcard turned Omise on for.
|
|
449
449
|
*
|
|
450
|
+
* `pin_payments_card_token`: the card request Pin Payments' card fields send, from Hosted Fields'
|
|
451
|
+
* control frame on cdn.pinpayments.com or from Pin.js on a merchant's own page: a JSON POST to
|
|
452
|
+
* https://api.pinpayments.com/1/cards (test-api.pinpayments.com in test) under the merchant's
|
|
453
|
+
* publishable key. This build pauses only the card fields' own body at that exact URL (payment-core
|
|
454
|
+
* pin-payments.js); a secret key, an amount or any other body there fails in the browser before
|
|
455
|
+
* anything is created, and the JSONP form and a card's own record are never paused. The cardholder's
|
|
456
|
+
* device sends the request itself with the real card, and the page gets the token answer
|
|
457
|
+
* payment-core's judge rebuilt. The request names no amount, so the agent's pair, above zero, is the
|
|
458
|
+
* one the cardholder approves, and the API pays only a Pin account payment-core pins for the checkout
|
|
459
|
+
* page the create names. Served on the same terms: only to a build that lists it, for a company
|
|
460
|
+
* Agentcard turned Pin Payments on for.
|
|
461
|
+
*
|
|
450
462
|
* `sbps_token_jsonp`: SB Payment Service's card token request, the JSONP <script>
|
|
451
463
|
* GET its token script sends to /token/generateToken on token.sps-system.com. This
|
|
452
464
|
* build pauses it only as the browser writes it, aborts any other request on that
|
|
@@ -499,6 +511,17 @@ export declare const SUPPORTED_REGISTRY_FEATURES: readonly string[];
|
|
|
499
511
|
* amount, so the agent's pair, above zero, is the one the cardholder approves.
|
|
500
512
|
* Served on the same terms: only to a build that lists it, for a company Agentcard turned APS on for.
|
|
501
513
|
*
|
|
514
|
+
* `nexi_checkout_pay`: the card payment Nexi Checkout's card frame (checkout.dibspayment.eu/v1/, formerly Nets
|
|
515
|
+
* Easy) posts as JSON to its own pay endpoint, https://checkout.dibspayment.eu/api/v1/pay (the test host for a
|
|
516
|
+
* test row), under the merchant's checkout key and the payment's id. This build pauses only the card form's own
|
|
517
|
+
* body at that exact URL ("save my card", "remember me" and a card fee are refused at the pause, and the frame's
|
|
518
|
+
* card lookup while the number is typed continues untouched); the cardholder's device reads Nexi's own record of the
|
|
519
|
+
* payment and sends the card through the checkout relay, and the frame gets Nexi's answer as payment-core's judge
|
|
520
|
+
* rebuilt it: the payment done, or Nexi's 3-D Secure step, which the frame then runs in the agent's browser. The
|
|
521
|
+
* body names the payment's amount in minor units but not its currency, so the agent's pair, above zero, is the one
|
|
522
|
+
* the cardholder approves, and the API holds its amount to the body's. Served on the same terms: only to a build
|
|
523
|
+
* that lists it, for a company Agentcard turned Nexi Checkout on for.
|
|
524
|
+
*
|
|
502
525
|
* `barion_hosted_payment_page`: Barion's Smart Gateway, whose card-free link
|
|
503
526
|
* (secure.barion.com/Pay?Id=<payment id>, a plain GET the merchant's redirect or script sends
|
|
504
527
|
* the buyer to) this build pauses for the cardholder's device by its exact link (hosted-entry.ts),
|
|
@@ -506,6 +529,30 @@ export declare const SUPPORTED_REGISTRY_FEATURES: readonly string[];
|
|
|
506
529
|
* send (pre-claim.ts, barion.ts). Served on the same terms as Przelewy24's: only to a build that
|
|
507
530
|
* lists it, for a company Agentcard turned Barion on for.
|
|
508
531
|
*
|
|
532
|
+
* `paymob_checkout_pay`: the card payment Paymob's own checkout sends, from Unified Checkout
|
|
533
|
+
* (<country>.checkout.paymob.com) or from the Pixel card frame a merchant's page embeds, as JSON to
|
|
534
|
+
* https://<accept|uae|ksa|oman>.paymob.com/api/acceptance/payments/pay. This build pauses only the
|
|
535
|
+
* card form's own payment at that exact URL: a card Paymob saved, a payment that keeps the card,
|
|
536
|
+
* pays in installments, splits, converts or names a Paymob account, and a payment key that enrolls
|
|
537
|
+
* a subscription or names no amount are refused at the pause, and another method's payment with no
|
|
538
|
+
* card (a wallet, Apple Pay, cash) continues to Paymob untouched. The cardholder's device sends the
|
|
539
|
+
* payment to Paymob itself with the real card, and the checkout gets Paymob's answer as payment-core's
|
|
540
|
+
* judge rebuilt it. The payment key names the amount and currency, so an agent pair is optional and
|
|
541
|
+
* the API holds one to the key's figure. Served on the same terms: only to a build that lists it, for
|
|
542
|
+
* a company Agentcard turned Paymob on for.
|
|
543
|
+
*
|
|
544
|
+
* `payu_latam_webcheckout_card`: the card submit PayU Latam's WebCheckout page posts to
|
|
545
|
+
* checkout.payulatam.com/ppp-web-gateway-payu/checkout/submit/<country>/credit_card/<key>
|
|
546
|
+
* (sandbox.checkout.payulatam.com on PayU's test platform). This build pauses only the card form's
|
|
547
|
+
* own submit at that exact URL (a ticked save-my-card box, a card PayU saved, installments and a
|
|
548
|
+
* test order on the live host are refused at the pause); the cardholder's device writes the real
|
|
549
|
+
* card into the paused body and sends it to PayU itself, and the page gets PayU's answer as
|
|
550
|
+
* payment-core's judge reads it. The page's BIN lookup (checkout/card_info/) carries the typed
|
|
551
|
+
* placeholder and continues, as the page needs its answer to fill the card's facts. The submit's
|
|
552
|
+
* copy of the order is the browser's, so the agent's pair, above zero, is the one the cardholder
|
|
553
|
+
* approves, which the API holds to the order PayU reads back. Served on the same terms: only to a
|
|
554
|
+
* build that lists it, for a company Agentcard turned PayU Latam on for.
|
|
555
|
+
*
|
|
509
556
|
* The list itself is capabilities.json, sorted, one per line (scripts/generate-capabilities.mjs).
|
|
510
557
|
*/
|
|
511
558
|
export declare const SUPPORTED_CAPABILITIES: readonly string[];
|
package/dist/client.js
CHANGED
|
@@ -440,6 +440,18 @@ export const SUPPORTED_REGISTRY_FEATURES = ['card_fields', 'checkout_sessions'];
|
|
|
440
440
|
* page the create names. Served on the same terms: only to a build that lists it, for a company
|
|
441
441
|
* Agentcard turned Omise on for.
|
|
442
442
|
*
|
|
443
|
+
* `pin_payments_card_token`: the card request Pin Payments' card fields send, from Hosted Fields'
|
|
444
|
+
* control frame on cdn.pinpayments.com or from Pin.js on a merchant's own page: a JSON POST to
|
|
445
|
+
* https://api.pinpayments.com/1/cards (test-api.pinpayments.com in test) under the merchant's
|
|
446
|
+
* publishable key. This build pauses only the card fields' own body at that exact URL (payment-core
|
|
447
|
+
* pin-payments.js); a secret key, an amount or any other body there fails in the browser before
|
|
448
|
+
* anything is created, and the JSONP form and a card's own record are never paused. The cardholder's
|
|
449
|
+
* device sends the request itself with the real card, and the page gets the token answer
|
|
450
|
+
* payment-core's judge rebuilt. The request names no amount, so the agent's pair, above zero, is the
|
|
451
|
+
* one the cardholder approves, and the API pays only a Pin account payment-core pins for the checkout
|
|
452
|
+
* page the create names. Served on the same terms: only to a build that lists it, for a company
|
|
453
|
+
* Agentcard turned Pin Payments on for.
|
|
454
|
+
*
|
|
443
455
|
* `sbps_token_jsonp`: SB Payment Service's card token request, the JSONP <script>
|
|
444
456
|
* GET its token script sends to /token/generateToken on token.sps-system.com. This
|
|
445
457
|
* build pauses it only as the browser writes it, aborts any other request on that
|
|
@@ -492,6 +504,17 @@ export const SUPPORTED_REGISTRY_FEATURES = ['card_fields', 'checkout_sessions'];
|
|
|
492
504
|
* amount, so the agent's pair, above zero, is the one the cardholder approves.
|
|
493
505
|
* Served on the same terms: only to a build that lists it, for a company Agentcard turned APS on for.
|
|
494
506
|
*
|
|
507
|
+
* `nexi_checkout_pay`: the card payment Nexi Checkout's card frame (checkout.dibspayment.eu/v1/, formerly Nets
|
|
508
|
+
* Easy) posts as JSON to its own pay endpoint, https://checkout.dibspayment.eu/api/v1/pay (the test host for a
|
|
509
|
+
* test row), under the merchant's checkout key and the payment's id. This build pauses only the card form's own
|
|
510
|
+
* body at that exact URL ("save my card", "remember me" and a card fee are refused at the pause, and the frame's
|
|
511
|
+
* card lookup while the number is typed continues untouched); the cardholder's device reads Nexi's own record of the
|
|
512
|
+
* payment and sends the card through the checkout relay, and the frame gets Nexi's answer as payment-core's judge
|
|
513
|
+
* rebuilt it: the payment done, or Nexi's 3-D Secure step, which the frame then runs in the agent's browser. The
|
|
514
|
+
* body names the payment's amount in minor units but not its currency, so the agent's pair, above zero, is the one
|
|
515
|
+
* the cardholder approves, and the API holds its amount to the body's. Served on the same terms: only to a build
|
|
516
|
+
* that lists it, for a company Agentcard turned Nexi Checkout on for.
|
|
517
|
+
*
|
|
495
518
|
* `barion_hosted_payment_page`: Barion's Smart Gateway, whose card-free link
|
|
496
519
|
* (secure.barion.com/Pay?Id=<payment id>, a plain GET the merchant's redirect or script sends
|
|
497
520
|
* the buyer to) this build pauses for the cardholder's device by its exact link (hosted-entry.ts),
|
|
@@ -499,6 +522,30 @@ export const SUPPORTED_REGISTRY_FEATURES = ['card_fields', 'checkout_sessions'];
|
|
|
499
522
|
* send (pre-claim.ts, barion.ts). Served on the same terms as Przelewy24's: only to a build that
|
|
500
523
|
* lists it, for a company Agentcard turned Barion on for.
|
|
501
524
|
*
|
|
525
|
+
* `paymob_checkout_pay`: the card payment Paymob's own checkout sends, from Unified Checkout
|
|
526
|
+
* (<country>.checkout.paymob.com) or from the Pixel card frame a merchant's page embeds, as JSON to
|
|
527
|
+
* https://<accept|uae|ksa|oman>.paymob.com/api/acceptance/payments/pay. This build pauses only the
|
|
528
|
+
* card form's own payment at that exact URL: a card Paymob saved, a payment that keeps the card,
|
|
529
|
+
* pays in installments, splits, converts or names a Paymob account, and a payment key that enrolls
|
|
530
|
+
* a subscription or names no amount are refused at the pause, and another method's payment with no
|
|
531
|
+
* card (a wallet, Apple Pay, cash) continues to Paymob untouched. The cardholder's device sends the
|
|
532
|
+
* payment to Paymob itself with the real card, and the checkout gets Paymob's answer as payment-core's
|
|
533
|
+
* judge rebuilt it. The payment key names the amount and currency, so an agent pair is optional and
|
|
534
|
+
* the API holds one to the key's figure. Served on the same terms: only to a build that lists it, for
|
|
535
|
+
* a company Agentcard turned Paymob on for.
|
|
536
|
+
*
|
|
537
|
+
* `payu_latam_webcheckout_card`: the card submit PayU Latam's WebCheckout page posts to
|
|
538
|
+
* checkout.payulatam.com/ppp-web-gateway-payu/checkout/submit/<country>/credit_card/<key>
|
|
539
|
+
* (sandbox.checkout.payulatam.com on PayU's test platform). This build pauses only the card form's
|
|
540
|
+
* own submit at that exact URL (a ticked save-my-card box, a card PayU saved, installments and a
|
|
541
|
+
* test order on the live host are refused at the pause); the cardholder's device writes the real
|
|
542
|
+
* card into the paused body and sends it to PayU itself, and the page gets PayU's answer as
|
|
543
|
+
* payment-core's judge reads it. The page's BIN lookup (checkout/card_info/) carries the typed
|
|
544
|
+
* placeholder and continues, as the page needs its answer to fill the card's facts. The submit's
|
|
545
|
+
* copy of the order is the browser's, so the agent's pair, above zero, is the one the cardholder
|
|
546
|
+
* approves, which the API holds to the order PayU reads back. Served on the same terms: only to a
|
|
547
|
+
* build that lists it, for a company Agentcard turned PayU Latam on for.
|
|
548
|
+
*
|
|
502
549
|
* The list itself is capabilities.json, sorted, one per line (scripts/generate-capabilities.mjs).
|
|
503
550
|
*/
|
|
504
551
|
export const SUPPORTED_CAPABILITIES = DECLARED_CAPABILITIES;
|
|
@@ -602,6 +649,8 @@ export const SUPPORTED_CAPABILITIES = DECLARED_CAPABILITIES;
|
|
|
602
649
|
* create route's refusal, not in this comment.
|
|
603
650
|
*/
|
|
604
651
|
const REVOLUT_PSP = 'revolut';
|
|
652
|
+
/** Nexi Checkout's card payment names the payment's amount in minor units but not its currency, as Revolut's does. */
|
|
653
|
+
const NEXI_CHECKOUT_PSP = 'nexi_checkout';
|
|
605
654
|
const AGENT_AMOUNT_PROCESSORS = AGENT_AMOUNT.processors;
|
|
606
655
|
/** The ones a zero amount is refused for, like a missing one (authorize()). */
|
|
607
656
|
const ABOVE_ZERO_PROCESSORS = AGENT_AMOUNT.aboveZero;
|
|
@@ -888,7 +937,7 @@ export class AmountRequiredError extends Error {
|
|
|
888
937
|
constructor(psp) {
|
|
889
938
|
const processor = PROCESSOR_NAMES[psp] ?? psp;
|
|
890
939
|
// A Payrexx card request names the frame's total, but the merchant's page charges its own total after the token.
|
|
891
|
-
const lacks = psp === REVOLUT_PSP ? 'names its amount but not its currency'
|
|
940
|
+
const lacks = psp === REVOLUT_PSP || psp === NEXI_CHECKOUT_PSP ? 'names its amount but not its currency'
|
|
892
941
|
: psp === PAYREXX_PSP ? "only mints a token the merchant's page charges later"
|
|
893
942
|
: psp === TAP_PAYMENTS_PSP ? 'does not decide the amount charged' : 'names no amount';
|
|
894
943
|
// "An Omise payment request", "A Clover payment request": the article follows the name's first letter.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
// Generated from @agent-cards/payment-core. Do not edit.
|
|
3
|
-
// artifact-sha256:
|
|
3
|
+
// artifact-sha256: fedc712140db2d5651bed3391ac158d67dc04d8be58db9926ed328e9be20eb1b
|
|
4
4
|
// src/json-path.js
|
|
5
5
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
6
6
|
function isPlainObject(v) {
|
|
@@ -2412,6 +2412,73 @@ var MERCHANT_CARD_ENDPOINT_PROFILES = /* @__PURE__ */ deepFreeze([
|
|
|
2412
2412
|
charge_timing: "deferred",
|
|
2413
2413
|
once_per: { query: "cartId" },
|
|
2414
2414
|
pending: ["the exporch form, never seen live: a HAR of a cart AT&T sends to /msapi/checkoutexporch/v1"]
|
|
2415
|
+
},
|
|
2416
|
+
{
|
|
2417
|
+
id: "nike_paymentcc_store",
|
|
2418
|
+
merchant: "Nike",
|
|
2419
|
+
status: "observe",
|
|
2420
|
+
evidence: [
|
|
2421
|
+
"www.nike.com guest checkout, read live on Oct 23, 2026 in a Kernel browser with every non-GET request aborted before it left (a placeholder card, nothing sent): the card is typed into Nike's own card frame, https://paymentcc.nike.com/services/default?id=<creditCardInfoId>&ctx=…&language=…&maskerEnabled=…, a form #creditCardForm with #creditCardNumber, #expirationDate (MM/YY) and #cvNumber and hidden expirationMonth and expirationYear. No processor frame, tokenizer or client-side encryption is on the page.",
|
|
2422
|
+
"The frame's own script (/resources/js/common.js) posts the card once all three fields are valid, on a field's blur or keyup, with no button press: XHR POST /creditcardsubmit/<creditCardInfoId>/store, Content-Type application/json; charset=utf-8, body {accountNumber (digits), cardType, expirationMonth (MM), expirationYear ('20' + YY), creditCardInfoId (the frame's id query value, the same as the path), cvNumber}. The captured request carried the .nike.com cookies (Akamai's ak_bmsc and bm_sv among them), Origin https://paymentcc.nike.com, and no CSRF or auth header.",
|
|
2423
|
+
"cardType comes from the frame's own validator table, first match wins: AMERICANEXPRESS (34, 37), CARTASI (a list of Italian 4 and 5 BINs), CARTEBLEUE, DANKORT, DISCOVER, DINERS, DOMESTICMAESTRO, INTERNATIONALMAESTRO, JCB, MASTERCARD (51-55 and 2221-2720), VISAELECTRON, VISA (4).",
|
|
2424
|
+
"After the post the frame asks GET /creditcardsubmit/<id>/isValid?mode=1 and tells the page its brand, last four and expiry by postMessage. A CVV-only change sends PUT /creditcardsubmit/<id>/update {cvNumber}. Continue to Order Review then posts https://api.nike.com/payment/preview/v3 with paymentInfo naming the creditCardInfoId, the brand, the last four and a masked accountNumber, beside the checkout total and currency: no card number leaves the page outside the store request."
|
|
2425
|
+
],
|
|
2426
|
+
har: null,
|
|
2427
|
+
checkout: "https://www.nike.com",
|
|
2428
|
+
checkout_frame: false,
|
|
2429
|
+
frame: "https://paymentcc.nike.com",
|
|
2430
|
+
endpoint: "https://paymentcc.nike.com",
|
|
2431
|
+
method: "POST",
|
|
2432
|
+
path: "/creditcardsubmit/:creditCardInfoId/store",
|
|
2433
|
+
query: {},
|
|
2434
|
+
navigation: null,
|
|
2435
|
+
encoding: "json",
|
|
2436
|
+
session: {
|
|
2437
|
+
cookies: true,
|
|
2438
|
+
cookie_names: null,
|
|
2439
|
+
headers: [...BROWSER_HEADERS, "content-type"],
|
|
2440
|
+
required: []
|
|
2441
|
+
},
|
|
2442
|
+
card: {
|
|
2443
|
+
pan: { at: ["accountNumber"], format: "digits" },
|
|
2444
|
+
cvv: { at: ["cvNumber"], format: "digits" },
|
|
2445
|
+
exp_month: { at: ["expirationMonth"], format: "mm" },
|
|
2446
|
+
exp_year: { at: ["expirationYear"], format: "yyyy" },
|
|
2447
|
+
expiry: null,
|
|
2448
|
+
last4: null,
|
|
2449
|
+
leading: null,
|
|
2450
|
+
brands: [{ at: ["cardType"], map: { visa: "VISA", mastercard: "MASTERCARD", amex: "AMERICANEXPRESS", discover: "DISCOVER" } }],
|
|
2451
|
+
bins: null
|
|
2452
|
+
},
|
|
2453
|
+
merchant_key: null,
|
|
2454
|
+
requires: [
|
|
2455
|
+
{ at: ["creditCardInfoId"], matches: "guid" },
|
|
2456
|
+
{ at: ["creditCardInfoId"], equals_path: "creditCardInfoId" }
|
|
2457
|
+
],
|
|
2458
|
+
refuse: [],
|
|
2459
|
+
payment_method: null,
|
|
2460
|
+
// The store request carries no total: the order's total first travels in payment/preview/v3, after it.
|
|
2461
|
+
amount: null,
|
|
2462
|
+
currency: "USD",
|
|
2463
|
+
response: { headers: ["content-type"], withhold: [] },
|
|
2464
|
+
resends: [
|
|
2465
|
+
// The frame's CVV-only update, which sends the typed security code again outside the store request.
|
|
2466
|
+
{ method: "PUT", path: "/creditcardsubmit/:creditCardInfoId/update", query: {} }
|
|
2467
|
+
],
|
|
2468
|
+
challenge: null,
|
|
2469
|
+
facts: null,
|
|
2470
|
+
// paymentcc.nike.com answers /robots.txt with a 404; the frame's own masking script is a harmless GET it serves.
|
|
2471
|
+
bootstrap: "/resources/js/masker.js",
|
|
2472
|
+
timeout_ms: 3e4,
|
|
2473
|
+
charge_timing: "deferred",
|
|
2474
|
+
once_per: { path: "creditCardInfoId" },
|
|
2475
|
+
pending: [
|
|
2476
|
+
"the answer to the store request (status, body and headers) and to isValid, which this capture aborted before they were sent",
|
|
2477
|
+
"a total to hold the agent's amount to: the store request names none, and Nike's checkout total travels only in payment/preview/v3 after it",
|
|
2478
|
+
"which call authorizes the card (payment/preview/v3 or the order submit), and whether the charge when the order ships needs the card to stay open",
|
|
2479
|
+
"a card the frame names CARTASI, CARTEBLEUE, DANKORT or a Maestro type, which the brand map writes as its network's code",
|
|
2480
|
+
"whether Akamai accepts the relay's request with cookies the agent's browser minted"
|
|
2481
|
+
]
|
|
2415
2482
|
}
|
|
2416
2483
|
]);
|
|
2417
2484
|
function wireProjection(profiles) {
|