@lightspeed/online-payments-sdk 1.4.2 → 1.6.0
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/cjs/v1/EventBroadcaster.js +3 -0
- package/dist/cjs/v1/session.js +3 -1
- package/dist/cjs/v1/stripe/shared.js +19 -5
- package/dist/cjs/v1/stripe/widgets/moto.js +1 -1
- package/dist/cjs/v1/stripe/widgets/payment.js +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/v1/EventBroadcaster.d.ts +4 -1
- package/dist/v1/EventBroadcaster.js +3 -0
- package/dist/v1/session.js +3 -1
- package/dist/v1/stripe/session.d.ts +1 -0
- package/dist/v1/stripe/shared.d.ts +4 -1
- package/dist/v1/stripe/shared.js +19 -5
- package/dist/v1/stripe/widgets/moto.js +1 -1
- package/dist/v1/stripe/widgets/payment.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -33,6 +33,9 @@ var EventBroadcaster = /** @class */ (function () {
|
|
|
33
33
|
if ('paymentMethodType' in event && event.paymentMethodType) {
|
|
34
34
|
externalEvent.paymentMethodType = event.paymentMethodType;
|
|
35
35
|
}
|
|
36
|
+
if ('saveCheckboxChecked' in event && event.saveCheckboxChecked !== undefined) {
|
|
37
|
+
externalEvent.saveCheckboxChecked = event.saveCheckboxChecked;
|
|
38
|
+
}
|
|
36
39
|
return externalEvent;
|
|
37
40
|
};
|
|
38
41
|
EventBroadcaster.prototype.registerMiddleware = function (middleware) {
|
package/dist/cjs/v1/session.js
CHANGED
|
@@ -5,7 +5,9 @@ exports.isTokenValid = isTokenValid;
|
|
|
5
5
|
var error_1 = require("./error");
|
|
6
6
|
function decodePaymentSessionToContext(paymentSession) {
|
|
7
7
|
try {
|
|
8
|
-
var
|
|
8
|
+
var binary = atob(paymentSession);
|
|
9
|
+
var bytes = Uint8Array.from(binary, function (c) { return c.charCodeAt(0); });
|
|
10
|
+
var decoded = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
9
11
|
var jsonToken = JSON.parse(decoded);
|
|
10
12
|
if (jsonToken && isTokenValid(jsonToken)) {
|
|
11
13
|
return jsonToken;
|
|
@@ -92,10 +92,11 @@ function initStripe(context, theme) {
|
|
|
92
92
|
* @param defaultValues - Default values for the payment element
|
|
93
93
|
* @param theme - Theme configuration
|
|
94
94
|
* @param hideNameField - Whether to hide the billing details name field (used when address element is present to avoid duplicates with ACH)
|
|
95
|
+
* @param businessName - Overrides the merchant name Stripe renders in mandate text (passed to `business.name`)
|
|
95
96
|
*/
|
|
96
|
-
function createPaymentElementOptions(defaultValues, theme, hideNameField) {
|
|
97
|
+
function createPaymentElementOptions(defaultValues, theme, hideNameField, businessName) {
|
|
97
98
|
if (hideNameField === void 0) { hideNameField = false; }
|
|
98
|
-
var options = __assign(__assign({ wallets: {
|
|
99
|
+
var options = __assign(__assign(__assign({ wallets: {
|
|
99
100
|
applePay: 'never',
|
|
100
101
|
googlePay: 'never',
|
|
101
102
|
link: 'never',
|
|
@@ -107,7 +108,7 @@ function createPaymentElementOptions(defaultValues, theme, hideNameField) {
|
|
|
107
108
|
},
|
|
108
109
|
})), { terms: {
|
|
109
110
|
usBankAccount: 'never', // Hide Stripe's default T&Cs (shown for ACH payments)
|
|
110
|
-
} });
|
|
111
|
+
} }), (businessName && { business: { name: businessName } }));
|
|
111
112
|
if (defaultValues) {
|
|
112
113
|
options.defaultValues = {
|
|
113
114
|
billingDetails: {
|
|
@@ -221,17 +222,22 @@ function createPaymentElement(elements, options, mountElement, eventBroadcaster)
|
|
|
221
222
|
* When addressElement is provided (payment form): emits "Complete" only when BOTH elements are complete,
|
|
222
223
|
* and "Incomplete" when at least one element becomes incomplete.
|
|
223
224
|
* When addressElement is not provided (MOTO form): emits based on payment element completion only.
|
|
225
|
+
* Also includes the current save-payment-method checkbox state (when present) on every Change event,
|
|
226
|
+
* and emits a Change event when that checkbox state changes.
|
|
224
227
|
*/
|
|
225
228
|
function setupChangeEventHandler(paymentElement, eventBroadcaster, addressElement) {
|
|
226
229
|
var paymentComplete = false;
|
|
227
230
|
var addressComplete = !addressElement; // If no address element, consider it complete
|
|
228
231
|
var previousComplete = null;
|
|
229
232
|
var previousMethodType;
|
|
233
|
+
var previousSaveCheckboxState; // Track save checkbox state
|
|
230
234
|
var emitChangeEvent = function () {
|
|
231
235
|
var complete = paymentComplete && addressComplete;
|
|
232
236
|
previousComplete = complete;
|
|
233
|
-
eventBroadcaster.publish(__assign({ status: 'Change', code: complete ? 'Complete' : 'Incomplete' }, (previousMethodType && {
|
|
237
|
+
eventBroadcaster.publish(__assign(__assign({ status: 'Change', code: complete ? 'Complete' : 'Incomplete' }, (previousMethodType && {
|
|
234
238
|
paymentMethodType: previousMethodType,
|
|
239
|
+
})), (previousSaveCheckboxState !== undefined && {
|
|
240
|
+
saveCheckboxChecked: previousSaveCheckboxState,
|
|
235
241
|
})));
|
|
236
242
|
};
|
|
237
243
|
paymentElement.on('change', function (event) {
|
|
@@ -243,7 +249,15 @@ function setupChangeEventHandler(paymentElement, eventBroadcaster, addressElemen
|
|
|
243
249
|
if (methodType !== undefined) {
|
|
244
250
|
previousMethodType = methodType;
|
|
245
251
|
}
|
|
246
|
-
|
|
252
|
+
// Check for save checkbox state from Stripe's value object
|
|
253
|
+
// The value object may contain a `savePaymentMethod` property
|
|
254
|
+
var saveCheckboxChanged = false;
|
|
255
|
+
if (event.value && typeof event.value === 'object' && 'savePaymentMethod' in event.value) {
|
|
256
|
+
var saveCheckboxState = event.value.savePaymentMethod;
|
|
257
|
+
saveCheckboxChanged = previousSaveCheckboxState !== saveCheckboxState;
|
|
258
|
+
previousSaveCheckboxState = saveCheckboxState;
|
|
259
|
+
}
|
|
260
|
+
if (completenessChanged || methodTypeChanged || saveCheckboxChanged) {
|
|
247
261
|
emitChangeEvent();
|
|
248
262
|
}
|
|
249
263
|
});
|
|
@@ -50,7 +50,7 @@ function mountMotoWidget(mountElement, session, eventBroadcaster, defaultValues,
|
|
|
50
50
|
case 0: return [4 /*yield*/, (0, shared_1.initStripe)(session.context, theme)];
|
|
51
51
|
case 1:
|
|
52
52
|
_a = _c.sent(), stripe = _a.stripe, elements = _a.elements;
|
|
53
|
-
paymentOptions = (0, shared_1.createPaymentElementOptions)(defaultValues, theme);
|
|
53
|
+
paymentOptions = (0, shared_1.createPaymentElementOptions)(defaultValues, theme, false, session.context.businessName);
|
|
54
54
|
_b = (0, shared_1.createPaymentElement)(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _b.element, paymentContainer = _b.container, customTermsContainer = _b.customTermsContainer;
|
|
55
55
|
// Setup change handler for payment element only (MOTO forms don't have address element)
|
|
56
56
|
(0, shared_1.setupChangeEventHandler)(paymentElement, eventBroadcaster);
|
|
@@ -51,7 +51,7 @@ function mountPaymentWidget(mountElement, session, eventBroadcaster, defaultValu
|
|
|
51
51
|
_a = _d.sent(), stripe = _a.stripe, elements = _a.elements;
|
|
52
52
|
addressOptions = (0, shared_1.createAddressElementOptions)(defaultValues);
|
|
53
53
|
_b = (0, shared_1.createAddressElement)(elements, addressOptions, mountElement), addressElement = _b.element, addressContainer = _b.container;
|
|
54
|
-
paymentOptions = (0, shared_1.createPaymentElementOptions)(defaultValues, theme, true);
|
|
54
|
+
paymentOptions = (0, shared_1.createPaymentElementOptions)(defaultValues, theme, true, session.context.businessName);
|
|
55
55
|
_c = (0, shared_1.createPaymentElement)(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _c.element, paymentContainer = _c.container, customTermsContainer = _c.customTermsContainer;
|
|
56
56
|
// Setup change handler that emits Complete only when both elements are complete
|
|
57
57
|
(0, shared_1.setupChangeEventHandler)(paymentElement, eventBroadcaster, addressElement);
|
package/dist/cjs/version.js
CHANGED
|
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SDK_VERSION = void 0;
|
|
4
4
|
// This file is auto-generated during the build process
|
|
5
5
|
// DO NOT EDIT MANUALLY - Version is extracted from package.json
|
|
6
|
-
exports.SDK_VERSION = '1.
|
|
6
|
+
exports.SDK_VERSION = '1.6.0';
|
|
@@ -23,13 +23,15 @@ export type ChangeEvent = BaseEvent & {
|
|
|
23
23
|
status: 'Change';
|
|
24
24
|
code: 'Complete' | 'Incomplete';
|
|
25
25
|
paymentMethodType?: string;
|
|
26
|
+
saveCheckboxChecked?: boolean;
|
|
26
27
|
};
|
|
27
28
|
export type ErrorResultEvent = BaseEvent & {
|
|
28
29
|
code: SupportedErrorCodes;
|
|
29
30
|
status: 'Error';
|
|
30
31
|
};
|
|
31
32
|
export type InternalEvent = SucceededResultEvent | PendingResultEvent | DeclinedResultEvent | ErrorResultEvent | ReadyEvent | ChangeEvent;
|
|
32
|
-
|
|
33
|
+
type DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;
|
|
34
|
+
export type Event = DistributiveOmit<InternalEvent, 'loggingEnrichment'>;
|
|
33
35
|
export type EventHandler = (result: Event) => void;
|
|
34
36
|
export type EventMiddleware = (event: InternalEvent) => InternalEvent | void;
|
|
35
37
|
export type EventListeners = Partial<Record<`on${Status}`, EventHandler>>;
|
|
@@ -42,3 +44,4 @@ export declare class EventBroadcaster {
|
|
|
42
44
|
applyMiddlewares(event: InternalEvent): Event;
|
|
43
45
|
publish(event: InternalEvent): void;
|
|
44
46
|
}
|
|
47
|
+
export {};
|
|
@@ -30,6 +30,9 @@ var EventBroadcaster = /** @class */ (function () {
|
|
|
30
30
|
if ('paymentMethodType' in event && event.paymentMethodType) {
|
|
31
31
|
externalEvent.paymentMethodType = event.paymentMethodType;
|
|
32
32
|
}
|
|
33
|
+
if ('saveCheckboxChecked' in event && event.saveCheckboxChecked !== undefined) {
|
|
34
|
+
externalEvent.saveCheckboxChecked = event.saveCheckboxChecked;
|
|
35
|
+
}
|
|
33
36
|
return externalEvent;
|
|
34
37
|
};
|
|
35
38
|
EventBroadcaster.prototype.registerMiddleware = function (middleware) {
|
package/dist/v1/session.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { InvalidSessionPayloadError, InvalidSessionError } from './error';
|
|
2
2
|
export function decodePaymentSessionToContext(paymentSession) {
|
|
3
3
|
try {
|
|
4
|
-
var
|
|
4
|
+
var binary = atob(paymentSession);
|
|
5
|
+
var bytes = Uint8Array.from(binary, function (c) { return c.charCodeAt(0); });
|
|
6
|
+
var decoded = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
5
7
|
var jsonToken = JSON.parse(decoded);
|
|
6
8
|
if (jsonToken && isTokenValid(jsonToken)) {
|
|
7
9
|
return jsonToken;
|
|
@@ -21,8 +21,9 @@ export declare function initStripe(context: StripeContext, theme?: PaymentWidget
|
|
|
21
21
|
* @param defaultValues - Default values for the payment element
|
|
22
22
|
* @param theme - Theme configuration
|
|
23
23
|
* @param hideNameField - Whether to hide the billing details name field (used when address element is present to avoid duplicates with ACH)
|
|
24
|
+
* @param businessName - Overrides the merchant name Stripe renders in mandate text (passed to `business.name`)
|
|
24
25
|
*/
|
|
25
|
-
export declare function createPaymentElementOptions(defaultValues?: DefaultValues, theme?: PaymentWidgetTheme, hideNameField?: boolean): StripePaymentElementOptions;
|
|
26
|
+
export declare function createPaymentElementOptions(defaultValues?: DefaultValues, theme?: PaymentWidgetTheme, hideNameField?: boolean, businessName?: string): StripePaymentElementOptions;
|
|
26
27
|
/**
|
|
27
28
|
* Create address element options
|
|
28
29
|
*/
|
|
@@ -40,6 +41,8 @@ export declare function createPaymentElement(elements: StripeElements, options:
|
|
|
40
41
|
* When addressElement is provided (payment form): emits "Complete" only when BOTH elements are complete,
|
|
41
42
|
* and "Incomplete" when at least one element becomes incomplete.
|
|
42
43
|
* When addressElement is not provided (MOTO form): emits based on payment element completion only.
|
|
44
|
+
* Also includes the current save-payment-method checkbox state (when present) on every Change event,
|
|
45
|
+
* and emits a Change event when that checkbox state changes.
|
|
43
46
|
*/
|
|
44
47
|
export declare function setupChangeEventHandler(paymentElement: StripePaymentElement, eventBroadcaster: EventBroadcaster, addressElement?: StripeAddressElement | null): void;
|
|
45
48
|
/**
|
package/dist/v1/stripe/shared.js
CHANGED
|
@@ -80,10 +80,11 @@ export function initStripe(context, theme) {
|
|
|
80
80
|
* @param defaultValues - Default values for the payment element
|
|
81
81
|
* @param theme - Theme configuration
|
|
82
82
|
* @param hideNameField - Whether to hide the billing details name field (used when address element is present to avoid duplicates with ACH)
|
|
83
|
+
* @param businessName - Overrides the merchant name Stripe renders in mandate text (passed to `business.name`)
|
|
83
84
|
*/
|
|
84
|
-
export function createPaymentElementOptions(defaultValues, theme, hideNameField) {
|
|
85
|
+
export function createPaymentElementOptions(defaultValues, theme, hideNameField, businessName) {
|
|
85
86
|
if (hideNameField === void 0) { hideNameField = false; }
|
|
86
|
-
var options = __assign(__assign({ wallets: {
|
|
87
|
+
var options = __assign(__assign(__assign({ wallets: {
|
|
87
88
|
applePay: 'never',
|
|
88
89
|
googlePay: 'never',
|
|
89
90
|
link: 'never',
|
|
@@ -95,7 +96,7 @@ export function createPaymentElementOptions(defaultValues, theme, hideNameField)
|
|
|
95
96
|
},
|
|
96
97
|
})), { terms: {
|
|
97
98
|
usBankAccount: 'never', // Hide Stripe's default T&Cs (shown for ACH payments)
|
|
98
|
-
} });
|
|
99
|
+
} }), (businessName && { business: { name: businessName } }));
|
|
99
100
|
if (defaultValues) {
|
|
100
101
|
options.defaultValues = {
|
|
101
102
|
billingDetails: {
|
|
@@ -209,17 +210,22 @@ export function createPaymentElement(elements, options, mountElement, eventBroad
|
|
|
209
210
|
* When addressElement is provided (payment form): emits "Complete" only when BOTH elements are complete,
|
|
210
211
|
* and "Incomplete" when at least one element becomes incomplete.
|
|
211
212
|
* When addressElement is not provided (MOTO form): emits based on payment element completion only.
|
|
213
|
+
* Also includes the current save-payment-method checkbox state (when present) on every Change event,
|
|
214
|
+
* and emits a Change event when that checkbox state changes.
|
|
212
215
|
*/
|
|
213
216
|
export function setupChangeEventHandler(paymentElement, eventBroadcaster, addressElement) {
|
|
214
217
|
var paymentComplete = false;
|
|
215
218
|
var addressComplete = !addressElement; // If no address element, consider it complete
|
|
216
219
|
var previousComplete = null;
|
|
217
220
|
var previousMethodType;
|
|
221
|
+
var previousSaveCheckboxState; // Track save checkbox state
|
|
218
222
|
var emitChangeEvent = function () {
|
|
219
223
|
var complete = paymentComplete && addressComplete;
|
|
220
224
|
previousComplete = complete;
|
|
221
|
-
eventBroadcaster.publish(__assign({ status: 'Change', code: complete ? 'Complete' : 'Incomplete' }, (previousMethodType && {
|
|
225
|
+
eventBroadcaster.publish(__assign(__assign({ status: 'Change', code: complete ? 'Complete' : 'Incomplete' }, (previousMethodType && {
|
|
222
226
|
paymentMethodType: previousMethodType,
|
|
227
|
+
})), (previousSaveCheckboxState !== undefined && {
|
|
228
|
+
saveCheckboxChecked: previousSaveCheckboxState,
|
|
223
229
|
})));
|
|
224
230
|
};
|
|
225
231
|
paymentElement.on('change', function (event) {
|
|
@@ -231,7 +237,15 @@ export function setupChangeEventHandler(paymentElement, eventBroadcaster, addres
|
|
|
231
237
|
if (methodType !== undefined) {
|
|
232
238
|
previousMethodType = methodType;
|
|
233
239
|
}
|
|
234
|
-
|
|
240
|
+
// Check for save checkbox state from Stripe's value object
|
|
241
|
+
// The value object may contain a `savePaymentMethod` property
|
|
242
|
+
var saveCheckboxChanged = false;
|
|
243
|
+
if (event.value && typeof event.value === 'object' && 'savePaymentMethod' in event.value) {
|
|
244
|
+
var saveCheckboxState = event.value.savePaymentMethod;
|
|
245
|
+
saveCheckboxChanged = previousSaveCheckboxState !== saveCheckboxState;
|
|
246
|
+
previousSaveCheckboxState = saveCheckboxState;
|
|
247
|
+
}
|
|
248
|
+
if (completenessChanged || methodTypeChanged || saveCheckboxChanged) {
|
|
235
249
|
emitChangeEvent();
|
|
236
250
|
}
|
|
237
251
|
});
|
|
@@ -47,7 +47,7 @@ export function mountMotoWidget(mountElement, session, eventBroadcaster, default
|
|
|
47
47
|
case 0: return [4 /*yield*/, initStripe(session.context, theme)];
|
|
48
48
|
case 1:
|
|
49
49
|
_a = _c.sent(), stripe = _a.stripe, elements = _a.elements;
|
|
50
|
-
paymentOptions = createPaymentElementOptions(defaultValues, theme);
|
|
50
|
+
paymentOptions = createPaymentElementOptions(defaultValues, theme, false, session.context.businessName);
|
|
51
51
|
_b = createPaymentElement(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _b.element, paymentContainer = _b.container, customTermsContainer = _b.customTermsContainer;
|
|
52
52
|
// Setup change handler for payment element only (MOTO forms don't have address element)
|
|
53
53
|
setupChangeEventHandler(paymentElement, eventBroadcaster);
|
|
@@ -48,7 +48,7 @@ export function mountPaymentWidget(mountElement, session, eventBroadcaster, defa
|
|
|
48
48
|
_a = _d.sent(), stripe = _a.stripe, elements = _a.elements;
|
|
49
49
|
addressOptions = createAddressElementOptions(defaultValues);
|
|
50
50
|
_b = createAddressElement(elements, addressOptions, mountElement), addressElement = _b.element, addressContainer = _b.container;
|
|
51
|
-
paymentOptions = createPaymentElementOptions(defaultValues, theme, true);
|
|
51
|
+
paymentOptions = createPaymentElementOptions(defaultValues, theme, true, session.context.businessName);
|
|
52
52
|
_c = createPaymentElement(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _c.element, paymentContainer = _c.container, customTermsContainer = _c.customTermsContainer;
|
|
53
53
|
// Setup change handler that emits Complete only when both elements are complete
|
|
54
54
|
setupChangeEventHandler(paymentElement, eventBroadcaster, addressElement);
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "1.
|
|
1
|
+
export declare const SDK_VERSION = "1.6.0";
|
package/dist/version.js
CHANGED
package/package.json
CHANGED