@idonatedev/idonate-sdk 1.0.16 → 1.1.0-dev0

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 (50) hide show
  1. package/README.md +27 -0
  2. package/dist/apple-pay.d.ts +0 -1
  3. package/dist/apple-pay.js +32 -62
  4. package/dist/cloudflare-challenge-handler.d.ts +2 -2
  5. package/dist/cloudflare-challenge-handler.js +65 -92
  6. package/dist/config-handler.d.ts +3 -0
  7. package/dist/config-handler.js +16 -11
  8. package/dist/constants.d.ts +1 -0
  9. package/dist/constants.js +66 -2
  10. package/dist/google-pay.d.ts +0 -1
  11. package/dist/google-pay.js +65 -78
  12. package/dist/idonate-client.d.ts +6 -19
  13. package/dist/idonate-client.js +165 -192
  14. package/dist/index.js +40 -11
  15. package/dist/recaptcha.d.ts +0 -1
  16. package/dist/recaptcha.js +40 -49
  17. package/dist/shared.js +8 -9
  18. package/dist/test-utils.d.ts +81 -0
  19. package/dist/test-utils.js +110 -0
  20. package/dist/tokenize/CardConnectTokenizer.d.ts +43 -0
  21. package/dist/tokenize/CardConnectTokenizer.js +620 -0
  22. package/dist/tokenize/SpreedlyTokenizer.d.ts +85 -0
  23. package/dist/tokenize/SpreedlyTokenizer.js +952 -0
  24. package/dist/tokenize/Tokenizer.d.ts +32 -0
  25. package/dist/tokenize/Tokenizer.js +183 -0
  26. package/dist/tokenize/iats.js +11 -13
  27. package/dist/tokenize/index.d.ts +5 -3
  28. package/dist/tokenize/index.js +43 -6
  29. package/dist/tokenize/spreedly-secure.d.ts +8 -0
  30. package/dist/tokenize/spreedly-secure.js +43 -0
  31. package/dist/tokenize/styles.d.ts +3 -0
  32. package/dist/tokenize/styles.js +42 -0
  33. package/dist/tokenize/tokenizer-constants.d.ts +62 -0
  34. package/dist/tokenize/tokenizer-constants.js +65 -0
  35. package/dist/tokenize/tokenizer-utils.d.ts +19 -0
  36. package/dist/tokenize/tokenizer-utils.js +156 -0
  37. package/dist/tokenize/types.d.ts +149 -0
  38. package/dist/tokenize/types.js +30 -0
  39. package/dist/typeAdapters.d.ts +3 -2
  40. package/dist/typeAdapters.js +39 -48
  41. package/dist/types.d.ts +48 -41
  42. package/dist/types.js +12 -24
  43. package/dist/util.d.ts +2 -2
  44. package/dist/util.js +30 -33
  45. package/package.json +41 -18
  46. package/umd/idonate-sdk.js +1 -1
  47. package/dist/tokenize/cardconnect.d.ts +0 -3
  48. package/dist/tokenize/cardconnect.js +0 -16
  49. package/dist/tokenize/spreedly.d.ts +0 -48
  50. package/dist/tokenize/spreedly.js +0 -208
package/README.md CHANGED
@@ -4,6 +4,33 @@ Javascript libraries for integrating with iDonate services.
4
4
  A rough usage example can be found below the Changelog.
5
5
 
6
6
  # Changes
7
+ ## 1.1.0
8
+ ### Major Tokenizer Improvements and Canadian Bank Account Support
9
+
10
+ #### Breaking Changes
11
+ * Client constructor now requires `embedId` as second parameter: `new Client(organizationId, embedId, options)`
12
+ * Tokenizer creation is now asynchronous via `createTokenizer` method
13
+
14
+ #### New Features
15
+ * **Unified Tokenizer Architecture**: New `createTokenizer` API provides a consistent interface for all payment methods
16
+ * **Canadian Bank Account Support** (Spreedly only):
17
+ * Support for institution number (3 digits) and transit number (5 digits)
18
+ * New `bankCountry` parameter to specify 'US' or 'CA' for bank accounts
19
+ * Automatic routing number formatting for Canadian banks
20
+ * **Enhanced Security**:
21
+ * Spreedly secure tokenization with certificate-based authentication
22
+ * Automatic fallback to standard mode when secure tokenization unavailable
23
+ * Improved CardConnect security and iframe handling
24
+ * **Improved Testing**:
25
+ * Added Playwright E2E testing for tokenizers
26
+ * Comprehensive test coverage for all tokenization scenarios
27
+
28
+ #### Other Changes
29
+ * Removed legacy tokenizer implementations and SpreedlyAsync class
30
+ * Enhanced field validation for both US and Canadian bank accounts
31
+ * Updated dependencies to latest stable versions
32
+ * Improved error handling and debugging capabilities
33
+
7
34
  ## 1.0.16
8
35
  * Adding checkbox recaptcha type, few corrections for error handling
9
36
  * Added tributeType property
@@ -1,4 +1,3 @@
1
- /// <reference types="applepayjs" />
2
1
  import { ApplePayMerchantValidationPayload, MerchantSession, TokenizeCardConnectApplePayResult } from './types';
3
2
  export default class ApplePay {
4
3
  private appleSession;
package/dist/apple-pay.js CHANGED
@@ -8,37 +8,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
11
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var constants_1 = require("./constants");
40
- var ApplePay = (function () {
41
- function ApplePay(paymentRequest) {
12
+ const constants_1 = require("./constants");
13
+ class ApplePay {
14
+ constructor(paymentRequest) {
42
15
  this.appleSession = null;
43
16
  this.paymentRequestDefaults = {
44
17
  currencyCode: 'USD',
@@ -55,40 +28,38 @@ var ApplePay = (function () {
55
28
  };
56
29
  this.paymentRequest = Object.assign({}, this.paymentRequestDefaults, paymentRequest);
57
30
  }
58
- ApplePay.isSupported = function () {
31
+ static isSupported() {
59
32
  return (window.ApplePaySession &&
60
33
  ApplePaySession.canMakePayments() &&
61
34
  ApplePaySession.supportsVersion(ApplePay.ApplePayApiVersion));
62
- };
63
- ApplePay.prototype.begin = function () {
64
- return __awaiter(this, void 0, void 0, function () {
65
- return __generator(this, function (_a) {
66
- if (!ApplePay.isSupported()) {
67
- throw new Error('Apple Pay Not Supported');
68
- }
69
- this.appleSession = new ApplePaySession(ApplePay.ApplePayApiVersion, this.paymentRequest);
70
- this.appleSession.begin();
71
- return [2, this.appleSession];
72
- });
35
+ }
36
+ begin() {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ if (!ApplePay.isSupported()) {
39
+ throw new Error('Apple Pay Not Supported');
40
+ }
41
+ this.appleSession = new ApplePaySession(ApplePay.ApplePayApiVersion, this.paymentRequest);
42
+ this.appleSession.begin();
43
+ return this.appleSession;
73
44
  });
74
- };
75
- ApplePay.prototype.createSession = function (payload, embedApiBaseUrl) {
76
- return fetch(embedApiBaseUrl + "/payment/create-session", {
45
+ }
46
+ createSession(payload, embedApiBaseUrl) {
47
+ return fetch(`${embedApiBaseUrl}/payment/create-session`, {
77
48
  method: 'POST',
78
49
  headers: constants_1.CLIENT_HEADERS,
79
50
  body: JSON.stringify(payload),
80
- }).then(function (response) { return response.json(); });
81
- };
82
- ApplePay.prototype.tokenizeWithCardConnect = function (applePaymentMethod, cardConnectBaseUrl) {
83
- var paymentData = applePaymentMethod.token.paymentData;
84
- var token = paymentData.data;
85
- var ectype = 'apple';
86
- var ecsig = paymentData.signature;
87
- var eckey = paymentData.header.ephemeralPublicKey;
88
- var ectid = paymentData.header.transactionId;
89
- var ecpublickeyhash = paymentData.header.publicKeyHash;
90
- var dataString = token + "&ectype=" + ectype + "&ecsig=" + ecsig + "&eckey=" + eckey + "&ectid=" + ectid + "&echash=&ecpublickeyhash=" + ecpublickeyhash;
91
- return fetch(cardConnectBaseUrl + "/cardsecure/api/v1/ccn/tokenize", {
51
+ }).then((response) => response.json());
52
+ }
53
+ tokenizeWithCardConnect(applePaymentMethod, cardConnectBaseUrl) {
54
+ const paymentData = applePaymentMethod.token.paymentData;
55
+ const token = paymentData.data;
56
+ const ectype = 'apple';
57
+ const ecsig = paymentData.signature;
58
+ const eckey = paymentData.header.ephemeralPublicKey;
59
+ const ectid = paymentData.header.transactionId;
60
+ const ecpublickeyhash = paymentData.header.publicKeyHash;
61
+ const dataString = `${token}&ectype=${ectype}&ecsig=${ecsig}&eckey=${eckey}&ectid=${ectid}&echash=&ecpublickeyhash=${ecpublickeyhash}`;
62
+ return fetch(`${cardConnectBaseUrl}/cardsecure/api/v1/ccn/tokenize`, {
92
63
  method: 'POST',
93
64
  headers: {
94
65
  'Content-Type': 'application/json',
@@ -98,9 +69,8 @@ var ApplePay = (function () {
98
69
  devicedata: dataString,
99
70
  unique: true,
100
71
  }),
101
- }).then(function (response) { return response.json(); });
102
- };
103
- ApplePay.ApplePayApiVersion = 6;
104
- return ApplePay;
105
- }());
72
+ }).then((response) => response.json());
73
+ }
74
+ }
75
+ ApplePay.ApplePayApiVersion = 6;
106
76
  exports.default = ApplePay;
@@ -1,5 +1,5 @@
1
- import iDonateClient from "./idonate-client";
1
+ import iDonateClient from './idonate-client';
2
2
  export declare const handleCFChallenge: (challengeResponse: Response, sdkClient: iDonateClient) => Promise<{
3
3
  token: string;
4
- preClearance?: boolean | undefined;
4
+ preClearance?: boolean;
5
5
  } | null>;
@@ -8,101 +8,74 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
11
  Object.defineProperty(exports, "__esModule", { value: true });
39
12
  exports.handleCFChallenge = void 0;
40
- var turnstileInstance = null;
41
- exports.handleCFChallenge = function (challengeResponse, sdkClient) { return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
42
- var document_1, challengeWrapper_1, challengeDiv_1, showChallenge_1, cloudflareScript;
13
+ let turnstileInstance = null;
14
+ const handleCFChallenge = (challengeResponse, sdkClient) => new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
43
15
  var _a, _b, _c;
44
- return __generator(this, function (_d) {
45
- try {
46
- document_1 = window === null || window === void 0 ? void 0 : window.document;
47
- if (!document_1 || !window) {
48
- throw new Error('document is not present on window');
49
- }
50
- challengeWrapper_1 = document_1.createElement('div');
51
- challengeDiv_1 = document_1.createElement('div');
52
- showChallenge_1 = function (turnstile) {
53
- var _a;
54
- (_a = turnstile === null || turnstile === void 0 ? void 0 : turnstile.render) === null || _a === void 0 ? void 0 : _a.call(turnstile, "#iDonateTurnstileBox", {
55
- sitekey: sdkClient.config.turnstileSiteKey,
56
- callback: function (token, preClearance) {
57
- challengeWrapper_1.remove();
58
- resolve({ token: token, preClearance: preClearance });
59
- },
60
- });
61
- };
62
- window.idonateTurnstileLoadedHandler = function () {
63
- var turnstile = window.turnstile;
64
- challengeDiv_1.innerHTML = '';
65
- if (turnstile) {
66
- turnstileInstance = turnstile;
67
- }
68
- showChallenge_1(turnstile);
69
- };
70
- challengeWrapper_1.setAttribute('id', 'idonateTurnstileWrapper');
71
- challengeWrapper_1.style.position = 'fixed';
72
- challengeWrapper_1.style.top = '0';
73
- challengeWrapper_1.style.bottom = '0';
74
- challengeWrapper_1.style.left = '0';
75
- challengeWrapper_1.style.right = '0';
76
- challengeWrapper_1.style.backgroundColor = 'rgba(0,0,0,0.9)';
77
- challengeWrapper_1.style.transition = 'all 400ms';
78
- challengeWrapper_1.style.display = 'flex';
79
- challengeWrapper_1.style.flexDirection = 'column';
80
- challengeWrapper_1.style.padding = '40px 30px';
81
- challengeWrapper_1.style.opacity = '0';
82
- challengeWrapper_1.style.color = 'white';
83
- challengeWrapper_1.style.fontFamily = 'sans-serif';
84
- challengeWrapper_1.style.zIndex = '1000';
85
- challengeWrapper_1.innerHTML = '<h1 id="idonateTurnstileVerificationHeader">Last tiny step before we submit your payment:</h1>';
86
- challengeDiv_1.setAttribute('id', 'iDonateTurnstileBox');
87
- challengeWrapper_1.append(challengeDiv_1);
88
- document_1.body.append(challengeWrapper_1);
89
- if (turnstileInstance) {
90
- showChallenge_1(turnstileInstance);
91
- }
92
- else {
93
- cloudflareScript = document_1.createElement('script');
94
- challengeDiv_1.innerHTML = 'loading ...';
95
- cloudflareScript.src = sdkClient.config.turnstileCdnUrl + '?render=explicit&onload=idonateTurnstileLoadedHandler';
96
- document_1.body.append(cloudflareScript);
16
+ try {
17
+ const document = window === null || window === void 0 ? void 0 : window.document;
18
+ if (!document || !window) {
19
+ throw new Error('document is not present on window');
20
+ }
21
+ const challengeWrapper = document.createElement('div');
22
+ const challengeDiv = document.createElement('div');
23
+ const showChallenge = (turnstile) => {
24
+ var _a;
25
+ (_a = turnstile === null || turnstile === void 0 ? void 0 : turnstile.render) === null || _a === void 0 ? void 0 : _a.call(turnstile, '#iDonateTurnstileBox', {
26
+ sitekey: sdkClient.config.turnstileSiteKey,
27
+ callback(token, preClearance) {
28
+ challengeWrapper.remove();
29
+ resolve({ token, preClearance });
30
+ },
31
+ });
32
+ };
33
+ window.idonateTurnstileLoadedHandler = () => {
34
+ const turnstile = window.turnstile;
35
+ challengeDiv.innerHTML = '';
36
+ if (turnstile) {
37
+ turnstileInstance = turnstile;
97
38
  }
98
- (_a = challengeDiv_1.scrollIntoView) === null || _a === void 0 ? void 0 : _a.call(challengeDiv_1);
99
- challengeWrapper_1.style.opacity = '1';
39
+ showChallenge(turnstile);
40
+ };
41
+ challengeWrapper.setAttribute('id', 'idonateTurnstileWrapper');
42
+ challengeWrapper.style.position = 'fixed';
43
+ challengeWrapper.style.top = '0';
44
+ challengeWrapper.style.bottom = '0';
45
+ challengeWrapper.style.left = '0';
46
+ challengeWrapper.style.right = '0';
47
+ challengeWrapper.style.backgroundColor = 'rgba(0,0,0,0.9)';
48
+ challengeWrapper.style.transition = 'all 400ms';
49
+ challengeWrapper.style.display = 'flex';
50
+ challengeWrapper.style.flexDirection = 'column';
51
+ challengeWrapper.style.padding = '40px 30px';
52
+ challengeWrapper.style.opacity = '0';
53
+ challengeWrapper.style.color = 'white';
54
+ challengeWrapper.style.fontFamily = 'sans-serif';
55
+ challengeWrapper.style.zIndex = '1000';
56
+ challengeWrapper.innerHTML =
57
+ '<h1 id="idonateTurnstileVerificationHeader">Last tiny step before we submit your payment:</h1>';
58
+ challengeDiv.setAttribute('id', 'iDonateTurnstileBox');
59
+ challengeWrapper.append(challengeDiv);
60
+ document.body.append(challengeWrapper);
61
+ if (turnstileInstance) {
62
+ showChallenge(turnstileInstance);
100
63
  }
101
- catch (e) {
102
- (_b = console === null || console === void 0 ? void 0 : console.error) === null || _b === void 0 ? void 0 : _b.call(console, e);
103
- (_c = console === null || console === void 0 ? void 0 : console.warn) === null || _c === void 0 ? void 0 : _c.call(console, 'iDonate SDK: Could not handle request, please reload the page and try again');
104
- reject(null);
64
+ else {
65
+ const cloudflareScript = document.createElement('script');
66
+ challengeDiv.innerHTML = 'loading ...';
67
+ cloudflareScript.src =
68
+ sdkClient.config.turnstileCdnUrl +
69
+ '?render=explicit&onload=idonateTurnstileLoadedHandler';
70
+ document.body.append(cloudflareScript);
105
71
  }
106
- return [2];
107
- });
108
- }); }); };
72
+ (_a = challengeDiv.scrollIntoView) === null || _a === void 0 ? void 0 : _a.call(challengeDiv);
73
+ challengeWrapper.style.opacity = '1';
74
+ }
75
+ catch (e) {
76
+ (_b = console === null || console === void 0 ? void 0 : console.error) === null || _b === void 0 ? void 0 : _b.call(console, e);
77
+ (_c = console === null || console === void 0 ? void 0 : console.warn) === null || _c === void 0 ? void 0 : _c.call(console, 'iDonate SDK: Could not handle request, please reload the page and try again');
78
+ reject(null);
79
+ }
80
+ }));
81
+ exports.handleCFChallenge = handleCFChallenge;
@@ -15,5 +15,8 @@ export default class ConfigHandler {
15
15
  readonly turnstileCdnUrl: string;
16
16
  readonly turnstileSiteKey: string;
17
17
  readonly client: string;
18
+ readonly enableSpreedlySecureTokenization: boolean;
19
+ readonly organizationId: number | undefined;
20
+ readonly embedId: string | undefined;
18
21
  constructor(options: Partial<ClientOptions>);
19
22
  }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var constants_1 = require("./constants");
4
- var ConfigHandler = (function () {
5
- function ConfigHandler(options) {
3
+ const constants_1 = require("./constants");
4
+ class ConfigHandler {
5
+ constructor(options) {
6
6
  if (options.enableSandboxMode) {
7
7
  this.apiBaseUrl = constants_1.SANDBOX_BASE_URL;
8
8
  this.cardConnectBaseUrl = constants_1.SANDBOX_CARD_CONNECT_BASE_URL;
@@ -18,25 +18,30 @@ var ConfigHandler = (function () {
18
18
  this.apiBaseUrl = options.overrideBaseUrl;
19
19
  }
20
20
  this.authApiBaseUrl =
21
- options.overrideAuthApiBaseUrl || this.apiBaseUrl + "/auth";
21
+ options.overrideAuthApiBaseUrl || `${this.apiBaseUrl}/auth`;
22
22
  this.donorApiBaseUrl =
23
- options.overrideDonorApiBaseUrl || this.apiBaseUrl + "/donor";
23
+ options.overrideDonorApiBaseUrl || `${this.apiBaseUrl}/donor`;
24
24
  this.embedApiBaseUrl =
25
- options.overrideEmbedApiBaseUrl || this.apiBaseUrl + "/embed";
25
+ options.overrideEmbedApiBaseUrl || `${this.apiBaseUrl}/embed`;
26
26
  if (options.overrideApplePayUrl) {
27
27
  this.applePayUrl = options.overrideApplePayUrl;
28
28
  }
29
29
  this.pcScriptBase = options.pcScriptBase || constants_1.FALLBACK_PC_SCRIPT_URL;
30
30
  this.pcScriptId = options.pcScriptId || constants_1.FALLBACK_PC_SCRIPT_ID;
31
- this.turnstileCdnUrl = options.turnstileCdnUrl || constants_1.DEFAULT_CF_TURNSTILE_CDN_EXPLICIT_URL;
32
- this.turnstileSiteKey = options.turnstileSiteKey || constants_1.FALLBACK_CF_TURNSTILE_SITE_KEY;
31
+ this.turnstileCdnUrl =
32
+ options.turnstileCdnUrl || constants_1.DEFAULT_CF_TURNSTILE_CDN_EXPLICIT_URL;
33
+ this.turnstileSiteKey =
34
+ options.turnstileSiteKey || constants_1.FALLBACK_CF_TURNSTILE_SITE_KEY;
33
35
  if (options === null || options === void 0 ? void 0 : options.spreedlyEnvironmentKey) {
34
36
  this.spreedlyEnvironmentKey = options.spreedlyEnvironmentKey;
35
37
  }
36
38
  this.enableDelay = options.enableDelay || false;
37
39
  this.secondsToDelay = options.secondsToDelay || 0;
38
- this.cardConnectTokenizerUrl = this.cardConnectBaseUrl + "/itoke/ajax-tokenizer.html";
40
+ this.enableSpreedlySecureTokenization =
41
+ options.enableSpreedlySecureTokenization || false;
42
+ this.organizationId = options.organizationId;
43
+ this.embedId = options.embedId;
44
+ this.cardConnectTokenizerUrl = `${this.cardConnectBaseUrl}/itoke/ajax-tokenizer.html`;
39
45
  }
40
- return ConfigHandler;
41
- }());
46
+ }
42
47
  exports.default = ConfigHandler;
@@ -1,3 +1,4 @@
1
+ export declare const SDK_VERSION = "1.1.0";
1
2
  export declare const PRODUCTION_BASE_URL = "https://secure-api.idonate.com";
2
3
  export declare const SANDBOX_BASE_URL = "https://api.qa-idonate.com";
3
4
  export declare const PRODUCTION_CARD_CONNECT_BASE_URL = "https://boltgw.cardconnect.com:8443";
package/dist/constants.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CLIENT_HEADERS = exports.CARD_CONNECT_DEFAULT_STYLE = exports.DEFAULT_APP_NAME = exports.DEFAULT_CF_TURNSTILE_CDN_EXPLICIT_URL = exports.FALLBACK_CF_TURNSTILE_SITE_KEY = exports.FALLBACK_PC_SCRIPT_ID = exports.FALLBACK_PC_SCRIPT_URL = exports.SANDBOX_APPLE_PAY_URL = exports.APPLE_PAY_URL = exports.SPREEDLY_TOKENIZER_URL = exports.SANDBOX_CARD_CONNECT_BASE_URL = exports.PRODUCTION_CARD_CONNECT_BASE_URL = exports.SANDBOX_BASE_URL = exports.PRODUCTION_BASE_URL = void 0;
3
+ exports.CLIENT_HEADERS = exports.CARD_CONNECT_DEFAULT_STYLE = exports.DEFAULT_APP_NAME = exports.DEFAULT_CF_TURNSTILE_CDN_EXPLICIT_URL = exports.FALLBACK_CF_TURNSTILE_SITE_KEY = exports.FALLBACK_PC_SCRIPT_ID = exports.FALLBACK_PC_SCRIPT_URL = exports.SANDBOX_APPLE_PAY_URL = exports.APPLE_PAY_URL = exports.SPREEDLY_TOKENIZER_URL = exports.SANDBOX_CARD_CONNECT_BASE_URL = exports.PRODUCTION_CARD_CONNECT_BASE_URL = exports.SANDBOX_BASE_URL = exports.PRODUCTION_BASE_URL = exports.SDK_VERSION = void 0;
4
+ exports.SDK_VERSION = '1.1.0';
4
5
  exports.PRODUCTION_BASE_URL = 'https://secure-api.idonate.com';
5
6
  exports.SANDBOX_BASE_URL = 'https://api.qa-idonate.com';
6
7
  exports.PRODUCTION_CARD_CONNECT_BASE_URL = 'https://boltgw.cardconnect.com:8443';
@@ -13,7 +14,70 @@ exports.FALLBACK_PC_SCRIPT_ID = '_3fd4dad26e8c277bc50fb2ddf8233b50bc8d9704';
13
14
  exports.FALLBACK_CF_TURNSTILE_SITE_KEY = '0x4AAAAAAAxuRxNZTvX8shIj';
14
15
  exports.DEFAULT_CF_TURNSTILE_CDN_EXPLICIT_URL = 'https://challenges.cloudflare.com/turnstile/v0/api.js';
15
16
  exports.DEFAULT_APP_NAME = 'unnamed-sdk-client';
16
- exports.CARD_CONNECT_DEFAULT_STYLE = "\nbody {\n margin: 0;\n}\n\nform {\n display: flex;\n}\n\nlabel#cccardlabel {\n display: none;\n}\n\nbr {\n display: none;\n}\n\nlabel#cccvvlabel {\n display: none;\n}\n\nlabel#ccexpirylabel {\n display: none;\n}\n\ninput {\n padding: 10px;\n}\n\nselect {\n padding: 10px;\n font-size: 14px;\n color: #8b959d;\n}\n\nselect#ccexpirymonth {\n margin-right: -30px;\n border: 1px solid #b6b8ba;\n border-right: 0;\n}\n\ninput#ccnumfield {\n width: 70%;\n border: 1px solid #b6b8ba;\n border-right: 0;\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n font-size: 14px;\n color: #8b959d;\n}\n\nselect#ccexpiryyear {\n border: 1px solid #b6b8ba;\n border-right: 0;\n}\n\ninput#cccvvfield {\n border: 1px solid #b6b8ba;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n font-size: 14px;\n color: #8b959d;\n}\n".replace(/\s+/gi, ' ');
17
+ exports.CARD_CONNECT_DEFAULT_STYLE = `
18
+ body {
19
+ margin: 0;
20
+ }
21
+
22
+ form {
23
+ display: flex;
24
+ }
25
+
26
+ label#cccardlabel {
27
+ display: none;
28
+ }
29
+
30
+ br {
31
+ display: none;
32
+ }
33
+
34
+ label#cccvvlabel {
35
+ display: none;
36
+ }
37
+
38
+ label#ccexpirylabel {
39
+ display: none;
40
+ }
41
+
42
+ input {
43
+ padding: 10px;
44
+ }
45
+
46
+ select {
47
+ padding: 10px;
48
+ font-size: 14px;
49
+ color: #8b959d;
50
+ }
51
+
52
+ select#ccexpirymonth {
53
+ margin-right: -30px;
54
+ border: 1px solid #b6b8ba;
55
+ border-right: 0;
56
+ }
57
+
58
+ input#ccnumfield {
59
+ width: 70%;
60
+ border: 1px solid #b6b8ba;
61
+ border-right: 0;
62
+ border-top-left-radius: 3px;
63
+ border-bottom-left-radius: 3px;
64
+ font-size: 14px;
65
+ color: #8b959d;
66
+ }
67
+
68
+ select#ccexpiryyear {
69
+ border: 1px solid #b6b8ba;
70
+ border-right: 0;
71
+ }
72
+
73
+ input#cccvvfield {
74
+ border: 1px solid #b6b8ba;
75
+ border-top-right-radius: 3px;
76
+ border-bottom-right-radius: 3px;
77
+ font-size: 14px;
78
+ color: #8b959d;
79
+ }
80
+ `.replace(/\s+/gi, ' ');
17
81
  exports.CLIENT_HEADERS = {
18
82
  'User-Agent': navigator.userAgent + ' idonate-sdk@1.0.16',
19
83
  'Content-Type': 'application/json',
@@ -1,4 +1,3 @@
1
- /// <reference types="googlepay" />
2
1
  import { TokenizeCardConnectGooglePayResult, GooglePayConfig } from './types';
3
2
  export default class GooglePay {
4
3
  private static resolveLib;