@healnow/payments-ui 1.0.1 → 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.
- package/lib/payments/checkout.js +110 -0
- package/lib/payments.js +7 -0
- package/package.json +10 -9
- package/src/payments/checkout.js +96 -0
- package/src/payments.js +2 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _channelMessenger = _interopRequireDefault(require("@mladenilic/channel-messenger"));
|
|
9
|
+
var _lodash = _interopRequireDefault(require("lodash.merge"));
|
|
10
|
+
var _mounted, _connected, _messenger, _checkoutUrl, _errorHandler, _paymentHandler, _options, _Class_brand;
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
12
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
13
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
14
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
15
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
16
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
17
|
+
function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
|
|
18
|
+
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
|
19
|
+
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
|
20
|
+
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
|
21
|
+
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
|
22
|
+
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
|
23
|
+
var Checkout = (_mounted = /*#__PURE__*/new WeakMap(), _connected = /*#__PURE__*/new WeakMap(), _messenger = /*#__PURE__*/new WeakMap(), _checkoutUrl = /*#__PURE__*/new WeakMap(), _errorHandler = /*#__PURE__*/new WeakMap(), _paymentHandler = /*#__PURE__*/new WeakMap(), _options = /*#__PURE__*/new WeakMap(), _Class_brand = /*#__PURE__*/new WeakSet(), /*#__PURE__*/function () {
|
|
24
|
+
function Checkout() {
|
|
25
|
+
var checkoutUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
26
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
27
|
+
_classCallCheck(this, Checkout);
|
|
28
|
+
_classPrivateMethodInitSpec(this, _Class_brand);
|
|
29
|
+
_classPrivateFieldInitSpec(this, _mounted, false);
|
|
30
|
+
_classPrivateFieldInitSpec(this, _connected, false);
|
|
31
|
+
_classPrivateFieldInitSpec(this, _messenger, null);
|
|
32
|
+
_classPrivateFieldInitSpec(this, _checkoutUrl, null);
|
|
33
|
+
_classPrivateFieldInitSpec(this, _errorHandler, null);
|
|
34
|
+
_classPrivateFieldInitSpec(this, _paymentHandler, null);
|
|
35
|
+
_classPrivateFieldInitSpec(this, _options, {
|
|
36
|
+
applePay: {
|
|
37
|
+
domainName: document.location.hostname
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
_classPrivateFieldSet(_messenger, this, new _channelMessenger["default"]());
|
|
41
|
+
_classPrivateFieldSet(_checkoutUrl, this, checkoutUrl);
|
|
42
|
+
(0, _lodash["default"])(_classPrivateFieldGet(_options, this), options);
|
|
43
|
+
_classPrivateFieldGet(_messenger, this).onMessage(_assertClassBrand(_Class_brand, this, _onMessage).bind(this));
|
|
44
|
+
}
|
|
45
|
+
return _createClass(Checkout, [{
|
|
46
|
+
key: "onError",
|
|
47
|
+
value: function onError(cb) {
|
|
48
|
+
_classPrivateFieldSet(_errorHandler, this, cb);
|
|
49
|
+
}
|
|
50
|
+
}, {
|
|
51
|
+
key: "onPayment",
|
|
52
|
+
value: function onPayment(cb) {
|
|
53
|
+
_classPrivateFieldSet(_paymentHandler, this, cb);
|
|
54
|
+
}
|
|
55
|
+
}, {
|
|
56
|
+
key: "mount",
|
|
57
|
+
value: function mount(target) {
|
|
58
|
+
var _this = this;
|
|
59
|
+
if (typeof target === 'string') {
|
|
60
|
+
target = document.querySelector(target);
|
|
61
|
+
}
|
|
62
|
+
if (!target || !(target instanceof HTMLElement)) throw new Error('Invalid mount target');
|
|
63
|
+
return new Promise(function (resolve, reject) {
|
|
64
|
+
var iframe = _assertClassBrand(_Class_brand, _this, _buildIframe).call(_this);
|
|
65
|
+
target.appendChild(iframe);
|
|
66
|
+
_classPrivateFieldSet(_mounted, _this, true);
|
|
67
|
+
iframe.addEventListener('load', function () {
|
|
68
|
+
var _connect = function connect() {
|
|
69
|
+
return setTimeout(function () {
|
|
70
|
+
if (_classPrivateFieldGet(_connected, _this)) return resolve();
|
|
71
|
+
_classPrivateFieldGet(_messenger, _this).connect(iframe).then(_connect)["catch"](reject);
|
|
72
|
+
}, 1000);
|
|
73
|
+
};
|
|
74
|
+
_connect();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}]);
|
|
79
|
+
}());
|
|
80
|
+
function _buildIframe() {
|
|
81
|
+
var iframe = document.createElement('iframe');
|
|
82
|
+
iframe.hidden = false;
|
|
83
|
+
iframe.style.border = 'none';
|
|
84
|
+
iframe.style.overflow = 'hidden';
|
|
85
|
+
iframe.height = '600px';
|
|
86
|
+
iframe.src = "".concat(_classPrivateFieldGet(_checkoutUrl, this), "/embedded");
|
|
87
|
+
iframe.width = '100%';
|
|
88
|
+
iframe.allow = 'payment';
|
|
89
|
+
iframe.scrolling = 'no';
|
|
90
|
+
return iframe;
|
|
91
|
+
}
|
|
92
|
+
function _initCheckout() {
|
|
93
|
+
_classPrivateFieldGet(_messenger, this).send({
|
|
94
|
+
type: 'init',
|
|
95
|
+
options: _classPrivateFieldGet(_options, this)
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function _onMessage(message) {
|
|
99
|
+
if (message.payload.type === 'payment' && typeof _classPrivateFieldGet(_paymentHandler, this) === 'function') {
|
|
100
|
+
_classPrivateFieldGet(_paymentHandler, this).call(this, message.payload.value);
|
|
101
|
+
}
|
|
102
|
+
if (message.payload.type === 'error' && typeof _classPrivateFieldGet(_errorHandler, this) === 'function') {
|
|
103
|
+
_classPrivateFieldGet(_errorHandler, this).call(this, message.payload.value);
|
|
104
|
+
}
|
|
105
|
+
if (message.payload.type === 'connected') {
|
|
106
|
+
_classPrivateFieldSet(_connected, this, true);
|
|
107
|
+
_assertClassBrand(_Class_brand, this, _initCheckout).call(this);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
var _default = exports["default"] = Checkout;
|
package/lib/payments.js
CHANGED
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
7
|
var _card = _interopRequireDefault(require("./payments/card"));
|
|
8
|
+
var _checkout = _interopRequireDefault(require("./payments/checkout"));
|
|
8
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
9
10
|
function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
|
|
10
11
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
@@ -15,5 +16,11 @@ var _default = exports["default"] = {
|
|
|
15
16
|
args[_key] = arguments[_key];
|
|
16
17
|
}
|
|
17
18
|
return _construct(_card["default"], args);
|
|
19
|
+
},
|
|
20
|
+
checkout: function checkout() {
|
|
21
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
22
|
+
args[_key2] = arguments[_key2];
|
|
23
|
+
}
|
|
24
|
+
return _construct(_checkout["default"], args);
|
|
18
25
|
}
|
|
19
26
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@healnow/payments-ui",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/payments.js",
|
|
6
6
|
"scripts": {
|
|
@@ -16,15 +16,16 @@
|
|
|
16
16
|
"author": "Mladen Ilic <mladen@healnow.io>",
|
|
17
17
|
"license": "ISC",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@mladenilic/channel-messenger": "^1.0.1"
|
|
19
|
+
"@mladenilic/channel-messenger": "^1.0.1",
|
|
20
|
+
"lodash.merge": "^4.6.2"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
|
-
"@babel/cli": "^7.
|
|
23
|
-
"@babel/core": "^7.
|
|
24
|
-
"@babel/preset-env": "^7.
|
|
25
|
-
"babel-loader": "^
|
|
26
|
-
"webpack": "^5.
|
|
27
|
-
"webpack-cli": "^
|
|
28
|
-
"webpack-dev-server": "^5.
|
|
23
|
+
"@babel/cli": "^7.28.0",
|
|
24
|
+
"@babel/core": "^7.28.0",
|
|
25
|
+
"@babel/preset-env": "^7.28.0",
|
|
26
|
+
"babel-loader": "^10.0.0",
|
|
27
|
+
"webpack": "^5.100.2",
|
|
28
|
+
"webpack-cli": "^6.0.1",
|
|
29
|
+
"webpack-dev-server": "^5.2.2"
|
|
29
30
|
}
|
|
30
31
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import ChannelMessenger from '@mladenilic/channel-messenger';
|
|
2
|
+
import merge from 'lodash.merge'
|
|
3
|
+
|
|
4
|
+
const Checkout = class {
|
|
5
|
+
#mounted = false;
|
|
6
|
+
#connected = false;
|
|
7
|
+
#messenger = null;
|
|
8
|
+
#checkoutUrl = null;
|
|
9
|
+
#errorHandler = null;
|
|
10
|
+
#paymentHandler = null;
|
|
11
|
+
#options = {
|
|
12
|
+
applePay: {
|
|
13
|
+
domainName: document.location.hostname
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
constructor(checkoutUrl = '', options = {}) {
|
|
18
|
+
this.#messenger = new ChannelMessenger();
|
|
19
|
+
this.#checkoutUrl = checkoutUrl;
|
|
20
|
+
|
|
21
|
+
merge(this.#options, options);
|
|
22
|
+
|
|
23
|
+
this.#messenger.onMessage(this.#onMessage.bind(this));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
onError(cb) {
|
|
27
|
+
this.#errorHandler = cb;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
onPayment(cb) {
|
|
31
|
+
this.#paymentHandler = cb;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
mount(target) {
|
|
35
|
+
if (typeof target === 'string') {
|
|
36
|
+
target = document.querySelector(target);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (!target || !(target instanceof HTMLElement)) throw new Error('Invalid mount target');
|
|
40
|
+
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
const iframe = this.#buildIframe();
|
|
43
|
+
target.appendChild(iframe);
|
|
44
|
+
this.#mounted = true;
|
|
45
|
+
|
|
46
|
+
iframe.addEventListener('load', () => {
|
|
47
|
+
const connect = () => setTimeout(() => {
|
|
48
|
+
if (this.#connected) return resolve();
|
|
49
|
+
|
|
50
|
+
this.#messenger.connect(iframe)
|
|
51
|
+
.then(connect)
|
|
52
|
+
.catch(reject);
|
|
53
|
+
}, 1000)
|
|
54
|
+
|
|
55
|
+
connect()
|
|
56
|
+
});
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#buildIframe() {
|
|
61
|
+
const iframe = document.createElement('iframe');
|
|
62
|
+
|
|
63
|
+
iframe.hidden = false;
|
|
64
|
+
iframe.style.border = 'none';
|
|
65
|
+
iframe.style.overflow = 'hidden';
|
|
66
|
+
iframe.height = '600px';
|
|
67
|
+
iframe.src = `${this.#checkoutUrl}/embedded`;
|
|
68
|
+
iframe.width = '100%';
|
|
69
|
+
iframe.allow = 'payment';
|
|
70
|
+
iframe.scrolling = 'no';
|
|
71
|
+
|
|
72
|
+
return iframe;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
#initCheckout() {
|
|
76
|
+
this.#messenger.send({ type: 'init', options: this.#options })
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#onMessage(message) {
|
|
80
|
+
if (message.payload.type === 'payment' && typeof this.#paymentHandler === 'function') {
|
|
81
|
+
this.#paymentHandler(message.payload.value);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (message.payload.type === 'error' && typeof this.#errorHandler === 'function') {
|
|
85
|
+
this.#errorHandler(message.payload.value);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (message.payload.type === 'connected') {
|
|
89
|
+
this.#connected = true;
|
|
90
|
+
|
|
91
|
+
this.#initCheckout();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export default Checkout;
|