@lightspeed/online-payments-sdk 0.1.5 → 0.1.6
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/AdyenSession.d.ts +16 -0
- package/dist/AdyenSession.js +1 -0
- package/dist/StripeSession.d.ts +4 -0
- package/dist/StripeSession.js +1 -0
- package/dist/cjs/AdyenSession.js +2 -0
- package/dist/cjs/StripeSession.js +2 -0
- package/dist/cjs/common.js +2 -0
- package/dist/cjs/index.js +5 -90
- package/dist/cjs/v1/AdyenWidget.js +98 -0
- package/dist/cjs/v1/index.js +41 -0
- package/dist/common.d.ts +14 -0
- package/dist/common.js +1 -0
- package/dist/index.d.ts +6 -10
- package/dist/index.js +3 -87
- package/dist/v1/AdyenWidget.d.ts +3 -0
- package/dist/v1/AdyenWidget.js +95 -0
- package/dist/v1/index.d.ts +9 -0
- package/dist/v1/index.js +38 -0
- package/package.json +15 -6
- package/styles/lightspeed-global-styles.css +1 -0
- package/dist/cjs/frameMessenger.js +0 -59
- package/dist/frameMessenger.d.ts +0 -41
- package/dist/frameMessenger.js +0 -56
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PaymentMethodsResponse } from '@adyen/adyen-web';
|
|
2
|
+
export type AdyenSession = {
|
|
3
|
+
psp: 'ADYEN';
|
|
4
|
+
context: AdyenContext;
|
|
5
|
+
};
|
|
6
|
+
export type AdyenContext = {
|
|
7
|
+
clientKey: string;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
sessionData: string;
|
|
10
|
+
locale: string;
|
|
11
|
+
countryCode: string;
|
|
12
|
+
amount: number;
|
|
13
|
+
currency: string;
|
|
14
|
+
env: 'test' | 'live';
|
|
15
|
+
paymentMethods: PaymentMethodsResponse;
|
|
16
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,92 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
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 (g && (g = 0, op[0] && (_ = 0)), _) 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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
40
|
-
var
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
collectPaymentMethod: function (paymentSessionId) { return __awaiter(_this, void 0, void 0, function () {
|
|
46
|
-
var responseListeners, response;
|
|
47
|
-
return __generator(this, function (_a) {
|
|
48
|
-
switch (_a.label) {
|
|
49
|
-
case 0:
|
|
50
|
-
responseListeners = Promise.race([
|
|
51
|
-
messenger.awaitMessage('COMPLETE'),
|
|
52
|
-
messenger.awaitMessage('ERROR'),
|
|
53
|
-
]);
|
|
54
|
-
messenger.publishMessage('SET_PAYMENT_SESSION_V1', { paymentSessionId: paymentSessionId });
|
|
55
|
-
return [4 /*yield*/, responseListeners];
|
|
56
|
-
case 1:
|
|
57
|
-
response = _a.sent();
|
|
58
|
-
if (response.type === 'COMPLETE') {
|
|
59
|
-
return [2 /*return*/, {
|
|
60
|
-
success: true,
|
|
61
|
-
paymentId: response.payload.data.paymentId,
|
|
62
|
-
}];
|
|
63
|
-
}
|
|
64
|
-
throw Error(response.payload.data.message);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}); },
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
function mountLightspeedPayments(mountPoint, configuration) {
|
|
71
|
-
var _a;
|
|
72
|
-
if (configuration === void 0) { configuration = {}; }
|
|
73
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
74
|
-
var contentHostname, lspIframe, messenger, ready;
|
|
75
|
-
return __generator(this, function (_b) {
|
|
76
|
-
contentHostname = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.contentHostnameOverride) !== null && _a !== void 0 ? _a : DefaultContentHostname;
|
|
77
|
-
lspIframe = window.document.createElement('iframe');
|
|
78
|
-
lspIframe.height = '800px';
|
|
79
|
-
lspIframe.width = '700px';
|
|
80
|
-
lspIframe.src = contentHostname;
|
|
81
|
-
if (!mountPoint) {
|
|
82
|
-
throw Error('HtmlElement to mount checkout to is required. Received undefined');
|
|
83
|
-
}
|
|
84
|
-
messenger = frameMessenger_1.FrameMessenger.createFrameMessenger(window, lspIframe, contentHostname);
|
|
85
|
-
ready = messenger.awaitMessage('READY');
|
|
86
|
-
mountPoint.appendChild(lspIframe);
|
|
87
|
-
// Only return the messenger once it is verified that the content within the iframe is listening
|
|
88
|
-
return [2 /*return*/, ready.then(function () { return createOnlinePaymentsInterface(messenger); })];
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
exports.mountLightspeedPayments = mountLightspeedPayments;
|
|
3
|
+
exports.LightspeedPayments = void 0;
|
|
4
|
+
var v1_1 = require("./v1");
|
|
5
|
+
exports.LightspeedPayments = {
|
|
6
|
+
v1: v1_1.v1,
|
|
7
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
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 (g && (g = 0, op[0] && (_ = 0)), _) 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AdyenWidget = void 0;
|
|
40
|
+
var adyen_web_1 = require("@adyen/adyen-web");
|
|
41
|
+
function mount(mountElement, context, listeners) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
43
|
+
var checkoutConfig, checkout, dropinConfiguration;
|
|
44
|
+
return __generator(this, function (_a) {
|
|
45
|
+
switch (_a.label) {
|
|
46
|
+
case 0:
|
|
47
|
+
checkoutConfig = createAdyenConfiguration(context, listeners);
|
|
48
|
+
return [4 /*yield*/, (0, adyen_web_1.AdyenCheckout)(checkoutConfig)];
|
|
49
|
+
case 1:
|
|
50
|
+
checkout = _a.sent();
|
|
51
|
+
dropinConfiguration = createDropinConfiguration();
|
|
52
|
+
new adyen_web_1.Dropin(checkout, dropinConfiguration).mount(mountElement);
|
|
53
|
+
return [2 /*return*/];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function createAdyenConfiguration(context, listeners) {
|
|
59
|
+
return {
|
|
60
|
+
clientKey: context.clientKey,
|
|
61
|
+
session: {
|
|
62
|
+
id: context.sessionId,
|
|
63
|
+
sessionData: context.sessionData,
|
|
64
|
+
},
|
|
65
|
+
countryCode: context.countryCode,
|
|
66
|
+
amount: {
|
|
67
|
+
value: context.amount,
|
|
68
|
+
currency: context.currency,
|
|
69
|
+
},
|
|
70
|
+
locale: context.locale,
|
|
71
|
+
environment: context.env,
|
|
72
|
+
analytics: {
|
|
73
|
+
enabled: false,
|
|
74
|
+
},
|
|
75
|
+
onPaymentCompleted: function (data) {
|
|
76
|
+
var _a;
|
|
77
|
+
(_a = listeners === null || listeners === void 0 ? void 0 : listeners.onPaymentComplete) === null || _a === void 0 ? void 0 : _a.call(listeners, {
|
|
78
|
+
code: data.resultCode,
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
onPaymentFailed: function (data) {
|
|
82
|
+
var _a;
|
|
83
|
+
console.log(data);
|
|
84
|
+
(_a = listeners === null || listeners === void 0 ? void 0 : listeners.onPaymentFail) === null || _a === void 0 ? void 0 : _a.call(listeners, {
|
|
85
|
+
code: data.resultCode,
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
paymentMethodsResponse: context.paymentMethods,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function createDropinConfiguration() {
|
|
92
|
+
return {
|
|
93
|
+
paymentMethodComponents: [adyen_web_1.Card, adyen_web_1.GooglePay, adyen_web_1.ApplePay],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
exports.AdyenWidget = {
|
|
97
|
+
mount: mount,
|
|
98
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.v1 = void 0;
|
|
4
|
+
var AdyenWidget_1 = require("./AdyenWidget");
|
|
5
|
+
function mountPaymentWidget(sessionId, _a) {
|
|
6
|
+
var mountPoint = _a.mountPoint, onPaymentComplete = _a.onPaymentComplete, onPaymentFail = _a.onPaymentFail;
|
|
7
|
+
var session = decodePaymentSessionToContext(sessionId);
|
|
8
|
+
switch (session.psp) {
|
|
9
|
+
case 'ADYEN':
|
|
10
|
+
return AdyenWidget_1.AdyenWidget.mount(mountPoint, session.context, {
|
|
11
|
+
onPaymentComplete: onPaymentComplete,
|
|
12
|
+
onPaymentFail: onPaymentFail,
|
|
13
|
+
});
|
|
14
|
+
case 'STRIPE':
|
|
15
|
+
default:
|
|
16
|
+
throw Error('Unsupported PSP');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function decodePaymentSessionToContext(paymentSession) {
|
|
20
|
+
try {
|
|
21
|
+
var decoded = atob(paymentSession);
|
|
22
|
+
var jsonToken = JSON.parse(decoded);
|
|
23
|
+
if (jsonToken && isTokenValid(jsonToken)) {
|
|
24
|
+
return jsonToken;
|
|
25
|
+
}
|
|
26
|
+
throw Error('invalid token structure');
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
throw Error("Payment token is not valid, ".concat(e));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function isTokenValid(token) {
|
|
33
|
+
var t = token;
|
|
34
|
+
if (t && !!t.psp && !!t.context) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
exports.v1 = {
|
|
40
|
+
mountPaymentWidget: mountPaymentWidget,
|
|
41
|
+
};
|
package/dist/common.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ResultCode = 'AuthenticationFinished' | 'AuthenticationNotRequired' | 'Authorised' | 'Cancelled' | 'ChallengeShopper' | 'Error' | 'IdentifyShopper' | 'PartiallyAuthorised' | 'Pending' | 'PresentToShopper' | 'Received' | 'RedirectShopper' | 'Refused';
|
|
2
|
+
type Result<T> = {
|
|
3
|
+
code: T;
|
|
4
|
+
};
|
|
5
|
+
export type CompleteResult = Result<ResultCode>;
|
|
6
|
+
export type FailedResult = Result<ResultCode>;
|
|
7
|
+
export type Callbacks = {
|
|
8
|
+
onPaymentComplete?(result: CompleteResult): void;
|
|
9
|
+
onPaymentFail?(result: FailedResult): void;
|
|
10
|
+
};
|
|
11
|
+
export type WidgetInterface<T> = {
|
|
12
|
+
mount: (mountElement: HTMLElement, context: T, listeners: Callbacks) => void;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
package/dist/common.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
export type
|
|
2
|
-
|
|
1
|
+
export type { PaymentWidgetConfiguration } from './v1';
|
|
2
|
+
export type { CompleteResult, FailedResult } from './common';
|
|
3
|
+
export declare const LightspeedPayments: {
|
|
4
|
+
v1: {
|
|
5
|
+
mountPaymentWidget(sessionId: string, { mountPoint, onPaymentComplete, onPaymentFail }: import("./v1").PaymentWidgetConfiguration): void;
|
|
6
|
+
};
|
|
3
7
|
};
|
|
4
|
-
export type CollectPaymentMethodResponse = {
|
|
5
|
-
success: true;
|
|
6
|
-
paymentId: string;
|
|
7
|
-
};
|
|
8
|
-
export type OnlinePaymentsInterface = {
|
|
9
|
-
collectPaymentMethod(paymentSessionId: string): Promise<CollectPaymentMethodResponse>;
|
|
10
|
-
};
|
|
11
|
-
export declare function mountLightspeedPayments(mountPoint: HTMLElement, configuration?: Configuration): Promise<OnlinePaymentsInterface>;
|
package/dist/index.js
CHANGED
|
@@ -1,88 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
});
|
|
1
|
+
import { v1 } from './v1';
|
|
2
|
+
export var LightspeedPayments = {
|
|
3
|
+
v1: v1,
|
|
9
4
|
};
|
|
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;
|
|
12
|
-
return g = { next: verb(0), "throw": verb(1), "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 { FrameMessenger } from './frameMessenger';
|
|
38
|
-
var DefaultContentHostname = 'https://online-payment-widgets.lspay.lightspeed.app';
|
|
39
|
-
function createOnlinePaymentsInterface(messenger) {
|
|
40
|
-
var _this = this;
|
|
41
|
-
return {
|
|
42
|
-
collectPaymentMethod: function (paymentSessionId) { return __awaiter(_this, void 0, void 0, function () {
|
|
43
|
-
var responseListeners, response;
|
|
44
|
-
return __generator(this, function (_a) {
|
|
45
|
-
switch (_a.label) {
|
|
46
|
-
case 0:
|
|
47
|
-
responseListeners = Promise.race([
|
|
48
|
-
messenger.awaitMessage('COMPLETE'),
|
|
49
|
-
messenger.awaitMessage('ERROR'),
|
|
50
|
-
]);
|
|
51
|
-
messenger.publishMessage('SET_PAYMENT_SESSION_V1', { paymentSessionId: paymentSessionId });
|
|
52
|
-
return [4 /*yield*/, responseListeners];
|
|
53
|
-
case 1:
|
|
54
|
-
response = _a.sent();
|
|
55
|
-
if (response.type === 'COMPLETE') {
|
|
56
|
-
return [2 /*return*/, {
|
|
57
|
-
success: true,
|
|
58
|
-
paymentId: response.payload.data.paymentId,
|
|
59
|
-
}];
|
|
60
|
-
}
|
|
61
|
-
throw Error(response.payload.data.message);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}); },
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
export function mountLightspeedPayments(mountPoint, configuration) {
|
|
68
|
-
var _a;
|
|
69
|
-
if (configuration === void 0) { configuration = {}; }
|
|
70
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
71
|
-
var contentHostname, lspIframe, messenger, ready;
|
|
72
|
-
return __generator(this, function (_b) {
|
|
73
|
-
contentHostname = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.contentHostnameOverride) !== null && _a !== void 0 ? _a : DefaultContentHostname;
|
|
74
|
-
lspIframe = window.document.createElement('iframe');
|
|
75
|
-
lspIframe.height = '800px';
|
|
76
|
-
lspIframe.width = '700px';
|
|
77
|
-
lspIframe.src = contentHostname;
|
|
78
|
-
if (!mountPoint) {
|
|
79
|
-
throw Error('HtmlElement to mount checkout to is required. Received undefined');
|
|
80
|
-
}
|
|
81
|
-
messenger = FrameMessenger.createFrameMessenger(window, lspIframe, contentHostname);
|
|
82
|
-
ready = messenger.awaitMessage('READY');
|
|
83
|
-
mountPoint.appendChild(lspIframe);
|
|
84
|
-
// Only return the messenger once it is verified that the content within the iframe is listening
|
|
85
|
-
return [2 /*return*/, ready.then(function () { return createOnlinePaymentsInterface(messenger); })];
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
}
|
|
@@ -0,0 +1,95 @@
|
|
|
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;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "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 { AdyenCheckout, Dropin, Card, GooglePay, ApplePay, } from '@adyen/adyen-web';
|
|
38
|
+
function mount(mountElement, context, listeners) {
|
|
39
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
40
|
+
var checkoutConfig, checkout, dropinConfiguration;
|
|
41
|
+
return __generator(this, function (_a) {
|
|
42
|
+
switch (_a.label) {
|
|
43
|
+
case 0:
|
|
44
|
+
checkoutConfig = createAdyenConfiguration(context, listeners);
|
|
45
|
+
return [4 /*yield*/, AdyenCheckout(checkoutConfig)];
|
|
46
|
+
case 1:
|
|
47
|
+
checkout = _a.sent();
|
|
48
|
+
dropinConfiguration = createDropinConfiguration();
|
|
49
|
+
new Dropin(checkout, dropinConfiguration).mount(mountElement);
|
|
50
|
+
return [2 /*return*/];
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function createAdyenConfiguration(context, listeners) {
|
|
56
|
+
return {
|
|
57
|
+
clientKey: context.clientKey,
|
|
58
|
+
session: {
|
|
59
|
+
id: context.sessionId,
|
|
60
|
+
sessionData: context.sessionData,
|
|
61
|
+
},
|
|
62
|
+
countryCode: context.countryCode,
|
|
63
|
+
amount: {
|
|
64
|
+
value: context.amount,
|
|
65
|
+
currency: context.currency,
|
|
66
|
+
},
|
|
67
|
+
locale: context.locale,
|
|
68
|
+
environment: context.env,
|
|
69
|
+
analytics: {
|
|
70
|
+
enabled: false,
|
|
71
|
+
},
|
|
72
|
+
onPaymentCompleted: function (data) {
|
|
73
|
+
var _a;
|
|
74
|
+
(_a = listeners === null || listeners === void 0 ? void 0 : listeners.onPaymentComplete) === null || _a === void 0 ? void 0 : _a.call(listeners, {
|
|
75
|
+
code: data.resultCode,
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
onPaymentFailed: function (data) {
|
|
79
|
+
var _a;
|
|
80
|
+
console.log(data);
|
|
81
|
+
(_a = listeners === null || listeners === void 0 ? void 0 : listeners.onPaymentFail) === null || _a === void 0 ? void 0 : _a.call(listeners, {
|
|
82
|
+
code: data.resultCode,
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
paymentMethodsResponse: context.paymentMethods,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function createDropinConfiguration() {
|
|
89
|
+
return {
|
|
90
|
+
paymentMethodComponents: [Card, GooglePay, ApplePay],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export var AdyenWidget = {
|
|
94
|
+
mount: mount,
|
|
95
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Callbacks } from '../common';
|
|
2
|
+
export type PaymentWidgetConfiguration = {
|
|
3
|
+
mountPoint: HTMLElement;
|
|
4
|
+
} & Callbacks;
|
|
5
|
+
type V1ApiContract = {
|
|
6
|
+
mountPaymentWidget(sessionId: string, { mountPoint, onPaymentComplete, onPaymentFail }: PaymentWidgetConfiguration): void;
|
|
7
|
+
};
|
|
8
|
+
export declare const v1: V1ApiContract;
|
|
9
|
+
export {};
|
package/dist/v1/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AdyenWidget } from './AdyenWidget';
|
|
2
|
+
function mountPaymentWidget(sessionId, _a) {
|
|
3
|
+
var mountPoint = _a.mountPoint, onPaymentComplete = _a.onPaymentComplete, onPaymentFail = _a.onPaymentFail;
|
|
4
|
+
var session = decodePaymentSessionToContext(sessionId);
|
|
5
|
+
switch (session.psp) {
|
|
6
|
+
case 'ADYEN':
|
|
7
|
+
return AdyenWidget.mount(mountPoint, session.context, {
|
|
8
|
+
onPaymentComplete: onPaymentComplete,
|
|
9
|
+
onPaymentFail: onPaymentFail,
|
|
10
|
+
});
|
|
11
|
+
case 'STRIPE':
|
|
12
|
+
default:
|
|
13
|
+
throw Error('Unsupported PSP');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function decodePaymentSessionToContext(paymentSession) {
|
|
17
|
+
try {
|
|
18
|
+
var decoded = atob(paymentSession);
|
|
19
|
+
var jsonToken = JSON.parse(decoded);
|
|
20
|
+
if (jsonToken && isTokenValid(jsonToken)) {
|
|
21
|
+
return jsonToken;
|
|
22
|
+
}
|
|
23
|
+
throw Error('invalid token structure');
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
throw Error("Payment token is not valid, ".concat(e));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function isTokenValid(token) {
|
|
30
|
+
var t = token;
|
|
31
|
+
if (t && !!t.psp && !!t.context) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
export var v1 = {
|
|
37
|
+
mountPaymentWidget: mountPaymentWidget,
|
|
38
|
+
};
|
package/package.json
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lightspeed/online-payments-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Process online-payments with Lightspeed Payments",
|
|
5
5
|
"author": "Lightspeed Commerce Inc.",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
7
7
|
"main": "dist/cjs/index.js",
|
|
8
8
|
"module": "dist/index.js",
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
10
|
-
"publishConfig": {
|
|
11
|
-
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"styles"
|
|
16
|
+
],
|
|
12
17
|
"sideEffects": false,
|
|
13
18
|
"scripts": {
|
|
14
19
|
"test": "jest --no-cache --detectOpenHandles",
|
|
15
20
|
"lint": "gts lint",
|
|
16
|
-
"clean": "gts clean",
|
|
21
|
+
"clean": "gts clean && rm -rf styles",
|
|
17
22
|
"typecheck": "tsc --noEmit",
|
|
18
23
|
"check-package-content": "npm pack --dry-run",
|
|
19
|
-
"build": "npm run build:esm && npm run build:cjs",
|
|
24
|
+
"build": "npm run build:esm && npm run build:cjs && npm run build:css",
|
|
20
25
|
"build:esm": "tsc --module esnext --target es5 --outDir dist --downlevelIteration",
|
|
21
|
-
"build:cjs": "tsc --module commonjs --target es5 --outDir dist/cjs --downlevelIteration --declaration false"
|
|
26
|
+
"build:cjs": "tsc --module commonjs --target es5 --outDir dist/cjs --downlevelIteration --declaration false",
|
|
27
|
+
"build:css": "mkdir -p styles && cp src/**/*.css styles/"
|
|
22
28
|
},
|
|
23
29
|
"devDependencies": {
|
|
24
30
|
"@types/jest": "^29.5.13",
|
|
@@ -30,5 +36,8 @@
|
|
|
30
36
|
"ts-jest": "^29.2.5",
|
|
31
37
|
"tslib": "^2.7.0",
|
|
32
38
|
"typescript": "^5.1.5"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@adyen/adyen-web": "^6.8.0"
|
|
33
42
|
}
|
|
34
43
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import '@adyen/adyen-web/styles/adyen.css';
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FrameMessenger = void 0;
|
|
4
|
-
var createFrameMessenger = function (hostWindow, contentIframe, contentOrigin) {
|
|
5
|
-
var publishMessage = function (eventType, payload) {
|
|
6
|
-
if (contentIframe.contentWindow) {
|
|
7
|
-
contentIframe.contentWindow.postMessage({ type: eventType, payload: payload }, contentOrigin);
|
|
8
|
-
return {
|
|
9
|
-
success: true,
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
return {
|
|
14
|
-
success: false,
|
|
15
|
-
message: 'Failed to send event',
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
// if the events are not getting received its because you changed window to hostWindow
|
|
20
|
-
var awaitMessage = function (eventType) {
|
|
21
|
-
return new Promise(function (resolve) {
|
|
22
|
-
var handler = function (event) {
|
|
23
|
-
if (event.origin === contentOrigin) {
|
|
24
|
-
if (validateEventTypeAndPayload(eventType, event.data)) {
|
|
25
|
-
hostWindow.removeEventListener('message', handler);
|
|
26
|
-
resolve(event.data);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
hostWindow.addEventListener('message', handler);
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
return {
|
|
34
|
-
publishMessage: publishMessage,
|
|
35
|
-
awaitMessage: awaitMessage,
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
function validateEventTypeAndPayload(eventType, event) {
|
|
39
|
-
var _a, _b, _c, _d;
|
|
40
|
-
var e = event;
|
|
41
|
-
if (e.type !== eventType) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
switch (eventType) {
|
|
45
|
-
case 'READY':
|
|
46
|
-
return true;
|
|
47
|
-
case 'COMPLETE': {
|
|
48
|
-
var completeEvent = e;
|
|
49
|
-
return ((_b = (_a = completeEvent === null || completeEvent === void 0 ? void 0 : completeEvent.payload) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.paymentId) !== undefined;
|
|
50
|
-
}
|
|
51
|
-
case 'ERROR': {
|
|
52
|
-
var errorEvent = e;
|
|
53
|
-
return ((_d = (_c = errorEvent.payload) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.code) !== undefined;
|
|
54
|
-
}
|
|
55
|
-
default:
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.FrameMessenger = { createFrameMessenger: createFrameMessenger };
|
package/dist/frameMessenger.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
type PublishableMessagePayloadMapping = {
|
|
2
|
-
SET_PAYMENT_SESSION_V1: {
|
|
3
|
-
paymentSessionId: string;
|
|
4
|
-
};
|
|
5
|
-
};
|
|
6
|
-
type PublishableMessage = keyof PublishableMessagePayloadMapping;
|
|
7
|
-
type MessageEventData<K extends AwaitableMessage, T> = {
|
|
8
|
-
type: K;
|
|
9
|
-
payload: T;
|
|
10
|
-
};
|
|
11
|
-
export type AwaitableMessagePayloadMap = {
|
|
12
|
-
READY: MessageEventData<'READY', undefined>;
|
|
13
|
-
ERROR: MessageEventData<'ERROR', {
|
|
14
|
-
version: string;
|
|
15
|
-
data: {
|
|
16
|
-
code: string;
|
|
17
|
-
message: string;
|
|
18
|
-
};
|
|
19
|
-
}>;
|
|
20
|
-
COMPLETE: MessageEventData<'COMPLETE', {
|
|
21
|
-
version: string;
|
|
22
|
-
data: {
|
|
23
|
-
paymentId: string;
|
|
24
|
-
};
|
|
25
|
-
}>;
|
|
26
|
-
};
|
|
27
|
-
export type AwaitableMessage = keyof AwaitableMessagePayloadMap;
|
|
28
|
-
type PublishMessageResult = {
|
|
29
|
-
success: true;
|
|
30
|
-
} | {
|
|
31
|
-
success: false;
|
|
32
|
-
message: string;
|
|
33
|
-
};
|
|
34
|
-
export type FrameMessenger = {
|
|
35
|
-
awaitMessage<T extends AwaitableMessage>(eventType: T): Promise<AwaitableMessagePayloadMap[T]>;
|
|
36
|
-
publishMessage<T extends PublishableMessage>(eventType: T, payload: PublishableMessagePayloadMapping[T]): PublishMessageResult;
|
|
37
|
-
};
|
|
38
|
-
export declare const FrameMessenger: {
|
|
39
|
-
createFrameMessenger: (hostWindow: Window, contentIframe: HTMLIFrameElement, contentOrigin: string) => FrameMessenger;
|
|
40
|
-
};
|
|
41
|
-
export {};
|
package/dist/frameMessenger.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
var createFrameMessenger = function (hostWindow, contentIframe, contentOrigin) {
|
|
2
|
-
var publishMessage = function (eventType, payload) {
|
|
3
|
-
if (contentIframe.contentWindow) {
|
|
4
|
-
contentIframe.contentWindow.postMessage({ type: eventType, payload: payload }, contentOrigin);
|
|
5
|
-
return {
|
|
6
|
-
success: true,
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
return {
|
|
11
|
-
success: false,
|
|
12
|
-
message: 'Failed to send event',
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
// if the events are not getting received its because you changed window to hostWindow
|
|
17
|
-
var awaitMessage = function (eventType) {
|
|
18
|
-
return new Promise(function (resolve) {
|
|
19
|
-
var handler = function (event) {
|
|
20
|
-
if (event.origin === contentOrigin) {
|
|
21
|
-
if (validateEventTypeAndPayload(eventType, event.data)) {
|
|
22
|
-
hostWindow.removeEventListener('message', handler);
|
|
23
|
-
resolve(event.data);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
hostWindow.addEventListener('message', handler);
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
return {
|
|
31
|
-
publishMessage: publishMessage,
|
|
32
|
-
awaitMessage: awaitMessage,
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
function validateEventTypeAndPayload(eventType, event) {
|
|
36
|
-
var _a, _b, _c, _d;
|
|
37
|
-
var e = event;
|
|
38
|
-
if (e.type !== eventType) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
switch (eventType) {
|
|
42
|
-
case 'READY':
|
|
43
|
-
return true;
|
|
44
|
-
case 'COMPLETE': {
|
|
45
|
-
var completeEvent = e;
|
|
46
|
-
return ((_b = (_a = completeEvent === null || completeEvent === void 0 ? void 0 : completeEvent.payload) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.paymentId) !== undefined;
|
|
47
|
-
}
|
|
48
|
-
case 'ERROR': {
|
|
49
|
-
var errorEvent = e;
|
|
50
|
-
return ((_d = (_c = errorEvent.payload) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.code) !== undefined;
|
|
51
|
-
}
|
|
52
|
-
default:
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export var FrameMessenger = { createFrameMessenger: createFrameMessenger };
|