@agent-cards/sdk 0.23.23 → 0.23.25

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/PREFLIGHT.md +2 -0
  3. package/README.md +13 -1
  4. package/dist/agent-amount.generated.js +1 -1
  5. package/dist/amadeus.d.ts +5 -2
  6. package/dist/amadeus.js +18 -3
  7. package/dist/amazon-payment-services.d.ts +25 -0
  8. package/dist/amazon-payment-services.generated.d.ts +76 -0
  9. package/dist/amazon-payment-services.generated.js +883 -0
  10. package/dist/amazon-payment-services.js +53 -0
  11. package/dist/barion.d.ts +44 -0
  12. package/dist/barion.js +84 -0
  13. package/dist/capabilities.generated.js +1 -1
  14. package/dist/card-fields.generated.js +5 -4
  15. package/dist/cdp.js +70 -4
  16. package/dist/client.d.ts +55 -3
  17. package/dist/client.js +119 -12
  18. package/dist/hosted-entry.js +2 -0
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.js +1 -0
  21. package/dist/openpay.generated.d.ts +67 -0
  22. package/dist/openpay.generated.js +446 -0
  23. package/dist/paddle-checkout-watch.d.ts +70 -0
  24. package/dist/paddle-checkout-watch.js +239 -0
  25. package/dist/paddle-tokenex.generated.d.ts +29 -1
  26. package/dist/paddle-tokenex.generated.js +175 -26
  27. package/dist/pre-claim.d.ts +1 -0
  28. package/dist/pre-claim.js +18 -1
  29. package/dist/prepared-processor.d.ts +12 -4
  30. package/dist/prepared-processor.js +31 -5
  31. package/dist/primer.generated.js +5 -4
  32. package/dist/stripe-checkout.generated.js +5 -4
  33. package/dist/tap-payments.d.ts +43 -0
  34. package/dist/tap-payments.generated.d.ts +59 -0
  35. package/dist/tap-payments.generated.js +990 -0
  36. package/dist/tap-payments.js +72 -0
  37. package/dist/tokenex-iframe.generated.d.ts +18 -6
  38. package/dist/tokenex-iframe.generated.js +3 -3
  39. package/package.json +2 -2
@@ -32,8 +32,13 @@
32
32
  * hipay: prepared only. The merchant's page gives HiPay's hosted fields 20 seconds after Pay, too soon for an
33
33
  * approval after Pay. Its environments are its two vault hosts: secure2-vault (production) and
34
34
  * stage-secure2-vault (sandbox).
35
+ *
36
+ * openpay_bbva: prepared only. openpay.js abandons its token create 40 seconds after Pay, too soon for an
37
+ * approval after Pay. Its environments are its API hosts: api.openpay.<mx|co|pe> (production) and
38
+ * sandbox-api.openpay.<mx|co|pe> (sandbox). The token URL names the merchant in its path, so no URL is
39
+ * prepared in advance: the claim binds the request by its host's environment and its shape, as ACI's.
35
40
  */
36
- export type PreparationProcessor = 'square' | 'braintree' | 'worldpay' | 'bambora' | 'mercado_pago' | 'recurly' | 'spreedly' | 'adyen' | 'checkout_com' | 'paysafe' | 'fiserv' | 'cybersource_flex' | 'aci' | 'creditguard' | 'worldpay_eprotect' | 'amadeus_checkout' | 'verifone' | 'cybersource_secure_acceptance' | 'paddle_vgs' | 'wix_payments' | 'paygent' | 'hipay';
41
+ export type PreparationProcessor = 'square' | 'braintree' | 'worldpay' | 'bambora' | 'mercado_pago' | 'recurly' | 'spreedly' | 'adyen' | 'checkout_com' | 'paysafe' | 'fiserv' | 'cybersource_flex' | 'aci' | 'creditguard' | 'worldpay_eprotect' | 'amadeus_checkout' | 'verifone' | 'cybersource_secure_acceptance' | 'paddle_vgs' | 'wix_payments' | 'paygent' | 'hipay' | 'openpay_bbva';
37
42
  export type PreparationEnvironment = 'production' | 'sandbox' | 'shared';
38
43
  /**
39
44
  * How the approved card reaches the processor: the device's own request (token), or
@@ -71,7 +76,8 @@ export declare function preparedApprovalAnswersRetry(psp: string): boolean;
71
76
  * profile pins. CyberSource Secure Acceptance's are separate hosts too: secureacceptance is
72
77
  * live, testsecureacceptance is test. So are Paddle VGS's two card URLs: vault is live,
73
78
  * sandbox-vault is test. So are Paygent's two token hosts: token is live, sandbox is test. So are
74
- * HiPay's two vault hosts: secure2-vault is live, stage-secure2-vault is test.
79
+ * HiPay's two vault hosts: secure2-vault is live, stage-secure2-vault is test. So are Openpay's API
80
+ * hosts: api.openpay.<mx|co|pe> is live, sandbox-api.openpay.<mx|co|pe> is test.
75
81
  */
76
82
  export declare function validPreparationEnvironment(psp: string, environment: string): boolean;
77
83
  /**
@@ -83,8 +89,10 @@ export declare function validPreparationEnvironment(psp: string, environment: st
83
89
  export declare function aciPreparationUrl(environment: PreparationEnvironment): string;
84
90
  /**
85
91
  * A processor whose card request names an id the merchant mints only at Pay time (ACI's checkout
86
- * id), so no URL can be prepared in advance: whether the adapters can intercept it is asked of the
87
- * registry (VaultClient.recognizesProcessor), not of the prepared endpoint.
92
+ * id), or the merchant's own id (Openpay's token URL carries the merchant id in its path and the
93
+ * country in its host), so no URL can be prepared in advance: whether the adapters can intercept it
94
+ * is asked of the registry (VaultClient.recognizesProcessor), not of the prepared endpoint, which
95
+ * only names the preparation.
88
96
  */
89
97
  export declare function preparationBindsByShape(psp: string): boolean;
90
98
  /**
@@ -17,6 +17,7 @@ import { PADDLE_VGS_CARDS_URLS, isPreparedPaddleVgsRequest } from './paddle-vgs.
17
17
  import { WIX_PAYMENTS_TOKENIZE_URL, isPreparedWixPaymentsRequest } from './wix-payments.generated.js';
18
18
  import { paygentEnvironment, paygentPreparationUrl, paygentRequestRefusal } from './paygent.generated.js';
19
19
  import { HIPAY_TOKEN_URLS, hipayRequestRefusal, hipayTokenEnvironment, isPreparedHipayRequest } from './hipay.generated.js';
20
+ import { OPENPAY_PREPARATION_URLS, isPreparedOpenpayRequest, openpayRequestRefusal, openpayTokenEnvironment } from './openpay.generated.js';
20
21
  export function preparationMode(psp) {
21
22
  return psp === 'adyen' || psp === 'fiserv' || psp === 'verifone' ? 'cse' : 'token';
22
23
  }
@@ -52,7 +53,8 @@ export function preparedApprovalAnswersRetry(psp) {
52
53
  * profile pins. CyberSource Secure Acceptance's are separate hosts too: secureacceptance is
53
54
  * live, testsecureacceptance is test. So are Paddle VGS's two card URLs: vault is live,
54
55
  * sandbox-vault is test. So are Paygent's two token hosts: token is live, sandbox is test. So are
55
- * HiPay's two vault hosts: secure2-vault is live, stage-secure2-vault is test.
56
+ * HiPay's two vault hosts: secure2-vault is live, stage-secure2-vault is test. So are Openpay's API
57
+ * hosts: api.openpay.<mx|co|pe> is live, sandbox-api.openpay.<mx|co|pe> is test.
56
58
  */
57
59
  export function validPreparationEnvironment(psp, environment) {
58
60
  if (psp === 'bambora' || psp === 'mercado_pago' || psp === 'recurly' || psp === 'spreedly')
@@ -61,7 +63,7 @@ export function validPreparationEnvironment(psp, environment) {
61
63
  if (psp === 'wix_payments')
62
64
  return environment === 'production';
63
65
  return ['square', 'braintree', 'worldpay', 'adyen', 'checkout_com', 'paysafe', 'fiserv', 'cybersource_flex', 'aci', 'creditguard', 'worldpay_eprotect', 'amadeus_checkout', 'verifone',
64
- 'cybersource_secure_acceptance', 'paddle_vgs', 'paygent', 'hipay'].includes(psp) && ['production', 'sandbox'].includes(environment);
66
+ 'cybersource_secure_acceptance', 'paddle_vgs', 'paygent', 'hipay', 'openpay_bbva'].includes(psp) && ['production', 'sandbox'].includes(environment);
65
67
  }
66
68
  /**
67
69
  * ACI's prepared endpoint, the literal the API names (backend checkout-prepared-processor.ts): its
@@ -74,11 +76,13 @@ export function aciPreparationUrl(environment) {
74
76
  }
75
77
  /**
76
78
  * A processor whose card request names an id the merchant mints only at Pay time (ACI's checkout
77
- * id), so no URL can be prepared in advance: whether the adapters can intercept it is asked of the
78
- * registry (VaultClient.recognizesProcessor), not of the prepared endpoint.
79
+ * id), or the merchant's own id (Openpay's token URL carries the merchant id in its path and the
80
+ * country in its host), so no URL can be prepared in advance: whether the adapters can intercept it
81
+ * is asked of the registry (VaultClient.recognizesProcessor), not of the prepared endpoint, which
82
+ * only names the preparation.
79
83
  */
80
84
  export function preparationBindsByShape(psp) {
81
- return psp === 'aci';
85
+ return psp === 'aci' || psp === 'openpay_bbva';
82
86
  }
83
87
  /**
84
88
  * The endpoint a CreditGuard preparation stands for, per environment, as the API advertises it: the
@@ -115,6 +119,11 @@ export function preparationEndpoint(psp, environment) {
115
119
  // HiPay: the token create on the environment's vault, the only URL the claim takes for it.
116
120
  if (psp === 'hipay')
117
121
  return HIPAY_TOKEN_URLS[environment];
122
+ // Openpay: the literal the API names (backend checkout-prepared-processor.ts), on the environment's Mexican host. It
123
+ // only names the preparation: its "prepared" is shorter than any merchant id, so no card request is ever sent to it,
124
+ // and the claim binds the real token URL by environment and shape (matchesPreparedRequest), as ACI's.
125
+ if (psp === 'openpay_bbva')
126
+ return OPENPAY_PREPARATION_URLS[environment];
118
127
  // A Verifone endpoint is its reviewed profile's leg, never one per environment (verifone.ts).
119
128
  if (psp === 'verifone')
120
129
  throw new Error('unsupported_preparation_processor');
@@ -286,6 +295,15 @@ export function matchesPreparedRequest(psp, environment, requestUrl, method, bod
286
295
  // bind with too.
287
296
  if (psp === 'hipay')
288
297
  return isPreparedHipayRequest(requestUrl, method.toUpperCase(), body ?? null, environment, headers ?? {});
298
+ // Openpay: a token URL on one of the environment's API hosts and payment-core's whole request rule (openpay.js's JSON
299
+ // Content-Type and Accept, one public key under Basic, every header named once, and the caller's token body member by
300
+ // member), the rule the API and the Vault bind with too. The token URL names the merchant in its path, so the claim
301
+ // never compares it with the prepared endpoint, which only names the preparation. The method as the page sent it, as
302
+ // the API reads it. Which merchant id and public key a live request may name is the API's to judge at the bind and the
303
+ // Vault's before it writes the card, against the reviewed pin each of them holds for the approved checkout origin, so a
304
+ // merchant a later release reviews needs no new build of this library.
305
+ if (psp === 'openpay_bbva')
306
+ return isPreparedOpenpayRequest(requestUrl, method, body ?? null, environment, headers ?? {});
289
307
  if (psp === 'creditguard')
290
308
  return matchesPreparedCreditguard(environment, requestUrl, body, headers, binding);
291
309
  // A Verifone request is judged only through the profile its preparation names (matchesPreparation).
@@ -453,6 +471,14 @@ export function preparedRequestRefusal(psp, environment, requestUrl, body, heade
453
471
  return 'checkout_changed';
454
472
  return hipayRequestRefusal({ url: requestUrl, method: 'POST', headers, body: body ?? null }) ?? 'checkout_changed';
455
473
  }
474
+ // An Openpay token create on one of the prepared environment's API hosts names what payment-core's request rule
475
+ // refused (openpay_headers_refused, openpay_body_unsupported); another environment's host, a group's or a customer's
476
+ // path, a query, or any other request is `checkout_changed`.
477
+ if (psp === 'openpay_bbva') {
478
+ if (openpayTokenEnvironment(requestUrl) !== environment)
479
+ return 'checkout_changed';
480
+ return openpayRequestRefusal({ url: requestUrl, method: 'POST', headers, body: body ?? null }) ?? 'checkout_changed';
481
+ }
456
482
  if (psp !== 'amadeus_checkout' || amadeusEnvironment(requestUrl) !== environment)
457
483
  return 'checkout_changed';
458
484
  const merchantHost = merchantHostOf(merchantOrigin);
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: cd9e71f205ba2b11824dd49d5dd2fb4ebd67f5bb0c38dfe974bbace93f7b018b
3
+ // artifact-sha256: 12785bf93affbf72e1c0f5b4a8b3dedecab36a87d1bfa2c16405bffa841432c6
4
4
  // src/card-number-key.js
5
5
  var CARD_NUMBER_KEY = /^(number|card_number|cardnumber|cardNum|card_num|pan)$/i;
6
6
  // src/json-path.js
@@ -3569,11 +3569,11 @@ var TOKENEX_IFRAME_BODY_KEYS = Object.freeze([
3569
3569
  ]);
3570
3570
  var TOKENEX_IFRAME_TOKEN_SCHEMES = Object.freeze(["sixTOKENfour"]);
3571
3571
  var TOKENEX_IFRAME_REVIEWED_ACCOUNTS = Object.freeze({
3572
- "htp.tokenex.com": Object.freeze({}),
3572
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "https://www.jetblue.com" }),
3573
3573
  "test-htp.tokenex.com": Object.freeze({})
3574
3574
  });
3575
3575
  var TOKENEX_IFRAME_ACCOUNT_NAMES = Object.freeze({
3576
- "htp.tokenex.com": Object.freeze({}),
3576
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "JetBlue" }),
3577
3577
  "test-htp.tokenex.com": Object.freeze({})
3578
3578
  });
3579
3579
  var BODY_LIMIT22 = 8192;
@@ -4623,7 +4623,8 @@ function toastBodyVerdict(body) {
4623
4623
  // src/fastspring.js
4624
4624
  var FASTSPRING_PSP = "fastspring";
4625
4625
  var FASTSPRING_STORE_PINS = /* @__PURE__ */ Object.freeze([
4626
- Object.freeze({ environment: "production", store: "daisydisk", storefront: "", merchant: "DaisyDisk" })
4626
+ Object.freeze({ environment: "production", store: "daisydisk", storefront: "", merchant: "DaisyDisk" }),
4627
+ Object.freeze({ environment: "production", store: "stardock", storefront: "/popup-store", merchant: "Stardock" })
4627
4628
  ]);
4628
4629
  var URL_LIMIT11 = 256;
4629
4630
  var BODY_LIMIT28 = 32768;
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: 7d433d016a6cb47bb9d1cf22ab63bf41d3d67091d68a23e2d3c8885dbfa98b43
3
+ // artifact-sha256: d0cb72d4119895f1fa8110ae4048be399964c6ab62814a11527cc163b8cb70cd
4
4
  // src/deep-freeze.js
5
5
  function deepFreeze(value) {
6
6
  if (value && typeof value === "object" && !Object.isFrozen(value)) {
@@ -3344,11 +3344,11 @@ var TOKENEX_IFRAME_BODY_KEYS = Object.freeze([
3344
3344
  ]);
3345
3345
  var TOKENEX_IFRAME_TOKEN_SCHEMES = Object.freeze(["sixTOKENfour"]);
3346
3346
  var TOKENEX_IFRAME_REVIEWED_ACCOUNTS = Object.freeze({
3347
- "htp.tokenex.com": Object.freeze({}),
3347
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "https://www.jetblue.com" }),
3348
3348
  "test-htp.tokenex.com": Object.freeze({})
3349
3349
  });
3350
3350
  var TOKENEX_IFRAME_ACCOUNT_NAMES = Object.freeze({
3351
- "htp.tokenex.com": Object.freeze({}),
3351
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "JetBlue" }),
3352
3352
  "test-htp.tokenex.com": Object.freeze({})
3353
3353
  });
3354
3354
  var exact = (pattern, value) => typeof value === "string" && pattern.exec(value)?.[0] === value;
@@ -3480,7 +3480,8 @@ var CARDCOM_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
3480
3480
  var TOAST_SUBSTITUTION = /* @__PURE__ */ Object.freeze({ at: "card", fields: Object.freeze(["cardData"]) });
3481
3481
  // src/fastspring.js
3482
3482
  var FASTSPRING_STORE_PINS = /* @__PURE__ */ Object.freeze([
3483
- Object.freeze({ environment: "production", store: "daisydisk", storefront: "", merchant: "DaisyDisk" })
3483
+ Object.freeze({ environment: "production", store: "daisydisk", storefront: "", merchant: "DaisyDisk" }),
3484
+ Object.freeze({ environment: "production", store: "stardock", storefront: "/popup-store", merchant: "Stardock" })
3484
3485
  ]);
3485
3486
  var STORE = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?";
3486
3487
  var CARD_URL = new RegExp(`^https://(${STORE})(\\.test)?\\.onfastspring\\.com((?:/(?:popup|embedded)-[A-Za-z0-9_-]{1,64})?)/session/([A-Za-z0-9_-]{16,64})/payment$`);
@@ -0,0 +1,43 @@
1
+ /** The PSP id the API and the recognizer name this lane, re-exported so the client dispatches by it. */
2
+ export { TAP_PAYMENTS_PSP } from './tap-payments.generated.js';
3
+ /** The dark-launch capability a build declares when it fills a Tap token request with the device's ciphertext. */
4
+ export declare const TAP_PAYMENTS_CAPABILITY = "tap_card_sdk_token";
5
+ /** A cse substitution as the API serves it (substitute.ts Substitutions): here the one ciphertext. */
6
+ interface TapPaymentsServedSubstitution {
7
+ encoding: string;
8
+ at: string;
9
+ fields: Record<string, string>;
10
+ remove?: string[];
11
+ }
12
+ /**
13
+ * Whether an approved Tap authorization's served substitution is one this SDK can continue: JSON at the body root (`at`
14
+ * is ''), no sibling to remove, and exactly the one ciphertext, a non-empty string. substituteTapPayments checks its
15
+ * size and range against the pin for the request's publishable key; this is the shape gate the client runs first.
16
+ */
17
+ export declare function isTapPaymentsServedSubstitution(sub: unknown): sub is TapPaymentsServedSubstitution;
18
+ /** The paused request an approval was created from: the URL and body the API reviewed at create, and its headers. */
19
+ export interface TapPaymentsApprovedRequest {
20
+ url: string;
21
+ body: string;
22
+ headers?: Record<string, string>;
23
+ }
24
+ /**
25
+ * The continuation of an approved Tap token request: the paused body with the device's ciphertext written over the
26
+ * placeholder's at encryptedData (payment-core substituteTapPayments, which runs the frame's request rule again on the
27
+ * headers of the request that continues, and refuses a ciphertext that does not have the size and range of one under
28
+ * the pin for its publishable key, or one already in the paused body).
29
+ *
30
+ * Only into `approved`, the paused request the approval was created from: `url` and `body` must equal it byte for byte.
31
+ * A ciphertext under the merchant's key would ask Tap for a token in any later request of the same shape; binding it
32
+ * to the one request keeps this lane from ever writing one checkout's card into another. `headers` are those of the
33
+ * request that continues, the paused one or the page's retry of it, and the browser sends them as they are: they
34
+ * must name the publishable key the approved request named, so a retry under another merchant's key never carries the
35
+ * card.
36
+ *
37
+ * Null when neither URL is Tap's token URL, so every other processor keeps its own swap. Throws for any other body,
38
+ * URL or key, and for a substitution the shape gate or the swap refuses, in each case before anything continues. The
39
+ * approval is not retired on a refusal: the runtime already read the ciphertext, so the API keeps the row and its hold.
40
+ */
41
+ export declare function tapPaymentsContinuation(url: string, body: string, headers: Record<string, string> | undefined, sub: unknown, approved: TapPaymentsApprovedRequest): {
42
+ body: string;
43
+ } | null;
@@ -0,0 +1,59 @@
1
+ declare var TAP_PAYMENTS_PSP: string;
2
+ declare var TAP_PAYMENTS_CAPABILITY: string;
3
+ declare var TAP_PAYMENTS_OPERATION: string;
4
+ declare var TAP_PAYMENTS_SCHEME: string;
5
+ declare var TAP_PAYMENTS_HOST: string;
6
+ declare var TAP_PAYMENTS_TOKEN_URL: string;
7
+ declare var TAP_PAYMENTS_FIELD: string;
8
+ declare var TAP_PAYMENTS_PURPOSES: readonly string[];
9
+ declare var TAP_PAYMENTS_REFUSAL_CODES: readonly string[];
10
+ declare function tapPaymentsRefusalMessage(code: any): any;
11
+ declare var TapPaymentsError: {
12
+ new (code: any): {
13
+ name: string;
14
+ message: string;
15
+ stack?: string;
16
+ cause?: unknown;
17
+ };
18
+ };
19
+ declare function isTapPaymentsTokenUrl(url: any): boolean;
20
+ declare function tapPaymentsKeyEnvironment(publishableKey: any): "production" | "sandbox" | null;
21
+ declare var TAP_PAYMENTS_MERCHANT_PINS: readonly any[];
22
+ declare function tapPaymentsMerchantPin(publishableKey: any, pins?: readonly any[]): any;
23
+ declare function tapPaymentsMerchantRefusal(environment: any, publishableKey: any, merchantOrigin: any, pins?: readonly any[]): "tap_payments_merchant_unreviewed" | null;
24
+ declare function isTapPaymentsCiphertext(value: any): boolean;
25
+ declare function tapPaymentsBodyVerdict(body: any): Readonly<{
26
+ verdict: "refuse";
27
+ code: any;
28
+ }> | Readonly<{
29
+ verdict: "card";
30
+ }>;
31
+ declare function tapPaymentsOrderAmount(body: any): Readonly<{
32
+ amount: any;
33
+ currency: any;
34
+ }> | null;
35
+ declare function tapPaymentsRequestKey(request: any): any;
36
+ declare function tapPaymentsRequestRefusal(request: any): any;
37
+ declare function tapPaymentsPlaintext(card: any): string;
38
+ declare function encryptTapPaymentsCard(card: any, publishableKey: any, facilities?: {}): Readonly<{
39
+ encryptedData: string;
40
+ }>;
41
+ declare function isTapPaymentsCiphertextUnderPin(value: any, merchantPin: any): boolean;
42
+ declare function substituteTapPayments(request: any, substitution: any): string;
43
+ declare function tapPaymentsSubstitutionsRefusal(template: any, substitution: any): {
44
+ code: string;
45
+ message: any;
46
+ } | null;
47
+ declare function tapPaymentsKeyUsable(authorization: any): boolean;
48
+ declare function tapPaymentsRefusalCode(text: any): string | null;
49
+ declare function tapPaymentsAnswerOutcome(status: any, text: any, card: any): {
50
+ outcome: string;
51
+ reason: any;
52
+ } | {
53
+ outcome: string;
54
+ code: string;
55
+ } | {
56
+ outcome: string;
57
+ code?: undefined;
58
+ };
59
+ export { TAP_PAYMENTS_CAPABILITY, TAP_PAYMENTS_FIELD, TAP_PAYMENTS_HOST, TAP_PAYMENTS_MERCHANT_PINS, TAP_PAYMENTS_OPERATION, TAP_PAYMENTS_PSP, TAP_PAYMENTS_PURPOSES, TAP_PAYMENTS_REFUSAL_CODES, TAP_PAYMENTS_SCHEME, TAP_PAYMENTS_TOKEN_URL, TapPaymentsError, encryptTapPaymentsCard, isTapPaymentsCiphertext, isTapPaymentsCiphertextUnderPin, isTapPaymentsTokenUrl, substituteTapPayments, tapPaymentsAnswerOutcome, tapPaymentsBodyVerdict, tapPaymentsKeyEnvironment, tapPaymentsKeyUsable, tapPaymentsMerchantPin, tapPaymentsMerchantRefusal, tapPaymentsOrderAmount, tapPaymentsPlaintext, tapPaymentsRefusalCode, tapPaymentsRefusalMessage, tapPaymentsRequestKey, tapPaymentsRequestRefusal, tapPaymentsSubstitutionsRefusal };