@digital-gov-mg/nui-federation-sdk
Version:
This Frontend TypeScript SDK connects to the NUI Federation API for getting or creating, revoke, generating batch for NUI from the API
2 lines (1 loc) • 3.16 kB
JavaScript
import*as e from"axios";import s from"js-cookie";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}const r=({baseUrl:s,clientId:t,clientSecret:r})=>e.default.post(`${s}/sytems/token`,{clientId:t,clientSecret:r}),n=({name:e,value:t})=>{s.set(e,t,{expires:7,secure:!0})};class a{constructor(t,a,i){if(this.baseUrl=void 0,this.clientId=void 0,this.clientSecret=void 0,this.instance=void 0,this.accessToken=(({name:e})=>s.get(e))({name:"nui_access_token"}),this.isAlreadyFetchingAccessToken=!1,this.baseUrl=t,this.clientId=a,this.clientSecret=i,!t||!a||!i)throw new Error("Please provide all required configuration parameters");this.accessToken||r({baseUrl:this.baseUrl,clientId:this.clientId,clientSecret:this.clientSecret}).then(e=>{n({name:"nui_access_token",value:e.data.accessToken}),n({name:"nui_refresh_token",value:e.data.refreshToken})}).catch(e=>console.error(e)),this.instance=e.default.create({baseURL:this.baseUrl,headers:{"Content-Type":"application/json"}})}async request({url:e,options:s}){var a=this;this.instance.interceptors.request.use(e=>(this.accessToken&&(e.headers.Authorization=`Bearer ${this.accessToken}`),e),e=>Promise.reject(e)),this.instance.interceptors.response.use(e=>e,async function(e){if(!e.response)return Promise.reject(e);const{config:s,response:t}=e,i=s;if((401===t.status||403===t.status)&&!i._retry){if(i._retry=!0,!a.isAlreadyFetchingAccessToken){a.isAlreadyFetchingAccessToken=!0;try{const e=await r({baseUrl:a.baseUrl,clientId:a.clientId,clientSecret:a.clientSecret});n({name:"nui_access_token",value:e.data.accessToken}),n({name:"nui_refresh_token",value:e.data.refreshToken})}catch(e){return Promise.reject(e)}finally{a.isAlreadyFetchingAccessToken=!1}}return i.headers.Authorization=`Bearer ${a.accessToken}`,a.instance(i)}return Promise.reject(e)});try{return(await this.instance.request(t({url:e},s))).data}catch(e){var i;const s=(null==(i=e.response)||null==(i=i.data)?void 0:i.message)||e.message||"An error occurred while sending request";throw new Error(s)}}}class i extends a{async getOrCreateUIN(e){return this.request({url:"/uins",options:{method:"PUT",data:e}})}async revokeUIN(e){return this.request({url:`/uins/${e}/revoke`,options:{method:"DELETE"}})}async generateBatchUIN(e){return this.request({url:"/uins/batch",options:{method:"POST",params:{count:e}}})}}class c extends a{async retriveAll({page:e,limit:s,type:t,systemId:r}){const n=new URL("/logs");return n.searchParams.append("page",e),n.searchParams.append("limit",s),n.searchParams.append("type",t),n.searchParams.append("systemId",r),this.request({url:n.toString(),options:{method:"GET"}})}}class o extends a{async createConsumer(e){return this.request({url:"/systems",options:{method:"POST",data:e}})}async generateToken(e){return this.request({url:"/systems/token",options:{method:"POST",data:e}})}}class l{constructor(e,s,t){this.uin=void 0,this.log=void 0,this.system=void 0,this.uin=new i(e,s,t),this.log=new c(e,s,t),this.system=new o(e,s,t)}}export{l as NuiFederation};