@lightspeed/online-payments-sdk 1.2.1 → 1.2.3

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.
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getLogger = exports.Logger = void 0;
4
4
  var browser_logs_1 = require("@datadog/browser-logs");
5
+ var version_1 = require("../../../version");
5
6
  var Logger = /** @class */ (function () {
6
7
  function Logger() {
7
8
  }
@@ -12,6 +13,7 @@ var Logger = /** @class */ (function () {
12
13
  site: site,
13
14
  service: 'lsp-online-payments-sdk',
14
15
  env: env,
16
+ version: version_1.SDK_VERSION,
15
17
  forwardErrorsToLogs: false,
16
18
  forwardConsoleLogs: [],
17
19
  };
@@ -51,6 +51,7 @@ exports.initStripe = initStripe;
51
51
  exports.createPaymentElementOptions = createPaymentElementOptions;
52
52
  exports.createAddressElementOptions = createAddressElementOptions;
53
53
  exports.createPaymentElement = createPaymentElement;
54
+ exports.setupChangeEventHandler = setupChangeEventHandler;
54
55
  exports.createAddressElement = createAddressElement;
55
56
  exports.cleanupElements = cleanupElements;
56
57
  exports.handleSaveCard = handleSaveCard;
@@ -193,19 +194,9 @@ function createPaymentElement(elements, options, mountElement, eventBroadcaster)
193
194
  // Create custom terms element for US Bank Account
194
195
  var customTermsElement = createCustomTermsElement();
195
196
  mountElement.appendChild(customTermsElement);
196
- // Track previous complete state to only emit onChange event on state transitions
197
- var previousComplete = null;
197
+ // Handle US Bank Account terms visibility
198
198
  paymentElement.on('change', function (event) {
199
199
  var _a;
200
- // Emit onChange event only when "complete" status transitions
201
- if (event.complete !== previousComplete) {
202
- previousComplete = event.complete;
203
- eventBroadcaster.publish({
204
- status: 'Change',
205
- code: event.complete ? 'Complete' : 'Incomplete',
206
- });
207
- }
208
- // Show custom terms only when US Bank Account is selected
209
200
  if (((_a = event.value) === null || _a === void 0 ? void 0 : _a.type) === 'us_bank_account') {
210
201
  customTermsElement.style.display = 'block';
211
202
  }
@@ -219,6 +210,37 @@ function createPaymentElement(elements, options, mountElement, eventBroadcaster)
219
210
  customTermsContainer: customTermsElement,
220
211
  };
221
212
  }
213
+ /**
214
+ * Setup change event handling for payment form elements.
215
+ * When addressElement is provided (payment form): emits "Complete" only when BOTH elements are complete,
216
+ * and "Incomplete" when at least one element becomes incomplete.
217
+ * When addressElement is not provided (MOTO form): emits based on payment element completion only.
218
+ */
219
+ function setupChangeEventHandler(paymentElement, eventBroadcaster, addressElement) {
220
+ var paymentComplete = false;
221
+ var addressComplete = !addressElement; // If no address element, consider it complete
222
+ var previousComplete = null;
223
+ var emitChangeEventIfNeeded = function () {
224
+ var complete = paymentComplete && addressComplete;
225
+ if (complete !== previousComplete) {
226
+ previousComplete = complete;
227
+ eventBroadcaster.publish({
228
+ status: 'Change',
229
+ code: complete ? 'Complete' : 'Incomplete',
230
+ });
231
+ }
232
+ };
233
+ paymentElement.on('change', function (event) {
234
+ paymentComplete = event.complete;
235
+ emitChangeEventIfNeeded();
236
+ });
237
+ if (addressElement) {
238
+ addressElement.on('change', function (event) {
239
+ addressComplete = event.complete;
240
+ emitChangeEventIfNeeded();
241
+ });
242
+ }
243
+ }
222
244
  /**
223
245
  * Create and mount address element
224
246
  */
@@ -52,6 +52,8 @@ function mountMotoWidget(mountElement, session, eventBroadcaster, defaultValues,
52
52
  _a = _c.sent(), stripe = _a.stripe, elements = _a.elements;
53
53
  paymentOptions = (0, shared_1.createPaymentElementOptions)(defaultValues, theme);
54
54
  _b = (0, shared_1.createPaymentElement)(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _b.element, paymentContainer = _b.container, customTermsContainer = _b.customTermsContainer;
55
+ // Setup change handler for payment element only (MOTO forms don't have address element)
56
+ (0, shared_1.setupChangeEventHandler)(paymentElement, eventBroadcaster);
55
57
  return [2 /*return*/, {
56
58
  unmount: function () {
57
59
  (0, shared_1.cleanupElements)(paymentElement, null, paymentContainer, null, customTermsContainer);
@@ -53,6 +53,8 @@ function mountPaymentWidget(mountElement, session, eventBroadcaster, defaultValu
53
53
  _b = (0, shared_1.createAddressElement)(elements, addressOptions, mountElement), addressElement = _b.element, addressContainer = _b.container;
54
54
  paymentOptions = (0, shared_1.createPaymentElementOptions)(defaultValues, theme, true);
55
55
  _c = (0, shared_1.createPaymentElement)(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _c.element, paymentContainer = _c.container, customTermsContainer = _c.customTermsContainer;
56
+ // Setup change handler that emits Complete only when both elements are complete
57
+ (0, shared_1.setupChangeEventHandler)(paymentElement, eventBroadcaster, addressElement);
56
58
  return [2 /*return*/, {
57
59
  unmount: function () {
58
60
  (0, shared_1.cleanupElements)(paymentElement, addressElement, paymentContainer, addressContainer, customTermsContainer);
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SDK_VERSION = void 0;
4
+ // This file is auto-generated during the build process
5
+ // DO NOT EDIT MANUALLY - Version is extracted from package.json
6
+ exports.SDK_VERSION = '1.2.3';
@@ -1,4 +1,5 @@
1
1
  import { datadogLogs } from '@datadog/browser-logs';
2
+ import { SDK_VERSION } from '../../../version';
2
3
  var Logger = /** @class */ (function () {
3
4
  function Logger() {
4
5
  }
@@ -9,6 +10,7 @@ var Logger = /** @class */ (function () {
9
10
  site: site,
10
11
  service: 'lsp-online-payments-sdk',
11
12
  env: env,
13
+ version: SDK_VERSION,
12
14
  forwardErrorsToLogs: false,
13
15
  forwardConsoleLogs: [],
14
16
  };
@@ -35,6 +35,13 @@ export declare function createPaymentElement(elements: StripeElements, options:
35
35
  container: HTMLElement;
36
36
  customTermsContainer: HTMLElement;
37
37
  };
38
+ /**
39
+ * Setup change event handling for payment form elements.
40
+ * When addressElement is provided (payment form): emits "Complete" only when BOTH elements are complete,
41
+ * and "Incomplete" when at least one element becomes incomplete.
42
+ * When addressElement is not provided (MOTO form): emits based on payment element completion only.
43
+ */
44
+ export declare function setupChangeEventHandler(paymentElement: StripePaymentElement, eventBroadcaster: EventBroadcaster, addressElement?: StripeAddressElement | null): void;
38
45
  /**
39
46
  * Create and mount address element
40
47
  */
@@ -182,19 +182,9 @@ export function createPaymentElement(elements, options, mountElement, eventBroad
182
182
  // Create custom terms element for US Bank Account
183
183
  var customTermsElement = createCustomTermsElement();
184
184
  mountElement.appendChild(customTermsElement);
185
- // Track previous complete state to only emit onChange event on state transitions
186
- var previousComplete = null;
185
+ // Handle US Bank Account terms visibility
187
186
  paymentElement.on('change', function (event) {
188
187
  var _a;
189
- // Emit onChange event only when "complete" status transitions
190
- if (event.complete !== previousComplete) {
191
- previousComplete = event.complete;
192
- eventBroadcaster.publish({
193
- status: 'Change',
194
- code: event.complete ? 'Complete' : 'Incomplete',
195
- });
196
- }
197
- // Show custom terms only when US Bank Account is selected
198
188
  if (((_a = event.value) === null || _a === void 0 ? void 0 : _a.type) === 'us_bank_account') {
199
189
  customTermsElement.style.display = 'block';
200
190
  }
@@ -208,6 +198,37 @@ export function createPaymentElement(elements, options, mountElement, eventBroad
208
198
  customTermsContainer: customTermsElement,
209
199
  };
210
200
  }
201
+ /**
202
+ * Setup change event handling for payment form elements.
203
+ * When addressElement is provided (payment form): emits "Complete" only when BOTH elements are complete,
204
+ * and "Incomplete" when at least one element becomes incomplete.
205
+ * When addressElement is not provided (MOTO form): emits based on payment element completion only.
206
+ */
207
+ export function setupChangeEventHandler(paymentElement, eventBroadcaster, addressElement) {
208
+ var paymentComplete = false;
209
+ var addressComplete = !addressElement; // If no address element, consider it complete
210
+ var previousComplete = null;
211
+ var emitChangeEventIfNeeded = function () {
212
+ var complete = paymentComplete && addressComplete;
213
+ if (complete !== previousComplete) {
214
+ previousComplete = complete;
215
+ eventBroadcaster.publish({
216
+ status: 'Change',
217
+ code: complete ? 'Complete' : 'Incomplete',
218
+ });
219
+ }
220
+ };
221
+ paymentElement.on('change', function (event) {
222
+ paymentComplete = event.complete;
223
+ emitChangeEventIfNeeded();
224
+ });
225
+ if (addressElement) {
226
+ addressElement.on('change', function (event) {
227
+ addressComplete = event.complete;
228
+ emitChangeEventIfNeeded();
229
+ });
230
+ }
231
+ }
211
232
  /**
212
233
  * Create and mount address element
213
234
  */
@@ -34,7 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
- import { initStripe, createPaymentElementOptions, createPaymentElement, cleanupElements, createSubmitHandler, } from '../shared';
37
+ import { initStripe, createPaymentElementOptions, createPaymentElement, cleanupElements, createSubmitHandler, setupChangeEventHandler, } from '../shared';
38
38
  /**
39
39
  * Mount MOTO widget for moto and moto-with-save session types
40
40
  * MOTO (Mail Order/Telephone Order) forms don't require address collection
@@ -49,6 +49,8 @@ export function mountMotoWidget(mountElement, session, eventBroadcaster, default
49
49
  _a = _c.sent(), stripe = _a.stripe, elements = _a.elements;
50
50
  paymentOptions = createPaymentElementOptions(defaultValues, theme);
51
51
  _b = createPaymentElement(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _b.element, paymentContainer = _b.container, customTermsContainer = _b.customTermsContainer;
52
+ // Setup change handler for payment element only (MOTO forms don't have address element)
53
+ setupChangeEventHandler(paymentElement, eventBroadcaster);
52
54
  return [2 /*return*/, {
53
55
  unmount: function () {
54
56
  cleanupElements(paymentElement, null, paymentContainer, null, customTermsContainer);
@@ -34,7 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
- import { initStripe, createPaymentElementOptions, createAddressElementOptions, createPaymentElement, createAddressElement, cleanupElements, createSubmitHandler, } from '../shared';
37
+ import { initStripe, createPaymentElementOptions, createAddressElementOptions, createPaymentElement, createAddressElement, cleanupElements, createSubmitHandler, setupChangeEventHandler, } from '../shared';
38
38
  /**
39
39
  * Mount payment widget for payment and payment-with-save session types
40
40
  */
@@ -50,6 +50,8 @@ export function mountPaymentWidget(mountElement, session, eventBroadcaster, defa
50
50
  _b = createAddressElement(elements, addressOptions, mountElement), addressElement = _b.element, addressContainer = _b.container;
51
51
  paymentOptions = createPaymentElementOptions(defaultValues, theme, true);
52
52
  _c = createPaymentElement(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _c.element, paymentContainer = _c.container, customTermsContainer = _c.customTermsContainer;
53
+ // Setup change handler that emits Complete only when both elements are complete
54
+ setupChangeEventHandler(paymentElement, eventBroadcaster, addressElement);
53
55
  return [2 /*return*/, {
54
56
  unmount: function () {
55
57
  cleanupElements(paymentElement, addressElement, paymentContainer, addressContainer, customTermsContainer);
@@ -0,0 +1 @@
1
+ export declare const SDK_VERSION = "1.2.3";
@@ -0,0 +1,3 @@
1
+ // This file is auto-generated during the build process
2
+ // DO NOT EDIT MANUALLY - Version is extracted from package.json
3
+ export var SDK_VERSION = '1.2.3';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightspeed/online-payments-sdk",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "description": "Process online-payments with Lightspeed Payments",
5
5
  "author": "Lightspeed Commerce Inc.",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -20,8 +20,10 @@
20
20
  "lint": "gts lint",
21
21
  "fix": "gts fix",
22
22
  "clean": "gts clean",
23
+ "pretypecheck": "node scripts/generate-version.js",
23
24
  "typecheck": "tsc --noEmit",
24
25
  "check-package-content": "npm pack --dry-run",
26
+ "prebuild": "node scripts/generate-version.js",
25
27
  "build": "npm run build:esm && npm run build:cjs",
26
28
  "build:esm": "tsc --module esnext --target es5 --outDir dist --downlevelIteration",
27
29
  "build:cjs": "tsc --module commonjs --target es5 --outDir dist/cjs --downlevelIteration --declaration false"