@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/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: 7b5770020fc598b9f1fdfc842ef761812943269a1bd368d4751f99c1ffad7a17
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) {