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

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,721 +19762,538 @@ var PhoneNumber = /*#__PURE__*/function () {
19762
19762
  return PhoneNumber;
19763
19763
  }();
19764
19764
 
19765
- var isMobile_1 = isMobile;
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();
19766
19784
 
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;
19785
+ var headers = _objectSpread2({}, language && {
19786
+ 'Accept-Language': language
19787
+ });
19773
19788
 
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
- }
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();
19776
19802
 
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;
19803
+ var headers = _objectSpread2({}, language && {
19804
+ 'Accept-Language': language
19805
+ });
19784
19806
 
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;
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
+ });
19800
19817
  }
19801
19818
  };
19802
19819
 
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;
19820
+ function validate$1(phoneNumber) {
19821
+ return new Promise(function (resolve, reject) {
19822
+ var validation = PhoneNumber.validate(phoneNumber);
19809
19823
 
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);
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
+ }
19817
19828
 
19818
- var tester = /[\uD800-\uDFFF]/g;
19819
- var low = /^[\uD800-\uDBFF]$/;
19820
- var hi = /^[\uDC00-\uDFFF]$/;
19829
+ resolve(validation);
19830
+ });
19831
+ }
19821
19832
 
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
- };
19833
+ var MobileMoneyCharge = {
19834
+ mobileMoneyChargeAPI: function mobileMoneyChargeAPI(params) {
19835
+ var _this = this;
19829
19836
 
19830
- var FORCED = fails(function () {
19831
- return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
19832
- || $stringify('\uDEAD') !== '"\\udead"';
19833
- });
19837
+ return MobileMoneyAPI.charge(params).then(function (response) {
19838
+ if (response.status === 'success') {
19839
+ _this.mobileMoney = response;
19834
19840
 
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
- }
19846
- });
19847
- }
19841
+ if (response.data && response.data.display && response.data.display.otpSentCount === 1) {
19842
+ _this.logTokenRequest('mobile money');
19843
+ }
19844
+ }
19848
19845
 
19849
- var AnalyticsAPIUtils = {
19850
- saveLog: function saveLog(url, _ref) {
19851
- var merchantKey = _ref.merchantKey,
19852
- log = _ref.log;
19853
- var language = getLanguage();
19846
+ return response;
19847
+ });
19848
+ },
19849
+ chargeMobileMoney: function chargeMobileMoney(_ref) {
19850
+ var _this2 = this;
19854
19851
 
19855
- var headers = _objectSpread2({
19856
- Authorization: "Bearer ".concat(merchantKey)
19857
- }, language && {
19858
- 'Accept-Language': language
19852
+ var phoneNumber = _ref.phoneNumber,
19853
+ provider = _ref.provider,
19854
+ voucher = _ref.voucher,
19855
+ registrationToken = _ref.registrationToken;
19856
+ return validate$1(phoneNumber).then(function () {
19857
+ _this2.logAttempt('mobile money');
19858
+
19859
+ var params = {
19860
+ provider: provider,
19861
+ voucher: voucher,
19862
+ registrationToken: registrationToken,
19863
+ transaction: _this2.id,
19864
+ phone: phoneNumber,
19865
+ device: _this2.deviceFingerprint,
19866
+ channel_name: "MOBILE_MONEY_".concat(_this2.id)
19867
+ };
19868
+ return _this2.mobileMoneyChargeAPI(params);
19859
19869
  });
19870
+ },
19871
+ chargeMpesaOffline: function chargeMpesaOffline(_ref2) {
19872
+ var provider = _ref2.provider,
19873
+ voucher = _ref2.voucher,
19874
+ registrationToken = _ref2.registrationToken;
19875
+ this.logAttempt('mobile money');
19876
+ var params = {
19877
+ provider: provider,
19878
+ voucher: voucher,
19879
+ registrationToken: registrationToken,
19880
+ transaction: this.id,
19881
+ device: this.deviceFingerprint,
19882
+ channel_name: "MOBILE_MONEY_".concat(this.id)
19883
+ };
19884
+ return this.mobileMoneyChargeAPI(params);
19885
+ },
19886
+ authenticateMobileMoney: function authenticateMobileMoney(payload) {
19887
+ var _this3 = this;
19860
19888
 
19861
- return axiosInstance.post(url, {
19862
- payload: JSON.stringify(log)
19863
- }, {
19864
- headers: headers
19889
+ var phoneNumber = payload.phoneNumber,
19890
+ provider = payload.provider,
19891
+ registrationToken = payload.registrationToken;
19892
+ return validate$1(phoneNumber).then(function () {
19893
+ _this3.logMobileMoneyActions(payload);
19894
+
19895
+ var params = {
19896
+ provider: provider,
19897
+ registrationToken: registrationToken,
19898
+ transaction: _this3.id,
19899
+ phone: phoneNumber,
19900
+ device: _this3.deviceFingerprint,
19901
+ channel_name: "MOBILE_MONEY_".concat(_this3.id)
19902
+ };
19903
+ return MobileMoneyAPI.charge(params).then(function (response) {
19904
+ if (response.status === 'success') {
19905
+ _this3.mobileMoney = response;
19906
+
19907
+ if (response.data && response.data.display && response.data.display.otpSentCount === 1) {
19908
+ _this3.logTokenRequest('mobile money');
19909
+ }
19910
+ } else if (response.errors && response.errors.data && response.errors.data.status === 'awaiting_registration_token') {
19911
+ _this3.logTokenAuthenticationFailure(response.message);
19912
+ } else {
19913
+ _this3.logError(response.message);
19914
+ }
19915
+
19916
+ return response;
19917
+ });
19918
+ });
19919
+ },
19920
+ submitMobileMoneyCode: function submitMobileMoneyCode(payload) {
19921
+ var _this4 = this;
19922
+
19923
+ return MobileMoneyAPI.submitCode({
19924
+ code: payload.code,
19925
+ transaction: this.id
19865
19926
  }).then(function (response) {
19866
- return response.data;
19927
+ _this4.logAPIResponse(response, 'mobile_money');
19928
+
19929
+ return response;
19867
19930
  });
19868
19931
  },
19869
- getIp: function getIp() {
19870
- var url = 'https://api.paystack.co/decision/ip';
19932
+ listenForMobileMoneyCharge: function listenForMobileMoneyCharge(callback) {
19933
+ if (this.mobileMoney.status !== 'success') {
19934
+ return Promise.reject(Error('Please start a mobile money charge with Transaction.chargeMobileMoney()'));
19935
+ }
19936
+
19937
+ var _this$mobileMoney$dat = this.mobileMoney.data,
19938
+ channel = _this$mobileMoney$dat.channel,
19939
+ channelName = _this$mobileMoney$dat.channel_name;
19940
+ var listenerOptions = {
19941
+ channel: channel || channelName,
19942
+ paymentMethod: 'mobile_money'
19943
+ };
19944
+ return this.listenForCharge(listenerOptions, callback);
19945
+ }
19946
+ };
19947
+
19948
+ var DirectDebitAPI = {
19949
+ loginToDirectDebitAccount: function loginToDirectDebitAccount(_ref) {
19950
+ var email = _ref.email,
19951
+ password = _ref.password;
19952
+ var params = {
19953
+ email: email,
19954
+ password: password
19955
+ };
19871
19956
  var language = getLanguage();
19872
19957
 
19873
19958
  var headers = _objectSpread2({}, language && {
19874
19959
  'Accept-Language': language
19875
19960
  });
19876
19961
 
19877
- return axiosInstance.get(url, {
19962
+ return axiosInstance.post("".concat(configToUse.paystackApiUrl, "login"), params, {
19878
19963
  headers: headers
19879
19964
  }).then(function (response) {
19880
- return response.data.data.ip_address;
19965
+ return ChargeResponses.parse(response.data);
19881
19966
  });
19882
19967
  },
19883
- saveIp: function saveIp(url, _ref2) {
19884
- var merchantKey = _ref2.merchantKey;
19968
+ charge: function charge(_ref2) {
19969
+ var accountCode = _ref2.account_code,
19970
+ transaction = _ref2.transaction,
19971
+ token = _ref2.token;
19885
19972
  var language = getLanguage();
19886
19973
 
19887
19974
  var headers = _objectSpread2({
19888
- Authorization: "Bearer ".concat(merchantKey)
19975
+ Authorization: "Bearer ".concat(token),
19976
+ 'jwt-auth': true
19889
19977
  }, language && {
19890
19978
  'Accept-Language': language
19891
19979
  });
19892
19980
 
19893
- return axiosInstance.post(url, null, {
19981
+ var params = {
19982
+ account_code: accountCode,
19983
+ transaction: transaction
19984
+ };
19985
+ return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/initiate"), params, {
19894
19986
  headers: headers
19895
19987
  }).then(function (response) {
19896
- return response.data;
19988
+ return ChargeResponses.parse(response.data);
19897
19989
  });
19898
19990
  },
19899
- saveReferrer: function saveReferrer(url, _ref3) {
19900
- var merchantKey = _ref3.merchantKey,
19901
- referrer = _ref3.referrer;
19991
+ authenticate: function authenticate(_ref3) {
19992
+ var otp = _ref3.otp,
19993
+ transaction = _ref3.transaction,
19994
+ token = _ref3.token;
19902
19995
  var language = getLanguage();
19903
19996
 
19904
19997
  var headers = _objectSpread2({
19905
- Authorization: "Bearer ".concat(merchantKey)
19998
+ Authorization: "Bearer ".concat(token),
19999
+ 'jwt-auth': true
19906
20000
  }, language && {
19907
20001
  'Accept-Language': language
19908
20002
  });
19909
20003
 
19910
- return axiosInstance.post(url, {
19911
- referrer: referrer
19912
- }, {
20004
+ var params = {
20005
+ otp: otp,
20006
+ transaction: transaction
20007
+ };
20008
+ return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/validate"), params, {
19913
20009
  headers: headers
19914
20010
  }).then(function (response) {
19915
- return response.data;
19916
- });
19917
- }
19918
- };
19919
-
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
20011
+ return ChargeResponses.parse(response.data);
19926
20012
  });
19927
20013
  },
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
20014
+ getProvisionedAccounts: function getProvisionedAccounts(token) {
20015
+ var language = getLanguage();
20016
+
20017
+ var headers = _objectSpread2({
20018
+ Authorization: "Bearer ".concat(token),
20019
+ 'jwt-auth': true
20020
+ }, language && {
20021
+ 'Accept-Language': language
19935
20022
  });
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
20023
+
20024
+ return axiosInstance.get("".concat(configToUse.paystackApiUrl, "directdebit/account"), {
20025
+ headers: headers
20026
+ }).then(function (response) {
20027
+ return response.data;
19942
20028
  });
19943
20029
  }
19944
20030
  };
19945
20031
 
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) {
20032
+ var paymentMethod$1 = 'direct debit';
20033
+ var DirectDebitCharge = {
20034
+ loginToDirectDebitAccount: function loginToDirectDebitAccount(_ref) {
19971
20035
  var _this = this;
19972
20036
 
19973
- inputs.forEach(function (input) {
19974
- _this.log.history.push({
19975
- type: 'error',
19976
- message: "Invalid ".concat(input),
19977
- time: _this.getTimeSpent()
19978
- });
19979
- });
19980
- return this.saveLog();
19981
- },
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()
19990
- });
19991
- return this.saveLog();
19992
- },
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);
20037
+ var email = _ref.email,
20038
+ password = _ref.password;
20039
+ var params = {
20040
+ email: email,
20041
+ password: password
20042
+ };
20029
20043
 
20030
- case 'pending':
20031
- return this.logPending(channel);
20044
+ if (!isValidEmail(email)) {
20045
+ return Promise.reject(Error('Invalid email'));
20046
+ }
20032
20047
 
20033
- case 'failed':
20034
- return this.logError(response.message);
20048
+ return DirectDebitAPI.loginToDirectDebitAccount(params).then(function (response) {
20049
+ if (response.status === 'success') {
20050
+ var _response$data = response.data,
20051
+ token = _response$data.token,
20052
+ permissions = _response$data.user.permissions;
20035
20053
 
20036
- case 'auth':
20037
- return this.logAuth(response.data.auth);
20054
+ if (!permissions || permissions.length < 1) {
20055
+ throw Error('You do not have the privileges to perform this action');
20056
+ }
20038
20057
 
20039
- default:
20040
- return false;
20041
- }
20042
- },
20043
- logMobileMoneyActions: function logMobileMoneyActions(_ref) {
20044
- var numberOfTokenRequests = _ref.numberOfTokenRequests,
20045
- registrationToken = _ref.registrationToken;
20058
+ if (permissions.find(function (permission) {
20059
+ return permission === 'directdebit-*';
20060
+ })) {
20061
+ _this.directDebit.token = token;
20062
+ return response;
20063
+ }
20046
20064
 
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()
20065
+ throw Error('You do not have the privileges to perform this action');
20066
+ }
20067
+
20068
+ return response;
20060
20069
  });
20061
- return this.saveLog();
20062
20070
  },
20063
- logAttempt: function logAttempt(channel) {
20064
- var message = 'Attempted to pay';
20071
+ chargeDirectDebit: function chargeDirectDebit(accountCode) {
20072
+ var _this2 = this;
20065
20073
 
20066
- if (channel) {
20067
- message += " with ".concat(channel);
20074
+ if (!this.directDebit.token) {
20075
+ return Promise.reject(Error('Please login with Transaction.loginToDirectDebitAccount() to start a Direct debit charge'));
20068
20076
  }
20069
20077
 
20070
- this.log.attempts += 1;
20071
- this.log.history.push({
20072
- type: 'action',
20073
- message: message,
20074
- time: this.getTimeSpent()
20078
+ this.logAttempt(paymentMethod$1);
20079
+ var params = {
20080
+ account_code: accountCode,
20081
+ transaction: this.id,
20082
+ token: this.directDebit.token
20083
+ };
20084
+ return DirectDebitAPI.charge(params).then(function (response) {
20085
+ _this2.logAPIResponse(response, paymentMethod$1);
20086
+
20087
+ if (response.status) {
20088
+ _this2.directDebit.chargeResponse = response;
20089
+ }
20090
+
20091
+ return response;
20075
20092
  });
20076
- return this.saveLog();
20077
20093
  },
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()
20094
+ getProvisionedAccounts: function getProvisionedAccounts() {
20095
+ var _this3 = this;
20096
+
20097
+ return DirectDebitAPI.getProvisionedAccounts(this.directDebit.token).then(function (response) {
20098
+ _this3.logAPIResponse(response, paymentMethod$1);
20099
+
20100
+ var status = response.status,
20101
+ data = response.data;
20102
+
20103
+ if (status) {
20104
+ if (data && data.length < 1) {
20105
+ return Promise.reject(Error('You have not provisioned any bank account for Direct Debit yet'));
20106
+ }
20107
+
20108
+ _this3.directDebit.accounts = response.data;
20109
+ }
20110
+
20111
+ return response;
20086
20112
  });
20087
- return this.saveLog();
20088
20113
  },
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';
20114
+ authenticateAccount: function authenticateAccount(otp) {
20115
+ var _this4 = this;
20112
20116
 
20113
- if (error) {
20114
- message += ": ".concat(error);
20115
- }
20117
+ var params = {
20118
+ otp: otp,
20119
+ transaction: this.id,
20120
+ token: this.directDebit.token
20121
+ };
20122
+ return DirectDebitAPI.authenticate(params).then(function (response) {
20123
+ _this4.logAPIResponse(response, paymentMethod$1);
20116
20124
 
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();
20124
- },
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()
20125
+ return response;
20131
20126
  });
20132
- return this.saveLog();
20133
- },
20134
- logSuccess: function logSuccess(channel) {
20135
- var message = 'Successfully paid';
20127
+ }
20128
+ };
20136
20129
 
20137
- if (channel) {
20138
- message += " with ".concat(channel);
20139
- }
20130
+ var ChargeFunctions = {
20131
+ get: function get(channel) {
20132
+ var chargeFunctions = {
20133
+ card: CardCharge,
20134
+ bank: BankAccountCharge,
20135
+ ussd: USSDCharge,
20136
+ qr: QRCharge,
20137
+ mobile_money: MobileMoneyCharge,
20138
+ direct_debit: DirectDebitCharge,
20139
+ bank_transfer: PayWithTransferCharge,
20140
+ eft: EFT,
20141
+ payattitude: PayattitudeCharge,
20142
+ apple_pay: ApplePayCharge,
20143
+ paypal: PayPalCharge
20144
+ };
20145
+ return chargeFunctions[channel];
20146
+ }
20147
+ };
20140
20148
 
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';
20149
+ var isMobile_1 = isMobile;
20151
20150
 
20152
- if (channel) {
20153
- message += " with ".concat(channel);
20154
- }
20151
+ function isMobile (ua) {
20152
+ if (!ua && typeof navigator != 'undefined') ua = navigator.userAgent;
20153
+ if (ua && ua.headers && typeof ua.headers['user-agent'] == 'string') {
20154
+ ua = ua.headers['user-agent'];
20155
+ }
20156
+ if (typeof ua != 'string') return false;
20155
20157
 
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);
20158
+ 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));
20159
+ }
20160
+
20161
+ var AnalyticsUtils = {
20162
+ initializeLog: function initializeLog(log) {
20163
+ var _ref = log || {},
20164
+ attempts = _ref.attempts,
20165
+ authentication = _ref.authentication,
20166
+ errors = _ref.errors,
20167
+ history = _ref.history;
20168
+
20169
+ return {
20170
+ start_time: Math.round(Date.now() / 1000),
20171
+ time_spent: 0,
20172
+ attempts: attempts || 0,
20173
+ authentication: authentication,
20174
+ errors: errors || 0,
20175
+ success: false,
20176
+ mobile: isMobile_1(),
20177
+ input: [],
20178
+ history: history || []
20179
+ };
20188
20180
  },
20189
- saveReferrer: function saveReferrer(referrer) {
20190
- return AnalyticsAPI.saveReferrer(this.id, this.merchant.key, referrer);
20181
+ getTimeSpent: function getTimeSpent(startTime) {
20182
+ var currentTimeInSeconds = Math.round(Date.now() / 1000);
20183
+ return currentTimeInSeconds - startTime;
20191
20184
  }
20192
20185
  };
20193
20186
 
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
- };
20187
+ var $ = _export;
20188
+ var global$1 = global$R;
20189
+ var getBuiltIn = getBuiltIn$a;
20190
+ var apply = functionApply;
20191
+ var uncurryThis = functionUncurryThis;
20192
+ var fails = fails$t;
20193
+
20194
+ var Array$1 = global$1.Array;
20195
+ var $stringify = getBuiltIn('JSON', 'stringify');
20196
+ var exec = uncurryThis(/./.exec);
20197
+ var charAt = uncurryThis(''.charAt);
20198
+ var charCodeAt = uncurryThis(''.charCodeAt);
20199
+ var replace = uncurryThis(''.replace);
20200
+ var numberToString = uncurryThis(1.0.toString);
20201
+
20202
+ var tester = /[\uD800-\uDFFF]/g;
20203
+ var low = /^[\uD800-\uDBFF]$/;
20204
+ var hi = /^[\uDC00-\uDFFF]$/;
20205
+
20206
+ var fix = function (match, offset, string) {
20207
+ var prev = charAt(string, offset - 1);
20208
+ var next = charAt(string, offset + 1);
20209
+ if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {
20210
+ return '\\u' + numberToString(charCodeAt(match, 0), 16);
20211
+ } return match;
20212
+ };
20213
+
20214
+ var FORCED = fails(function () {
20215
+ return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
20216
+ || $stringify('\uDEAD') !== '"\\udead"';
20217
+ });
20218
+
20219
+ if ($stringify) {
20220
+ // `JSON.stringify` method
20221
+ // https://tc39.es/ecma262/#sec-json.stringify
20222
+ // https://github.com/tc39/proposal-well-formed-stringify
20223
+ $({ target: 'JSON', stat: true, forced: FORCED }, {
20224
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
20225
+ stringify: function stringify(it, replacer, space) {
20226
+ for (var i = 0, l = arguments.length, args = Array$1(l); i < l; i++) args[i] = arguments[i];
20227
+ var result = apply($stringify, null, args);
20228
+ return typeof result == 'string' ? replace(result, tester, fix) : result;
20229
+ }
20230
+ });
20231
+ }
20232
+
20233
+ var AnalyticsAPIUtils = {
20234
+ saveLog: function saveLog(url, _ref) {
20235
+ var merchantKey = _ref.merchantKey,
20236
+ log = _ref.log;
20212
20237
  var language = getLanguage();
20213
20238
 
20214
- var headers = _objectSpread2({}, language && {
20239
+ var headers = _objectSpread2({
20240
+ Authorization: "Bearer ".concat(merchantKey)
20241
+ }, language && {
20215
20242
  'Accept-Language': language
20216
20243
  });
20217
20244
 
20218
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "charge/mobile_money"), params, {
20245
+ return axiosInstance.post(url, {
20246
+ payload: JSON.stringify(log)
20247
+ }, {
20219
20248
  headers: headers
20220
20249
  }).then(function (response) {
20221
- return ChargeResponses.parse(response.data);
20222
- }).catch(function (_ref2) {
20223
- var response = _ref2.response;
20224
- return ChargeResponses.parse(response.data);
20250
+ return response.data;
20225
20251
  });
20226
20252
  },
20227
- submitCode: function submitCode(_ref3) {
20228
- var transaction = _ref3.transaction,
20229
- code = _ref3.code;
20253
+ getIp: function getIp() {
20254
+ var url = 'https://api.paystack.co/decision/ip';
20230
20255
  var language = getLanguage();
20231
20256
 
20232
20257
  var headers = _objectSpread2({}, language && {
20233
20258
  'Accept-Language': language
20234
20259
  });
20235
20260
 
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, {
20261
+ return axiosInstance.get(url, {
20242
20262
  headers: headers
20243
20263
  }).then(function (response) {
20244
- return ChargeResponses.parse(response.data);
20264
+ return response.data.data.ip_address;
20245
20265
  });
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 && {
20414
- 'Accept-Language': language
20415
- });
20416
-
20417
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "login"), params, {
20418
- headers: headers
20419
- }).then(function (response) {
20420
- return ChargeResponses.parse(response.data);
20421
- });
20422
- },
20423
- charge: function charge(_ref2) {
20424
- var accountCode = _ref2.account_code,
20425
- transaction = _ref2.transaction,
20426
- token = _ref2.token;
20427
- var language = getLanguage();
20428
-
20429
- var headers = _objectSpread2({
20430
- Authorization: "Bearer ".concat(token),
20431
- 'jwt-auth': true
20432
- }, language && {
20433
- 'Accept-Language': language
20434
- });
20435
-
20436
- var params = {
20437
- account_code: accountCode,
20438
- transaction: transaction
20439
- };
20440
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/initiate"), params, {
20441
- headers: headers
20442
- }).then(function (response) {
20443
- return ChargeResponses.parse(response.data);
20444
- });
20445
- },
20446
- authenticate: function authenticate(_ref3) {
20447
- var otp = _ref3.otp,
20448
- transaction = _ref3.transaction,
20449
- token = _ref3.token;
20450
- var language = getLanguage();
20266
+ },
20267
+ saveIp: function saveIp(url, _ref2) {
20268
+ var merchantKey = _ref2.merchantKey;
20269
+ var language = getLanguage();
20451
20270
 
20452
20271
  var headers = _objectSpread2({
20453
- Authorization: "Bearer ".concat(token),
20454
- 'jwt-auth': true
20272
+ Authorization: "Bearer ".concat(merchantKey)
20455
20273
  }, language && {
20456
20274
  'Accept-Language': language
20457
20275
  });
20458
20276
 
20459
- var params = {
20460
- otp: otp,
20461
- transaction: transaction
20462
- };
20463
- return axiosInstance.post("".concat(configToUse.paystackApiUrl, "directdebit/validate"), params, {
20277
+ return axiosInstance.post(url, null, {
20464
20278
  headers: headers
20465
20279
  }).then(function (response) {
20466
- return ChargeResponses.parse(response.data);
20280
+ return response.data;
20467
20281
  });
20468
20282
  },
20469
- getProvisionedAccounts: function getProvisionedAccounts(token) {
20283
+ saveReferrer: function saveReferrer(url, _ref3) {
20284
+ var merchantKey = _ref3.merchantKey,
20285
+ referrer = _ref3.referrer;
20470
20286
  var language = getLanguage();
20471
20287
 
20472
20288
  var headers = _objectSpread2({
20473
- Authorization: "Bearer ".concat(token),
20474
- 'jwt-auth': true
20289
+ Authorization: "Bearer ".concat(merchantKey)
20475
20290
  }, language && {
20476
20291
  'Accept-Language': language
20477
20292
  });
20478
20293
 
20479
- return axiosInstance.get("".concat(configToUse.paystackApiUrl, "directdebit/account"), {
20294
+ return axiosInstance.post(url, {
20295
+ referrer: referrer
20296
+ }, {
20480
20297
  headers: headers
20481
20298
  }).then(function (response) {
20482
20299
  return response.data;
@@ -20484,120 +20301,277 @@ var DirectDebitAPI = {
20484
20301
  }
20485
20302
  };
20486
20303
 
20487
- var paymentMethod$1 = 'direct debit';
20488
- var DirectDebitCharge = {
20489
- loginToDirectDebitAccount: function loginToDirectDebitAccount(_ref) {
20490
- var _this = this;
20491
-
20492
- var email = _ref.email,
20493
- password = _ref.password;
20494
- var params = {
20495
- email: email,
20496
- password: password
20497
- };
20498
-
20499
- if (!isValidEmail(email)) {
20500
- return Promise.reject(Error('Invalid email'));
20501
- }
20502
-
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;
20508
-
20509
- if (!permissions || permissions.length < 1) {
20510
- throw Error('You do not have the privileges to perform this action');
20511
- }
20512
-
20513
- if (permissions.find(function (permission) {
20514
- return permission === 'directdebit-*';
20515
- })) {
20516
- _this.directDebit.token = token;
20517
- return response;
20518
- }
20519
-
20520
- throw Error('You do not have the privileges to perform this action');
20521
- }
20522
-
20523
- return response;
20304
+ var AnalyticsAPI = {
20305
+ saveLog: function saveLog(transactionId, merchantKey, log) {
20306
+ var url = new URL("transaction/update_log/".concat(transactionId), configToUse.paystackApiUrl).toString();
20307
+ return AnalyticsAPIUtils.saveLog(url, {
20308
+ merchantKey: merchantKey,
20309
+ log: log
20524
20310
  });
20525
20311
  },
20526
- chargeDirectDebit: function chargeDirectDebit(accountCode) {
20527
- var _this2 = this;
20528
-
20529
- if (!this.directDebit.token) {
20530
- return Promise.reject(Error('Please login with Transaction.loginToDirectDebitAccount() to start a Direct debit charge'));
20531
- }
20532
-
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);
20541
-
20542
- if (response.status) {
20543
- _this2.directDebit.chargeResponse = response;
20544
- }
20545
-
20546
- return response;
20312
+ getIp: function getIp() {
20313
+ return AnalyticsAPIUtils.getIp();
20314
+ },
20315
+ saveIp: function saveIp(transactionId, merchantKey) {
20316
+ var url = new URL("transaction/set_ip/".concat(transactionId), configToUse.paystackApiUrl).toString();
20317
+ return AnalyticsAPIUtils.saveIp(url, {
20318
+ merchantKey: merchantKey
20547
20319
  });
20548
20320
  },
20549
- getProvisionedAccounts: function getProvisionedAccounts() {
20550
- var _this3 = this;
20321
+ saveReferrer: function saveReferrer(transactionId, merchantKey, referrer) {
20322
+ var url = new URL("transaction/set_referrer/".concat(transactionId), configToUse.paystackApiUrl).toString();
20323
+ return AnalyticsAPIUtils.saveReferrer(url, {
20324
+ merchantKey: merchantKey,
20325
+ referrer: referrer
20326
+ });
20327
+ }
20328
+ };
20551
20329
 
20552
- return DirectDebitAPI.getProvisionedAccounts(this.directDebit.token).then(function (response) {
20553
- _this3.logAPIResponse(response, paymentMethod$1);
20330
+ var AnalyticsFunctions$1 = {
20331
+ initializeLog: function initializeLog(log) {
20332
+ this.log = AnalyticsUtils.initializeLog(log);
20333
+ },
20334
+ getTimeSpent: function getTimeSpent() {
20335
+ this.log.time_spent = AnalyticsUtils.getTimeSpent(this.log.start_time);
20336
+ return this.log.time_spent;
20337
+ },
20338
+ logPageOpen: function logPageOpen() {
20339
+ this.log.history.push({
20340
+ type: 'open',
20341
+ message: 'Opened checkout',
20342
+ time: this.getTimeSpent()
20343
+ });
20344
+ return this.saveLog();
20345
+ },
20346
+ logChannelSwitch: function logChannelSwitch(value) {
20347
+ this.log.history.push({
20348
+ type: 'action',
20349
+ message: "Set payment method to: ".concat(value),
20350
+ time: this.getTimeSpent()
20351
+ });
20352
+ return this.saveLog();
20353
+ },
20354
+ logValidationErrors: function logValidationErrors(inputs) {
20355
+ var _this = this;
20554
20356
 
20555
- var status = response.status,
20556
- data = response.data;
20357
+ inputs.forEach(function (input) {
20358
+ _this.log.history.push({
20359
+ type: 'error',
20360
+ message: "Invalid ".concat(input),
20361
+ time: _this.getTimeSpent()
20362
+ });
20363
+ });
20364
+ return this.saveLog();
20365
+ },
20366
+ logInput: function logInput(value) {
20367
+ var isUpdate = this.log.history.find(function (item) {
20368
+ return item.message === "Filled this field: ".concat(value);
20369
+ });
20370
+ this.log.history.push({
20371
+ type: 'input',
20372
+ message: "".concat(isUpdate ? 'Changed' : 'Filled', " this field: ").concat(value),
20373
+ time: this.getTimeSpent()
20374
+ });
20375
+ return this.saveLog();
20376
+ },
20377
+ logBankSelect: function logBankSelect(value) {
20378
+ this.log.history.push({
20379
+ type: 'action',
20380
+ message: "Selected bank: ".concat(value),
20381
+ time: this.getTimeSpent()
20382
+ });
20383
+ return this.saveLog();
20384
+ },
20385
+ logSavedCardSelect: function logSavedCardSelect() {
20386
+ this.log.history.push({
20387
+ type: 'action',
20388
+ message: 'Selected saved card',
20389
+ time: this.getTimeSpent()
20390
+ });
20391
+ return this.saveLog();
20392
+ },
20393
+ logAuthWindowOpen: function logAuthWindowOpen() {
20394
+ this.log.history.push({
20395
+ type: 'action',
20396
+ message: 'Third-party authentication window opened',
20397
+ time: this.getTimeSpent()
20398
+ });
20399
+ return this.saveLog();
20400
+ },
20401
+ logAuthWindowClose: function logAuthWindowClose() {
20402
+ this.log.history.push({
20403
+ type: 'action',
20404
+ message: 'Third-party authentication window closed',
20405
+ time: this.getTimeSpent()
20406
+ });
20407
+ return this.saveLog();
20408
+ },
20409
+ logAPIResponse: function logAPIResponse(response, channel) {
20410
+ switch (response.status) {
20411
+ case 'success':
20412
+ return this.logSuccess(channel);
20557
20413
 
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
- }
20414
+ case 'pending':
20415
+ return this.logPending(channel);
20562
20416
 
20563
- _this3.directDebit.accounts = response.data;
20564
- }
20417
+ case 'failed':
20418
+ return this.logError(response.message);
20565
20419
 
20566
- return response;
20420
+ case 'auth':
20421
+ return this.logAuth(response.data.auth);
20422
+
20423
+ default:
20424
+ return false;
20425
+ }
20426
+ },
20427
+ logMobileMoneyActions: function logMobileMoneyActions(_ref) {
20428
+ var numberOfTokenRequests = _ref.numberOfTokenRequests,
20429
+ registrationToken = _ref.registrationToken;
20430
+
20431
+ if (numberOfTokenRequests) {
20432
+ this.logTokenRequest('mobile money', numberOfTokenRequests);
20433
+ } else if (registrationToken) {
20434
+ this.logTokenSubmitted('mobile money');
20435
+ } else {
20436
+ this.logAttempt('mobile money');
20437
+ }
20438
+ },
20439
+ logAPIResponseMessage: function logAPIResponseMessage(message) {
20440
+ this.log.history.push({
20441
+ type: 'action',
20442
+ message: message,
20443
+ time: this.getTimeSpent()
20567
20444
  });
20445
+ return this.saveLog();
20568
20446
  },
20569
- authenticateAccount: function authenticateAccount(otp) {
20570
- var _this4 = this;
20447
+ logAttempt: function logAttempt(channel) {
20448
+ var message = 'Attempted to pay';
20571
20449
 
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);
20450
+ if (channel) {
20451
+ message += " with ".concat(channel);
20452
+ }
20579
20453
 
20580
- return response;
20454
+ this.log.attempts += 1;
20455
+ this.log.history.push({
20456
+ type: 'action',
20457
+ message: message,
20458
+ time: this.getTimeSpent()
20581
20459
  });
20582
- }
20583
- };
20460
+ return this.saveLog();
20461
+ },
20462
+ logTokenRequest: function logTokenRequest(channel) {
20463
+ var numberOfTokenRequests = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20464
+ var message = numberOfTokenRequests === 0 ? 'Waiting for customer to submit OTP' : 'Customer requested to resend OTP';
20465
+ this.log.history.push({
20466
+ type: 'action',
20467
+ message: message,
20468
+ channel: channel,
20469
+ time: this.getTimeSpent()
20470
+ });
20471
+ return this.saveLog();
20472
+ },
20473
+ logTokenSubmitted: function logTokenSubmitted(channel) {
20474
+ var message = 'Customer submitted OTP';
20475
+ this.log.history.push({
20476
+ type: 'action',
20477
+ message: message,
20478
+ channel: channel,
20479
+ time: this.getTimeSpent()
20480
+ });
20481
+ return this.saveLog();
20482
+ },
20483
+ logTokenAuthenticationFailure: function logTokenAuthenticationFailure(error) {
20484
+ var message = error ? "Error: ".concat(error) : 'Error';
20485
+ this.log.errors += 1;
20486
+ this.log.history.push({
20487
+ type: 'error',
20488
+ message: message,
20489
+ authentication: 'failed',
20490
+ time: this.getTimeSpent()
20491
+ });
20492
+ return this.saveLog();
20493
+ },
20494
+ logError: function logError(error) {
20495
+ var message = 'Error';
20584
20496
 
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];
20497
+ if (error) {
20498
+ message += ": ".concat(error);
20499
+ }
20500
+
20501
+ this.log.errors += 1;
20502
+ this.log.history.push({
20503
+ type: 'error',
20504
+ message: message,
20505
+ time: this.getTimeSpent()
20506
+ });
20507
+ return this.saveLog();
20508
+ },
20509
+ logAuth: function logAuth(value) {
20510
+ this.log.authentication = value;
20511
+ this.log.history.push({
20512
+ type: 'auth',
20513
+ message: "Authentication Required: ".concat(value),
20514
+ time: this.getTimeSpent()
20515
+ });
20516
+ return this.saveLog();
20517
+ },
20518
+ logSuccess: function logSuccess(channel) {
20519
+ var message = 'Successfully paid';
20520
+
20521
+ if (channel) {
20522
+ message += " with ".concat(channel);
20523
+ }
20524
+
20525
+ this.log.success = true;
20526
+ this.log.history.push({
20527
+ type: 'success',
20528
+ message: message,
20529
+ time: this.getTimeSpent()
20530
+ });
20531
+ return this.saveLog();
20532
+ },
20533
+ logPending: function logPending(channel) {
20534
+ var message = 'Payment in progress';
20535
+
20536
+ if (channel) {
20537
+ message += " with ".concat(channel);
20538
+ }
20539
+
20540
+ this.log.history.push({
20541
+ type: 'pending',
20542
+ message: message,
20543
+ time: this.getTimeSpent()
20544
+ });
20545
+ return this.saveLog();
20546
+ },
20547
+ logPageClose: function logPageClose() {
20548
+ this.log.history.push({
20549
+ type: 'close',
20550
+ message: 'Closed checkout',
20551
+ time: this.getTimeSpent()
20552
+ });
20553
+ return this.saveLog();
20554
+ },
20555
+ logTransactionCurrencySwitch: function logTransactionCurrencySwitch(_ref2) {
20556
+ var currency = _ref2.currency,
20557
+ _ref2$isUserAction = _ref2.isUserAction,
20558
+ isUserAction = _ref2$isUserAction === void 0 ? true : _ref2$isUserAction;
20559
+ var prefix = isUserAction ? 'User switched' : 'Switched';
20560
+ this.log.history.push({
20561
+ type: 'action',
20562
+ message: "".concat(prefix, " transaction currency to ").concat(currency),
20563
+ time: this.getTimeSpent()
20564
+ });
20565
+ return this.saveLog();
20566
+ },
20567
+ saveLog: function saveLog() {
20568
+ return AnalyticsAPI.saveLog(this.id, this.merchant.key, this.log);
20569
+ },
20570
+ saveIpAddress: function saveIpAddress() {
20571
+ return AnalyticsAPI.saveIp(this.id, this.merchant.key);
20572
+ },
20573
+ saveReferrer: function saveReferrer(referrer) {
20574
+ return AnalyticsAPI.saveReferrer(this.id, this.merchant.key, referrer);
20601
20575
  }
20602
20576
  };
20603
20577
 
@@ -20633,6 +20607,7 @@ var TransactionInstance = /*#__PURE__*/function () {
20633
20607
  this.rememberMeEnabled = data.is_remember_me_enabled;
20634
20608
  this.card = {};
20635
20609
  this.bankAccount = {};
20610
+ this.mobileMoney = {};
20636
20611
  this.ussd = {};
20637
20612
  this.bankTransfer = {};
20638
20613
  this.qr = {};