@yabetoo/mtn-momo-js
Version:
MTN Mobile Money API Client for NodeJS written in TypeScript
2 lines (1 loc) • 13.9 kB
JavaScript
import{v4 as e}from"uuid";import{strictEqual as r}from"assert";import n from"axios";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},t.apply(this,arguments)}function i(e,r){e.prototype=Object.create(r.prototype),e.prototype.constructor=e,o(e,r)}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}function o(e,r){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,r){return e.__proto__=r,e},o(e,r)}function a(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function c(e,r,n){return c=a()?Reflect.construct.bind():function(e,r,n){var t=[null];t.push.apply(t,r);var i=new(Function.bind.apply(e,t));return n&&o(i,n.prototype),i},c.apply(null,arguments)}function s(e){var r="function"==typeof Map?new Map:void 0;return s=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==r){if(r.has(e))return r.get(e);r.set(e,n)}function n(){return c(e,arguments,u(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),o(n,e)},s(e)}function f(e,r){if(null==e)return{};var n,t,i={},u=Object.keys(e);for(t=0;t<u.length;t++)r.indexOf(n=u[t])>=0||(i[n]=e[n]);return i}var l,p,E,d;!function(e){e.MSISDN="MSISDN",e.EMAIL="EMAIL",e.PARTY_CODE="PARTY_CODE"}(l||(l={})),function(e){e.SANDBOX="sandbox",e.PRODUCTION="production"}(p||(p={})),function(e){e.SUCCESSFUL="SUCCESSFUL",e.PENDING="PENDING",e.FAILED="FAILED"}(E||(E={})),function(e){e.PAYEE_NOT_FOUND="PAYEE_NOT_FOUND",e.PAYER_NOT_FOUND="PAYER_NOT_FOUND",e.NOT_ALLOWED="NOT_ALLOWED",e.NOT_ALLOWED_TARGET_ENVIRONMENT="NOT_ALLOWED_TARGET_ENVIRONMENT",e.INVALID_CALLBACK_URL_HOST="INVALID_CALLBACK_URL_HOST",e.INVALID_CURRENCY="INVALID_CURRENCY",e.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",e.INTERNAL_PROCESSING_ERROR="INTERNAL_PROCESSING_ERROR",e.NOT_ENOUGH_FUNDS="NOT_ENOUGH_FUNDS",e.PAYER_LIMIT_REACHED="PAYER_LIMIT_REACHED",e.PAYEE_NOT_ALLOWED_TO_RECEIVE="PAYEE_NOT_ALLOWED_TO_RECEIVE",e.PAYMENT_NOT_APPROVED="PAYMENT_NOT_APPROVED",e.RESOURCE_NOT_FOUND="RESOURCE_NOT_FOUND",e.APPROVAL_REJECTED="APPROVAL_REJECTED",e.EXPIRED="EXPIRED",e.TRANSACTION_CANCELED="TRANSACTION_CANCELED",e.RESOURCE_ALREADY_EXIST="RESOURCE_ALREADY_EXIST"}(d||(d={}));var h=/*#__PURE__*/function(e){function r(n){var t;return t=e.call(this,n)||this,Object.setPrototypeOf(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(t),(this instanceof r?this.constructor:void 0).prototype),t}return i(r,e),r}(/*#__PURE__*/s(Error)),v=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="ApprovalRejectedError",r}return i(r,e),r}(h),_=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="ExpiredError",r}return i(r,e),r}(h),y=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="InternalProcessingError",r}return i(r,e),r}(h),A=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="InvalidCallbackUrlHostError",r}return i(r,e),r}(h),O=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="InvalidCurrencyError",r}return i(r,e),r}(h),N=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="NotAllowedTargetEnvironmentError",r}return i(r,e),r}(h),m=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="NotAllowedError",r}return i(r,e),r}(h),I=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="NotEnoughFundsError",r}return i(r,e),r}(h),R=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="PayeeNotFoundError",r}return i(r,e),r}(h),T=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="PayeeNotAllowedToReceiveError",r}return i(r,e),r}(h),b=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="PayerLimitReachedError",r}return i(r,e),r}(h),P=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="PayerNotFoundError",r}return i(r,e),r}(h),L=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="PaymentNotApprovedError",r}return i(r,e),r}(h),D=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="ResourceAlreadyExistError",r}return i(r,e),r}(h),C=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="ResourceNotFoundError",r}return i(r,e),r}(h),S=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="ServiceUnavailableError",r}return i(r,e),r}(h),U=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="TransactionCancelledError",r}return i(r,e),r}(h),g=/*#__PURE__*/function(e){function r(){var r;return(r=e.apply(this,arguments)||this).name="UnspecifiedError",r}return i(r,e),r}(h);function w(e){if(!e.response)return e;var r=e.response.data||{};return F(r.code,r.message)}function F(e,r){return e===d.APPROVAL_REJECTED?new v(r):e===d.EXPIRED?new _(r):e===d.INTERNAL_PROCESSING_ERROR?new y(r):e===d.INVALID_CALLBACK_URL_HOST?new A(r):e===d.INVALID_CURRENCY?new O(r):e===d.NOT_ALLOWED?new m(r):e===d.NOT_ALLOWED_TARGET_ENVIRONMENT?new N(r):e===d.NOT_ENOUGH_FUNDS?new I(r):e===d.PAYEE_NOT_FOUND?new R(r):e===d.PAYEE_NOT_ALLOWED_TO_RECEIVE?new T(r):e===d.PAYER_LIMIT_REACHED?new b(r):e===d.PAYER_NOT_FOUND?new P(r):e===d.PAYMENT_NOT_APPROVED?new L(r):e===d.RESOURCE_ALREADY_EXIST?new D(r):e===d.RESOURCE_NOT_FOUND?new C(r):e===d.SERVICE_UNAVAILABLE?new S(r):e===d.TRANSACTION_CANCELED?new U(r):new g(r)}function q(e){var r=F(e.reason);return r.transaction=e,r}function V(e){var n=e.primaryKey;r(k(n),!0,"primaryKey is required"),r(B(n),!0,"primaryKey must be a string")}function Y(e){return!isNaN(parseInt(e,10))}function k(e){return!!e}function B(e){return"string"==typeof e}function M(e){return/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(e)}var j=["callbackUrl"],X=/*#__PURE__*/function(){function n(e){this.client=e}var i=n.prototype;return i.requestToPay=function(n){var i=this,u=n.callbackUrl,o=f(n,j);return function(e){var n=e||{},t=n.amount,i=n.currency,u=n.payer;return Promise.resolve().then(function(){r(k(t),!0,"amount is required"),r(Y(t),!0,"amount must be a number"),r(k(i),!0,"currency is required"),r(k(u),!0,"payer is required"),r(k(u.partyId),!0,"payer.partyId is required"),r(k(u.partyIdType),!0,"payer.partyIdType is required"),r(B(i),!0,"amount must be a string")})}(o).then(function(){var r=e();return i.client.post("/collection/v1_0/requesttopay",o,{headers:t({"X-Reference-Id":r},u?{"X-Callback-Url":u}:{})}).then(function(){return r})})},i.getTransaction=function(e){return this.client.get("/collection/v1_0/requesttopay/"+e).then(function(e){return e.data}).then(function(e){return e.status===E.FAILED?Promise.reject(q(e)):Promise.resolve(e)})},i.getBalance=function(){return this.client.get("/collection/v1_0/account/balance").then(function(e){return e.data})},i.isPayerActive=function(e,r){return void 0===r&&(r=l.MSISDN),this.client.get("/collection/v1_0/accountholder/"+r+"/"+e+"/active").then(function(e){return e.data})},n}(),x=["callbackUrl","referenceId"],H=/*#__PURE__*/function(){function n(e){this.client=e}var i=n.prototype;return i.transfer=function(n){var i=this,u=n.callbackUrl,o=n.referenceId,a=void 0===o?e():o,c=f(n,x);return function(e){var n=e||{},t=n.amount,i=n.currency,u=n.payee,o=n.referenceId;return Promise.resolve().then(function(){r(k(o),!0,"referenceId is required"),r(M(o),!0,"referenceId must be a valid uuid v4"),r(k(t),!0,"amount is required"),r(Y(t),!0,"amount must be a number"),r(k(i),!0,"currency is required"),r(k(u),!0,"payee is required"),r(k(u.partyId),!0,"payee.partyId is required"),r(k(u.partyIdType),!0,"payee.partyIdType is required"),r(B(i),!0,"amount must be a string")})}(t({referenceId:a},c)).then(function(){return i.client.post("/disbursement/v1_0/transfer",c,{headers:t({"X-Reference-Id":a},u?{"X-Callback-Url":u}:{})}).then(function(){return a})})},i.getTransaction=function(e){return this.client.get("/disbursement/v1_0/transfer/"+e).then(function(e){return e.data}).then(function(e){return e.status===E.FAILED?Promise.reject(q(e)):Promise.resolve(e)})},i.getBalance=function(){return this.client.get("/disbursement/v1_0/account/balance").then(function(e){return e.data})},i.isPayerActive=function(e,r){return void 0===r&&(r=l.MSISDN),this.client.get("/disbursement/v1_0/accountholder/"+String(r).toLowerCase()+"/"+e+"/active").then(function(e){return e.data}).then(function(e){return!!e.result&&e.result})},n}(),G=["callbackUrl","referenceId"],W=/*#__PURE__*/function(){function n(e){this.client=e}var i=n.prototype;return i.remit=function(n){var i=this,u=n.callbackUrl,o=n.referenceId,a=void 0===o?e():o,c=f(n,G);return function(e){var n=e||{},t=n.amount,i=n.currency,u=n.payee,o=n.referenceId;return Promise.resolve().then(function(){r(k(o),!0,"referenceId is required"),r(M(o),!0,"referenceId must be a valid uuid v4"),r(k(t),!0,"amount is required"),r(Y(t),!0,"amount must be a number"),r(k(i),!0,"currency is required"),r(k(u),!0,"payee is required"),r(k(u.partyId),!0,"payee.partyId is required"),r(k(u.partyIdType),!0,"payee.partyIdType is required"),r(B(i),!0,"amount must be a string")})}(t({referenceId:a},c)).then(function(){return i.client.post("/remittance/v1_0/transfer",c,{headers:t({"X-Reference-Id":a},u?{"X-Callback-Url":u}:{})}).then(function(){return a})})},i.getTransaction=function(e){return this.client.get("/remittance/v1_0/transfer/"+e).then(function(e){return e.data}).then(function(e){return e.status===E.FAILED?Promise.reject(q(e)):Promise.resolve(e)})},i.getBalance=function(){return this.client.get("/remittance/v1_0/account/balance").then(function(e){return e.data})},i.isPayerActive=function(e,r){return void 0===r&&(r=l.MSISDN),this.client.get("/remittance/v1_0/accountholder/"+String(r).toLowerCase()+"/"+e+"/active").then(function(e){return e.data}).then(function(e){return!!e.result&&e.result})},n}(),K=/*#__PURE__*/function(){function r(e){this.client=e}var n=r.prototype;return n.create=function(r){var n=e();return this.client.post("/v1_0/apiuser",{providerCallbackHost:r},{headers:{"X-Reference-Id":n}}).then(function(){return n})},n.login=function(e){return this.client.post("/v1_0/apiuser/"+e+"/apikey").then(function(e){return e.data})},r}();function z(e,r){return void 0===r&&(r=n.create()),r.defaults.baseURL=e.baseUrl,r.defaults.headers={"Ocp-Apim-Subscription-Key":e.primaryKey,"X-Target-Environment":e.environment||"sandbox"},function(e){return e.interceptors.response.use(function(e){return e},function(e){return Promise.reject(w(e))}),e}(r)}function J(e,r){return r.interceptors.request.use(function(r){return e().then(function(e){return t({},r,{headers:t({},r.headers,{Authorization:"Bearer "+e})})})}),r}function $(e,r){var n;return function(){return function(e){return!e||!e.expires||Date.now()>e.expires}(n)?e(r).then(function(e){var r=e.expires_in;return{accessToken:e.access_token,expires:Date.now()+1e3*r-6e4}}).then(function(e){return(n=e).accessToken}):Promise.resolve(n.accessToken)}}var Q=function(e,r){void 0===r&&(r=z(e));var n=re(e);return r.post("/collection/token/",null,{headers:{Authorization:"Basic "+n}}).then(function(e){return e.data})},Z=function(e,r){void 0===r&&(r=z(e));var n=re(e);return r.post("/disbursement/token/",null,{headers:{Authorization:"Basic "+n}}).then(function(e){return e.data})},ee=function(e,r){void 0===r&&(r=z(e));var n=re(e);return r.post("/remittance/token/",null,{headers:{Authorization:"Basic "+n}}).then(function(e){return e.data})};function re(e){return Buffer.from(e.userId+":"+e.userSecret).toString("base64")}var ne={baseUrl:"https://sandbox.momodeveloper.mtn.com",environment:p.SANDBOX};function te(e){var n,i,u;return i=(n=e).baseUrl,u=n.environment,r(k(n.callbackHost),!0,"callbackHost is required"),u&&u!==p.SANDBOX&&(r(k(i),!0,"baseUrl is required if environment is not sandbox"),r(B(i),!0,"baseUrl must be a string")),{Collections:function(n){!function(e){var n,t,i;V(e),i=(n=e).userSecret,r(k(t=n.userId),!0,"userId is required"),r(B(t),!0,"userId must be a string"),r(k(i),!0,"userSecret is required"),r(B(i),!0,"userSecret must be a string"),r(M(t),!0,"userId must be a valid uuid v4")}(n);var i=t({},ne,e,n),u=J($(Q,i),z(i));return new X(u)},Disbursements:function(r){var n=t({},ne,e,r),i=J($(Z,n),z(n));return new H(i)},Remittances:function(r){var n=t({},ne,e,r),i=J($(ee,n),z(n));return new W(i)},Users:function(r){V(r);var n=z(t({},ne,e,r));return new K(n)}}}export{v as ApprovalRejectedError,p as Environment,_ as ExpiredError,d as FailureReason,y as InternalProcessingError,A as InvalidCallbackUrlHostError,O as InvalidCurrencyError,h as MtnMoMoError,m as NotAllowedError,N as NotAllowedTargetEnvironmentError,I as NotEnoughFundsError,T as PayeeNotAllowedToReceiveError,R as PayeeNotFoundError,b as PayerLimitReachedError,P as PayerNotFoundError,l as PayerType,L as PaymentNotApprovedError,D as ResourceAlreadyExistError,C as ResourceNotFoundError,S as ServiceUnavailableError,E as Status,U as TransactionCancelledError,g as UnspecifiedError,te as create,F as getError,q as getTransactionError,w as handleError};