UNPKG

mtn-momo-client

Version:

A collection of utils to interact with the mtn-momo api

3 lines (2 loc) 5.59 kB
import t from"axios";import e from"path";import{v4 as n}from"uuid";function r(){return r=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},r.apply(this,arguments)}const a="application/json",i={v1:"v1_0",v2:"v2_0"},c=t=>e.join(...t),o="https://sandbox.momodeveloper.mtn.com/",s=({subscriptionKey:e,baseURL:n=o,headerOverrides:a})=>t.create({headers:r({"Content-Type":"application/json","Ocp-Apim-Subscription-Key":e},a),baseURL:n}),u=({subscriptionKey:t,apiVersion:e="v1"})=>{const n=o+c([i[e],"apiuser"]);return s({subscriptionKey:t,baseURL:n})},l=async({userId:t,client:e})=>{const{data:n}=await e.get(`/${t}`);return n},d=async({client:t,providerCallbackHost:e})=>{const r=n();return await t.post("",{providerCallbackHost:e},{headers:{"X-Reference-Id":r}}),{userId:r}},p=async({userId:t,client:e})=>{const n=c([t,"apikey"]),{data:r}=await e.post(n);return r},g=async({subscriptionKey:t,providerCallbackHost:e})=>{const n=u({subscriptionKey:t}),{userId:r}=await d({client:n,providerCallbackHost:e}),{apiKey:a}=await p({userId:r,client:n}),{targetEnvironment:i}=await l({userId:r,client:n});return{userId:r,apiKey:a,targetEnvironment:i,subscriptionKey:t,providerCallbackHost:e}},y={},b=t=>Date.now()+1e3*t-3e4,f=async t=>{const e=(({subscriptionKey:t,targetEnvironment:e,targetProduct:n,userId:r,apiKey:a})=>{let i=y[n];if(i)return i;const c=o+n,u=Buffer.from(`${r}:${a}`).toString("base64");return i=s({subscriptionKey:t,headerOverrides:{"X-Target-Environment":e,Authorization:`Basic ${u}`},baseURL:c}),y[n]=i,i})(t),{data:n}=await e.post("/token/");return{expiresAt:b(n.expires_in),accessToken:n.access_token,tokenType:n.token_type,expiresIn:n.expires_in}};var m,v;!function(t){t.Sandbox="sandbox",t.Production="production"}(m||(m={})),function(t){t.Collection="collection",t.Disbursement="disbursement",t.Remittance="remittance"}(v||(v={}));const I={},P={},h=({subscriptionKey:t,targetEnvironment:e,apiVersion:n="v1",targetProduct:a,userId:u,apiKey:l})=>{const d=`${a}-${n}`;let p=P[d];if(p)return p;const g=o+c([a,i[n]]);return p=s({subscriptionKey:t,headerOverrides:{"X-Target-Environment":e},baseURL:g}),(({client:t,config:e})=>{t.interceptors.request.use(async t=>{const{accessToken:n}=await(async t=>{var e;let n=I[t.targetProduct];const r=Date.now()>((null==(e=n)?void 0:e.expiresAt)||0);return n&&!r||(n=await f(t),I[t.targetProduct]=n),n})(e);return r({},t,{headers:r({},t.headers,{Authorization:`Bearer ${n}`})})})})({client:p,config:{apiKey:l,userId:u,targetProduct:a,subscriptionKey:t,targetEnvironment:e}}),P[d]=p,p},w=({client:t})=>async()=>{const{data:e}=await t.get("/account/balance");return e},K=({client:t})=>async({accountHolderMSISDN:e})=>{const{data:n}=await t.get(`accountholder/msisdn/${e}/basicuserinfo`),{sub:r,status:a,gender:i,name:c,locale:o}=n;return{sub:r,status:a,gender:i,name:c,locale:o,birthDate:n.birthdate,givenName:n.given_name,familyName:n.family_name,updatedAt:n.updated_at}},T=({client:t})=>async({referenceId:e,notificationMessage:n,language:r})=>{const a=c(["/requesttopay/",e,"/deliverynotification"]);return await t.post(a,{notificationMessage:n},{headers:{Language:r}}),{notificationMessage:n}},k={collection:"/requesttopay",disbursement:"/transfer",remittance:"/transfer"},A=["callbackURL"],D=({client:t,targetProduct:e})=>async r=>{let{callbackURL:a}=r,i=function(t,e){if(null==t)return{};var n,r,a={},i=Object.keys(t);for(r=0;r<i.length;r++)e.indexOf(n=i[r])>=0||(a[n]=t[n]);return a}(r,A);const c=n(),o=k[e];return await t.post(o,i,{headers:{"X-Callback-Url":a,"X-Reference-Id":c}}),{referenceId:c}},R=({client:t,targetProduct:e})=>async({referenceId:n})=>{const r=c([k[e],n]);return(await t.get(r)).data};var S;!function(t){t.msisdn="msisdn",t.email="email",t.partyCode="party_code"}(S||(S={}));const C=({client:t})=>async({accountHolderIdType:e,accountHolderId:n})=>{const r=c(["/accountholder/",e,n,"/active"]),{data:a}=await t.get(r);return a.result},O=t=>{const e=h(r({},t,{targetProduct:v.Collection}));return{requestToPay:D({client:e,targetProduct:v.Collection}),requestToPayTransactionStatus:R({client:e,targetProduct:v.Collection}),getAccountBalance:w({client:e}),getBasicUserInfo:K({client:e}),validateAccountHolderStatus:C({client:e}),requestToPayDeliveryNotification:T({client:e})}},_=t=>{const e=h(r({},t,{targetProduct:v.Disbursement}));return{transfer:D({client:e,targetProduct:v.Disbursement}),getTransferStatus:R({client:e,targetProduct:v.Disbursement}),getAccountBalance:w({client:e}),getBasicUserInfo:K({client:e}),validateAccountHolderStatus:C({client:e}),requestToPayDeliveryNotification:T({client:e})}},x=t=>{const e=h(r({},t,{targetProduct:v.Remittance}));return{transfer:D({client:e,targetProduct:v.Remittance}),getTransferStatus:R({client:e,targetProduct:v.Remittance}),getAccountBalance:w({client:e}),getBasicUserInfo:K({client:e}),validateAccountHolderStatus:C({client:e}),requestToPayDeliveryNotification:T({client:e})}};var E;!function(t){t.MSISDN="MSISDN",t.EMAIL="EMAIL",t.PARTY_CODE="PARTY_CODE"}(E||(E={}));export{i as API_VERSION_PATH,S as AccountHolderIdVariant,o as BASE_URL,a as DEFAULT_CONTENT_TYPE,E as PartyIDVariant,v as Product,m as TargetEnvironment,p as createAPIKey,d as createAPIUser,g as createAPIUserAndKey,f as createAccessToken,s as createClient,O as createCollectionAPI,_ as createDisbursementAPI,u as createProvisioningClient,x as createRemittanceAPI,b as expiresInToExpiresAt,l as fetchAPIUser,c as urlPathFrom}; //# sourceMappingURL=index.modern.js.map