@lightspeed/online-payments-sdk 1.0.4 → 1.1.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.
@@ -1,14 +1,3 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
1
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
2
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
3
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -45,140 +34,29 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
35
  }
47
36
  };
48
- import { loadStripe } from '@stripe/stripe-js';
49
- import { EventBuilder } from './ResultBuilder';
50
- import { InvalidSessionPayloadError, ProcessingError } from '../error';
51
- function init(context) {
37
+ import { mountPaymentWidget } from './widgets/payment';
38
+ import { mountMotoWidget } from './widgets/moto';
39
+ /**
40
+ * Main mount function that delegates to appropriate widget based on session type
41
+ */
42
+ export function mount(mountElement, session, eventBroadcaster, defaultValues, theme) {
52
43
  return __awaiter(this, void 0, void 0, function () {
53
- var publishableKey, clientSecret, customerSessionClientSecret, loadedStripe, stripe, elementsOptions, elements;
44
+ var sessionType;
54
45
  return __generator(this, function (_a) {
55
- switch (_a.label) {
56
- case 0:
57
- publishableKey = context.publishableKey, clientSecret = context.clientSecret, customerSessionClientSecret = context.customerSessionClientSecret;
58
- return [4 /*yield*/, loadStripe(publishableKey)];
59
- case 1:
60
- loadedStripe = _a.sent();
61
- if (!loadedStripe) {
62
- throw new Error('Failed to initialize Stripe');
63
- }
64
- stripe = loadedStripe;
65
- elementsOptions = __assign({ clientSecret: clientSecret, customerSessionClientSecret: customerSessionClientSecret }, (context.locale && { locale: context.locale }));
66
- elements = stripe.elements(elementsOptions);
67
- return [2 /*return*/, { stripe: stripe, elements: elements }];
68
- }
69
- });
70
- });
71
- }
72
- export function mount(mountElement, context, eventBroadcaster, defaultValues) {
73
- return __awaiter(this, void 0, void 0, function () {
74
- var _a, stripe, elements, options, paymentElement;
75
- var _this = this;
76
- return __generator(this, function (_b) {
77
- switch (_b.label) {
78
- case 0: return [4 /*yield*/, init(context)];
79
- case 1:
80
- _a = _b.sent(), stripe = _a.stripe, elements = _a.elements;
81
- options = {
82
- wallets: {
83
- applePay: 'never',
84
- googlePay: 'never',
85
- link: 'never',
86
- },
87
- };
88
- if (defaultValues) {
89
- options.defaultValues = {
90
- billingDetails: {
91
- address: {
92
- country: defaultValues.country,
93
- postal_code: defaultValues.postalCode,
94
- },
95
- },
96
- };
97
- }
98
- paymentElement = elements.create('payment', options);
99
- paymentElement.on('ready', function () {
100
- return eventBroadcaster.publish({ status: 'Ready', code: 'Ready' });
101
- });
102
- paymentElement.mount(mountElement);
103
- return [2 /*return*/, {
104
- unmount: function () { return paymentElement.unmount(); },
105
- submit: function () { return __awaiter(_this, void 0, void 0, function () {
106
- var result;
107
- return __generator(this, function (_a) {
108
- switch (_a.label) {
109
- case 0:
110
- result = undefined;
111
- if (!['save-card', 'payment'].includes(context.intent)) {
112
- eventBroadcaster.publish({
113
- status: 'Error',
114
- code: 'InvalidSessionPayload',
115
- loggingEnrichment: {
116
- message: "context has an unexpect intent of ".concat(context.intent),
117
- },
118
- });
119
- throw new InvalidSessionPayloadError();
120
- }
121
- if (!(context.intent === 'save-card')) return [3 /*break*/, 2];
122
- return [4 /*yield*/, handleSaveCard(stripe, elements)];
123
- case 1:
124
- result = _a.sent();
125
- _a.label = 2;
126
- case 2:
127
- if (!(context.intent === 'payment')) return [3 /*break*/, 4];
128
- return [4 /*yield*/, handlePayment(stripe, elements)];
129
- case 3:
130
- result = _a.sent();
131
- _a.label = 4;
132
- case 4:
133
- if (!result) {
134
- eventBroadcaster.publish({ status: 'Error', code: 'Unexpected' });
135
- throw new ProcessingError();
136
- }
137
- eventBroadcaster.publish(result);
138
- return [2 /*return*/, result];
139
- }
140
- });
141
- }); },
142
- }];
143
- }
144
- });
145
- });
146
- }
147
- function handleSaveCard(stripe, elements) {
148
- return __awaiter(this, void 0, void 0, function () {
149
- var _a, error, setupIntent;
150
- return __generator(this, function (_b) {
151
- switch (_b.label) {
152
- case 0: return [4 /*yield*/, stripe.confirmSetup({
153
- elements: elements,
154
- redirect: 'if_required',
155
- confirmParams: { return_url: window.location.href },
156
- })];
157
- case 1:
158
- _a = _b.sent(), error = _a.error, setupIntent = _a.setupIntent;
159
- return [2 /*return*/, error
160
- ? EventBuilder.fromStripeError(error)
161
- : EventBuilder.fromSetupIntent(setupIntent)];
162
- }
163
- });
164
- });
165
- }
166
- function handlePayment(stripe, elements) {
167
- return __awaiter(this, void 0, void 0, function () {
168
- var _a, error, paymentIntent;
169
- return __generator(this, function (_b) {
170
- switch (_b.label) {
171
- case 0: return [4 /*yield*/, stripe.confirmPayment({
172
- elements: elements,
173
- redirect: 'if_required',
174
- confirmParams: { return_url: window.location.href },
175
- })];
176
- case 1:
177
- _a = _b.sent(), error = _a.error, paymentIntent = _a.paymentIntent;
178
- return [2 /*return*/, error
179
- ? EventBuilder.fromStripeError(error)
180
- : EventBuilder.fromPaymentIntent(paymentIntent)];
46
+ sessionType = session.metadata.sessionType;
47
+ // Route to appropriate widget based on session type
48
+ switch (sessionType) {
49
+ case 'payment':
50
+ case 'payment-with-save':
51
+ return [2 /*return*/, mountPaymentWidget(mountElement, session, eventBroadcaster, defaultValues, theme)];
52
+ case 'moto':
53
+ case 'moto-with-save':
54
+ case 'save':
55
+ return [2 /*return*/, mountMotoWidget(mountElement, session, eventBroadcaster, defaultValues, theme)];
56
+ default:
57
+ throw new Error("Unsupported session type: ".concat(sessionType));
181
58
  }
59
+ return [2 /*return*/];
182
60
  });
183
61
  });
184
62
  }
@@ -0,0 +1,9 @@
1
+ import { StripeSession } from '../session';
2
+ import { DefaultValues, WidgetController } from '../../common';
3
+ import { EventBroadcaster } from '../../EventBroadcaster';
4
+ import { PaymentWidgetTheme } from '../../widget';
5
+ /**
6
+ * Mount MOTO widget for moto and moto-with-save session types
7
+ * MOTO (Mail Order/Telephone Order) forms don't require address collection
8
+ */
9
+ export declare function mountMotoWidget(mountElement: HTMLElement, session: StripeSession, eventBroadcaster: EventBroadcaster, defaultValues?: DefaultValues, theme?: PaymentWidgetTheme): Promise<WidgetController>;
@@ -0,0 +1,61 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { initStripe, createPaymentElementOptions, createPaymentElement, cleanupElements, createSubmitHandler, } from '../shared';
38
+ /**
39
+ * Mount MOTO widget for moto and moto-with-save session types
40
+ * MOTO (Mail Order/Telephone Order) forms don't require address collection
41
+ */
42
+ export function mountMotoWidget(mountElement, session, eventBroadcaster, defaultValues, theme) {
43
+ return __awaiter(this, void 0, void 0, function () {
44
+ var _a, stripe, elements, paymentOptions, _b, paymentElement, paymentContainer;
45
+ return __generator(this, function (_c) {
46
+ switch (_c.label) {
47
+ case 0: return [4 /*yield*/, initStripe(session.context, theme)];
48
+ case 1:
49
+ _a = _c.sent(), stripe = _a.stripe, elements = _a.elements;
50
+ paymentOptions = createPaymentElementOptions(defaultValues, theme);
51
+ _b = createPaymentElement(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _b.element, paymentContainer = _b.container;
52
+ return [2 /*return*/, {
53
+ unmount: function () {
54
+ cleanupElements(paymentElement, null, paymentContainer, null);
55
+ },
56
+ submit: createSubmitHandler(stripe, elements, session, eventBroadcaster),
57
+ }];
58
+ }
59
+ });
60
+ });
61
+ }
@@ -0,0 +1,8 @@
1
+ import { StripeSession } from '../session';
2
+ import { DefaultValues, WidgetController } from '../../common';
3
+ import { EventBroadcaster } from '../../EventBroadcaster';
4
+ import { PaymentWidgetTheme } from '../../widget';
5
+ /**
6
+ * Mount payment widget for payment and payment-with-save session types
7
+ */
8
+ export declare function mountPaymentWidget(mountElement: HTMLElement, session: StripeSession, eventBroadcaster: EventBroadcaster, defaultValues?: DefaultValues, theme?: PaymentWidgetTheme): Promise<WidgetController>;
@@ -0,0 +1,62 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { initStripe, createPaymentElementOptions, createAddressElementOptions, createPaymentElement, createAddressElement, cleanupElements, createSubmitHandler, } from '../shared';
38
+ /**
39
+ * Mount payment widget for payment and payment-with-save session types
40
+ */
41
+ export function mountPaymentWidget(mountElement, session, eventBroadcaster, defaultValues, theme) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var _a, stripe, elements, addressOptions, _b, addressElement, addressContainer, paymentOptions, _c, paymentElement, paymentContainer;
44
+ return __generator(this, function (_d) {
45
+ switch (_d.label) {
46
+ case 0: return [4 /*yield*/, initStripe(session.context, theme)];
47
+ case 1:
48
+ _a = _d.sent(), stripe = _a.stripe, elements = _a.elements;
49
+ addressOptions = createAddressElementOptions(defaultValues);
50
+ _b = createAddressElement(elements, addressOptions, mountElement), addressElement = _b.element, addressContainer = _b.container;
51
+ paymentOptions = createPaymentElementOptions(defaultValues, theme);
52
+ _c = createPaymentElement(elements, paymentOptions, mountElement, eventBroadcaster), paymentElement = _c.element, paymentContainer = _c.container;
53
+ return [2 /*return*/, {
54
+ unmount: function () {
55
+ cleanupElements(paymentElement, addressElement, paymentContainer, addressContainer);
56
+ },
57
+ submit: createSubmitHandler(stripe, elements, session, eventBroadcaster),
58
+ }];
59
+ }
60
+ });
61
+ });
62
+ }
@@ -1,8 +1,10 @@
1
1
  import { WidgetController, DefaultValues } from './common';
2
2
  import { EventListeners } from './EventBroadcaster';
3
+ export type PaymentWidgetTheme = 'invoicing';
3
4
  export type PaymentWidgetConfiguration = {
4
5
  mountPoint: HTMLElement;
5
6
  defaultValues?: DefaultValues;
6
7
  listeners?: EventListeners;
8
+ theme?: PaymentWidgetTheme;
7
9
  };
8
10
  export declare function mountPaymentWidget(session: string, config: PaymentWidgetConfiguration): Promise<WidgetController>;
package/dist/v1/widget.js CHANGED
@@ -67,11 +67,11 @@ export function mountPaymentWidget(session, config) {
67
67
  case 'STRIPE': return [3 /*break*/, 4];
68
68
  }
69
69
  return [3 /*break*/, 6];
70
- case 2: return [4 /*yield*/, AdyenWidget.mount(config.mountPoint, decodedSession.context, eventBroadcaster)];
70
+ case 2: return [4 /*yield*/, AdyenWidget.mount(config.mountPoint, decodedSession, eventBroadcaster)];
71
71
  case 3:
72
72
  widgetController = _b.sent();
73
73
  return [3 /*break*/, 7];
74
- case 4: return [4 /*yield*/, StripeWidget.mount(config.mountPoint, decodedSession.context, eventBroadcaster, config.defaultValues)];
74
+ case 4: return [4 /*yield*/, StripeWidget.mount(config.mountPoint, decodedSession, eventBroadcaster, config.defaultValues, config.theme)];
75
75
  case 5:
76
76
  widgetController = _b.sent();
77
77
  return [3 /*break*/, 7];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightspeed/online-payments-sdk",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "description": "Process online-payments with Lightspeed Payments",
5
5
  "author": "Lightspeed Commerce Inc.",
6
6
  "license": "SEE LICENSE IN LICENSE.md",