@paystack/checkout-js 1.26.0-dev.12 → 1.26.0-dev.14

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/es/checkout.js CHANGED
@@ -19762,819 +19762,842 @@ var PhoneNumber = /*#__PURE__*/function () {
19762
19762
  return PhoneNumber;
19763
19763
  }();
19764
19764
 
19765
- var MobileMoneyAPI = {
19766
- charge: function charge(_ref) {
19767
- var transaction = _ref.transaction,
19768
- phone = _ref.phone,
19769
- device = _ref.device,
19770
- channelName = _ref.channel_name,
19771
- provider = _ref.provider,
19772
- voucher = _ref.voucher,
19773
- registrationToken = _ref.registrationToken;
19774
- var params = {
19775
- transaction: transaction,
19776
- phone: phone,
19777
- device: device,
19778
- channel_name: channelName,
19779
- provider: provider,
19780
- voucher: voucher,
19781
- registration_token: registrationToken
19782
- };
19783
- var language = getLanguage();
19765
+ var isMobile_1 = isMobile;
19784
19766
 
19785
- var headers = _objectSpread2({}, language && {
19786
- 'Accept-Language': language
19787
- });
19767
+ function isMobile (ua) {
19768
+ if (!ua && typeof navigator != 'undefined') ua = navigator.userAgent;
19769
+ if (ua && ua.headers && typeof ua.headers['user-agent'] == 'string') {
19770
+ ua = ua.headers['user-agent'];
19771
+ }
19772
+ if (typeof ua != 'string') return false;
19788
19773
 
19789
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "charge/mobile_money"), params, {
19790
- headers: headers
19791
- }).then(function (response) {
19792
- return ChargeResponses.parse(response.data);
19793
- }).catch(function (_ref2) {
19794
- var response = _ref2.response;
19795
- return ChargeResponses.parse(response.data);
19796
- });
19797
- },
19798
- submitCode: function submitCode(_ref3) {
19799
- var transaction = _ref3.transaction,
19800
- code = _ref3.code;
19801
- var language = getLanguage();
19774
+ return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0,4));
19775
+ }
19802
19776
 
19803
- var headers = _objectSpread2({}, language && {
19804
- 'Accept-Language': language
19805
- });
19777
+ var AnalyticsUtils = {
19778
+ initializeLog: function initializeLog(log) {
19779
+ var _ref = log || {},
19780
+ attempts = _ref.attempts,
19781
+ authentication = _ref.authentication,
19782
+ errors = _ref.errors,
19783
+ history = _ref.history;
19806
19784
 
19807
- var urlEncodedData = formUrlencoded({
19808
- transaction: transaction,
19809
- otp: code
19810
- });
19811
- var url = new URL('charge/momo_payin_finalize', configToUse.paymentBaseUrl).toString();
19812
- return axiosInstance.post(url, urlEncodedData, {
19813
- headers: headers
19814
- }).then(function (response) {
19815
- return ChargeResponses.parse(response.data);
19816
- });
19785
+ return {
19786
+ start_time: Math.round(Date.now() / 1000),
19787
+ time_spent: 0,
19788
+ attempts: attempts || 0,
19789
+ authentication: authentication,
19790
+ errors: errors || 0,
19791
+ success: false,
19792
+ mobile: isMobile_1(),
19793
+ input: [],
19794
+ history: history || []
19795
+ };
19796
+ },
19797
+ getTimeSpent: function getTimeSpent(startTime) {
19798
+ var currentTimeInSeconds = Math.round(Date.now() / 1000);
19799
+ return currentTimeInSeconds - startTime;
19817
19800
  }
19818
19801
  };
19819
19802
 
19820
- function validate$1(phoneNumber) {
19821
- return new Promise(function (resolve, reject) {
19822
- var validation = PhoneNumber.validate(phoneNumber);
19823
-
19824
- if (!validation.isValid) {
19825
- var errorMessage = phoneNumber ? validation.errors[0] : 'Please start a mobile money transaction with Transaction.chargeMobileMoney()';
19826
- reject(Error(errorMessage));
19827
- }
19803
+ var $ = _export;
19804
+ var global$1 = global$R;
19805
+ var getBuiltIn = getBuiltIn$a;
19806
+ var apply = functionApply;
19807
+ var uncurryThis = functionUncurryThis;
19808
+ var fails = fails$t;
19828
19809
 
19829
- resolve(validation);
19830
- });
19831
- }
19810
+ var Array$1 = global$1.Array;
19811
+ var $stringify = getBuiltIn('JSON', 'stringify');
19812
+ var exec = uncurryThis(/./.exec);
19813
+ var charAt = uncurryThis(''.charAt);
19814
+ var charCodeAt = uncurryThis(''.charCodeAt);
19815
+ var replace = uncurryThis(''.replace);
19816
+ var numberToString = uncurryThis(1.0.toString);
19832
19817
 
19833
- var mobileMoney = {};
19818
+ var tester = /[\uD800-\uDFFF]/g;
19819
+ var low = /^[\uD800-\uDBFF]$/;
19820
+ var hi = /^[\uDC00-\uDFFF]$/;
19834
19821
 
19835
- function mobileMoneyChargeAPI(params) {
19836
- var _this = this;
19822
+ var fix = function (match, offset, string) {
19823
+ var prev = charAt(string, offset - 1);
19824
+ var next = charAt(string, offset + 1);
19825
+ if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {
19826
+ return '\\u' + numberToString(charCodeAt(match, 0), 16);
19827
+ } return match;
19828
+ };
19837
19829
 
19838
- return MobileMoneyAPI.charge(params).then(function (response) {
19839
- if (response.status === 'success') {
19840
- mobileMoney = response;
19830
+ var FORCED = fails(function () {
19831
+ return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
19832
+ || $stringify('\uDEAD') !== '"\\udead"';
19833
+ });
19841
19834
 
19842
- if (response.data && response.data.display && response.data.display.otpSentCount === 1) {
19843
- _this.logTokenRequest('mobile money');
19844
- }
19835
+ if ($stringify) {
19836
+ // `JSON.stringify` method
19837
+ // https://tc39.es/ecma262/#sec-json.stringify
19838
+ // https://github.com/tc39/proposal-well-formed-stringify
19839
+ $({ target: 'JSON', stat: true, forced: FORCED }, {
19840
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
19841
+ stringify: function stringify(it, replacer, space) {
19842
+ for (var i = 0, l = arguments.length, args = Array$1(l); i < l; i++) args[i] = arguments[i];
19843
+ var result = apply($stringify, null, args);
19844
+ return typeof result == 'string' ? replace(result, tester, fix) : result;
19845
19845
  }
19846
-
19847
- return response;
19848
19846
  });
19849
19847
  }
19850
19848
 
19851
- var MobileMoneyCharge = {
19852
- chargeMobileMoney: function chargeMobileMoney(_ref) {
19853
- var _this2 = this;
19854
-
19855
- var phoneNumber = _ref.phoneNumber,
19856
- provider = _ref.provider,
19857
- voucher = _ref.voucher,
19858
- registrationToken = _ref.registrationToken;
19859
- return validate$1(phoneNumber).then(function () {
19860
- _this2.logAttempt('mobile money');
19861
-
19862
- var params = {
19863
- provider: provider,
19864
- voucher: voucher,
19865
- registrationToken: registrationToken,
19866
- transaction: _this2.id,
19867
- phone: phoneNumber,
19868
- device: _this2.deviceFingerprint,
19869
- channel_name: "MOBILE_MONEY_".concat(_this2.id)
19870
- };
19871
- return mobileMoneyChargeAPI(params);
19872
- });
19873
- },
19874
- chargeMpesaOffline: function chargeMpesaOffline(_ref2) {
19875
- var provider = _ref2.provider,
19876
- voucher = _ref2.voucher,
19877
- registrationToken = _ref2.registrationToken;
19878
- this.logAttempt('mobile money');
19879
- var params = {
19880
- provider: provider,
19881
- voucher: voucher,
19882
- registrationToken: registrationToken,
19883
- transaction: this.id,
19884
- device: this.deviceFingerprint,
19885
- channel_name: "MOBILE_MONEY_".concat(this.id)
19886
- };
19887
- return mobileMoneyChargeAPI(params);
19888
- },
19889
- authenticateMobileMoney: function authenticateMobileMoney(payload) {
19890
- var _this3 = this;
19891
-
19892
- var phoneNumber = payload.phoneNumber,
19893
- provider = payload.provider,
19894
- registrationToken = payload.registrationToken;
19895
- return validate$1(phoneNumber).then(function () {
19896
- _this3.logMobileMoneyActions(payload);
19897
-
19898
- var params = {
19899
- provider: provider,
19900
- registrationToken: registrationToken,
19901
- transaction: _this3.id,
19902
- phone: phoneNumber,
19903
- device: _this3.deviceFingerprint,
19904
- channel_name: "MOBILE_MONEY_".concat(_this3.id)
19905
- };
19906
- return MobileMoneyAPI.charge(params).then(function (response) {
19907
- if (response.status === 'success') {
19908
- mobileMoney = response;
19909
-
19910
- if (response.data && response.data.display && response.data.display.otpSentCount === 1) {
19911
- _this3.logTokenRequest('mobile money');
19912
- }
19913
- } else if (response.errors && response.errors.data && response.errors.data.status === 'awaiting_registration_token') {
19914
- _this3.logTokenAuthenticationFailure(response.message);
19915
- } else {
19916
- _this3.logError(response.message);
19917
- }
19849
+ var AnalyticsAPIUtils = {
19850
+ saveLog: function saveLog(url, _ref) {
19851
+ var merchantKey = _ref.merchantKey,
19852
+ log = _ref.log;
19853
+ var language = getLanguage();
19918
19854
 
19919
- return response;
19920
- });
19855
+ var headers = _objectSpread2({
19856
+ Authorization: "Bearer ".concat(merchantKey)
19857
+ }, language && {
19858
+ 'Accept-Language': language
19921
19859
  });
19922
- },
19923
- submitMobileMoneyCode: function submitMobileMoneyCode(payload) {
19924
- var _this4 = this;
19925
19860
 
19926
- return MobileMoneyAPI.submitCode({
19927
- code: payload.code,
19928
- transaction: this.id
19861
+ return axiosInstance.post(url, {
19862
+ payload: JSON.stringify(log)
19863
+ }, {
19864
+ headers: headers
19929
19865
  }).then(function (response) {
19930
- _this4.logAPIResponse(response, 'mobile_money');
19931
-
19932
- return response;
19866
+ return response.data;
19933
19867
  });
19934
19868
  },
19935
- listenForMobileMoneyCharge: function listenForMobileMoneyCharge(callback) {
19936
- if (mobileMoney.status !== 'success') {
19937
- return Promise.reject(Error('Please start a mobile money charge with Transaction.chargeMobileMoney()'));
19938
- }
19939
-
19940
- var _mobileMoney$data = mobileMoney.data,
19941
- channel = _mobileMoney$data.channel,
19942
- channelName = _mobileMoney$data.channel_name;
19943
- var listenerOptions = {
19944
- channel: channel || channelName,
19945
- paymentMethod: 'mobile_money'
19946
- };
19947
- return this.listenForCharge(listenerOptions, callback);
19948
- }
19949
- };
19950
-
19951
- var DirectDebitAPI = {
19952
- loginToDirectDebitAccount: function loginToDirectDebitAccount(_ref) {
19953
- var email = _ref.email,
19954
- password = _ref.password;
19955
- var params = {
19956
- email: email,
19957
- password: password
19958
- };
19869
+ getIp: function getIp() {
19870
+ var url = 'https://api.paystack.co/decision/ip';
19959
19871
  var language = getLanguage();
19960
19872
 
19961
19873
  var headers = _objectSpread2({}, language && {
19962
19874
  'Accept-Language': language
19963
19875
  });
19964
19876
 
19965
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "login"), params, {
19877
+ return axiosInstance.get(url, {
19966
19878
  headers: headers
19967
19879
  }).then(function (response) {
19968
- return ChargeResponses.parse(response.data);
19880
+ return response.data.data.ip_address;
19969
19881
  });
19970
19882
  },
19971
- charge: function charge(_ref2) {
19972
- var accountCode = _ref2.account_code,
19973
- transaction = _ref2.transaction,
19974
- token = _ref2.token;
19883
+ saveIp: function saveIp(url, _ref2) {
19884
+ var merchantKey = _ref2.merchantKey;
19975
19885
  var language = getLanguage();
19976
19886
 
19977
19887
  var headers = _objectSpread2({
19978
- Authorization: "Bearer ".concat(token),
19979
- 'jwt-auth': true
19888
+ Authorization: "Bearer ".concat(merchantKey)
19980
19889
  }, language && {
19981
19890
  'Accept-Language': language
19982
19891
  });
19983
19892
 
19984
- var params = {
19985
- account_code: accountCode,
19986
- transaction: transaction
19987
- };
19988
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/initiate"), params, {
19893
+ return axiosInstance.post(url, null, {
19989
19894
  headers: headers
19990
19895
  }).then(function (response) {
19991
- return ChargeResponses.parse(response.data);
19896
+ return response.data;
19992
19897
  });
19993
19898
  },
19994
- authenticate: function authenticate(_ref3) {
19995
- var otp = _ref3.otp,
19996
- transaction = _ref3.transaction,
19997
- token = _ref3.token;
19899
+ saveReferrer: function saveReferrer(url, _ref3) {
19900
+ var merchantKey = _ref3.merchantKey,
19901
+ referrer = _ref3.referrer;
19998
19902
  var language = getLanguage();
19999
19903
 
20000
19904
  var headers = _objectSpread2({
20001
- Authorization: "Bearer ".concat(token),
20002
- 'jwt-auth': true
19905
+ Authorization: "Bearer ".concat(merchantKey)
20003
19906
  }, language && {
20004
19907
  'Accept-Language': language
20005
19908
  });
20006
19909
 
20007
- var params = {
20008
- otp: otp,
20009
- transaction: transaction
20010
- };
20011
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/validate"), params, {
19910
+ return axiosInstance.post(url, {
19911
+ referrer: referrer
19912
+ }, {
20012
19913
  headers: headers
20013
19914
  }).then(function (response) {
20014
- return ChargeResponses.parse(response.data);
19915
+ return response.data;
20015
19916
  });
20016
- },
20017
- getProvisionedAccounts: function getProvisionedAccounts(token) {
20018
- var language = getLanguage();
19917
+ }
19918
+ };
20019
19919
 
20020
- var headers = _objectSpread2({
20021
- Authorization: "Bearer ".concat(token),
20022
- 'jwt-auth': true
20023
- }, language && {
20024
- 'Accept-Language': language
19920
+ var AnalyticsAPI = {
19921
+ saveLog: function saveLog(transactionId, merchantKey, log) {
19922
+ var url = new URL("transaction/update_log/".concat(transactionId), configToUse.paystackApiUrl).toString();
19923
+ return AnalyticsAPIUtils.saveLog(url, {
19924
+ merchantKey: merchantKey,
19925
+ log: log
20025
19926
  });
20026
-
20027
- return axiosInstance.get("".concat(configToUse.paystackApiUrl, "directdebit/account"), {
20028
- headers: headers
20029
- }).then(function (response) {
20030
- return response.data;
19927
+ },
19928
+ getIp: function getIp() {
19929
+ return AnalyticsAPIUtils.getIp();
19930
+ },
19931
+ saveIp: function saveIp(transactionId, merchantKey) {
19932
+ var url = new URL("transaction/set_ip/".concat(transactionId), configToUse.paystackApiUrl).toString();
19933
+ return AnalyticsAPIUtils.saveIp(url, {
19934
+ merchantKey: merchantKey
19935
+ });
19936
+ },
19937
+ saveReferrer: function saveReferrer(transactionId, merchantKey, referrer) {
19938
+ var url = new URL("transaction/set_referrer/".concat(transactionId), configToUse.paystackApiUrl).toString();
19939
+ return AnalyticsAPIUtils.saveReferrer(url, {
19940
+ merchantKey: merchantKey,
19941
+ referrer: referrer
20031
19942
  });
20032
19943
  }
20033
19944
  };
20034
19945
 
20035
- var paymentMethod$1 = 'direct debit';
20036
- var DirectDebitCharge = {
20037
- loginToDirectDebitAccount: function loginToDirectDebitAccount(_ref) {
19946
+ var AnalyticsFunctions$1 = {
19947
+ initializeLog: function initializeLog(log) {
19948
+ this.log = AnalyticsUtils.initializeLog(log);
19949
+ },
19950
+ getTimeSpent: function getTimeSpent() {
19951
+ this.log.time_spent = AnalyticsUtils.getTimeSpent(this.log.start_time);
19952
+ return this.log.time_spent;
19953
+ },
19954
+ logPageOpen: function logPageOpen() {
19955
+ this.log.history.push({
19956
+ type: 'open',
19957
+ message: 'Opened checkout',
19958
+ time: this.getTimeSpent()
19959
+ });
19960
+ return this.saveLog();
19961
+ },
19962
+ logChannelSwitch: function logChannelSwitch(value) {
19963
+ this.log.history.push({
19964
+ type: 'action',
19965
+ message: "Set payment method to: ".concat(value),
19966
+ time: this.getTimeSpent()
19967
+ });
19968
+ return this.saveLog();
19969
+ },
19970
+ logValidationErrors: function logValidationErrors(inputs) {
20038
19971
  var _this = this;
20039
19972
 
20040
- var email = _ref.email,
20041
- password = _ref.password;
20042
- var params = {
20043
- email: email,
20044
- password: password
20045
- };
20046
-
20047
- if (!isValidEmail(email)) {
20048
- return Promise.reject(Error('Invalid email'));
20049
- }
20050
-
20051
- return DirectDebitAPI.loginToDirectDebitAccount(params).then(function (response) {
20052
- if (response.status === 'success') {
20053
- var _response$data = response.data,
20054
- token = _response$data.token,
20055
- permissions = _response$data.user.permissions;
20056
-
20057
- if (!permissions || permissions.length < 1) {
20058
- throw Error('You do not have the privileges to perform this action');
20059
- }
20060
-
20061
- if (permissions.find(function (permission) {
20062
- return permission === 'directdebit-*';
20063
- })) {
20064
- _this.directDebit.token = token;
20065
- return response;
20066
- }
20067
-
20068
- throw Error('You do not have the privileges to perform this action');
20069
- }
20070
-
20071
- return response;
19973
+ inputs.forEach(function (input) {
19974
+ _this.log.history.push({
19975
+ type: 'error',
19976
+ message: "Invalid ".concat(input),
19977
+ time: _this.getTimeSpent()
19978
+ });
20072
19979
  });
19980
+ return this.saveLog();
20073
19981
  },
20074
- chargeDirectDebit: function chargeDirectDebit(accountCode) {
20075
- var _this2 = this;
20076
-
20077
- if (!this.directDebit.token) {
20078
- return Promise.reject(Error('Please login with Transaction.loginToDirectDebitAccount() to start a Direct debit charge'));
20079
- }
20080
-
20081
- this.logAttempt(paymentMethod$1);
20082
- var params = {
20083
- account_code: accountCode,
20084
- transaction: this.id,
20085
- token: this.directDebit.token
20086
- };
20087
- return DirectDebitAPI.charge(params).then(function (response) {
20088
- _this2.logAPIResponse(response, paymentMethod$1);
20089
-
20090
- if (response.status) {
20091
- _this2.directDebit.chargeResponse = response;
20092
- }
20093
-
20094
- return response;
19982
+ logInput: function logInput(value) {
19983
+ var isUpdate = this.log.history.find(function (item) {
19984
+ return item.message === "Filled this field: ".concat(value);
19985
+ });
19986
+ this.log.history.push({
19987
+ type: 'input',
19988
+ message: "".concat(isUpdate ? 'Changed' : 'Filled', " this field: ").concat(value),
19989
+ time: this.getTimeSpent()
20095
19990
  });
19991
+ return this.saveLog();
20096
19992
  },
20097
- getProvisionedAccounts: function getProvisionedAccounts() {
20098
- var _this3 = this;
19993
+ logBankSelect: function logBankSelect(value) {
19994
+ this.log.history.push({
19995
+ type: 'action',
19996
+ message: "Selected bank: ".concat(value),
19997
+ time: this.getTimeSpent()
19998
+ });
19999
+ return this.saveLog();
20000
+ },
20001
+ logSavedCardSelect: function logSavedCardSelect() {
20002
+ this.log.history.push({
20003
+ type: 'action',
20004
+ message: 'Selected saved card',
20005
+ time: this.getTimeSpent()
20006
+ });
20007
+ return this.saveLog();
20008
+ },
20009
+ logAuthWindowOpen: function logAuthWindowOpen() {
20010
+ this.log.history.push({
20011
+ type: 'action',
20012
+ message: 'Third-party authentication window opened',
20013
+ time: this.getTimeSpent()
20014
+ });
20015
+ return this.saveLog();
20016
+ },
20017
+ logAuthWindowClose: function logAuthWindowClose() {
20018
+ this.log.history.push({
20019
+ type: 'action',
20020
+ message: 'Third-party authentication window closed',
20021
+ time: this.getTimeSpent()
20022
+ });
20023
+ return this.saveLog();
20024
+ },
20025
+ logAPIResponse: function logAPIResponse(response, channel) {
20026
+ switch (response.status) {
20027
+ case 'success':
20028
+ return this.logSuccess(channel);
20099
20029
 
20100
- return DirectDebitAPI.getProvisionedAccounts(this.directDebit.token).then(function (response) {
20101
- _this3.logAPIResponse(response, paymentMethod$1);
20030
+ case 'pending':
20031
+ return this.logPending(channel);
20102
20032
 
20103
- var status = response.status,
20104
- data = response.data;
20033
+ case 'failed':
20034
+ return this.logError(response.message);
20105
20035
 
20106
- if (status) {
20107
- if (data && data.length < 1) {
20108
- return Promise.reject(Error('You have not provisioned any bank account for Direct Debit yet'));
20109
- }
20036
+ case 'auth':
20037
+ return this.logAuth(response.data.auth);
20110
20038
 
20111
- _this3.directDebit.accounts = response.data;
20112
- }
20039
+ default:
20040
+ return false;
20041
+ }
20042
+ },
20043
+ logMobileMoneyActions: function logMobileMoneyActions(_ref) {
20044
+ var numberOfTokenRequests = _ref.numberOfTokenRequests,
20045
+ registrationToken = _ref.registrationToken;
20113
20046
 
20114
- return response;
20047
+ if (numberOfTokenRequests) {
20048
+ this.logTokenRequest('mobile money', numberOfTokenRequests);
20049
+ } else if (registrationToken) {
20050
+ this.logTokenSubmitted('mobile money');
20051
+ } else {
20052
+ this.logAttempt('mobile money');
20053
+ }
20054
+ },
20055
+ logAPIResponseMessage: function logAPIResponseMessage(message) {
20056
+ this.log.history.push({
20057
+ type: 'action',
20058
+ message: message,
20059
+ time: this.getTimeSpent()
20115
20060
  });
20061
+ return this.saveLog();
20116
20062
  },
20117
- authenticateAccount: function authenticateAccount(otp) {
20118
- var _this4 = this;
20063
+ logAttempt: function logAttempt(channel) {
20064
+ var message = 'Attempted to pay';
20119
20065
 
20120
- var params = {
20121
- otp: otp,
20122
- transaction: this.id,
20123
- token: this.directDebit.token
20124
- };
20125
- return DirectDebitAPI.authenticate(params).then(function (response) {
20126
- _this4.logAPIResponse(response, paymentMethod$1);
20066
+ if (channel) {
20067
+ message += " with ".concat(channel);
20068
+ }
20127
20069
 
20128
- return response;
20070
+ this.log.attempts += 1;
20071
+ this.log.history.push({
20072
+ type: 'action',
20073
+ message: message,
20074
+ time: this.getTimeSpent()
20129
20075
  });
20130
- }
20131
- };
20132
-
20133
- var ChargeFunctions = {
20134
- get: function get(channel) {
20135
- var chargeFunctions = {
20136
- card: CardCharge,
20137
- bank: BankAccountCharge,
20138
- ussd: USSDCharge,
20139
- qr: QRCharge,
20140
- mobile_money: MobileMoneyCharge,
20141
- direct_debit: DirectDebitCharge,
20142
- bank_transfer: PayWithTransferCharge,
20143
- eft: EFT,
20144
- payattitude: PayattitudeCharge,
20145
- apple_pay: ApplePayCharge,
20146
- paypal: PayPalCharge
20147
- };
20148
- return chargeFunctions[channel];
20149
- }
20150
- };
20151
-
20152
- var isMobile_1 = isMobile;
20153
-
20154
- function isMobile (ua) {
20155
- if (!ua && typeof navigator != 'undefined') ua = navigator.userAgent;
20156
- if (ua && ua.headers && typeof ua.headers['user-agent'] == 'string') {
20157
- ua = ua.headers['user-agent'];
20158
- }
20159
- if (typeof ua != 'string') return false;
20160
-
20161
- return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0,4));
20162
- }
20076
+ return this.saveLog();
20077
+ },
20078
+ logTokenRequest: function logTokenRequest(channel) {
20079
+ var numberOfTokenRequests = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20080
+ var message = numberOfTokenRequests === 0 ? 'Waiting for customer to submit OTP' : 'Customer requested to resend OTP';
20081
+ this.log.history.push({
20082
+ type: 'action',
20083
+ message: message,
20084
+ channel: channel,
20085
+ time: this.getTimeSpent()
20086
+ });
20087
+ return this.saveLog();
20088
+ },
20089
+ logTokenSubmitted: function logTokenSubmitted(channel) {
20090
+ var message = 'Customer submitted OTP';
20091
+ this.log.history.push({
20092
+ type: 'action',
20093
+ message: message,
20094
+ channel: channel,
20095
+ time: this.getTimeSpent()
20096
+ });
20097
+ return this.saveLog();
20098
+ },
20099
+ logTokenAuthenticationFailure: function logTokenAuthenticationFailure(error) {
20100
+ var message = error ? "Error: ".concat(error) : 'Error';
20101
+ this.log.errors += 1;
20102
+ this.log.history.push({
20103
+ type: 'error',
20104
+ message: message,
20105
+ authentication: 'failed',
20106
+ time: this.getTimeSpent()
20107
+ });
20108
+ return this.saveLog();
20109
+ },
20110
+ logError: function logError(error) {
20111
+ var message = 'Error';
20163
20112
 
20164
- var AnalyticsUtils = {
20165
- initializeLog: function initializeLog(log) {
20166
- var _ref = log || {},
20167
- attempts = _ref.attempts,
20168
- authentication = _ref.authentication,
20169
- errors = _ref.errors,
20170
- history = _ref.history;
20113
+ if (error) {
20114
+ message += ": ".concat(error);
20115
+ }
20171
20116
 
20172
- return {
20173
- start_time: Math.round(Date.now() / 1000),
20174
- time_spent: 0,
20175
- attempts: attempts || 0,
20176
- authentication: authentication,
20177
- errors: errors || 0,
20178
- success: false,
20179
- mobile: isMobile_1(),
20180
- input: [],
20181
- history: history || []
20182
- };
20117
+ this.log.errors += 1;
20118
+ this.log.history.push({
20119
+ type: 'error',
20120
+ message: message,
20121
+ time: this.getTimeSpent()
20122
+ });
20123
+ return this.saveLog();
20183
20124
  },
20184
- getTimeSpent: function getTimeSpent(startTime) {
20185
- var currentTimeInSeconds = Math.round(Date.now() / 1000);
20186
- return currentTimeInSeconds - startTime;
20187
- }
20188
- };
20125
+ logAuth: function logAuth(value) {
20126
+ this.log.authentication = value;
20127
+ this.log.history.push({
20128
+ type: 'auth',
20129
+ message: "Authentication Required: ".concat(value),
20130
+ time: this.getTimeSpent()
20131
+ });
20132
+ return this.saveLog();
20133
+ },
20134
+ logSuccess: function logSuccess(channel) {
20135
+ var message = 'Successfully paid';
20189
20136
 
20190
- var $ = _export;
20191
- var global$1 = global$R;
20192
- var getBuiltIn = getBuiltIn$a;
20193
- var apply = functionApply;
20194
- var uncurryThis = functionUncurryThis;
20195
- var fails = fails$t;
20137
+ if (channel) {
20138
+ message += " with ".concat(channel);
20139
+ }
20196
20140
 
20197
- var Array$1 = global$1.Array;
20198
- var $stringify = getBuiltIn('JSON', 'stringify');
20199
- var exec = uncurryThis(/./.exec);
20200
- var charAt = uncurryThis(''.charAt);
20201
- var charCodeAt = uncurryThis(''.charCodeAt);
20202
- var replace = uncurryThis(''.replace);
20203
- var numberToString = uncurryThis(1.0.toString);
20141
+ this.log.success = true;
20142
+ this.log.history.push({
20143
+ type: 'success',
20144
+ message: message,
20145
+ time: this.getTimeSpent()
20146
+ });
20147
+ return this.saveLog();
20148
+ },
20149
+ logPending: function logPending(channel) {
20150
+ var message = 'Payment in progress';
20204
20151
 
20205
- var tester = /[\uD800-\uDFFF]/g;
20206
- var low = /^[\uD800-\uDBFF]$/;
20207
- var hi = /^[\uDC00-\uDFFF]$/;
20152
+ if (channel) {
20153
+ message += " with ".concat(channel);
20154
+ }
20208
20155
 
20209
- var fix = function (match, offset, string) {
20210
- var prev = charAt(string, offset - 1);
20211
- var next = charAt(string, offset + 1);
20212
- if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {
20213
- return '\\u' + numberToString(charCodeAt(match, 0), 16);
20214
- } return match;
20156
+ this.log.history.push({
20157
+ type: 'pending',
20158
+ message: message,
20159
+ time: this.getTimeSpent()
20160
+ });
20161
+ return this.saveLog();
20162
+ },
20163
+ logPageClose: function logPageClose() {
20164
+ this.log.history.push({
20165
+ type: 'close',
20166
+ message: 'Closed checkout',
20167
+ time: this.getTimeSpent()
20168
+ });
20169
+ return this.saveLog();
20170
+ },
20171
+ logTransactionCurrencySwitch: function logTransactionCurrencySwitch(_ref2) {
20172
+ var currency = _ref2.currency,
20173
+ _ref2$isUserAction = _ref2.isUserAction,
20174
+ isUserAction = _ref2$isUserAction === void 0 ? true : _ref2$isUserAction;
20175
+ var prefix = isUserAction ? 'User switched' : 'Switched';
20176
+ this.log.history.push({
20177
+ type: 'action',
20178
+ message: "".concat(prefix, " transaction currency to ").concat(currency),
20179
+ time: this.getTimeSpent()
20180
+ });
20181
+ return this.saveLog();
20182
+ },
20183
+ saveLog: function saveLog() {
20184
+ return AnalyticsAPI.saveLog(this.id, this.merchant.key, this.log);
20185
+ },
20186
+ saveIpAddress: function saveIpAddress() {
20187
+ return AnalyticsAPI.saveIp(this.id, this.merchant.key);
20188
+ },
20189
+ saveReferrer: function saveReferrer(referrer) {
20190
+ return AnalyticsAPI.saveReferrer(this.id, this.merchant.key, referrer);
20191
+ }
20215
20192
  };
20216
20193
 
20217
- var FORCED = fails(function () {
20218
- return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
20219
- || $stringify('\uDEAD') !== '"\\udead"';
20220
- });
20221
-
20222
- if ($stringify) {
20223
- // `JSON.stringify` method
20224
- // https://tc39.es/ecma262/#sec-json.stringify
20225
- // https://github.com/tc39/proposal-well-formed-stringify
20226
- $({ target: 'JSON', stat: true, forced: FORCED }, {
20227
- // eslint-disable-next-line no-unused-vars -- required for `.length`
20228
- stringify: function stringify(it, replacer, space) {
20229
- for (var i = 0, l = arguments.length, args = Array$1(l); i < l; i++) args[i] = arguments[i];
20230
- var result = apply($stringify, null, args);
20231
- return typeof result == 'string' ? replace(result, tester, fix) : result;
20232
- }
20233
- });
20234
- }
20235
-
20236
- var AnalyticsAPIUtils = {
20237
- saveLog: function saveLog(url, _ref) {
20238
- var merchantKey = _ref.merchantKey,
20239
- log = _ref.log;
20194
+ var MobileMoneyAPI = {
20195
+ charge: function charge(_ref) {
20196
+ var transaction = _ref.transaction,
20197
+ phone = _ref.phone,
20198
+ device = _ref.device,
20199
+ channelName = _ref.channel_name,
20200
+ provider = _ref.provider,
20201
+ voucher = _ref.voucher,
20202
+ registrationToken = _ref.registrationToken;
20203
+ var params = {
20204
+ transaction: transaction,
20205
+ phone: phone,
20206
+ device: device,
20207
+ channel_name: channelName,
20208
+ provider: provider,
20209
+ voucher: voucher,
20210
+ registration_token: registrationToken
20211
+ };
20240
20212
  var language = getLanguage();
20241
20213
 
20242
- var headers = _objectSpread2({
20243
- Authorization: "Bearer ".concat(merchantKey)
20244
- }, language && {
20214
+ var headers = _objectSpread2({}, language && {
20245
20215
  'Accept-Language': language
20246
20216
  });
20247
20217
 
20248
- return axiosInstance.post(url, {
20249
- payload: JSON.stringify(log)
20250
- }, {
20218
+ return axiosInstance.post("".concat(configToUse.paystackApiUrl, "charge/mobile_money"), params, {
20251
20219
  headers: headers
20252
20220
  }).then(function (response) {
20253
- return response.data;
20221
+ return ChargeResponses.parse(response.data);
20222
+ }).catch(function (_ref2) {
20223
+ var response = _ref2.response;
20224
+ return ChargeResponses.parse(response.data);
20254
20225
  });
20255
20226
  },
20256
- getIp: function getIp() {
20257
- var url = 'https://api.paystack.co/decision/ip';
20227
+ submitCode: function submitCode(_ref3) {
20228
+ var transaction = _ref3.transaction,
20229
+ code = _ref3.code;
20258
20230
  var language = getLanguage();
20259
20231
 
20260
20232
  var headers = _objectSpread2({}, language && {
20261
20233
  'Accept-Language': language
20262
20234
  });
20263
20235
 
20264
- return axiosInstance.get(url, {
20236
+ var urlEncodedData = formUrlencoded({
20237
+ transaction: transaction,
20238
+ otp: code
20239
+ });
20240
+ var url = new URL('charge/momo_payin_finalize', configToUse.paymentBaseUrl).toString();
20241
+ return axiosInstance.post(url, urlEncodedData, {
20265
20242
  headers: headers
20266
20243
  }).then(function (response) {
20267
- return response.data.data.ip_address;
20244
+ return ChargeResponses.parse(response.data);
20268
20245
  });
20269
- },
20270
- saveIp: function saveIp(url, _ref2) {
20271
- var merchantKey = _ref2.merchantKey;
20272
- var language = getLanguage();
20273
-
20274
- var headers = _objectSpread2({
20275
- Authorization: "Bearer ".concat(merchantKey)
20276
- }, language && {
20246
+ }
20247
+ };
20248
+
20249
+ function validate$1(phoneNumber) {
20250
+ return new Promise(function (resolve, reject) {
20251
+ var validation = PhoneNumber.validate(phoneNumber);
20252
+
20253
+ if (!validation.isValid) {
20254
+ var errorMessage = phoneNumber ? validation.errors[0] : 'Please start a mobile money transaction with Transaction.chargeMobileMoney()';
20255
+ reject(Error(errorMessage));
20256
+ }
20257
+
20258
+ resolve(validation);
20259
+ });
20260
+ }
20261
+
20262
+ var mobileMoney = {};
20263
+
20264
+ function mobileMoneyChargeAPI(params) {
20265
+ return MobileMoneyAPI.charge(params).then( /*#__PURE__*/function () {
20266
+ var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(response) {
20267
+ return regeneratorRuntime.wrap(function _callee$(_context) {
20268
+ while (1) {
20269
+ switch (_context.prev = _context.next) {
20270
+ case 0:
20271
+ if (!(response.status === 'success')) {
20272
+ _context.next = 5;
20273
+ break;
20274
+ }
20275
+
20276
+ mobileMoney = response;
20277
+
20278
+ if (!(response.data && response.data.display && response.data.display.otpSentCount === 1)) {
20279
+ _context.next = 5;
20280
+ break;
20281
+ }
20282
+
20283
+ _context.next = 5;
20284
+ return AnalyticsFunctions$1.logTokenRequest('mobile money');
20285
+
20286
+ case 5:
20287
+ return _context.abrupt("return", response);
20288
+
20289
+ case 6:
20290
+ case "end":
20291
+ return _context.stop();
20292
+ }
20293
+ }
20294
+ }, _callee);
20295
+ }));
20296
+
20297
+ return function (_x) {
20298
+ return _ref.apply(this, arguments);
20299
+ };
20300
+ }());
20301
+ }
20302
+
20303
+ var MobileMoneyCharge = {
20304
+ chargeMobileMoney: function chargeMobileMoney(_ref2) {
20305
+ var _this = this;
20306
+
20307
+ var phoneNumber = _ref2.phoneNumber,
20308
+ provider = _ref2.provider,
20309
+ voucher = _ref2.voucher,
20310
+ registrationToken = _ref2.registrationToken;
20311
+ return validate$1(phoneNumber).then(function () {
20312
+ _this.logAttempt('mobile money');
20313
+
20314
+ var params = {
20315
+ provider: provider,
20316
+ voucher: voucher,
20317
+ registrationToken: registrationToken,
20318
+ transaction: _this.id,
20319
+ phone: phoneNumber,
20320
+ device: _this.deviceFingerprint,
20321
+ channel_name: "MOBILE_MONEY_".concat(_this.id)
20322
+ };
20323
+ return mobileMoneyChargeAPI(params);
20324
+ });
20325
+ },
20326
+ chargeMpesaOffline: function chargeMpesaOffline(_ref3) {
20327
+ var provider = _ref3.provider,
20328
+ voucher = _ref3.voucher,
20329
+ registrationToken = _ref3.registrationToken;
20330
+ this.logAttempt('mobile money');
20331
+ var params = {
20332
+ provider: provider,
20333
+ voucher: voucher,
20334
+ registrationToken: registrationToken,
20335
+ transaction: this.id,
20336
+ device: this.deviceFingerprint,
20337
+ channel_name: "MOBILE_MONEY_".concat(this.id)
20338
+ };
20339
+ return mobileMoneyChargeAPI(params);
20340
+ },
20341
+ authenticateMobileMoney: function authenticateMobileMoney(payload) {
20342
+ var _this2 = this;
20343
+
20344
+ var phoneNumber = payload.phoneNumber,
20345
+ provider = payload.provider,
20346
+ registrationToken = payload.registrationToken;
20347
+ return validate$1(phoneNumber).then(function () {
20348
+ _this2.logMobileMoneyActions(payload);
20349
+
20350
+ var params = {
20351
+ provider: provider,
20352
+ registrationToken: registrationToken,
20353
+ transaction: _this2.id,
20354
+ phone: phoneNumber,
20355
+ device: _this2.deviceFingerprint,
20356
+ channel_name: "MOBILE_MONEY_".concat(_this2.id)
20357
+ };
20358
+ return MobileMoneyAPI.charge(params).then(function (response) {
20359
+ if (response.status === 'success') {
20360
+ mobileMoney = response;
20361
+
20362
+ if (response.data && response.data.display && response.data.display.otpSentCount === 1) {
20363
+ _this2.logTokenRequest('mobile money');
20364
+ }
20365
+ } else if (response.errors && response.errors.data && response.errors.data.status === 'awaiting_registration_token') {
20366
+ _this2.logTokenAuthenticationFailure(response.message);
20367
+ } else {
20368
+ _this2.logError(response.message);
20369
+ }
20370
+
20371
+ return response;
20372
+ });
20373
+ });
20374
+ },
20375
+ submitMobileMoneyCode: function submitMobileMoneyCode(payload) {
20376
+ var _this3 = this;
20377
+
20378
+ return MobileMoneyAPI.submitCode({
20379
+ code: payload.code,
20380
+ transaction: this.id
20381
+ }).then(function (response) {
20382
+ _this3.logAPIResponse(response, 'mobile_money');
20383
+
20384
+ return response;
20385
+ });
20386
+ },
20387
+ listenForMobileMoneyCharge: function listenForMobileMoneyCharge(callback) {
20388
+ if (mobileMoney.status !== 'success') {
20389
+ return Promise.reject(Error('Please start a mobile money charge with Transaction.chargeMobileMoney()'));
20390
+ }
20391
+
20392
+ var _mobileMoney$data = mobileMoney.data,
20393
+ channel = _mobileMoney$data.channel,
20394
+ channelName = _mobileMoney$data.channel_name;
20395
+ var listenerOptions = {
20396
+ channel: channel || channelName,
20397
+ paymentMethod: 'mobile_money'
20398
+ };
20399
+ return this.listenForCharge(listenerOptions, callback);
20400
+ }
20401
+ };
20402
+
20403
+ var DirectDebitAPI = {
20404
+ loginToDirectDebitAccount: function loginToDirectDebitAccount(_ref) {
20405
+ var email = _ref.email,
20406
+ password = _ref.password;
20407
+ var params = {
20408
+ email: email,
20409
+ password: password
20410
+ };
20411
+ var language = getLanguage();
20412
+
20413
+ var headers = _objectSpread2({}, language && {
20277
20414
  'Accept-Language': language
20278
20415
  });
20279
20416
 
20280
- return axiosInstance.post(url, null, {
20417
+ return axiosInstance.post("".concat(configToUse.paystackApiUrl, "login"), params, {
20281
20418
  headers: headers
20282
20419
  }).then(function (response) {
20283
- return response.data;
20420
+ return ChargeResponses.parse(response.data);
20284
20421
  });
20285
20422
  },
20286
- saveReferrer: function saveReferrer(url, _ref3) {
20287
- var merchantKey = _ref3.merchantKey,
20288
- referrer = _ref3.referrer;
20423
+ charge: function charge(_ref2) {
20424
+ var accountCode = _ref2.account_code,
20425
+ transaction = _ref2.transaction,
20426
+ token = _ref2.token;
20289
20427
  var language = getLanguage();
20290
20428
 
20291
20429
  var headers = _objectSpread2({
20292
- Authorization: "Bearer ".concat(merchantKey)
20430
+ Authorization: "Bearer ".concat(token),
20431
+ 'jwt-auth': true
20293
20432
  }, language && {
20294
20433
  'Accept-Language': language
20295
20434
  });
20296
20435
 
20297
- return axiosInstance.post(url, {
20298
- referrer: referrer
20299
- }, {
20436
+ var params = {
20437
+ account_code: accountCode,
20438
+ transaction: transaction
20439
+ };
20440
+ return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/initiate"), params, {
20300
20441
  headers: headers
20301
20442
  }).then(function (response) {
20302
- return response.data;
20443
+ return ChargeResponses.parse(response.data);
20303
20444
  });
20304
- }
20305
- };
20445
+ },
20446
+ authenticate: function authenticate(_ref3) {
20447
+ var otp = _ref3.otp,
20448
+ transaction = _ref3.transaction,
20449
+ token = _ref3.token;
20450
+ var language = getLanguage();
20306
20451
 
20307
- var AnalyticsAPI = {
20308
- saveLog: function saveLog(transactionId, merchantKey, log) {
20309
- var url = new URL("transaction/update_log/".concat(transactionId), configToUse.paystackApiUrl).toString();
20310
- return AnalyticsAPIUtils.saveLog(url, {
20311
- merchantKey: merchantKey,
20312
- log: log
20452
+ var headers = _objectSpread2({
20453
+ Authorization: "Bearer ".concat(token),
20454
+ 'jwt-auth': true
20455
+ }, language && {
20456
+ 'Accept-Language': language
20313
20457
  });
20314
- },
20315
- getIp: function getIp() {
20316
- return AnalyticsAPIUtils.getIp();
20317
- },
20318
- saveIp: function saveIp(transactionId, merchantKey) {
20319
- var url = new URL("transaction/set_ip/".concat(transactionId), configToUse.paystackApiUrl).toString();
20320
- return AnalyticsAPIUtils.saveIp(url, {
20321
- merchantKey: merchantKey
20458
+
20459
+ var params = {
20460
+ otp: otp,
20461
+ transaction: transaction
20462
+ };
20463
+ return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/validate"), params, {
20464
+ headers: headers
20465
+ }).then(function (response) {
20466
+ return ChargeResponses.parse(response.data);
20322
20467
  });
20323
20468
  },
20324
- saveReferrer: function saveReferrer(transactionId, merchantKey, referrer) {
20325
- var url = new URL("transaction/set_referrer/".concat(transactionId), configToUse.paystackApiUrl).toString();
20326
- return AnalyticsAPIUtils.saveReferrer(url, {
20327
- merchantKey: merchantKey,
20328
- referrer: referrer
20469
+ getProvisionedAccounts: function getProvisionedAccounts(token) {
20470
+ var language = getLanguage();
20471
+
20472
+ var headers = _objectSpread2({
20473
+ Authorization: "Bearer ".concat(token),
20474
+ 'jwt-auth': true
20475
+ }, language && {
20476
+ 'Accept-Language': language
20477
+ });
20478
+
20479
+ return axiosInstance.get("".concat(configToUse.paystackApiUrl, "directdebit/account"), {
20480
+ headers: headers
20481
+ }).then(function (response) {
20482
+ return response.data;
20329
20483
  });
20330
20484
  }
20331
20485
  };
20332
20486
 
20333
- var AnalyticsFunctions$1 = {
20334
- initializeLog: function initializeLog(log) {
20335
- this.log = AnalyticsUtils.initializeLog(log);
20336
- },
20337
- getTimeSpent: function getTimeSpent() {
20338
- this.log.time_spent = AnalyticsUtils.getTimeSpent(this.log.start_time);
20339
- return this.log.time_spent;
20340
- },
20341
- logPageOpen: function logPageOpen() {
20342
- this.log.history.push({
20343
- type: 'open',
20344
- message: 'Opened checkout',
20345
- time: this.getTimeSpent()
20346
- });
20347
- return this.saveLog();
20348
- },
20349
- logChannelSwitch: function logChannelSwitch(value) {
20350
- this.log.history.push({
20351
- type: 'action',
20352
- message: "Set payment method to: ".concat(value),
20353
- time: this.getTimeSpent()
20354
- });
20355
- return this.saveLog();
20356
- },
20357
- logValidationErrors: function logValidationErrors(inputs) {
20487
+ var paymentMethod$1 = 'direct debit';
20488
+ var DirectDebitCharge = {
20489
+ loginToDirectDebitAccount: function loginToDirectDebitAccount(_ref) {
20358
20490
  var _this = this;
20359
20491
 
20360
- inputs.forEach(function (input) {
20361
- _this.log.history.push({
20362
- type: 'error',
20363
- message: "Invalid ".concat(input),
20364
- time: _this.getTimeSpent()
20365
- });
20366
- });
20367
- return this.saveLog();
20368
- },
20369
- logInput: function logInput(value) {
20370
- var isUpdate = this.log.history.find(function (item) {
20371
- return item.message === "Filled this field: ".concat(value);
20372
- });
20373
- this.log.history.push({
20374
- type: 'input',
20375
- message: "".concat(isUpdate ? 'Changed' : 'Filled', " this field: ").concat(value),
20376
- time: this.getTimeSpent()
20377
- });
20378
- return this.saveLog();
20379
- },
20380
- logBankSelect: function logBankSelect(value) {
20381
- this.log.history.push({
20382
- type: 'action',
20383
- message: "Selected bank: ".concat(value),
20384
- time: this.getTimeSpent()
20385
- });
20386
- return this.saveLog();
20387
- },
20388
- logSavedCardSelect: function logSavedCardSelect() {
20389
- this.log.history.push({
20390
- type: 'action',
20391
- message: 'Selected saved card',
20392
- time: this.getTimeSpent()
20393
- });
20394
- return this.saveLog();
20395
- },
20396
- logAuthWindowOpen: function logAuthWindowOpen() {
20397
- this.log.history.push({
20398
- type: 'action',
20399
- message: 'Third-party authentication window opened',
20400
- time: this.getTimeSpent()
20401
- });
20402
- return this.saveLog();
20403
- },
20404
- logAuthWindowClose: function logAuthWindowClose() {
20405
- this.log.history.push({
20406
- type: 'action',
20407
- message: 'Third-party authentication window closed',
20408
- time: this.getTimeSpent()
20409
- });
20410
- return this.saveLog();
20411
- },
20412
- logAPIResponse: function logAPIResponse(response, channel) {
20413
- switch (response.status) {
20414
- case 'success':
20415
- return this.logSuccess(channel);
20492
+ var email = _ref.email,
20493
+ password = _ref.password;
20494
+ var params = {
20495
+ email: email,
20496
+ password: password
20497
+ };
20416
20498
 
20417
- case 'pending':
20418
- return this.logPending(channel);
20499
+ if (!isValidEmail(email)) {
20500
+ return Promise.reject(Error('Invalid email'));
20501
+ }
20419
20502
 
20420
- case 'failed':
20421
- return this.logError(response.message);
20503
+ return DirectDebitAPI.loginToDirectDebitAccount(params).then(function (response) {
20504
+ if (response.status === 'success') {
20505
+ var _response$data = response.data,
20506
+ token = _response$data.token,
20507
+ permissions = _response$data.user.permissions;
20422
20508
 
20423
- case 'auth':
20424
- return this.logAuth(response.data.auth);
20509
+ if (!permissions || permissions.length < 1) {
20510
+ throw Error('You do not have the privileges to perform this action');
20511
+ }
20425
20512
 
20426
- default:
20427
- return false;
20428
- }
20429
- },
20430
- logMobileMoneyActions: function logMobileMoneyActions(_ref) {
20431
- var numberOfTokenRequests = _ref.numberOfTokenRequests,
20432
- registrationToken = _ref.registrationToken;
20513
+ if (permissions.find(function (permission) {
20514
+ return permission === 'directdebit-*';
20515
+ })) {
20516
+ _this.directDebit.token = token;
20517
+ return response;
20518
+ }
20433
20519
 
20434
- if (numberOfTokenRequests) {
20435
- this.logTokenRequest('mobile money', numberOfTokenRequests);
20436
- } else if (registrationToken) {
20437
- this.logTokenSubmitted('mobile money');
20438
- } else {
20439
- this.logAttempt('mobile money');
20440
- }
20441
- },
20442
- logAPIResponseMessage: function logAPIResponseMessage(message) {
20443
- this.log.history.push({
20444
- type: 'action',
20445
- message: message,
20446
- time: this.getTimeSpent()
20520
+ throw Error('You do not have the privileges to perform this action');
20521
+ }
20522
+
20523
+ return response;
20447
20524
  });
20448
- return this.saveLog();
20449
20525
  },
20450
- logAttempt: function logAttempt(channel) {
20451
- var message = 'Attempted to pay';
20526
+ chargeDirectDebit: function chargeDirectDebit(accountCode) {
20527
+ var _this2 = this;
20452
20528
 
20453
- if (channel) {
20454
- message += " with ".concat(channel);
20529
+ if (!this.directDebit.token) {
20530
+ return Promise.reject(Error('Please login with Transaction.loginToDirectDebitAccount() to start a Direct debit charge'));
20455
20531
  }
20456
20532
 
20457
- this.log.attempts += 1;
20458
- this.log.history.push({
20459
- type: 'action',
20460
- message: message,
20461
- time: this.getTimeSpent()
20462
- });
20463
- return this.saveLog();
20464
- },
20465
- logTokenRequest: function logTokenRequest(channel) {
20466
- var numberOfTokenRequests = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20467
- var message = numberOfTokenRequests === 0 ? 'Waiting for customer to submit OTP' : 'Customer requested to resend OTP';
20468
- this.log.history.push({
20469
- type: 'action',
20470
- message: message,
20471
- channel: channel,
20472
- time: this.getTimeSpent()
20473
- });
20474
- return this.saveLog();
20475
- },
20476
- logTokenSubmitted: function logTokenSubmitted(channel) {
20477
- var message = 'Customer submitted OTP';
20478
- this.log.history.push({
20479
- type: 'action',
20480
- message: message,
20481
- channel: channel,
20482
- time: this.getTimeSpent()
20483
- });
20484
- return this.saveLog();
20485
- },
20486
- logTokenAuthenticationFailure: function logTokenAuthenticationFailure(error) {
20487
- var message = error ? "Error: ".concat(error) : 'Error';
20488
- this.log.errors += 1;
20489
- this.log.history.push({
20490
- type: 'error',
20491
- message: message,
20492
- authentication: 'failed',
20493
- time: this.getTimeSpent()
20494
- });
20495
- return this.saveLog();
20496
- },
20497
- logError: function logError(error) {
20498
- var message = 'Error';
20533
+ this.logAttempt(paymentMethod$1);
20534
+ var params = {
20535
+ account_code: accountCode,
20536
+ transaction: this.id,
20537
+ token: this.directDebit.token
20538
+ };
20539
+ return DirectDebitAPI.charge(params).then(function (response) {
20540
+ _this2.logAPIResponse(response, paymentMethod$1);
20499
20541
 
20500
- if (error) {
20501
- message += ": ".concat(error);
20502
- }
20542
+ if (response.status) {
20543
+ _this2.directDebit.chargeResponse = response;
20544
+ }
20503
20545
 
20504
- this.log.errors += 1;
20505
- this.log.history.push({
20506
- type: 'error',
20507
- message: message,
20508
- time: this.getTimeSpent()
20509
- });
20510
- return this.saveLog();
20511
- },
20512
- logAuth: function logAuth(value) {
20513
- this.log.authentication = value;
20514
- this.log.history.push({
20515
- type: 'auth',
20516
- message: "Authentication Required: ".concat(value),
20517
- time: this.getTimeSpent()
20546
+ return response;
20518
20547
  });
20519
- return this.saveLog();
20520
20548
  },
20521
- logSuccess: function logSuccess(channel) {
20522
- var message = 'Successfully paid';
20549
+ getProvisionedAccounts: function getProvisionedAccounts() {
20550
+ var _this3 = this;
20523
20551
 
20524
- if (channel) {
20525
- message += " with ".concat(channel);
20526
- }
20552
+ return DirectDebitAPI.getProvisionedAccounts(this.directDebit.token).then(function (response) {
20553
+ _this3.logAPIResponse(response, paymentMethod$1);
20527
20554
 
20528
- this.log.success = true;
20529
- this.log.history.push({
20530
- type: 'success',
20531
- message: message,
20532
- time: this.getTimeSpent()
20533
- });
20534
- return this.saveLog();
20535
- },
20536
- logPending: function logPending(channel) {
20537
- var message = 'Payment in progress';
20555
+ var status = response.status,
20556
+ data = response.data;
20538
20557
 
20539
- if (channel) {
20540
- message += " with ".concat(channel);
20541
- }
20558
+ if (status) {
20559
+ if (data && data.length < 1) {
20560
+ return Promise.reject(Error('You have not provisioned any bank account for Direct Debit yet'));
20561
+ }
20542
20562
 
20543
- this.log.history.push({
20544
- type: 'pending',
20545
- message: message,
20546
- time: this.getTimeSpent()
20547
- });
20548
- return this.saveLog();
20549
- },
20550
- logPageClose: function logPageClose() {
20551
- this.log.history.push({
20552
- type: 'close',
20553
- message: 'Closed checkout',
20554
- time: this.getTimeSpent()
20563
+ _this3.directDebit.accounts = response.data;
20564
+ }
20565
+
20566
+ return response;
20555
20567
  });
20556
- return this.saveLog();
20557
20568
  },
20558
- logTransactionCurrencySwitch: function logTransactionCurrencySwitch(_ref2) {
20559
- var currency = _ref2.currency,
20560
- _ref2$isUserAction = _ref2.isUserAction,
20561
- isUserAction = _ref2$isUserAction === void 0 ? true : _ref2$isUserAction;
20562
- var prefix = isUserAction ? 'User switched' : 'Switched';
20563
- this.log.history.push({
20564
- type: 'action',
20565
- message: "".concat(prefix, " transaction currency to ").concat(currency),
20566
- time: this.getTimeSpent()
20569
+ authenticateAccount: function authenticateAccount(otp) {
20570
+ var _this4 = this;
20571
+
20572
+ var params = {
20573
+ otp: otp,
20574
+ transaction: this.id,
20575
+ token: this.directDebit.token
20576
+ };
20577
+ return DirectDebitAPI.authenticate(params).then(function (response) {
20578
+ _this4.logAPIResponse(response, paymentMethod$1);
20579
+
20580
+ return response;
20567
20581
  });
20568
- return this.saveLog();
20569
- },
20570
- saveLog: function saveLog() {
20571
- return AnalyticsAPI.saveLog(this.id, this.merchant.key, this.log);
20572
- },
20573
- saveIpAddress: function saveIpAddress() {
20574
- return AnalyticsAPI.saveIp(this.id, this.merchant.key);
20575
- },
20576
- saveReferrer: function saveReferrer(referrer) {
20577
- return AnalyticsAPI.saveReferrer(this.id, this.merchant.key, referrer);
20582
+ }
20583
+ };
20584
+
20585
+ var ChargeFunctions = {
20586
+ get: function get(channel) {
20587
+ var chargeFunctions = {
20588
+ card: CardCharge,
20589
+ bank: BankAccountCharge,
20590
+ ussd: USSDCharge,
20591
+ qr: QRCharge,
20592
+ mobile_money: MobileMoneyCharge,
20593
+ direct_debit: DirectDebitCharge,
20594
+ bank_transfer: PayWithTransferCharge,
20595
+ eft: EFT,
20596
+ payattitude: PayattitudeCharge,
20597
+ apple_pay: ApplePayCharge,
20598
+ paypal: PayPalCharge
20599
+ };
20600
+ return chargeFunctions[channel];
20578
20601
  }
20579
20602
  };
20580
20603