turboself-api 2.1.5 → 2.1.6

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/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=class{constructor(e){this.baseURL=e}async sendRequest(e){const{method:t,path:s,body:n,headers:a}=e,r=`${this.baseURL}/${s}`,i=await fetch(r,{method:t,body:n?JSON.stringify(n):void 0,headers:{"Content-Type":"application/json",...a,"User-Agent":"@raphckrman/turboself-api"}});if(!i.ok){const e=await i.json();throw new Error(`${i.status}: ${JSON.stringify(e)}`)}return await i.json()}async get(e,t){return this.sendRequest({method:"GET",path:e,headers:t})}async post(e,t,s){return this.sendRequest({method:"POST",path:e,body:t,headers:s?.headers})}async put(e,t,s){return this.sendRequest({method:"PUT",path:e,body:t,headers:s?.headers})}async delete(e,t,s){const n=new URLSearchParams(t).toString(),a=n?`${e}?${n}`:e;return this.sendRequest({method:"DELETE",path:a,headers:s?.headers})}},t=class{constructor(e,t,s,n,a,r){this.id=e,this.hostId=t,this.label=s,this.amount=n,this.estimatedAmount=a,this.estimatedDate=r}},s=class{constructor(e,t,s,n,a,r,i,o,l){this.id=e,this.hostId=t,this.amount=s,this.status=n,this.token=a,this.url=r,this.cancelURL=i,this.returnURL=o,this.date=l}},n=class{constructor(e,t,s,n){this.id=e,this.date=t,this.label=s,this.amount=n}},a=class{constructor(e,t,s,n,a,r,i){this.id=e,this.week=t,this.hostId=s,this.from=n,this.to=a,this.terminal=r,this.days=i}},r=class{constructor(e,t,s,n,a){this.id=e,this.localId=t,this.code=s,this.name=n,this.prices=a}},i=class{constructor(e,t,s,n,a,r,i,o,l){this.token=e,this.hostId=t,this.id=s,this.booked=n,this.canBook=a,this.dayNumber=r,this.message=i,this.reservations=o,this.date=l}async book(e=1,t=!1){return this.booked=e>0,v(this.token,this.hostId,this.id,this.date.getDay(),e,t)}};var o=class{constructor(e,t,s,n,a,r,i,o,l,h,c,u,d,m,p,f,w,g){this.id=e,this.name=t,this.currencySymbol=s,this.code=n,this.logoUrl=a,this.uai=r,this.macAddress=i,this.motd=o,this.minMealsToCredit=l,this.minDebtToCredit=h,this.minAmountToCredit=c,this.disabled=u,this.closures=d,this.location=m,this.contact=p,this.permissions=f,this.sso=w,this.synchronisation=g}},l=class{constructor(e,t,s,n,a,r,i,o,l,h,c,u,d){this.id=e,this.localId=t,this.etabId=s,this.firstName=n,this.lastName=a,this.mode=r,this.quality=i,this.division=o,this.lunchPrice=l,this.type=h,this.cardNumber=c,this.cafeteriaUrl=u,this.permissions=d}};function h(e){return void 0!==e.id}function c(e){return new o(h(e)?e.id??0:0,h(e)?e.nom||"N/A":e.nom,h(e)&&e.currencySymbol||null,h(e)?e.code2p5||null:e.code2p5,h(e)&&e.logoUrl||null,h(e)&&e.numEtab||null,h(e)&&e.pcServeur||null,h(e)?e.configuration?.msgAccueil||"":"You are not logged in so you can't see all data",h(e)?e.configuration?.nbRepasMini||0:null,h(e)?e.configuration?.creanceMini||0:null,h(e)?e.configuration?.montantCreditMini||0:null,h(e)?e.desactive||!1:null,h(e)&&e.configuration?.fermetures?.map((e=>({id:e.id,canBook:!e.rsv,canPay:!e.paiement,from:new Date(e.du),to:new Date(e.au)})))||[],h(e)?{city:e.ville,address:e.adr1+" "+e.adr2,postcode:e.cp}:{city:null,address:null,postcode:null},h(e)?{phoneNumber:e.tel||null,faxNumber:e.fax||null,email:e.configuration?.email||null,website:e.configuration?.url||null}:{phoneNumber:null,faxNumber:null,email:null,website:null},h(e)?{maxReservationsStudentMoney:e.configurationSelf?.nbmultiElvArg||null,maxReservationsStudentPackage:e.configurationSelf?.nbmultiElvFor||null,maxReservationsCommensalMoney:e.configurationSelf?.nbmultiComArg||null,maxReservationsCommensalPackage:e.configurationSelf?.nbmultiComFor||null,maxReservationsTraineeMoney:e.configurationSelf?.nbmultiStgArg||null,maxReservationsTraineePackage:e.configurationSelf?.nbmultiStgFor||null,qrCodeStudent:e.configuration?.autoriseQrCodeEleve||null,qrCodeCommensal:e.configuration?.autoriseQrCodeCommensal||null,qrCodeTrainee:e.configuration?.autoriseQrCodeStagiaire||null,hideHistory:e.configuration?.cacherHistorique||null}:{maxReservationsStudentMoney:null,maxReservationsStudentPackage:null,maxReservationsCommensalMoney:null,maxReservationsCommensalPackage:null,maxReservationsTraineeMoney:null,maxReservationsTraineePackage:null,qrCodeStudent:null,qrCodeCommensal:null,qrCodeTrainee:null,hideHistory:null},h(e)?{id:e.configuration?.sso?.id||null,entCode:e.configuration?.sso?.entCode||null,entName:e.configuration?.sso?.entName||null,serveurCas:e.configuration?.sso?.serveurCas||null,service:e.configuration?.sso?.service||null}:{id:null,entCode:null,entName:null,serveurCas:null,service:null},h(e)?{firstSync:new Date(e.datePremSynchro||0),lastSync:new Date(e.dateDernSynchro||0)}:{firstSync:new Date(0),lastSync:new Date(0)})}function u(e){return new l(e.id,e.idOrig,e.etab.id,e.prenom,e.nom,e.mode,e.qualite,e.division,e.prixDej,e.type,e.carteCodee,e.urlCafeteria||null,{payment:e.droitPaiement||!1,reservation:e.droitReservation||!1,cafeteria:e.droitCafeteria||!1,bookWithNegativeBalance:e.autoriseReservSoldeIns,maxPassages:e.nbMulti})}var d=new e("https://api-rest-prod.incb.fr/api"),m=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}`)(t),{Authorization:`Bearer ${e}`});return u(s)},p=async(e,s)=>{const n=await d.get((e=>`v1/comptes/hotes/${e}/3`)(s),{Authorization:`Bearer ${e}`}),a=[];for(const e of n){const s=e.montantEstimeMsg.match(/(\d{2})\/(\d{2})\/(\d{4})/)?.slice(1,4);let n=new Date;s&&(n=new Date(parseInt(s[2],10),parseInt(s[1],10)-1,parseInt(s[0],10))),a.push(new t(e.id,e.hote.id,e.appli.lib,e.montant,e.montantEstime,n))}return a},f=async(e,t,n)=>{const a=await d.post((e=>`v2/hotes/${e}/paiements/init`)(t),[{paiementPayline:{hote:{id:t}},montant:n}],{headers:{Authorization:`Bearer ${e}`}});return new s(null,t,n,"INIT",a.token,a.redirectURL,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+a.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+a.token,new Date)},w=async(e,t)=>{const s=await d.get((e=>`v1/historiques/hotes/${e}`)(t),{Authorization:`Bearer ${e}`}),a=[];for(const e of s)a.push(new n(e.id,new Date(e.date),e.detail,(e.credit??0)-(e.debit??0)));return a},g=async(e,t,s)=>{const a=await d.get(((e,t)=>`v2/hotes/${e}/historiques/${t}`)(t,s),{Authorization:`Bearer ${e}`});return new n(a.id,new Date(a.date),a.detail,(a.credit??0)-(a.debit??0))},y=async(e,t)=>{const n=await d.get((e=>`v2/hotes/${e}/paiements-payline/latest`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,t,n.montant,n.statut,n.token,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+n.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+n.token,new Date(n.date))},k=async(e,t)=>d.get((e=>`v1/hotes/${e}/resa-soir`)(t),{Authorization:`Bearer ${e}`}),b=async(e,t,s)=>{const n=await d.get(((e,t)=>`v1/reservations/hotes/${e}/semaines${"?num="+t||""}`)(t,s),{Authorization:`Bearer ${e}`});if(!n.rsvWebDto[0])throw new Error("No booking found for this week.");const o=function(e,t){e-=2;const s=new Date(t,0,1),n=s.getDay(),a=0===n?1:8-n,r=new Date(s);r.setDate(s.getDate()+a);const i=new Date(r);i.setDate(r.getDate()+7*e);const o=new Date(i);o.setDate(i.getDate()+6),i.setHours(0,0,0,0),o.setHours(23,59,59,999);const l=6e4*i.getTimezoneOffset();return{from:new Date(i.getTime()-l),to:new Date(o.getTime()-l)}}(n.rsvWebDto[0].semaine,n.rsvWebDto[0].annee),l=[],h=[];for(const s of n.rsvWebDto){for(const n of s.jours)h.push(new i(e,t,s.id,n.dayReserv>0,n.autorise,n.dayOfWeek,n.msg||"",n.dayReserv,new Date(o.from.getTime()+864e5*(n.dayOfWeek-1))));l.push(new a(s.id,s.semaine,s.hote.id,o.from,o.to,new r(s.borne.id,s.borne.idOrig,s.borne.code2p5,s.borne.lib,s.borne.prix.map((e=>({id:e.id,localId:e.idOrig,name:e.lib,price:e.prix})))),h))}return l},v=async(e,t,s,n,a=1,r=!1)=>{const o=await d.post((e=>`v2/hotes/${e}/reservations-jours`)(t),{dayOfWeek:n,dayReserv:a,web:{id:s},hasHoteResaSoirActive:r},{headers:{Authorization:`Bearer ${e}`}});return new i(e,t,o.id,o.dayReserv>0,!0,o.dayOfWeek,o.msg||"",o.dayReserv,new Date)},x=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}/freres-soeurs`)(t),{Authorization:`Bearer ${e}`}),n=[];for(const e of s)n.push(u(e));return n},D=new e("https://api-rest-prod.incb.fr/api"),B=async(e,t,s,n)=>(await D.put("v1/utilisateurs/password",{id:e,password:t,newPassword:s},{headers:{Authorization:`Bearer ${n}`}})).token,$=new e("https://api-rest-prod.incb.fr/api"),I=async(e,t="",s=10,n=!1,a)=>{const r=await $.get(((e,t,s)=>`v1/etablissements?q=${e}&code2p5=${t}&limit=${s}`)(e,t,s)),i=[];if(a&&!n)for(const e of r)i.push(await P(a,e.code2p5));else for(const e of r)i.push(c(e));return i},P=async(e,t)=>{const s=await $.get((n=t,`v2/etablissements?code2p5=${n}`),{Authorization:`Bearer ${e}`});var n;if(0===s.length)throw new Error("Establishment not found");return c(s[0])},R=async(e,t)=>{var s;return c(await $.get((s=t,`v1/etablissements/etabId/${s}`),{Authorization:`Bearer ${e}`}))},T=new e("https://api-rest-prod.incb.fr/api"),C=async(e,t)=>{const n=await T.get((e=>`v1/paiements-payline/${e}`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,n.hote.id,n.montant,n.statut,t,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+t,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+t,new Date(n.date))},S=new e("https://api-rest-prod.incb.fr/api"),E=async(e,t,s,n,a)=>{if(a)return new A({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5});const r=await m(e.access_token,e.hoteId),[i,o]=await Promise.all([p(e.access_token,e.hoteId),R(e.access_token,r.etabId)]);return new A({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5},o,r,i)},q=async(e,t,s=!0,n=!1,a)=>{const r=await S.post("v1/auth/login",{username:e,password:t,hoteId:a});return E(r,s,e,t,n)},A=class{constructor(e,t,s,n){this.credentials=e,this.establishment=t,this.host=s,this.balances=n}async bookMeal(e,t,s,n){return await this.refreshBearerToken(),v(this.credentials.token,this.credentials.hostId,e,t,s,n)}async canBookEvening(){return await this.refreshBearerToken(),k(this.credentials.token,this.credentials.hostId)}async editPassword(e,t){return await this.refreshBearerToken(),B(this.credentials.userId,e,t,this.credentials.token)}async getBalances(){return await this.refreshBearerToken(),p(this.credentials.token,this.credentials.hostId)}async getBookings(e){return await this.refreshBearerToken(),b(this.credentials.token,this.credentials.hostId,e)}async getEstablishment(e){await this.refreshBearerToken();const t=e||this.host?.etabId;if(!t)throw new Error("You need to provide an establishment ID to get the establishment. You can also disable the minimalist mode on authentication.");return R(this.credentials.token,t)}async getHistory(){return await this.refreshBearerToken(),w(this.credentials.token,this.credentials.hostId)}async getHistoryEvent(e){return await this.refreshBearerToken(),g(this.credentials.token,this.credentials.hostId,e)}async getHost(){return await this.refreshBearerToken(),m(this.credentials.token,this.credentials.hostId)}async getLastPayment(){return await this.refreshBearerToken(),y(this.credentials.token,this.credentials.hostId)}async getPayment(e){return await this.refreshBearerToken(),C(this.credentials.token,e)}async getSiblings(){return await this.refreshBearerToken(),x(this.credentials.token,this.credentials.hostId)}async initPayment(e){return await this.refreshBearerToken(),f(this.credentials.token,this.credentials.hostId,e)}async refreshBearerToken(e=!1){if(!e&&this.credentials.token_expiry>Date.now())return!1;if(!this.credentials.password||!this.credentials.username)throw new Error("You need to provide a username and password to refresh the bearer token.");const t=await q(this.credentials.username,this.credentials.password,!0,!1);return this.credentials=t.credentials,!0}async searchEstablishments(e,t="",s=10,n=!1){return await this.refreshBearerToken(),I(e,t,s,n,this.credentials.token)}};exports.Balance=t,exports.Booking=a,exports.BookingDay=i,exports.Client=A,exports.Establishment=o,exports.HistoryEvent=n,exports.Host=l,exports.Payment=s,exports.Terminal=r,exports.authenticateWithCredentials=q,exports.authenticateWithTicket=async(e,t,s=!0,n=!1)=>{const a=(await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${e}&ticket=${t}`)).headers.get("set-cookie"),r=a?.split(";")[0].split("=")[1]??"",i=a?.split(";")[0].split("=")[1]??"",o=await S.post("v1/auth/login",{username:r,password:i});return E(o,s,r,i,n)},exports.bookMeal=v,exports.canBookEvening=k,exports.editPassword=B,exports.getBalances=p,exports.getBookings=b,exports.getEstablishment=R,exports.getEstablishmentBy2P5=P,exports.getHistory=w,exports.getHistoryEvent=g,exports.getHost=m,exports.getHostSiblings=x,exports.getLastPayment=y,exports.getPayment=C,exports.initPayment=f,exports.requestPasswordReset=async e=>{const t=await D.get((e=>`v1/utilisateurs/password?email=${e}`)(e));if(0!==t.rejected.length)throw new Error(`Failed to send password reset email to ${t.rejected.join(", ")}`);return!0},exports.searchEstablishments=I;//# sourceMappingURL=index.js.map
1
+ "use strict";var e=class{constructor(e){this.baseURL=e}async sendRequest(e){const{method:t,path:s,body:n,headers:a}=e,r=`${this.baseURL}/${s}`,i=await fetch(r,{method:t,body:n?JSON.stringify(n):void 0,headers:{"Content-Type":"application/json",...a,"User-Agent":"@raphckrman/turboself-api"}});if(!i.ok){const e=await i.json();throw new Error(`${i.status}: ${JSON.stringify(e)}`)}return await i.json()}async get(e,t){return this.sendRequest({method:"GET",path:e,headers:t})}async post(e,t,s){return this.sendRequest({method:"POST",path:e,body:t,headers:s?.headers})}async put(e,t,s){return this.sendRequest({method:"PUT",path:e,body:t,headers:s?.headers})}async delete(e,t,s){const n=new URLSearchParams(t).toString(),a=n?`${e}?${n}`:e;return this.sendRequest({method:"DELETE",path:a,headers:s?.headers})}},t=class{constructor(e,t,s,n,a,r){this.id=e,this.hostId=t,this.label=s,this.amount=n,this.estimatedAmount=a,this.estimatedDate=r}},s=class{constructor(e,t,s,n,a,r,i,o,l){this.id=e,this.hostId=t,this.amount=s,this.status=n,this.token=a,this.url=r,this.cancelURL=i,this.returnURL=o,this.date=l}},n=class{constructor(e,t,s,n){this.id=e,this.date=t,this.label=s,this.amount=n}},a=class{constructor(e,t,s,n,a,r,i){this.id=e,this.week=t,this.hostId=s,this.from=n,this.to=a,this.terminal=r,this.days=i}},r=class{constructor(e,t,s,n,a){this.id=e,this.localId=t,this.code=s,this.name=n,this.prices=a}},i=class{constructor(e,t,s,n,a,r,i,o,l){this.token=e,this.hostId=t,this.id=s,this.booked=n,this.canBook=a,this.dayNumber=r,this.message=i,this.reservations=o,this.date=l}async book(e=1,t=!1){return this.booked=e>0,v(this.token,this.hostId,this.id,this.date.getDay(),e,t)}};var o=class{constructor(e,t,s,n,a,r,i,o,l,h,c,u,d,m,p,f,g,w){this.id=e,this.name=t,this.currencySymbol=s,this.code=n,this.logoUrl=a,this.uai=r,this.macAddress=i,this.motd=o,this.minMealsToCredit=l,this.minDebtToCredit=h,this.minAmountToCredit=c,this.disabled=u,this.closures=d,this.location=m,this.contact=p,this.permissions=f,this.sso=g,this.synchronisation=w}},l=class{constructor(e,t,s,n,a,r,i,o,l,h,c,u,d){this.id=e,this.localId=t,this.etabId=s,this.firstName=n,this.lastName=a,this.mode=r,this.quality=i,this.division=o,this.lunchPrice=l,this.type=h,this.cardNumber=c,this.cafeteriaUrl=u,this.permissions=d}};function h(e){return void 0!==e.id}function c(e){return new o(h(e)?e.id??0:0,h(e)?e.nom||"N/A":e.nom,h(e)&&e.currencySymbol||null,h(e)?e.code2p5||null:e.code2p5,h(e)&&e.logoUrl||null,h(e)&&e.numEtab||null,h(e)&&e.pcServeur||null,h(e)?e.configuration?.msgAccueil||"":"You are not logged in so you can't see all data",h(e)?e.configuration?.nbRepasMini||0:null,h(e)?e.configuration?.creanceMini||0:null,h(e)?e.configuration?.montantCreditMini||0:null,h(e)?e.desactive||!1:null,h(e)&&e.configuration?.fermetures?.map((e=>({id:e.id,canBook:!e.rsv,canPay:!e.paiement,from:new Date(e.du),to:new Date(e.au)})))||[],h(e)?{city:e.ville,address:e.adr1+" "+e.adr2,postcode:e.cp}:{city:null,address:null,postcode:null},h(e)?{phoneNumber:e.tel||null,faxNumber:e.fax||null,email:e.configuration?.email||null,website:e.configuration?.url||null}:{phoneNumber:null,faxNumber:null,email:null,website:null},h(e)?{maxReservationsStudentMoney:e.configurationSelf?.nbmultiElvArg||null,maxReservationsStudentPackage:e.configurationSelf?.nbmultiElvFor||null,maxReservationsCommensalMoney:e.configurationSelf?.nbmultiComArg||null,maxReservationsCommensalPackage:e.configurationSelf?.nbmultiComFor||null,maxReservationsTraineeMoney:e.configurationSelf?.nbmultiStgArg||null,maxReservationsTraineePackage:e.configurationSelf?.nbmultiStgFor||null,qrCodeStudent:e.configuration?.autoriseQrCodeEleve||null,qrCodeCommensal:e.configuration?.autoriseQrCodeCommensal||null,qrCodeTrainee:e.configuration?.autoriseQrCodeStagiaire||null,hideHistory:e.configuration?.cacherHistorique||null}:{maxReservationsStudentMoney:null,maxReservationsStudentPackage:null,maxReservationsCommensalMoney:null,maxReservationsCommensalPackage:null,maxReservationsTraineeMoney:null,maxReservationsTraineePackage:null,qrCodeStudent:null,qrCodeCommensal:null,qrCodeTrainee:null,hideHistory:null},h(e)?{id:e.configuration?.sso?.id||null,entCode:e.configuration?.sso?.entCode||null,entName:e.configuration?.sso?.entName||null,serveurCas:e.configuration?.sso?.serveurCas||null,service:e.configuration?.sso?.service||null}:{id:null,entCode:null,entName:null,serveurCas:null,service:null},h(e)?{firstSync:new Date(e.datePremSynchro||0),lastSync:new Date(e.dateDernSynchro||0)}:{firstSync:new Date(0),lastSync:new Date(0)})}function u(e){return new l(e.id,e.idOrig,e.etab.id,e.prenom,e.nom,e.mode,e.qualite,e.division,e.prixDej,e.type,e.carteCodee,e.urlCafeteria||null,{payment:e.droitPaiement||!1,reservation:e.droitReservation||!1,cafeteria:e.droitCafeteria||!1,bookWithNegativeBalance:e.autoriseReservSoldeIns,maxPassages:e.nbMulti})}var d=new e("https://api-rest-prod.incb.fr/api"),m=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}`)(t),{Authorization:`Bearer ${e}`});return u(s)},p=async(e,s)=>{const n=await d.get((e=>`v1/comptes/hotes/${e}/3`)(s),{Authorization:`Bearer ${e}`}),a=[];for(const e of n){const s=e.montantEstimeMsg?e.montantEstimeMsg.match(/(\d{2})\/(\d{2})\/(\d{4})/)?.slice(1,4):void 0;let n=new Date;s&&(n=new Date(parseInt(s[2],10),parseInt(s[1],10)-1,parseInt(s[0],10))),a.push(new t(e.id,e.hote.id,e.appli.lib,e.montant,e.montantEstime,n))}return a},f=async(e,t,n)=>{const a=await d.post((e=>`v2/hotes/${e}/paiements/init`)(t),[{paiementPayline:{hote:{id:t}},montant:n}],{headers:{Authorization:`Bearer ${e}`}});return new s(null,t,n,"INIT",a.token,a.redirectURL,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+a.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+a.token,new Date)},g=async(e,t)=>{const s=await d.get((e=>`v1/historiques/hotes/${e}`)(t),{Authorization:`Bearer ${e}`}),a=[];for(const e of s)a.push(new n(e.id,new Date(e.date),e.detail,(e.credit??0)-(e.debit??0)));return a},w=async(e,t,s)=>{const a=await d.get(((e,t)=>`v2/hotes/${e}/historiques/${t}`)(t,s),{Authorization:`Bearer ${e}`});return new n(a.id,new Date(a.date),a.detail,(a.credit??0)-(a.debit??0))},y=async(e,t)=>{const n=await d.get((e=>`v2/hotes/${e}/paiements-payline/latest`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,t,n.montant,n.statut,n.token,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+n.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+n.token,new Date(n.date))},k=async(e,t)=>d.get((e=>`v1/hotes/${e}/resa-soir`)(t),{Authorization:`Bearer ${e}`}),b=async(e,t,s)=>{const n=await d.get(((e,t)=>`v1/reservations/hotes/${e}/semaines${"?num="+t||""}`)(t,s),{Authorization:`Bearer ${e}`});if(!n.rsvWebDto[0])throw new Error("No booking found for this week.");const o=function(e,t){e-=2;const s=new Date(t,0,1),n=s.getDay(),a=0===n?1:8-n,r=new Date(s);r.setDate(s.getDate()+a);const i=new Date(r);i.setDate(r.getDate()+7*e);const o=new Date(i);o.setDate(i.getDate()+6),i.setHours(0,0,0,0),o.setHours(23,59,59,999);const l=6e4*i.getTimezoneOffset();return{from:new Date(i.getTime()-l),to:new Date(o.getTime()-l)}}(n.rsvWebDto[0].semaine,n.rsvWebDto[0].annee),l=[],h=[];for(const s of n.rsvWebDto){for(const n of s.jours)h.push(new i(e,t,s.id,n.dayReserv>0,n.autorise,n.dayOfWeek,n.msg||"",n.dayReserv,new Date(o.from.getTime()+864e5*(n.dayOfWeek-1))));l.push(new a(s.id,s.semaine,s.hote.id,o.from,o.to,new r(s.borne.id,s.borne.idOrig,s.borne.code2p5,s.borne.lib,s.borne.prix.map((e=>({id:e.id,localId:e.idOrig,name:e.lib,price:e.prix})))),h))}return l},v=async(e,t,s,n,a=1,r=!1)=>{const o=await d.post((e=>`v2/hotes/${e}/reservations-jours`)(t),{dayOfWeek:n,dayReserv:a,web:{id:s},hasHoteResaSoirActive:r},{headers:{Authorization:`Bearer ${e}`}});return new i(e,t,o.id,o.dayReserv>0,!0,o.dayOfWeek,o.msg||"",o.dayReserv,new Date)},x=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}/freres-soeurs`)(t),{Authorization:`Bearer ${e}`}),n=[];for(const e of s)n.push(u(e));return n},D=new e("https://api-rest-prod.incb.fr/api"),B=async(e,t,s,n)=>(await D.put("v1/utilisateurs/password",{id:e,password:t,newPassword:s},{headers:{Authorization:`Bearer ${n}`}})).token,$=new e("https://api-rest-prod.incb.fr/api"),I=async(e,t="",s=10,n=!1,a)=>{const r=await $.get(((e,t,s)=>`v1/etablissements?q=${e}&code2p5=${t}&limit=${s}`)(e,t,s)),i=[];if(a&&!n)for(const e of r)i.push(await P(a,e.code2p5));else for(const e of r)i.push(c(e));return i},P=async(e,t)=>{const s=await $.get((n=t,`v2/etablissements?code2p5=${n}`),{Authorization:`Bearer ${e}`});var n;if(0===s.length)throw new Error("Establishment not found");return c(s[0])},R=async(e,t)=>{var s;return c(await $.get((s=t,`v1/etablissements/etabId/${s}`),{Authorization:`Bearer ${e}`}))},T=new e("https://api-rest-prod.incb.fr/api"),C=async(e,t)=>{const n=await T.get((e=>`v1/paiements-payline/${e}`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,n.hote.id,n.montant,n.statut,t,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+t,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+t,new Date(n.date))},S=new e("https://api-rest-prod.incb.fr/api"),E=async(e,t,s,n,a)=>{if(a)return new A({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5});const r=await m(e.access_token,e.hoteId),[i,o]=await Promise.all([p(e.access_token,e.hoteId),R(e.access_token,r.etabId)]);return new A({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5},o,r,i)},q=async(e,t,s=!0,n=!1,a)=>{const r=await S.post("v1/auth/login",{username:e,password:t,hoteId:a});return E(r,s,e,t,n)},A=class{constructor(e,t,s,n){this.credentials=e,this.establishment=t,this.host=s,this.balances=n}async bookMeal(e,t,s,n){return await this.refreshBearerToken(),v(this.credentials.token,this.credentials.hostId,e,t,s,n)}async canBookEvening(){return await this.refreshBearerToken(),k(this.credentials.token,this.credentials.hostId)}async editPassword(e,t){return await this.refreshBearerToken(),B(this.credentials.userId,e,t,this.credentials.token)}async getBalances(){return await this.refreshBearerToken(),p(this.credentials.token,this.credentials.hostId)}async getBookings(e){return await this.refreshBearerToken(),b(this.credentials.token,this.credentials.hostId,e)}async getEstablishment(e){await this.refreshBearerToken();const t=e||this.host?.etabId;if(!t)throw new Error("You need to provide an establishment ID to get the establishment. You can also disable the minimalist mode on authentication.");return R(this.credentials.token,t)}async getHistory(){return await this.refreshBearerToken(),g(this.credentials.token,this.credentials.hostId)}async getHistoryEvent(e){return await this.refreshBearerToken(),w(this.credentials.token,this.credentials.hostId,e)}async getHost(){return await this.refreshBearerToken(),m(this.credentials.token,this.credentials.hostId)}async getLastPayment(){return await this.refreshBearerToken(),y(this.credentials.token,this.credentials.hostId)}async getPayment(e){return await this.refreshBearerToken(),C(this.credentials.token,e)}async getSiblings(){return await this.refreshBearerToken(),x(this.credentials.token,this.credentials.hostId)}async initPayment(e){return await this.refreshBearerToken(),f(this.credentials.token,this.credentials.hostId,e)}async refreshBearerToken(e=!1){if(!e&&this.credentials.token_expiry>Date.now())return!1;if(!this.credentials.password||!this.credentials.username)throw new Error("You need to provide a username and password to refresh the bearer token.");const t=await q(this.credentials.username,this.credentials.password,!0,!1);return this.credentials=t.credentials,!0}async searchEstablishments(e,t="",s=10,n=!1){return await this.refreshBearerToken(),I(e,t,s,n,this.credentials.token)}};exports.Balance=t,exports.Booking=a,exports.BookingDay=i,exports.Client=A,exports.Establishment=o,exports.HistoryEvent=n,exports.Host=l,exports.Payment=s,exports.Terminal=r,exports.authenticateWithCredentials=q,exports.authenticateWithTicket=async(e,t,s=!0,n=!1)=>{const a=(await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${e}&ticket=${t}`)).headers.get("set-cookie"),r=a?.split(";")[0].split("=")[1]??"",i=a?.split(";")[0].split("=")[1]??"",o=await S.post("v1/auth/login",{username:r,password:i});return E(o,s,r,i,n)},exports.bookMeal=v,exports.canBookEvening=k,exports.editPassword=B,exports.getBalances=p,exports.getBookings=b,exports.getEstablishment=R,exports.getEstablishmentBy2P5=P,exports.getHistory=g,exports.getHistoryEvent=w,exports.getHost=m,exports.getHostSiblings=x,exports.getLastPayment=y,exports.getPayment=C,exports.initPayment=f,exports.requestPasswordReset=async e=>{const t=await D.get((e=>`v1/utilisateurs/password?email=${e}`)(e));if(0!==t.rejected.length)throw new Error(`Failed to send password reset email to ${t.rejected.join(", ")}`);return!0},exports.searchEstablishments=I;//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rest/RESTManager.ts","../src/rest/endpoints.ts","../src/structures/Balance.ts","../src/structures/Payment.ts","../src/structures/HistoryEvent.ts","../src/structures/Booking.ts","../src/structures/Terminal.ts","../src/structures/BookingDay.ts","../src/utils/weekRange.ts","../src/structures/Establishment.ts","../src/structures/Host.ts","../src/utils/transformers.ts","../src/routes/Host.ts","../src/routes/Account.ts","../src/routes/Establishment.ts","../src/routes/Payment.ts","../src/utils/authenticate.ts","../src/structures/Client.ts"],"names":["responseData","manager"],"mappings":"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","file":"index.js","sourcesContent":["/** @module RESTManager */\nimport { RequestOptions } from \"../types/request-handler\";\n\nexport class RestManager {\n private readonly baseURL: string;\n\n constructor(baseURL: string) {\n this.baseURL = baseURL;\n }\n\n private async sendRequest<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers } = options;\n const url = `${this.baseURL}/${path}`;\n\n const response = await fetch(url, {\n method,\n body: body ? JSON.stringify(body) : undefined,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n \"User-Agent\": \"@raphckrman/turboself-api\"\n }\n });\n\n if (!response.ok) {\n const responseData = await response.json();\n throw new Error(`${response.status}: ${JSON.stringify(responseData)}`);\n }\n\n const responseData = await response.json();\n return responseData as T;\n }\n\n async get<T>(\n path: string,\n headers?: Record<string, string>\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"GET\",\n path: path,\n headers: headers\n });\n }\n\n async post<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"POST\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async put<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"PUT\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async delete<T>(\n path: string,\n params?: Record<string, any>,\n options?: RequestOptions\n ): Promise<T> {\n const urlParams = new URLSearchParams(params).toString();\n const urlPath = urlParams ? `${path}?${urlParams}` : path;\n return this.sendRequest<T>({\n method: \"DELETE\",\n path: urlPath,\n headers: options?.headers\n });\n }\n}\n","/** REST/Endpoints */\nexport const BASE_URL = () => \"https://api-rest-prod.incb.fr/api\";\n\nexport const AUTH_LOGIN = () => \"v1/auth/login\";\nexport const AUTH_SIGNUP = () => \"v1/creation-comptes\";\nexport const AUTH_PASSWORD_RESET = (email: string) => `v1/utilisateurs/password?email=${email}`;\nexport const AUTH_PASSWORD_CHANGE = () => \"v1/utilisateurs/password\";\n\nexport const USER_BY_ID = (userId: number) => `v1/utilisateurs/${userId}`;\nexport const USER_BY_HOTE = (hostId: number) => `v1/utilisateurs/hotes/${hostId}`;\n\nexport const HOST = (hostId: number) => `v1/hotes/${hostId}`;\nexport const HOST_BALANCE = (hostId: number) => `v1/comptes/hotes/${hostId}/3`;\nexport const HOST_ACCOUNTS = (hostId: number) => `v2/hotes/${hostId}/comptes`;\nexport const HOST_SIBLINGS = (hostId: number) => `v1/hotes/${hostId}/freres-soeurs`;\nexport const HOST_BOOK_EVENING = (hostId: number) => `v1/hotes/${hostId}/resa-soir`;\nexport const HOST_HISTORY_GLOBAL = (hostId: number) => `v1/historiques/hotes/${hostId}`;\nexport const HOST_INIT_PAYMENT = (hostId: number) => `v2/hotes/${hostId}/paiements/init`;\nexport const HOST_PAYMENTS_LATEST = (hostId: number) => `v2/hotes/${hostId}/paiements-payline/latest`;\nexport const HOST_HISTORY_SPECIFIC = (hostId: number, eventId: number) => `v2/hotes/${hostId}/historiques/${eventId}`;\nexport const HOST_RESERVATIONS = (hostId: number, week?: number) => `v1/reservations/hotes/${hostId}/semaines${\"?num=\" + week || \"\"}`;\nexport const HOST_RESERVATIONS_SPECIFIC = (hostId: number, reservationId: string) => `v2/hotes/${hostId}/reservations/${reservationId}`;\nexport const HOST_BOOK_MEAL = (hostId: number) => `v2/hotes/${hostId}/reservations-jours`;\n\nexport const ESTABLISHMENT_BY_CODE = (code: string) => `v2/etablissements?code2p5=${code}`;\nexport const ESTABLISHMENT_BY_ID = (establishmentId: number) => `v1/etablissements/etabId/${establishmentId}`;\nexport const ESTABLISHMENT_SEARCH = (query: string, code: string, limit: number) => `v1/etablissements?q=${query}&code2p5=${code}&limit=${limit}`;\n\nexport const TERMINALS_BY_ID = (terminalId: number) => `v1/bornes/${terminalId}`;\n\nexport const PAYMENTS_SPECIFIC = (paymentToken: string) => `v1/paiements-payline/${paymentToken}`;\n","export class Balance {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: number,\n /** Internal identifier of the host */\n public hostId: number,\n /** Label of the balance */\n public label: string,\n /** Amount of the balance */\n public amount: number,\n /** Estimated host account balance (taking into account future reservations and OK payments) */\n public estimatedAmount: number,\n /** Date of the estimated balance */\n public estimatedDate: Date\n ) {}\n}\n","export class Payment {\n constructor(\n /** Internal identifier of Payline payment in the digital space */\n public id: number | null,\n /** Host ID of the buyer */\n public hostId: number,\n /** Amount of the payment */\n public amount: number,\n /** Status of the payment */\n public status: string,\n /** Payment token */\n public token: string,\n /** URL of the payment page */\n public url: string | null,\n /** URL to redirect to if the payment is cancelled */\n public cancelURL: string,\n /** URL to redirect to if the payment is successful */\n public returnURL: string,\n /** Date of the payment */\n public date: Date\n ) {}\n\n}\n","export class HistoryEvent {\n constructor(\n /** Internal identifier of a host's history in digital space */\n public id: number,\n /** Date of the operation */\n public date: Date,\n /** Operation details */\n public label: string,\n /** Amount of the operation */\n public amount: number\n ) {}\n\n}\n","import { BookingDay } from \"./BookingDay\";\nimport { Terminal } from \"./Terminal\";\n\nexport class Booking {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: string,\n /** Calendar week number */\n public week: number,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Week Start Date */\n public from: Date,\n /** Week End Date */\n public to: Date,\n /** Terminal information */\n public terminal: Terminal,\n /** Days of the week available to book */\n public days: Array<BookingDay>\n ) {}\n}\n","export class Terminal {\n constructor(\n /** Internal identifier of the Self terminal in the digital space */\n public id: number,\n /** Internal identfeir of the Self terminal in the local database */\n public localId: number,\n /** 2P5 Code of the establishment */\n public code: number,\n /** Terminal Name (eg. Self) */\n public name: string,\n public prices: Array<{\n /** Internal identifier of the price in the digital space */\n id: number;\n /** Internal identifier of the price in the local database */\n localId: number;\n /** Name of the price */\n name: string;\n /** Price in cents */\n price: number;\n }>\n ) {}\n}\n","import { bookMeal } from \"../routes/Host\";\n\nexport class BookingDay {\n constructor(\n private token: string,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Internal identifier of the booking week in the digital space */\n public id: string,\n /** Whether the day is booked */\n public booked: boolean,\n /** Whether the day is available to book */\n public canBook: boolean,\n /** Day of the week */\n public dayNumber: number,\n /** Message to display */\n public message: string,\n /** Number of reservations this day */\n public reservations: number,\n /** Date of the day */\n public date: Date\n ) {}\n\n async book(reservations = 1, bookEvening = false): Promise<BookingDay> {\n this.booked = reservations > 0;\n return bookMeal(this.token, this.hostId, this.id, this.date.getDay(), reservations, bookEvening);\n }\n}\n","export function getWeekRange(weekNumber: number, year: number): { from: Date; to: Date; } {\n weekNumber -= 2;\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfWeek = firstDayOfYear.getDay();\n const daysToFirstMonday = (dayOfWeek === 0) ? 1 : (8 - dayOfWeek);\n const firstMonday = new Date(firstDayOfYear);\n firstMonday.setDate(firstDayOfYear.getDate() + daysToFirstMonday);\n const weekStartDate = new Date(firstMonday);\n weekStartDate.setDate(firstMonday.getDate() + weekNumber * 7);\n const weekEndDate = new Date(weekStartDate);\n weekEndDate.setDate(weekStartDate.getDate() + 6);\n weekStartDate.setHours(0, 0, 0, 0);\n weekEndDate.setHours(23, 59, 59, 999);\n const timezoneOffset = weekStartDate.getTimezoneOffset() * 60000;\n const fromLocal = new Date(weekStartDate.getTime() - timezoneOffset);\n const toLocal = new Date(weekEndDate.getTime() - timezoneOffset);\n return { from: fromLocal, to: toLocal };\n}\n","/** @class Establishment */\n\nimport {\n Closure,\n Contact,\n Location,\n Permissions,\n SSOConfiguration,\n Synchronisation\n} from \"../types/establishment\";\n\nexport class Establishment {\n constructor(\n /** Internal identifier of the establishment on the digital space */\n public id: number,\n /** Name of establishment (max length: 50) */\n public name: string,\n /** Currency symbol */\n public currencySymbol: string | null,\n /** 2p5 code */\n public code: string | null,\n /** URL of the establishment logo */\n public logoUrl: string | null,\n /** UAI (Unité Administrative Immatriculée) code, unique to each establishment */\n public uai: string | null,\n /** Server MAC Adress */\n public macAddress: string | null,\n /** Digital space greeting */\n public motd: string,\n /** Minimum number of meals to credit the Self account */\n public minMealsToCredit: number | null,\n /** Minimum debt to credit the Forfait account */\n public minDebtToCredit: number | null,\n /** Minimum amount to credit the Self account */\n public minAmountToCredit: number | null,\n /** If the establishment is disabled */\n public disabled: boolean | null,\n public closures: Array<Closure>,\n public location: Location,\n public contact: Contact,\n public permissions: Permissions,\n public sso: SSOConfiguration | null,\n public synchronisation: Synchronisation\n ) {}\n\n}\n","/** @class Host */\n\nexport class Host {\n constructor(\n /** Internal identifier of the host on the digital space */\n public id: number,\n /** Internal identifier of the host in the TurboSelf local database */\n public localId: number,\n public etabId: number,\n /** First name of the host */\n public firstName: string,\n /** Last name of the host */\n public lastName: string,\n /** Host mode */\n public mode: \"Argent\" | \"Forfait\",\n /** Host quality */\n public quality: string,\n /** Host's Class */\n public division: string,\n /** Lunch Price */\n public lunchPrice: number,\n /** Type of host (Student or Commensal or Trainee) */\n public type: number,\n /** Host coded card number */\n public cardNumber: number,\n /** Access URL for Cafeteria pre-order */\n public cafeteriaUrl: string | null,\n public permissions: {\n /** Does the student have the right to payment in the digital space? */\n payment?: boolean;\n /** Does the student have the right to reservation on the digital space? */\n reservation?: boolean;\n /** Is the student entitled to pre-order Cafeteria on the digital space? */\n cafeteria?: boolean;\n /** Is the host allowed to book if their balance is insufficient? */\n bookWithNegativeBalance?: boolean;\n /** Number of passages or reservations authorized at the Self for a service */\n maxPassages?: number;\n }\n ) {}\n\n\n}\n","import { Establishment } from \"../structures/Establishment\";\nimport { Host } from \"../structures/Host\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { rawHostResult } from \"../types/host\";\n\nfunction isRawEstablishmentResult(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): establishment is rawEstablishmentResult {\n return (establishment as rawEstablishmentResult).id !== undefined;\n}\n\nexport function transformToEstablishment(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): Establishment {\n return new Establishment(\n isRawEstablishmentResult(establishment) ? (establishment.id ?? 0) : 0,\n isRawEstablishmentResult(establishment) ? (establishment.nom || \"N/A\") : establishment.nom,\n isRawEstablishmentResult(establishment) ? (establishment.currencySymbol || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.code2p5 || null) : establishment.code2p5,\n isRawEstablishmentResult(establishment) ? (establishment.logoUrl || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.numEtab || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.pcServeur || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.msgAccueil || \"\") : \"You are not logged in so you can't see all data\",\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.nbRepasMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.creanceMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.montantCreditMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.desactive || false) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.fermetures?.map(closure => ({\n id: closure.id,\n canBook: !closure.rsv,\n canPay: !closure.paiement,\n from: new Date(closure.du),\n to: new Date(closure.au)\n })) || []) : [],\n isRawEstablishmentResult(establishment) ? ({\n city: establishment.ville,\n address: establishment.adr1 + \" \" + establishment.adr2,\n postcode: establishment.cp\n }) : {\n city: null,\n address: null,\n postcode: null\n },\n isRawEstablishmentResult(establishment) ? ({\n phoneNumber: establishment.tel || null,\n faxNumber: establishment.fax || null,\n email: establishment.configuration?.email || null,\n website: establishment.configuration?.url || null\n }) : {\n phoneNumber: null,\n faxNumber: null,\n email: null,\n website: null\n },\n isRawEstablishmentResult(establishment) ? ({\n maxReservationsStudentMoney: establishment.configurationSelf?.nbmultiElvArg || null,\n maxReservationsStudentPackage: establishment.configurationSelf?.nbmultiElvFor || null,\n maxReservationsCommensalMoney: establishment.configurationSelf?.nbmultiComArg || null,\n maxReservationsCommensalPackage: establishment.configurationSelf?.nbmultiComFor || null,\n maxReservationsTraineeMoney: establishment.configurationSelf?.nbmultiStgArg || null,\n maxReservationsTraineePackage: establishment.configurationSelf?.nbmultiStgFor || null,\n qrCodeStudent: establishment.configuration?.autoriseQrCodeEleve || null,\n qrCodeCommensal: establishment.configuration?.autoriseQrCodeCommensal || null,\n qrCodeTrainee: establishment.configuration?.autoriseQrCodeStagiaire || null,\n hideHistory: establishment.configuration?.cacherHistorique || null\n }) : {\n maxReservationsStudentMoney: null,\n maxReservationsStudentPackage: null,\n maxReservationsCommensalMoney: null,\n maxReservationsCommensalPackage: null,\n maxReservationsTraineeMoney: null,\n maxReservationsTraineePackage: null,\n qrCodeStudent: null,\n qrCodeCommensal: null,\n qrCodeTrainee: null,\n hideHistory: null\n },\n isRawEstablishmentResult(establishment) ? ({\n id: establishment.configuration?.sso?.id || null,\n entCode: establishment.configuration?.sso?.entCode || null,\n entName: establishment.configuration?.sso?.entName || null,\n serveurCas: establishment.configuration?.sso?.serveurCas || null,\n service: establishment.configuration?.sso?.service || null\n }) : {\n id: null,\n entCode: null,\n entName: null,\n serveurCas: null,\n service: null\n },\n isRawEstablishmentResult(establishment) ? ({\n firstSync: new Date(establishment.datePremSynchro || 0),\n lastSync: new Date(establishment.dateDernSynchro || 0)\n }) : {\n firstSync: new Date(0),\n lastSync: new Date(0)\n }\n );\n}\n\nexport function transformToHost(host: rawHostResult): Host {\n return new Host(\n host.id,\n host.idOrig,\n host.etab.id,\n host.prenom,\n host.nom,\n host.mode,\n host.qualite,\n host.division,\n host.prixDej,\n host.type,\n host.carteCodee,\n host.urlCafeteria || null,\n {\n payment: host.droitPaiement || false,\n reservation: host.droitReservation || false,\n cafeteria: host.droitCafeteria || false,\n bookWithNegativeBalance: host.autoriseReservSoldeIns,\n maxPassages: host.nbMulti\n }\n );\n}\n","import { RestManager } from \"../rest/RESTManager\";\nimport {\n HOST,\n HOST_BALANCE,\n HOST_BOOK_EVENING,\n HOST_BOOK_MEAL,\n HOST_HISTORY_GLOBAL,\n HOST_HISTORY_SPECIFIC,\n HOST_INIT_PAYMENT,\n HOST_PAYMENTS_LATEST,\n HOST_RESERVATIONS,\n HOST_SIBLINGS\n} from \"../rest/endpoints\";\nimport { Host } from \"../structures/Host\";\nimport {\n rawBookingResult,\n rawBookResult,\n rawHistoryGet,\n rawHostBalanceResult,\n rawHostResult,\n rawPaymentInitResult\n} from \"../types/host\";\nimport { Balance } from \"../structures/Balance\";\nimport { Payment } from \"../structures/Payment\";\nimport { HistoryEvent } from \"../structures/HistoryEvent\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { Booking } from \"../structures/Booking\";\nimport { Terminal } from \"../structures/Terminal\";\nimport { BookingDay } from \"../structures/BookingDay\";\nimport { getWeekRange } from \"../utils/weekRange\";\nimport { transformToHost } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getHost = async (token: string, hostId: number): Promise<Host> => {\n const rawHostGet = await manager.get<rawHostResult>(HOST(hostId), { Authorization: `Bearer ${token}` });\n\n return transformToHost(rawHostGet);\n};\n\nexport const getBalances = async (token: string, hostId: number): Promise<Array<Balance>> => {\n const rawBalanceGet = await manager.get<Array<rawHostBalanceResult>>(HOST_BALANCE(hostId), { Authorization: `Bearer ${token}` });\n const balances: Array<Balance> = [];\n for (const balance of rawBalanceGet) {\n const dateString = balance.montantEstimeMsg.match(/(\\d{2})\\/(\\d{2})\\/(\\d{4})/)?.slice(1, 4);\n let date = new Date();\n if (dateString) {\n date = new Date(parseInt(dateString[2], 10), parseInt(dateString[1], 10) - 1, parseInt(dateString[0], 10));\n }\n balances.push(new Balance(\n balance.id,\n balance.hote.id,\n balance.appli.lib,\n balance.montant,\n balance.montantEstime,\n date\n ));\n }\n\n return balances;\n};\n\n\nexport const initPayment = async (token: string, hostId: number, amount: number): Promise<Payment> => {\n const rawPaymentInit = await manager.post<rawPaymentInitResult>(HOST_INIT_PAYMENT(hostId), [{\n paiementPayline: {\n hote: {\n id: hostId\n }\n },\n montant: amount\n }], {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n return new Payment(\n null,\n hostId,\n amount,\n \"INIT\",\n rawPaymentInit.token,\n rawPaymentInit.redirectURL,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPaymentInit.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPaymentInit.token,\n new Date()\n );\n};\n\nexport const getHistory = async (token: string, hostId: number): Promise<Array<HistoryEvent>> => {\n const rawHistory = await manager.get<Array<rawHistoryGet>>(HOST_HISTORY_GLOBAL(hostId), { Authorization: `Bearer ${token}` });\n const history: Array<HistoryEvent> = [];\n for (const event of rawHistory) {\n history.push(new HistoryEvent(\n event.id,\n new Date(event.date),\n event.detail,\n (event.credit ?? 0) - (event.debit ?? 0)\n ));\n }\n\n return history;\n};\n\nexport const getHistoryEvent = async (token: string, hostId: number, eventId: number): Promise<HistoryEvent> => {\n const rawHistory = await manager.get<rawHistoryGet>(HOST_HISTORY_SPECIFIC(hostId, eventId), { Authorization: `Bearer ${token}` });\n return new HistoryEvent(\n rawHistory.id,\n new Date(rawHistory.date),\n rawHistory.detail,\n (rawHistory.credit ?? 0) - (rawHistory.debit ?? 0)\n );\n};\n\nexport const getLastPayment = async (token: string, hostId: number): Promise<Payment> => {\n const rawPayment = await manager.get<rawPaymentResult>(HOST_PAYMENTS_LATEST(hostId), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPayment.id,\n hostId,\n rawPayment.montant,\n rawPayment.statut,\n rawPayment.token,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPayment.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPayment.token,\n new Date(rawPayment.date)\n );\n};\n\nexport const canBookEvening = async (token: string, hostId: number): Promise<boolean> => manager.get<boolean>(HOST_BOOK_EVENING(hostId), { Authorization: `Bearer ${token}` });\n\nexport const getBookings = async (token: string, hostId: number, week?: number): Promise<Array<Booking>> => {\n const rawBooking = await manager.get<rawBookingResult>(HOST_RESERVATIONS(hostId, week), { Authorization: `Bearer ${token}` });\n if (!rawBooking.rsvWebDto[0]) {\n throw new Error(\"No booking found for this week.\");\n }\n const weekRange = getWeekRange(rawBooking.rsvWebDto[0].semaine, rawBooking.rsvWebDto[0].annee);\n const bookings = [];\n const days = [];\n for (const rawBookingDto of rawBooking.rsvWebDto) {\n for (const rawDay of rawBookingDto.jours) {\n days.push(new BookingDay(\n token,\n hostId,\n rawBookingDto.id,\n rawDay.dayReserv > 0,\n rawDay.autorise,\n rawDay.dayOfWeek,\n rawDay.msg || \"\",\n rawDay.dayReserv,\n new Date(weekRange.from.getTime() + (rawDay.dayOfWeek - 1) * 86400000)\n ));\n }\n\n bookings.push(new Booking(\n rawBookingDto.id,\n rawBookingDto.semaine,\n rawBookingDto.hote.id,\n weekRange.from,\n weekRange.to,\n new Terminal(\n rawBookingDto.borne.id,\n rawBookingDto.borne.idOrig,\n rawBookingDto.borne.code2p5,\n rawBookingDto.borne.lib,\n rawBookingDto.borne.prix.map(price => ({\n id: price.id,\n localId: price.idOrig,\n name: price.lib,\n price: price.prix\n }))\n ),\n days\n ));\n }\n\n return bookings;\n};\n\nexport const bookMeal = async (token: string, hostId: number, bookId: string, day: number, reservations = 1, bookEvening = false): Promise<BookingDay> => {\n const rawBook = await manager.post<rawBookResult>(HOST_BOOK_MEAL(hostId), {\n dayOfWeek: day,\n dayReserv: reservations,\n web: {\n id: bookId\n },\n hasHoteResaSoirActive: bookEvening\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return new BookingDay(\n token,\n hostId,\n rawBook.id,\n rawBook.dayReserv > 0,\n true,\n rawBook.dayOfWeek,\n rawBook.msg || \"\",\n rawBook.dayReserv,\n new Date()\n );\n};\n\nexport const getHostSiblings = async (token: string, hostId: number): Promise<Array<Host>> => {\n const rawSiblings = await manager.get<Array<rawHostResult>>(HOST_SIBLINGS(hostId), { Authorization: `Bearer ${token}` });\n const siblings: Array<Host> = [];\n for (const rawSibling of rawSiblings) {\n siblings.push(transformToHost(rawSibling));\n }\n\n return siblings;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { rawPasswordChangeResult, rawRequestPasswordResetResult } from \"../types/account\";\nimport { AUTH_PASSWORD_CHANGE, AUTH_PASSWORD_RESET } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const requestPasswordReset = async (email: string): Promise<boolean> => {\n const rawRequestPasswordReset = await manager.get<rawRequestPasswordResetResult>(AUTH_PASSWORD_RESET(email));\n if (rawRequestPasswordReset.rejected.length !== 0) {\n throw new Error(`Failed to send password reset email to ${rawRequestPasswordReset.rejected.join(\", \")}`);\n }\n return true;\n};\n\nexport const editPassword = async (user: number, actualPassword: string, password: string, token: string): Promise<string> => {\n const rawPasswordChange = await manager.put<rawPasswordChangeResult>(AUTH_PASSWORD_CHANGE(), {\n id: user,\n password: actualPassword,\n newPassword: password\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return rawPasswordChange.token;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { ESTABLISHMENT_BY_CODE, ESTABLISHMENT_BY_ID, ESTABLISHMENT_SEARCH } from \"../rest/endpoints\";\nimport { Establishment } from \"../structures/Establishment\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { transformToEstablishment } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const searchEstablishments = async (query: string, code = \"\", limit = 10, minimalist = false, token?: string): Promise<Array<Establishment>> => {\n const rawEstablishmentSearch = await manager.get<Array<rawEstablishmentSearchResult>>(ESTABLISHMENT_SEARCH(query, code, limit));\n\n const establishments: Array<Establishment> = [];\n if (token && !minimalist) {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(await getEstablishmentBy2P5(token, establishment.code2p5));\n }\n } else {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(transformToEstablishment(establishment));\n }\n }\n\n\n return establishments;\n};\n\nexport const getEstablishmentBy2P5 = async (token: string, code2p5: string): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<Array<rawEstablishmentResult>>(ESTABLISHMENT_BY_CODE(code2p5), {\n Authorization: `Bearer ${token}`\n });\n if (rawEstablishmentGet.length === 0) {\n throw new Error(\"Establishment not found\");\n }\n const establishment = rawEstablishmentGet[0];\n return transformToEstablishment(establishment);\n};\n\nexport const getEstablishment = async (token: string, etabId: number): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<rawEstablishmentResult>(ESTABLISHMENT_BY_ID(etabId), {\n Authorization: `Bearer ${token}`\n });\n return transformToEstablishment(rawEstablishmentGet);\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { Payment } from \"../structures/Payment\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { PAYMENTS_SPECIFIC } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getPayment = async (token: string, paymentToken: string): Promise<Payment> => {\n const rawPaymentGet = await manager.get<rawPaymentResult>(PAYMENTS_SPECIFIC(paymentToken), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPaymentGet.id,\n rawPaymentGet.hote.id,\n rawPaymentGet.montant,\n rawPaymentGet.statut,\n paymentToken,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + paymentToken,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + paymentToken,\n new Date(rawPaymentGet.date)\n );\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { AUTH_LOGIN } from \"../rest/endpoints\";\nimport { getEstablishment } from \"../routes/Establishment\";\nimport { getBalances, getHost } from \"../routes/Host\";\nimport { Client } from \"../structures/Client\";\nimport { rawAuthResult } from \"../types/authentication\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nconst createClient = async (\n data: rawAuthResult,\n remember: boolean,\n username: string | null,\n password: string | null,\n minimalist: boolean\n): Promise<Client> => {\n if (minimalist) {\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n });\n }\n\n const host = await getHost(data.access_token, data.hoteId);\n\n const [balance, establishment] = await Promise.all([\n getBalances(data.access_token, data.hoteId),\n getEstablishment(data.access_token, host.etabId)\n ]);\n\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n }, establishment, host, balance);\n};\n\nexport const authenticateWithCredentials = async (\n username: string,\n password: string,\n remember = true,\n minimalist = false,\n hoteId?: number\n): Promise<Client> => {\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password,\n hoteId\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n\nexport const authenticateWithTicket = async (\n ent: \"PRONOTE\" | string,\n ticket: string,\n remember = true,\n minimalist = false\n): Promise<Client> => {\n const response = await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${ent}&ticket=${ticket}`);\n const cookies = response.headers.get(\"set-cookie\");\n const username: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n const password: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n","import { Establishment } from \"./Establishment\";\nimport { Host } from \"./Host\";\nimport { Balance } from \"./Balance\";\nimport { Payment } from \"./Payment\";\nimport { HistoryEvent } from \"./HistoryEvent\";\nimport { Booking } from \"./Booking\";\nimport { BookingDay } from \"./BookingDay\";\nimport { AuthCredentials } from \"../types/authentication\";\nimport {\n bookMeal,\n canBookEvening,\n getBalances,\n getBookings,\n getHistory,\n getHistoryEvent,\n getHost,\n getHostSiblings,\n getLastPayment,\n initPayment\n} from \"../routes/Host\";\nimport { getEstablishment, searchEstablishments } from \"../routes/Establishment\";\nimport { authenticateWithCredentials } from \"../utils/authenticate\";\nimport { getPayment } from \"../routes/Payment\";\nimport { editPassword } from \"../routes/Account\";\n\nexport class Client {\n constructor(\n private credentials: AuthCredentials,\n public establishment?: Establishment,\n public host?: Host,\n public balances?: Array<Balance>\n ) {}\n /** This method is used to book a meal.\n * @param bookId The booking ID\n * @param day The day\n * @param reservations The number of reservations\n * @param bookEvening Whether to book the evening\n */\n async bookMeal(bookId: string, day: number, reservations?: number, bookEvening?: boolean): Promise<BookingDay> {\n await this.refreshBearerToken();\n return bookMeal(this.credentials.token, this.credentials.hostId, bookId, day, reservations, bookEvening);\n }\n /** This method is used to check if the client can book an evening.\n */\n async canBookEvening(): Promise<boolean> {\n await this.refreshBearerToken();\n return canBookEvening(this.credentials.token, this.credentials.hostId);\n }\n\n /** This method is used to edit the password of the client.\n * @param actualPassword The actual password\n * @param password The new password\n * @returns The token of the request\n */\n async editPassword(actualPassword: string, password: string): Promise<string> {\n await this.refreshBearerToken();\n return editPassword(this.credentials.userId, actualPassword, password, this.credentials.token);\n }\n\n /** This method is used to get the balances of the client.\n */\n async getBalances(): Promise<Array<Balance>> {\n await this.refreshBearerToken();\n return getBalances(this.credentials.token, this.credentials.hostId);\n }\n async getBookings(week?: number): Promise<Array<Booking>> {\n await this.refreshBearerToken();\n return getBookings(this.credentials.token, this.credentials.hostId, week);\n }\n /** This method is used to get the establishment of the client.\n * @param establishmentId The establishment ID to get. If not provided, the establishment of the host will be returned.\n */\n async getEstablishment(establishmentId?: number): Promise<Establishment> {\n await this.refreshBearerToken();\n const etabId = establishmentId || this.host?.etabId;\n if (!etabId) {\n throw new Error(\n \"You need to provide an establishment ID to get the establishment. \" +\n \"You can also disable the minimalist mode on authentication.\"\n );\n }\n return getEstablishment(this.credentials.token, etabId);\n }\n /** This method is used to get the history of the client.\n */\n async getHistory(): Promise<Array<HistoryEvent>> {\n await this.refreshBearerToken();\n return getHistory(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific history event.\n * @param eventId The event ID\n */\n async getHistoryEvent(eventId: number): Promise<HistoryEvent> {\n await this.refreshBearerToken();\n return getHistoryEvent(this.credentials.token, this.credentials.hostId, eventId);\n }\n /** This method is used to get the host of the client.\n */\n async getHost(): Promise<Host> {\n await this.refreshBearerToken();\n return getHost(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get the last payment of the client.\n */\n async getLastPayment(): Promise<Payment> {\n await this.refreshBearerToken();\n return getLastPayment(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific payment.\n * @param paymentToken The payment token\n */\n async getPayment(paymentToken: string): Promise<Payment> {\n await this.refreshBearerToken();\n return getPayment(this.credentials.token, paymentToken);\n }\n\n /** This method is used to get siblings of the host\n */\n async getSiblings(): Promise<Array<Host>> {\n await this.refreshBearerToken();\n return getHostSiblings(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to initialize a payment.\n * @param amount The amount\n */\n async initPayment(amount: number): Promise<Payment> {\n await this.refreshBearerToken();\n return initPayment(this.credentials.token, this.credentials.hostId, amount);\n }\n async refreshBearerToken(force = false): Promise<boolean> {\n if (!force && this.credentials.token_expiry > Date.now()) {\n return false;\n }\n if (!this.credentials.password || !this.credentials.username) {\n throw new Error(\"You need to provide a username and password to refresh the bearer token.\");\n }\n const client = await authenticateWithCredentials(this.credentials.username, this.credentials.password, true, false);\n this.credentials = client.credentials;\n return true;\n }\n\n\n /** This method is used to search for establishments.\n * @param query The query to search for.\n * @param code The establishment code to search for.\n * @param limit The maximum number of establishments to return.\n * @param minimalist Whether to return only minimalist data or the full establishment data (more requests).\n */\n async searchEstablishments(query: string, code = \"\", limit = 10, minimalist = false): Promise<Array<Establishment>> {\n await this.refreshBearerToken();\n return searchEstablishments(query, code, limit, minimalist, this.credentials.token);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/rest/RESTManager.ts","../src/rest/endpoints.ts","../src/structures/Balance.ts","../src/structures/Payment.ts","../src/structures/HistoryEvent.ts","../src/structures/Booking.ts","../src/structures/Terminal.ts","../src/structures/BookingDay.ts","../src/utils/weekRange.ts","../src/structures/Establishment.ts","../src/structures/Host.ts","../src/utils/transformers.ts","../src/routes/Host.ts","../src/routes/Account.ts","../src/routes/Establishment.ts","../src/routes/Payment.ts","../src/utils/authenticate.ts","../src/structures/Client.ts"],"names":["responseData","manager"],"mappings":"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","file":"index.js","sourcesContent":["/** @module RESTManager */\nimport { RequestOptions } from \"../types/request-handler\";\n\nexport class RestManager {\n private readonly baseURL: string;\n\n constructor(baseURL: string) {\n this.baseURL = baseURL;\n }\n\n private async sendRequest<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers } = options;\n const url = `${this.baseURL}/${path}`;\n\n const response = await fetch(url, {\n method,\n body: body ? JSON.stringify(body) : undefined,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n \"User-Agent\": \"@raphckrman/turboself-api\"\n }\n });\n\n if (!response.ok) {\n const responseData = await response.json();\n throw new Error(`${response.status}: ${JSON.stringify(responseData)}`);\n }\n\n const responseData = await response.json();\n return responseData as T;\n }\n\n async get<T>(\n path: string,\n headers?: Record<string, string>\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"GET\",\n path: path,\n headers: headers\n });\n }\n\n async post<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"POST\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async put<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"PUT\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async delete<T>(\n path: string,\n params?: Record<string, any>,\n options?: RequestOptions\n ): Promise<T> {\n const urlParams = new URLSearchParams(params).toString();\n const urlPath = urlParams ? `${path}?${urlParams}` : path;\n return this.sendRequest<T>({\n method: \"DELETE\",\n path: urlPath,\n headers: options?.headers\n });\n }\n}\n","/** REST/Endpoints */\nexport const BASE_URL = () => \"https://api-rest-prod.incb.fr/api\";\n\nexport const AUTH_LOGIN = () => \"v1/auth/login\";\nexport const AUTH_SIGNUP = () => \"v1/creation-comptes\";\nexport const AUTH_PASSWORD_RESET = (email: string) => `v1/utilisateurs/password?email=${email}`;\nexport const AUTH_PASSWORD_CHANGE = () => \"v1/utilisateurs/password\";\n\nexport const USER_BY_ID = (userId: number) => `v1/utilisateurs/${userId}`;\nexport const USER_BY_HOTE = (hostId: number) => `v1/utilisateurs/hotes/${hostId}`;\n\nexport const HOST = (hostId: number) => `v1/hotes/${hostId}`;\nexport const HOST_BALANCE = (hostId: number) => `v1/comptes/hotes/${hostId}/3`;\nexport const HOST_ACCOUNTS = (hostId: number) => `v2/hotes/${hostId}/comptes`;\nexport const HOST_SIBLINGS = (hostId: number) => `v1/hotes/${hostId}/freres-soeurs`;\nexport const HOST_BOOK_EVENING = (hostId: number) => `v1/hotes/${hostId}/resa-soir`;\nexport const HOST_HISTORY_GLOBAL = (hostId: number) => `v1/historiques/hotes/${hostId}`;\nexport const HOST_INIT_PAYMENT = (hostId: number) => `v2/hotes/${hostId}/paiements/init`;\nexport const HOST_PAYMENTS_LATEST = (hostId: number) => `v2/hotes/${hostId}/paiements-payline/latest`;\nexport const HOST_HISTORY_SPECIFIC = (hostId: number, eventId: number) => `v2/hotes/${hostId}/historiques/${eventId}`;\nexport const HOST_RESERVATIONS = (hostId: number, week?: number) => `v1/reservations/hotes/${hostId}/semaines${\"?num=\" + week || \"\"}`;\nexport const HOST_RESERVATIONS_SPECIFIC = (hostId: number, reservationId: string) => `v2/hotes/${hostId}/reservations/${reservationId}`;\nexport const HOST_BOOK_MEAL = (hostId: number) => `v2/hotes/${hostId}/reservations-jours`;\n\nexport const ESTABLISHMENT_BY_CODE = (code: string) => `v2/etablissements?code2p5=${code}`;\nexport const ESTABLISHMENT_BY_ID = (establishmentId: number) => `v1/etablissements/etabId/${establishmentId}`;\nexport const ESTABLISHMENT_SEARCH = (query: string, code: string, limit: number) => `v1/etablissements?q=${query}&code2p5=${code}&limit=${limit}`;\n\nexport const TERMINALS_BY_ID = (terminalId: number) => `v1/bornes/${terminalId}`;\n\nexport const PAYMENTS_SPECIFIC = (paymentToken: string) => `v1/paiements-payline/${paymentToken}`;\n","export class Balance {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: number,\n /** Internal identifier of the host */\n public hostId: number,\n /** Label of the balance */\n public label: string,\n /** Amount of the balance */\n public amount: number,\n /** Estimated host account balance (taking into account future reservations and OK payments) */\n public estimatedAmount: number,\n /** Date of the estimated balance */\n public estimatedDate: Date\n ) {}\n}\n","export class Payment {\n constructor(\n /** Internal identifier of Payline payment in the digital space */\n public id: number | null,\n /** Host ID of the buyer */\n public hostId: number,\n /** Amount of the payment */\n public amount: number,\n /** Status of the payment */\n public status: string,\n /** Payment token */\n public token: string,\n /** URL of the payment page */\n public url: string | null,\n /** URL to redirect to if the payment is cancelled */\n public cancelURL: string,\n /** URL to redirect to if the payment is successful */\n public returnURL: string,\n /** Date of the payment */\n public date: Date\n ) {}\n\n}\n","export class HistoryEvent {\n constructor(\n /** Internal identifier of a host's history in digital space */\n public id: number,\n /** Date of the operation */\n public date: Date,\n /** Operation details */\n public label: string,\n /** Amount of the operation */\n public amount: number\n ) {}\n\n}\n","import { BookingDay } from \"./BookingDay\";\nimport { Terminal } from \"./Terminal\";\n\nexport class Booking {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: string,\n /** Calendar week number */\n public week: number,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Week Start Date */\n public from: Date,\n /** Week End Date */\n public to: Date,\n /** Terminal information */\n public terminal: Terminal,\n /** Days of the week available to book */\n public days: Array<BookingDay>\n ) {}\n}\n","export class Terminal {\n constructor(\n /** Internal identifier of the Self terminal in the digital space */\n public id: number,\n /** Internal identfeir of the Self terminal in the local database */\n public localId: number,\n /** 2P5 Code of the establishment */\n public code: number,\n /** Terminal Name (eg. Self) */\n public name: string,\n public prices: Array<{\n /** Internal identifier of the price in the digital space */\n id: number;\n /** Internal identifier of the price in the local database */\n localId: number;\n /** Name of the price */\n name: string;\n /** Price in cents */\n price: number;\n }>\n ) {}\n}\n","import { bookMeal } from \"../routes/Host\";\n\nexport class BookingDay {\n constructor(\n private token: string,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Internal identifier of the booking week in the digital space */\n public id: string,\n /** Whether the day is booked */\n public booked: boolean,\n /** Whether the day is available to book */\n public canBook: boolean,\n /** Day of the week */\n public dayNumber: number,\n /** Message to display */\n public message: string,\n /** Number of reservations this day */\n public reservations: number,\n /** Date of the day */\n public date: Date\n ) {}\n\n async book(reservations = 1, bookEvening = false): Promise<BookingDay> {\n this.booked = reservations > 0;\n return bookMeal(this.token, this.hostId, this.id, this.date.getDay(), reservations, bookEvening);\n }\n}\n","export function getWeekRange(weekNumber: number, year: number): { from: Date; to: Date; } {\n weekNumber -= 2;\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfWeek = firstDayOfYear.getDay();\n const daysToFirstMonday = (dayOfWeek === 0) ? 1 : (8 - dayOfWeek);\n const firstMonday = new Date(firstDayOfYear);\n firstMonday.setDate(firstDayOfYear.getDate() + daysToFirstMonday);\n const weekStartDate = new Date(firstMonday);\n weekStartDate.setDate(firstMonday.getDate() + weekNumber * 7);\n const weekEndDate = new Date(weekStartDate);\n weekEndDate.setDate(weekStartDate.getDate() + 6);\n weekStartDate.setHours(0, 0, 0, 0);\n weekEndDate.setHours(23, 59, 59, 999);\n const timezoneOffset = weekStartDate.getTimezoneOffset() * 60000;\n const fromLocal = new Date(weekStartDate.getTime() - timezoneOffset);\n const toLocal = new Date(weekEndDate.getTime() - timezoneOffset);\n return { from: fromLocal, to: toLocal };\n}\n","/** @class Establishment */\n\nimport {\n Closure,\n Contact,\n Location,\n Permissions,\n SSOConfiguration,\n Synchronisation\n} from \"../types/establishment\";\n\nexport class Establishment {\n constructor(\n /** Internal identifier of the establishment on the digital space */\n public id: number,\n /** Name of establishment (max length: 50) */\n public name: string,\n /** Currency symbol */\n public currencySymbol: string | null,\n /** 2p5 code */\n public code: string | null,\n /** URL of the establishment logo */\n public logoUrl: string | null,\n /** UAI (Unité Administrative Immatriculée) code, unique to each establishment */\n public uai: string | null,\n /** Server MAC Adress */\n public macAddress: string | null,\n /** Digital space greeting */\n public motd: string,\n /** Minimum number of meals to credit the Self account */\n public minMealsToCredit: number | null,\n /** Minimum debt to credit the Forfait account */\n public minDebtToCredit: number | null,\n /** Minimum amount to credit the Self account */\n public minAmountToCredit: number | null,\n /** If the establishment is disabled */\n public disabled: boolean | null,\n public closures: Array<Closure>,\n public location: Location,\n public contact: Contact,\n public permissions: Permissions,\n public sso: SSOConfiguration | null,\n public synchronisation: Synchronisation\n ) {}\n\n}\n","/** @class Host */\n\nexport class Host {\n constructor(\n /** Internal identifier of the host on the digital space */\n public id: number,\n /** Internal identifier of the host in the TurboSelf local database */\n public localId: number,\n public etabId: number,\n /** First name of the host */\n public firstName: string,\n /** Last name of the host */\n public lastName: string,\n /** Host mode */\n public mode: \"Argent\" | \"Forfait\",\n /** Host quality */\n public quality: string,\n /** Host's Class */\n public division: string,\n /** Lunch Price */\n public lunchPrice: number,\n /** Type of host (Student or Commensal or Trainee) */\n public type: number,\n /** Host coded card number */\n public cardNumber: number,\n /** Access URL for Cafeteria pre-order */\n public cafeteriaUrl: string | null,\n public permissions: {\n /** Does the student have the right to payment in the digital space? */\n payment?: boolean;\n /** Does the student have the right to reservation on the digital space? */\n reservation?: boolean;\n /** Is the student entitled to pre-order Cafeteria on the digital space? */\n cafeteria?: boolean;\n /** Is the host allowed to book if their balance is insufficient? */\n bookWithNegativeBalance?: boolean;\n /** Number of passages or reservations authorized at the Self for a service */\n maxPassages?: number;\n }\n ) {}\n\n\n}\n","import { Establishment } from \"../structures/Establishment\";\nimport { Host } from \"../structures/Host\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { rawHostResult } from \"../types/host\";\n\nfunction isRawEstablishmentResult(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): establishment is rawEstablishmentResult {\n return (establishment as rawEstablishmentResult).id !== undefined;\n}\n\nexport function transformToEstablishment(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): Establishment {\n return new Establishment(\n isRawEstablishmentResult(establishment) ? (establishment.id ?? 0) : 0,\n isRawEstablishmentResult(establishment) ? (establishment.nom || \"N/A\") : establishment.nom,\n isRawEstablishmentResult(establishment) ? (establishment.currencySymbol || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.code2p5 || null) : establishment.code2p5,\n isRawEstablishmentResult(establishment) ? (establishment.logoUrl || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.numEtab || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.pcServeur || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.msgAccueil || \"\") : \"You are not logged in so you can't see all data\",\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.nbRepasMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.creanceMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.montantCreditMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.desactive || false) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.fermetures?.map(closure => ({\n id: closure.id,\n canBook: !closure.rsv,\n canPay: !closure.paiement,\n from: new Date(closure.du),\n to: new Date(closure.au)\n })) || []) : [],\n isRawEstablishmentResult(establishment) ? ({\n city: establishment.ville,\n address: establishment.adr1 + \" \" + establishment.adr2,\n postcode: establishment.cp\n }) : {\n city: null,\n address: null,\n postcode: null\n },\n isRawEstablishmentResult(establishment) ? ({\n phoneNumber: establishment.tel || null,\n faxNumber: establishment.fax || null,\n email: establishment.configuration?.email || null,\n website: establishment.configuration?.url || null\n }) : {\n phoneNumber: null,\n faxNumber: null,\n email: null,\n website: null\n },\n isRawEstablishmentResult(establishment) ? ({\n maxReservationsStudentMoney: establishment.configurationSelf?.nbmultiElvArg || null,\n maxReservationsStudentPackage: establishment.configurationSelf?.nbmultiElvFor || null,\n maxReservationsCommensalMoney: establishment.configurationSelf?.nbmultiComArg || null,\n maxReservationsCommensalPackage: establishment.configurationSelf?.nbmultiComFor || null,\n maxReservationsTraineeMoney: establishment.configurationSelf?.nbmultiStgArg || null,\n maxReservationsTraineePackage: establishment.configurationSelf?.nbmultiStgFor || null,\n qrCodeStudent: establishment.configuration?.autoriseQrCodeEleve || null,\n qrCodeCommensal: establishment.configuration?.autoriseQrCodeCommensal || null,\n qrCodeTrainee: establishment.configuration?.autoriseQrCodeStagiaire || null,\n hideHistory: establishment.configuration?.cacherHistorique || null\n }) : {\n maxReservationsStudentMoney: null,\n maxReservationsStudentPackage: null,\n maxReservationsCommensalMoney: null,\n maxReservationsCommensalPackage: null,\n maxReservationsTraineeMoney: null,\n maxReservationsTraineePackage: null,\n qrCodeStudent: null,\n qrCodeCommensal: null,\n qrCodeTrainee: null,\n hideHistory: null\n },\n isRawEstablishmentResult(establishment) ? ({\n id: establishment.configuration?.sso?.id || null,\n entCode: establishment.configuration?.sso?.entCode || null,\n entName: establishment.configuration?.sso?.entName || null,\n serveurCas: establishment.configuration?.sso?.serveurCas || null,\n service: establishment.configuration?.sso?.service || null\n }) : {\n id: null,\n entCode: null,\n entName: null,\n serveurCas: null,\n service: null\n },\n isRawEstablishmentResult(establishment) ? ({\n firstSync: new Date(establishment.datePremSynchro || 0),\n lastSync: new Date(establishment.dateDernSynchro || 0)\n }) : {\n firstSync: new Date(0),\n lastSync: new Date(0)\n }\n );\n}\n\nexport function transformToHost(host: rawHostResult): Host {\n return new Host(\n host.id,\n host.idOrig,\n host.etab.id,\n host.prenom,\n host.nom,\n host.mode,\n host.qualite,\n host.division,\n host.prixDej,\n host.type,\n host.carteCodee,\n host.urlCafeteria || null,\n {\n payment: host.droitPaiement || false,\n reservation: host.droitReservation || false,\n cafeteria: host.droitCafeteria || false,\n bookWithNegativeBalance: host.autoriseReservSoldeIns,\n maxPassages: host.nbMulti\n }\n );\n}\n","import { RestManager } from \"../rest/RESTManager\";\nimport {\n HOST,\n HOST_BALANCE,\n HOST_BOOK_EVENING,\n HOST_BOOK_MEAL,\n HOST_HISTORY_GLOBAL,\n HOST_HISTORY_SPECIFIC,\n HOST_INIT_PAYMENT,\n HOST_PAYMENTS_LATEST,\n HOST_RESERVATIONS,\n HOST_SIBLINGS\n} from \"../rest/endpoints\";\nimport { Host } from \"../structures/Host\";\nimport {\n rawBookingResult,\n rawBookResult,\n rawHistoryGet,\n rawHostBalanceResult,\n rawHostResult,\n rawPaymentInitResult\n} from \"../types/host\";\nimport { Balance } from \"../structures/Balance\";\nimport { Payment } from \"../structures/Payment\";\nimport { HistoryEvent } from \"../structures/HistoryEvent\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { Booking } from \"../structures/Booking\";\nimport { Terminal } from \"../structures/Terminal\";\nimport { BookingDay } from \"../structures/BookingDay\";\nimport { getWeekRange } from \"../utils/weekRange\";\nimport { transformToHost } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getHost = async (token: string, hostId: number): Promise<Host> => {\n const rawHostGet = await manager.get<rawHostResult>(HOST(hostId), { Authorization: `Bearer ${token}` });\n\n return transformToHost(rawHostGet);\n};\n\nexport const getBalances = async (token: string, hostId: number): Promise<Array<Balance>> => {\n const rawBalanceGet = await manager.get<Array<rawHostBalanceResult>>(HOST_BALANCE(hostId), { Authorization: `Bearer ${token}` });\n const balances: Array<Balance> = [];\n for (const balance of rawBalanceGet) {\n const dateString = balance.montantEstimeMsg\n ? balance.montantEstimeMsg.match(/(\\d{2})\\/(\\d{2})\\/(\\d{4})/)?.slice(1, 4)\n : undefined;\n let date = new Date();\n if (dateString) {\n date = new Date(parseInt(dateString[2], 10), parseInt(dateString[1], 10) - 1, parseInt(dateString[0], 10));\n }\n balances.push(new Balance(\n balance.id,\n balance.hote.id,\n balance.appli.lib,\n balance.montant,\n balance.montantEstime,\n date\n ));\n }\n\n return balances;\n};\n\n\nexport const initPayment = async (token: string, hostId: number, amount: number): Promise<Payment> => {\n const rawPaymentInit = await manager.post<rawPaymentInitResult>(HOST_INIT_PAYMENT(hostId), [{\n paiementPayline: {\n hote: {\n id: hostId\n }\n },\n montant: amount\n }], {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n return new Payment(\n null,\n hostId,\n amount,\n \"INIT\",\n rawPaymentInit.token,\n rawPaymentInit.redirectURL,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPaymentInit.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPaymentInit.token,\n new Date()\n );\n};\n\nexport const getHistory = async (token: string, hostId: number): Promise<Array<HistoryEvent>> => {\n const rawHistory = await manager.get<Array<rawHistoryGet>>(HOST_HISTORY_GLOBAL(hostId), { Authorization: `Bearer ${token}` });\n const history: Array<HistoryEvent> = [];\n for (const event of rawHistory) {\n history.push(new HistoryEvent(\n event.id,\n new Date(event.date),\n event.detail,\n (event.credit ?? 0) - (event.debit ?? 0)\n ));\n }\n\n return history;\n};\n\nexport const getHistoryEvent = async (token: string, hostId: number, eventId: number): Promise<HistoryEvent> => {\n const rawHistory = await manager.get<rawHistoryGet>(HOST_HISTORY_SPECIFIC(hostId, eventId), { Authorization: `Bearer ${token}` });\n return new HistoryEvent(\n rawHistory.id,\n new Date(rawHistory.date),\n rawHistory.detail,\n (rawHistory.credit ?? 0) - (rawHistory.debit ?? 0)\n );\n};\n\nexport const getLastPayment = async (token: string, hostId: number): Promise<Payment> => {\n const rawPayment = await manager.get<rawPaymentResult>(HOST_PAYMENTS_LATEST(hostId), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPayment.id,\n hostId,\n rawPayment.montant,\n rawPayment.statut,\n rawPayment.token,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPayment.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPayment.token,\n new Date(rawPayment.date)\n );\n};\n\nexport const canBookEvening = async (token: string, hostId: number): Promise<boolean> => manager.get<boolean>(HOST_BOOK_EVENING(hostId), { Authorization: `Bearer ${token}` });\n\nexport const getBookings = async (token: string, hostId: number, week?: number): Promise<Array<Booking>> => {\n const rawBooking = await manager.get<rawBookingResult>(HOST_RESERVATIONS(hostId, week), { Authorization: `Bearer ${token}` });\n if (!rawBooking.rsvWebDto[0]) {\n throw new Error(\"No booking found for this week.\");\n }\n const weekRange = getWeekRange(rawBooking.rsvWebDto[0].semaine, rawBooking.rsvWebDto[0].annee);\n const bookings = [];\n const days = [];\n for (const rawBookingDto of rawBooking.rsvWebDto) {\n for (const rawDay of rawBookingDto.jours) {\n days.push(new BookingDay(\n token,\n hostId,\n rawBookingDto.id,\n rawDay.dayReserv > 0,\n rawDay.autorise,\n rawDay.dayOfWeek,\n rawDay.msg || \"\",\n rawDay.dayReserv,\n new Date(weekRange.from.getTime() + (rawDay.dayOfWeek - 1) * 86400000)\n ));\n }\n\n bookings.push(new Booking(\n rawBookingDto.id,\n rawBookingDto.semaine,\n rawBookingDto.hote.id,\n weekRange.from,\n weekRange.to,\n new Terminal(\n rawBookingDto.borne.id,\n rawBookingDto.borne.idOrig,\n rawBookingDto.borne.code2p5,\n rawBookingDto.borne.lib,\n rawBookingDto.borne.prix.map(price => ({\n id: price.id,\n localId: price.idOrig,\n name: price.lib,\n price: price.prix\n }))\n ),\n days\n ));\n }\n\n return bookings;\n};\n\nexport const bookMeal = async (token: string, hostId: number, bookId: string, day: number, reservations = 1, bookEvening = false): Promise<BookingDay> => {\n const rawBook = await manager.post<rawBookResult>(HOST_BOOK_MEAL(hostId), {\n dayOfWeek: day,\n dayReserv: reservations,\n web: {\n id: bookId\n },\n hasHoteResaSoirActive: bookEvening\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return new BookingDay(\n token,\n hostId,\n rawBook.id,\n rawBook.dayReserv > 0,\n true,\n rawBook.dayOfWeek,\n rawBook.msg || \"\",\n rawBook.dayReserv,\n new Date()\n );\n};\n\nexport const getHostSiblings = async (token: string, hostId: number): Promise<Array<Host>> => {\n const rawSiblings = await manager.get<Array<rawHostResult>>(HOST_SIBLINGS(hostId), { Authorization: `Bearer ${token}` });\n const siblings: Array<Host> = [];\n for (const rawSibling of rawSiblings) {\n siblings.push(transformToHost(rawSibling));\n }\n\n return siblings;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { rawPasswordChangeResult, rawRequestPasswordResetResult } from \"../types/account\";\nimport { AUTH_PASSWORD_CHANGE, AUTH_PASSWORD_RESET } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const requestPasswordReset = async (email: string): Promise<boolean> => {\n const rawRequestPasswordReset = await manager.get<rawRequestPasswordResetResult>(AUTH_PASSWORD_RESET(email));\n if (rawRequestPasswordReset.rejected.length !== 0) {\n throw new Error(`Failed to send password reset email to ${rawRequestPasswordReset.rejected.join(\", \")}`);\n }\n return true;\n};\n\nexport const editPassword = async (user: number, actualPassword: string, password: string, token: string): Promise<string> => {\n const rawPasswordChange = await manager.put<rawPasswordChangeResult>(AUTH_PASSWORD_CHANGE(), {\n id: user,\n password: actualPassword,\n newPassword: password\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return rawPasswordChange.token;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { ESTABLISHMENT_BY_CODE, ESTABLISHMENT_BY_ID, ESTABLISHMENT_SEARCH } from \"../rest/endpoints\";\nimport { Establishment } from \"../structures/Establishment\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { transformToEstablishment } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const searchEstablishments = async (query: string, code = \"\", limit = 10, minimalist = false, token?: string): Promise<Array<Establishment>> => {\n const rawEstablishmentSearch = await manager.get<Array<rawEstablishmentSearchResult>>(ESTABLISHMENT_SEARCH(query, code, limit));\n\n const establishments: Array<Establishment> = [];\n if (token && !minimalist) {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(await getEstablishmentBy2P5(token, establishment.code2p5));\n }\n } else {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(transformToEstablishment(establishment));\n }\n }\n\n\n return establishments;\n};\n\nexport const getEstablishmentBy2P5 = async (token: string, code2p5: string): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<Array<rawEstablishmentResult>>(ESTABLISHMENT_BY_CODE(code2p5), {\n Authorization: `Bearer ${token}`\n });\n if (rawEstablishmentGet.length === 0) {\n throw new Error(\"Establishment not found\");\n }\n const establishment = rawEstablishmentGet[0];\n return transformToEstablishment(establishment);\n};\n\nexport const getEstablishment = async (token: string, etabId: number): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<rawEstablishmentResult>(ESTABLISHMENT_BY_ID(etabId), {\n Authorization: `Bearer ${token}`\n });\n return transformToEstablishment(rawEstablishmentGet);\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { Payment } from \"../structures/Payment\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { PAYMENTS_SPECIFIC } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getPayment = async (token: string, paymentToken: string): Promise<Payment> => {\n const rawPaymentGet = await manager.get<rawPaymentResult>(PAYMENTS_SPECIFIC(paymentToken), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPaymentGet.id,\n rawPaymentGet.hote.id,\n rawPaymentGet.montant,\n rawPaymentGet.statut,\n paymentToken,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + paymentToken,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + paymentToken,\n new Date(rawPaymentGet.date)\n );\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { AUTH_LOGIN } from \"../rest/endpoints\";\nimport { getEstablishment } from \"../routes/Establishment\";\nimport { getBalances, getHost } from \"../routes/Host\";\nimport { Client } from \"../structures/Client\";\nimport { rawAuthResult } from \"../types/authentication\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nconst createClient = async (\n data: rawAuthResult,\n remember: boolean,\n username: string | null,\n password: string | null,\n minimalist: boolean\n): Promise<Client> => {\n if (minimalist) {\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n });\n }\n\n const host = await getHost(data.access_token, data.hoteId);\n\n const [balance, establishment] = await Promise.all([\n getBalances(data.access_token, data.hoteId),\n getEstablishment(data.access_token, host.etabId)\n ]);\n\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n }, establishment, host, balance);\n};\n\nexport const authenticateWithCredentials = async (\n username: string,\n password: string,\n remember = true,\n minimalist = false,\n hoteId?: number\n): Promise<Client> => {\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password,\n hoteId\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n\nexport const authenticateWithTicket = async (\n ent: \"PRONOTE\" | string,\n ticket: string,\n remember = true,\n minimalist = false\n): Promise<Client> => {\n const response = await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${ent}&ticket=${ticket}`);\n const cookies = response.headers.get(\"set-cookie\");\n const username: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n const password: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n","import { Establishment } from \"./Establishment\";\nimport { Host } from \"./Host\";\nimport { Balance } from \"./Balance\";\nimport { Payment } from \"./Payment\";\nimport { HistoryEvent } from \"./HistoryEvent\";\nimport { Booking } from \"./Booking\";\nimport { BookingDay } from \"./BookingDay\";\nimport { AuthCredentials } from \"../types/authentication\";\nimport {\n bookMeal,\n canBookEvening,\n getBalances,\n getBookings,\n getHistory,\n getHistoryEvent,\n getHost,\n getHostSiblings,\n getLastPayment,\n initPayment\n} from \"../routes/Host\";\nimport { getEstablishment, searchEstablishments } from \"../routes/Establishment\";\nimport { authenticateWithCredentials } from \"../utils/authenticate\";\nimport { getPayment } from \"../routes/Payment\";\nimport { editPassword } from \"../routes/Account\";\n\nexport class Client {\n constructor(\n private credentials: AuthCredentials,\n public establishment?: Establishment,\n public host?: Host,\n public balances?: Array<Balance>\n ) {}\n /** This method is used to book a meal.\n * @param bookId The booking ID\n * @param day The day\n * @param reservations The number of reservations\n * @param bookEvening Whether to book the evening\n */\n async bookMeal(bookId: string, day: number, reservations?: number, bookEvening?: boolean): Promise<BookingDay> {\n await this.refreshBearerToken();\n return bookMeal(this.credentials.token, this.credentials.hostId, bookId, day, reservations, bookEvening);\n }\n /** This method is used to check if the client can book an evening.\n */\n async canBookEvening(): Promise<boolean> {\n await this.refreshBearerToken();\n return canBookEvening(this.credentials.token, this.credentials.hostId);\n }\n\n /** This method is used to edit the password of the client.\n * @param actualPassword The actual password\n * @param password The new password\n * @returns The token of the request\n */\n async editPassword(actualPassword: string, password: string): Promise<string> {\n await this.refreshBearerToken();\n return editPassword(this.credentials.userId, actualPassword, password, this.credentials.token);\n }\n\n /** This method is used to get the balances of the client.\n */\n async getBalances(): Promise<Array<Balance>> {\n await this.refreshBearerToken();\n return getBalances(this.credentials.token, this.credentials.hostId);\n }\n async getBookings(week?: number): Promise<Array<Booking>> {\n await this.refreshBearerToken();\n return getBookings(this.credentials.token, this.credentials.hostId, week);\n }\n /** This method is used to get the establishment of the client.\n * @param establishmentId The establishment ID to get. If not provided, the establishment of the host will be returned.\n */\n async getEstablishment(establishmentId?: number): Promise<Establishment> {\n await this.refreshBearerToken();\n const etabId = establishmentId || this.host?.etabId;\n if (!etabId) {\n throw new Error(\n \"You need to provide an establishment ID to get the establishment. \" +\n \"You can also disable the minimalist mode on authentication.\"\n );\n }\n return getEstablishment(this.credentials.token, etabId);\n }\n /** This method is used to get the history of the client.\n */\n async getHistory(): Promise<Array<HistoryEvent>> {\n await this.refreshBearerToken();\n return getHistory(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific history event.\n * @param eventId The event ID\n */\n async getHistoryEvent(eventId: number): Promise<HistoryEvent> {\n await this.refreshBearerToken();\n return getHistoryEvent(this.credentials.token, this.credentials.hostId, eventId);\n }\n /** This method is used to get the host of the client.\n */\n async getHost(): Promise<Host> {\n await this.refreshBearerToken();\n return getHost(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get the last payment of the client.\n */\n async getLastPayment(): Promise<Payment> {\n await this.refreshBearerToken();\n return getLastPayment(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific payment.\n * @param paymentToken The payment token\n */\n async getPayment(paymentToken: string): Promise<Payment> {\n await this.refreshBearerToken();\n return getPayment(this.credentials.token, paymentToken);\n }\n\n /** This method is used to get siblings of the host\n */\n async getSiblings(): Promise<Array<Host>> {\n await this.refreshBearerToken();\n return getHostSiblings(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to initialize a payment.\n * @param amount The amount\n */\n async initPayment(amount: number): Promise<Payment> {\n await this.refreshBearerToken();\n return initPayment(this.credentials.token, this.credentials.hostId, amount);\n }\n async refreshBearerToken(force = false): Promise<boolean> {\n if (!force && this.credentials.token_expiry > Date.now()) {\n return false;\n }\n if (!this.credentials.password || !this.credentials.username) {\n throw new Error(\"You need to provide a username and password to refresh the bearer token.\");\n }\n const client = await authenticateWithCredentials(this.credentials.username, this.credentials.password, true, false);\n this.credentials = client.credentials;\n return true;\n }\n\n\n /** This method is used to search for establishments.\n * @param query The query to search for.\n * @param code The establishment code to search for.\n * @param limit The maximum number of establishments to return.\n * @param minimalist Whether to return only minimalist data or the full establishment data (more requests).\n */\n async searchEstablishments(query: string, code = \"\", limit = 10, minimalist = false): Promise<Array<Establishment>> {\n await this.refreshBearerToken();\n return searchEstablishments(query, code, limit, minimalist, this.credentials.token);\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var e=class{constructor(e){this.baseURL=e}async sendRequest(e){const{method:t,path:s,body:n,headers:a}=e,i=`${this.baseURL}/${s}`,r=await fetch(i,{method:t,body:n?JSON.stringify(n):void 0,headers:{"Content-Type":"application/json",...a,"User-Agent":"@raphckrman/turboself-api"}});if(!r.ok){const e=await r.json();throw new Error(`${r.status}: ${JSON.stringify(e)}`)}return await r.json()}async get(e,t){return this.sendRequest({method:"GET",path:e,headers:t})}async post(e,t,s){return this.sendRequest({method:"POST",path:e,body:t,headers:s?.headers})}async put(e,t,s){return this.sendRequest({method:"PUT",path:e,body:t,headers:s?.headers})}async delete(e,t,s){const n=new URLSearchParams(t).toString(),a=n?`${e}?${n}`:e;return this.sendRequest({method:"DELETE",path:a,headers:s?.headers})}},t=class{constructor(e,t,s,n,a,i){this.id=e,this.hostId=t,this.label=s,this.amount=n,this.estimatedAmount=a,this.estimatedDate=i}},s=class{constructor(e,t,s,n,a,i,r,o,l){this.id=e,this.hostId=t,this.amount=s,this.status=n,this.token=a,this.url=i,this.cancelURL=r,this.returnURL=o,this.date=l}},n=class{constructor(e,t,s,n){this.id=e,this.date=t,this.label=s,this.amount=n}},a=class{constructor(e,t,s,n,a,i,r){this.id=e,this.week=t,this.hostId=s,this.from=n,this.to=a,this.terminal=i,this.days=r}},i=class{constructor(e,t,s,n,a){this.id=e,this.localId=t,this.code=s,this.name=n,this.prices=a}},r=class{constructor(e,t,s,n,a,i,r,o,l){this.token=e,this.hostId=t,this.id=s,this.booked=n,this.canBook=a,this.dayNumber=i,this.message=r,this.reservations=o,this.date=l}async book(e=1,t=!1){return this.booked=e>0,v(this.token,this.hostId,this.id,this.date.getDay(),e,t)}};var o=class{constructor(e,t,s,n,a,i,r,o,l,h,u,c,d,m,p,f,w,g){this.id=e,this.name=t,this.currencySymbol=s,this.code=n,this.logoUrl=a,this.uai=i,this.macAddress=r,this.motd=o,this.minMealsToCredit=l,this.minDebtToCredit=h,this.minAmountToCredit=u,this.disabled=c,this.closures=d,this.location=m,this.contact=p,this.permissions=f,this.sso=w,this.synchronisation=g}},l=class{constructor(e,t,s,n,a,i,r,o,l,h,u,c,d){this.id=e,this.localId=t,this.etabId=s,this.firstName=n,this.lastName=a,this.mode=i,this.quality=r,this.division=o,this.lunchPrice=l,this.type=h,this.cardNumber=u,this.cafeteriaUrl=c,this.permissions=d}};function h(e){return void 0!==e.id}function u(e){return new o(h(e)?e.id??0:0,h(e)?e.nom||"N/A":e.nom,h(e)&&e.currencySymbol||null,h(e)?e.code2p5||null:e.code2p5,h(e)&&e.logoUrl||null,h(e)&&e.numEtab||null,h(e)&&e.pcServeur||null,h(e)?e.configuration?.msgAccueil||"":"You are not logged in so you can't see all data",h(e)?e.configuration?.nbRepasMini||0:null,h(e)?e.configuration?.creanceMini||0:null,h(e)?e.configuration?.montantCreditMini||0:null,h(e)?e.desactive||!1:null,h(e)&&e.configuration?.fermetures?.map((e=>({id:e.id,canBook:!e.rsv,canPay:!e.paiement,from:new Date(e.du),to:new Date(e.au)})))||[],h(e)?{city:e.ville,address:e.adr1+" "+e.adr2,postcode:e.cp}:{city:null,address:null,postcode:null},h(e)?{phoneNumber:e.tel||null,faxNumber:e.fax||null,email:e.configuration?.email||null,website:e.configuration?.url||null}:{phoneNumber:null,faxNumber:null,email:null,website:null},h(e)?{maxReservationsStudentMoney:e.configurationSelf?.nbmultiElvArg||null,maxReservationsStudentPackage:e.configurationSelf?.nbmultiElvFor||null,maxReservationsCommensalMoney:e.configurationSelf?.nbmultiComArg||null,maxReservationsCommensalPackage:e.configurationSelf?.nbmultiComFor||null,maxReservationsTraineeMoney:e.configurationSelf?.nbmultiStgArg||null,maxReservationsTraineePackage:e.configurationSelf?.nbmultiStgFor||null,qrCodeStudent:e.configuration?.autoriseQrCodeEleve||null,qrCodeCommensal:e.configuration?.autoriseQrCodeCommensal||null,qrCodeTrainee:e.configuration?.autoriseQrCodeStagiaire||null,hideHistory:e.configuration?.cacherHistorique||null}:{maxReservationsStudentMoney:null,maxReservationsStudentPackage:null,maxReservationsCommensalMoney:null,maxReservationsCommensalPackage:null,maxReservationsTraineeMoney:null,maxReservationsTraineePackage:null,qrCodeStudent:null,qrCodeCommensal:null,qrCodeTrainee:null,hideHistory:null},h(e)?{id:e.configuration?.sso?.id||null,entCode:e.configuration?.sso?.entCode||null,entName:e.configuration?.sso?.entName||null,serveurCas:e.configuration?.sso?.serveurCas||null,service:e.configuration?.sso?.service||null}:{id:null,entCode:null,entName:null,serveurCas:null,service:null},h(e)?{firstSync:new Date(e.datePremSynchro||0),lastSync:new Date(e.dateDernSynchro||0)}:{firstSync:new Date(0),lastSync:new Date(0)})}function c(e){return new l(e.id,e.idOrig,e.etab.id,e.prenom,e.nom,e.mode,e.qualite,e.division,e.prixDej,e.type,e.carteCodee,e.urlCafeteria||null,{payment:e.droitPaiement||!1,reservation:e.droitReservation||!1,cafeteria:e.droitCafeteria||!1,bookWithNegativeBalance:e.autoriseReservSoldeIns,maxPassages:e.nbMulti})}var d=new e("https://api-rest-prod.incb.fr/api"),m=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}`)(t),{Authorization:`Bearer ${e}`});return c(s)},p=async(e,s)=>{const n=await d.get((e=>`v1/comptes/hotes/${e}/3`)(s),{Authorization:`Bearer ${e}`}),a=[];for(const e of n){const s=e.montantEstimeMsg.match(/(\d{2})\/(\d{2})\/(\d{4})/)?.slice(1,4);let n=new Date;s&&(n=new Date(parseInt(s[2],10),parseInt(s[1],10)-1,parseInt(s[0],10))),a.push(new t(e.id,e.hote.id,e.appli.lib,e.montant,e.montantEstime,n))}return a},f=async(e,t,n)=>{const a=await d.post((e=>`v2/hotes/${e}/paiements/init`)(t),[{paiementPayline:{hote:{id:t}},montant:n}],{headers:{Authorization:`Bearer ${e}`}});return new s(null,t,n,"INIT",a.token,a.redirectURL,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+a.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+a.token,new Date)},w=async(e,t)=>{const s=await d.get((e=>`v1/historiques/hotes/${e}`)(t),{Authorization:`Bearer ${e}`}),a=[];for(const e of s)a.push(new n(e.id,new Date(e.date),e.detail,(e.credit??0)-(e.debit??0)));return a},g=async(e,t,s)=>{const a=await d.get(((e,t)=>`v2/hotes/${e}/historiques/${t}`)(t,s),{Authorization:`Bearer ${e}`});return new n(a.id,new Date(a.date),a.detail,(a.credit??0)-(a.debit??0))},y=async(e,t)=>{const n=await d.get((e=>`v2/hotes/${e}/paiements-payline/latest`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,t,n.montant,n.statut,n.token,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+n.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+n.token,new Date(n.date))},k=async(e,t)=>d.get((e=>`v1/hotes/${e}/resa-soir`)(t),{Authorization:`Bearer ${e}`}),b=async(e,t,s)=>{const n=await d.get(((e,t)=>`v1/reservations/hotes/${e}/semaines${"?num="+t||""}`)(t,s),{Authorization:`Bearer ${e}`});if(!n.rsvWebDto[0])throw new Error("No booking found for this week.");const o=function(e,t){e-=2;const s=new Date(t,0,1),n=s.getDay(),a=0===n?1:8-n,i=new Date(s);i.setDate(s.getDate()+a);const r=new Date(i);r.setDate(i.getDate()+7*e);const o=new Date(r);o.setDate(r.getDate()+6),r.setHours(0,0,0,0),o.setHours(23,59,59,999);const l=6e4*r.getTimezoneOffset();return{from:new Date(r.getTime()-l),to:new Date(o.getTime()-l)}}(n.rsvWebDto[0].semaine,n.rsvWebDto[0].annee),l=[],h=[];for(const s of n.rsvWebDto){for(const n of s.jours)h.push(new r(e,t,s.id,n.dayReserv>0,n.autorise,n.dayOfWeek,n.msg||"",n.dayReserv,new Date(o.from.getTime()+864e5*(n.dayOfWeek-1))));l.push(new a(s.id,s.semaine,s.hote.id,o.from,o.to,new i(s.borne.id,s.borne.idOrig,s.borne.code2p5,s.borne.lib,s.borne.prix.map((e=>({id:e.id,localId:e.idOrig,name:e.lib,price:e.prix})))),h))}return l},v=async(e,t,s,n,a=1,i=!1)=>{const o=await d.post((e=>`v2/hotes/${e}/reservations-jours`)(t),{dayOfWeek:n,dayReserv:a,web:{id:s},hasHoteResaSoirActive:i},{headers:{Authorization:`Bearer ${e}`}});return new r(e,t,o.id,o.dayReserv>0,!0,o.dayOfWeek,o.msg||"",o.dayReserv,new Date)},D=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}/freres-soeurs`)(t),{Authorization:`Bearer ${e}`}),n=[];for(const e of s)n.push(c(e));return n},$=new e("https://api-rest-prod.incb.fr/api"),I=async e=>{const t=await $.get((e=>`v1/utilisateurs/password?email=${e}`)(e));if(0!==t.rejected.length)throw new Error(`Failed to send password reset email to ${t.rejected.join(", ")}`);return!0},B=async(e,t,s,n)=>(await $.put("v1/utilisateurs/password",{id:e,password:t,newPassword:s},{headers:{Authorization:`Bearer ${n}`}})).token,R=new e("https://api-rest-prod.incb.fr/api"),T=async(e,t="",s=10,n=!1,a)=>{const i=await R.get(((e,t,s)=>`v1/etablissements?q=${e}&code2p5=${t}&limit=${s}`)(e,t,s)),r=[];if(a&&!n)for(const e of i)r.push(await C(a,e.code2p5));else for(const e of i)r.push(u(e));return r},C=async(e,t)=>{const s=await R.get((n=t,`v2/etablissements?code2p5=${n}`),{Authorization:`Bearer ${e}`});var n;if(0===s.length)throw new Error("Establishment not found");return u(s[0])},P=async(e,t)=>{var s;return u(await R.get((s=t,`v1/etablissements/etabId/${s}`),{Authorization:`Bearer ${e}`}))},S=new e("https://api-rest-prod.incb.fr/api"),x=async(e,t)=>{const n=await S.get((e=>`v1/paiements-payline/${e}`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,n.hote.id,n.montant,n.statut,t,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+t,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+t,new Date(n.date))},q=new e("https://api-rest-prod.incb.fr/api"),A=async(e,t,s,n,a)=>{if(a)return new z({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5});const i=await m(e.access_token,e.hoteId),[r,o]=await Promise.all([p(e.access_token,e.hoteId),P(e.access_token,i.etabId)]);return new z({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5},o,i,r)},E=async(e,t,s=!0,n=!1,a)=>{const i=await q.post("v1/auth/login",{username:e,password:t,hoteId:a});return A(i,s,e,t,n)},N=async(e,t,s=!0,n=!1)=>{const a=(await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${e}&ticket=${t}`)).headers.get("set-cookie"),i=a?.split(";")[0].split("=")[1]??"",r=a?.split(";")[0].split("=")[1]??"",o=await q.post("v1/auth/login",{username:i,password:r});return A(o,s,i,r,n)},z=class{constructor(e,t,s,n){this.credentials=e,this.establishment=t,this.host=s,this.balances=n}async bookMeal(e,t,s,n){return await this.refreshBearerToken(),v(this.credentials.token,this.credentials.hostId,e,t,s,n)}async canBookEvening(){return await this.refreshBearerToken(),k(this.credentials.token,this.credentials.hostId)}async editPassword(e,t){return await this.refreshBearerToken(),B(this.credentials.userId,e,t,this.credentials.token)}async getBalances(){return await this.refreshBearerToken(),p(this.credentials.token,this.credentials.hostId)}async getBookings(e){return await this.refreshBearerToken(),b(this.credentials.token,this.credentials.hostId,e)}async getEstablishment(e){await this.refreshBearerToken();const t=e||this.host?.etabId;if(!t)throw new Error("You need to provide an establishment ID to get the establishment. You can also disable the minimalist mode on authentication.");return P(this.credentials.token,t)}async getHistory(){return await this.refreshBearerToken(),w(this.credentials.token,this.credentials.hostId)}async getHistoryEvent(e){return await this.refreshBearerToken(),g(this.credentials.token,this.credentials.hostId,e)}async getHost(){return await this.refreshBearerToken(),m(this.credentials.token,this.credentials.hostId)}async getLastPayment(){return await this.refreshBearerToken(),y(this.credentials.token,this.credentials.hostId)}async getPayment(e){return await this.refreshBearerToken(),x(this.credentials.token,e)}async getSiblings(){return await this.refreshBearerToken(),D(this.credentials.token,this.credentials.hostId)}async initPayment(e){return await this.refreshBearerToken(),f(this.credentials.token,this.credentials.hostId,e)}async refreshBearerToken(e=!1){if(!e&&this.credentials.token_expiry>Date.now())return!1;if(!this.credentials.password||!this.credentials.username)throw new Error("You need to provide a username and password to refresh the bearer token.");const t=await E(this.credentials.username,this.credentials.password,!0,!1);return this.credentials=t.credentials,!0}async searchEstablishments(e,t="",s=10,n=!1){return await this.refreshBearerToken(),T(e,t,s,n,this.credentials.token)}};export{t as Balance,a as Booking,r as BookingDay,z as Client,o as Establishment,n as HistoryEvent,l as Host,s as Payment,i as Terminal,E as authenticateWithCredentials,N as authenticateWithTicket,v as bookMeal,k as canBookEvening,B as editPassword,p as getBalances,b as getBookings,P as getEstablishment,C as getEstablishmentBy2P5,w as getHistory,g as getHistoryEvent,m as getHost,D as getHostSiblings,y as getLastPayment,x as getPayment,f as initPayment,I as requestPasswordReset,T as searchEstablishments};//# sourceMappingURL=index.mjs.map
1
+ var e=class{constructor(e){this.baseURL=e}async sendRequest(e){const{method:t,path:s,body:n,headers:a}=e,i=`${this.baseURL}/${s}`,r=await fetch(i,{method:t,body:n?JSON.stringify(n):void 0,headers:{"Content-Type":"application/json",...a,"User-Agent":"@raphckrman/turboself-api"}});if(!r.ok){const e=await r.json();throw new Error(`${r.status}: ${JSON.stringify(e)}`)}return await r.json()}async get(e,t){return this.sendRequest({method:"GET",path:e,headers:t})}async post(e,t,s){return this.sendRequest({method:"POST",path:e,body:t,headers:s?.headers})}async put(e,t,s){return this.sendRequest({method:"PUT",path:e,body:t,headers:s?.headers})}async delete(e,t,s){const n=new URLSearchParams(t).toString(),a=n?`${e}?${n}`:e;return this.sendRequest({method:"DELETE",path:a,headers:s?.headers})}},t=class{constructor(e,t,s,n,a,i){this.id=e,this.hostId=t,this.label=s,this.amount=n,this.estimatedAmount=a,this.estimatedDate=i}},s=class{constructor(e,t,s,n,a,i,r,o,l){this.id=e,this.hostId=t,this.amount=s,this.status=n,this.token=a,this.url=i,this.cancelURL=r,this.returnURL=o,this.date=l}},n=class{constructor(e,t,s,n){this.id=e,this.date=t,this.label=s,this.amount=n}},a=class{constructor(e,t,s,n,a,i,r){this.id=e,this.week=t,this.hostId=s,this.from=n,this.to=a,this.terminal=i,this.days=r}},i=class{constructor(e,t,s,n,a){this.id=e,this.localId=t,this.code=s,this.name=n,this.prices=a}},r=class{constructor(e,t,s,n,a,i,r,o,l){this.token=e,this.hostId=t,this.id=s,this.booked=n,this.canBook=a,this.dayNumber=i,this.message=r,this.reservations=o,this.date=l}async book(e=1,t=!1){return this.booked=e>0,v(this.token,this.hostId,this.id,this.date.getDay(),e,t)}};var o=class{constructor(e,t,s,n,a,i,r,o,l,h,u,c,d,m,p,f,w,g){this.id=e,this.name=t,this.currencySymbol=s,this.code=n,this.logoUrl=a,this.uai=i,this.macAddress=r,this.motd=o,this.minMealsToCredit=l,this.minDebtToCredit=h,this.minAmountToCredit=u,this.disabled=c,this.closures=d,this.location=m,this.contact=p,this.permissions=f,this.sso=w,this.synchronisation=g}},l=class{constructor(e,t,s,n,a,i,r,o,l,h,u,c,d){this.id=e,this.localId=t,this.etabId=s,this.firstName=n,this.lastName=a,this.mode=i,this.quality=r,this.division=o,this.lunchPrice=l,this.type=h,this.cardNumber=u,this.cafeteriaUrl=c,this.permissions=d}};function h(e){return void 0!==e.id}function u(e){return new o(h(e)?e.id??0:0,h(e)?e.nom||"N/A":e.nom,h(e)&&e.currencySymbol||null,h(e)?e.code2p5||null:e.code2p5,h(e)&&e.logoUrl||null,h(e)&&e.numEtab||null,h(e)&&e.pcServeur||null,h(e)?e.configuration?.msgAccueil||"":"You are not logged in so you can't see all data",h(e)?e.configuration?.nbRepasMini||0:null,h(e)?e.configuration?.creanceMini||0:null,h(e)?e.configuration?.montantCreditMini||0:null,h(e)?e.desactive||!1:null,h(e)&&e.configuration?.fermetures?.map((e=>({id:e.id,canBook:!e.rsv,canPay:!e.paiement,from:new Date(e.du),to:new Date(e.au)})))||[],h(e)?{city:e.ville,address:e.adr1+" "+e.adr2,postcode:e.cp}:{city:null,address:null,postcode:null},h(e)?{phoneNumber:e.tel||null,faxNumber:e.fax||null,email:e.configuration?.email||null,website:e.configuration?.url||null}:{phoneNumber:null,faxNumber:null,email:null,website:null},h(e)?{maxReservationsStudentMoney:e.configurationSelf?.nbmultiElvArg||null,maxReservationsStudentPackage:e.configurationSelf?.nbmultiElvFor||null,maxReservationsCommensalMoney:e.configurationSelf?.nbmultiComArg||null,maxReservationsCommensalPackage:e.configurationSelf?.nbmultiComFor||null,maxReservationsTraineeMoney:e.configurationSelf?.nbmultiStgArg||null,maxReservationsTraineePackage:e.configurationSelf?.nbmultiStgFor||null,qrCodeStudent:e.configuration?.autoriseQrCodeEleve||null,qrCodeCommensal:e.configuration?.autoriseQrCodeCommensal||null,qrCodeTrainee:e.configuration?.autoriseQrCodeStagiaire||null,hideHistory:e.configuration?.cacherHistorique||null}:{maxReservationsStudentMoney:null,maxReservationsStudentPackage:null,maxReservationsCommensalMoney:null,maxReservationsCommensalPackage:null,maxReservationsTraineeMoney:null,maxReservationsTraineePackage:null,qrCodeStudent:null,qrCodeCommensal:null,qrCodeTrainee:null,hideHistory:null},h(e)?{id:e.configuration?.sso?.id||null,entCode:e.configuration?.sso?.entCode||null,entName:e.configuration?.sso?.entName||null,serveurCas:e.configuration?.sso?.serveurCas||null,service:e.configuration?.sso?.service||null}:{id:null,entCode:null,entName:null,serveurCas:null,service:null},h(e)?{firstSync:new Date(e.datePremSynchro||0),lastSync:new Date(e.dateDernSynchro||0)}:{firstSync:new Date(0),lastSync:new Date(0)})}function c(e){return new l(e.id,e.idOrig,e.etab.id,e.prenom,e.nom,e.mode,e.qualite,e.division,e.prixDej,e.type,e.carteCodee,e.urlCafeteria||null,{payment:e.droitPaiement||!1,reservation:e.droitReservation||!1,cafeteria:e.droitCafeteria||!1,bookWithNegativeBalance:e.autoriseReservSoldeIns,maxPassages:e.nbMulti})}var d=new e("https://api-rest-prod.incb.fr/api"),m=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}`)(t),{Authorization:`Bearer ${e}`});return c(s)},p=async(e,s)=>{const n=await d.get((e=>`v1/comptes/hotes/${e}/3`)(s),{Authorization:`Bearer ${e}`}),a=[];for(const e of n){const s=e.montantEstimeMsg?e.montantEstimeMsg.match(/(\d{2})\/(\d{2})\/(\d{4})/)?.slice(1,4):void 0;let n=new Date;s&&(n=new Date(parseInt(s[2],10),parseInt(s[1],10)-1,parseInt(s[0],10))),a.push(new t(e.id,e.hote.id,e.appli.lib,e.montant,e.montantEstime,n))}return a},f=async(e,t,n)=>{const a=await d.post((e=>`v2/hotes/${e}/paiements/init`)(t),[{paiementPayline:{hote:{id:t}},montant:n}],{headers:{Authorization:`Bearer ${e}`}});return new s(null,t,n,"INIT",a.token,a.redirectURL,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+a.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+a.token,new Date)},w=async(e,t)=>{const s=await d.get((e=>`v1/historiques/hotes/${e}`)(t),{Authorization:`Bearer ${e}`}),a=[];for(const e of s)a.push(new n(e.id,new Date(e.date),e.detail,(e.credit??0)-(e.debit??0)));return a},g=async(e,t,s)=>{const a=await d.get(((e,t)=>`v2/hotes/${e}/historiques/${t}`)(t,s),{Authorization:`Bearer ${e}`});return new n(a.id,new Date(a.date),a.detail,(a.credit??0)-(a.debit??0))},y=async(e,t)=>{const n=await d.get((e=>`v2/hotes/${e}/paiements-payline/latest`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,t,n.montant,n.statut,n.token,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+n.token,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+n.token,new Date(n.date))},k=async(e,t)=>d.get((e=>`v1/hotes/${e}/resa-soir`)(t),{Authorization:`Bearer ${e}`}),b=async(e,t,s)=>{const n=await d.get(((e,t)=>`v1/reservations/hotes/${e}/semaines${"?num="+t||""}`)(t,s),{Authorization:`Bearer ${e}`});if(!n.rsvWebDto[0])throw new Error("No booking found for this week.");const o=function(e,t){e-=2;const s=new Date(t,0,1),n=s.getDay(),a=0===n?1:8-n,i=new Date(s);i.setDate(s.getDate()+a);const r=new Date(i);r.setDate(i.getDate()+7*e);const o=new Date(r);o.setDate(r.getDate()+6),r.setHours(0,0,0,0),o.setHours(23,59,59,999);const l=6e4*r.getTimezoneOffset();return{from:new Date(r.getTime()-l),to:new Date(o.getTime()-l)}}(n.rsvWebDto[0].semaine,n.rsvWebDto[0].annee),l=[],h=[];for(const s of n.rsvWebDto){for(const n of s.jours)h.push(new r(e,t,s.id,n.dayReserv>0,n.autorise,n.dayOfWeek,n.msg||"",n.dayReserv,new Date(o.from.getTime()+864e5*(n.dayOfWeek-1))));l.push(new a(s.id,s.semaine,s.hote.id,o.from,o.to,new i(s.borne.id,s.borne.idOrig,s.borne.code2p5,s.borne.lib,s.borne.prix.map((e=>({id:e.id,localId:e.idOrig,name:e.lib,price:e.prix})))),h))}return l},v=async(e,t,s,n,a=1,i=!1)=>{const o=await d.post((e=>`v2/hotes/${e}/reservations-jours`)(t),{dayOfWeek:n,dayReserv:a,web:{id:s},hasHoteResaSoirActive:i},{headers:{Authorization:`Bearer ${e}`}});return new r(e,t,o.id,o.dayReserv>0,!0,o.dayOfWeek,o.msg||"",o.dayReserv,new Date)},D=async(e,t)=>{const s=await d.get((e=>`v1/hotes/${e}/freres-soeurs`)(t),{Authorization:`Bearer ${e}`}),n=[];for(const e of s)n.push(c(e));return n},$=new e("https://api-rest-prod.incb.fr/api"),I=async e=>{const t=await $.get((e=>`v1/utilisateurs/password?email=${e}`)(e));if(0!==t.rejected.length)throw new Error(`Failed to send password reset email to ${t.rejected.join(", ")}`);return!0},B=async(e,t,s,n)=>(await $.put("v1/utilisateurs/password",{id:e,password:t,newPassword:s},{headers:{Authorization:`Bearer ${n}`}})).token,R=new e("https://api-rest-prod.incb.fr/api"),T=async(e,t="",s=10,n=!1,a)=>{const i=await R.get(((e,t,s)=>`v1/etablissements?q=${e}&code2p5=${t}&limit=${s}`)(e,t,s)),r=[];if(a&&!n)for(const e of i)r.push(await C(a,e.code2p5));else for(const e of i)r.push(u(e));return r},C=async(e,t)=>{const s=await R.get((n=t,`v2/etablissements?code2p5=${n}`),{Authorization:`Bearer ${e}`});var n;if(0===s.length)throw new Error("Establishment not found");return u(s[0])},P=async(e,t)=>{var s;return u(await R.get((s=t,`v1/etablissements/etabId/${s}`),{Authorization:`Bearer ${e}`}))},S=new e("https://api-rest-prod.incb.fr/api"),x=async(e,t)=>{const n=await S.get((e=>`v1/paiements-payline/${e}`)(t),{Authorization:`Bearer ${e}`});return new s(n.id,n.hote.id,n.montant,n.statut,t,null,"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token="+t,"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token="+t,new Date(n.date))},q=new e("https://api-rest-prod.incb.fr/api"),A=async(e,t,s,n,a)=>{if(a)return new z({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5});const i=await m(e.access_token,e.hoteId),[r,o]=await Promise.all([p(e.access_token,e.hoteId),P(e.access_token,i.etabId)]);return new z({token:e.access_token,hostId:e.hoteId,userId:e.userId,username:t?s:null,password:t?n:null,token_expiry:Date.now()+33e5},o,i,r)},E=async(e,t,s=!0,n=!1,a)=>{const i=await q.post("v1/auth/login",{username:e,password:t,hoteId:a});return A(i,s,e,t,n)},N=async(e,t,s=!0,n=!1)=>{const a=(await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${e}&ticket=${t}`)).headers.get("set-cookie"),i=a?.split(";")[0].split("=")[1]??"",r=a?.split(";")[0].split("=")[1]??"",o=await q.post("v1/auth/login",{username:i,password:r});return A(o,s,i,r,n)},z=class{constructor(e,t,s,n){this.credentials=e,this.establishment=t,this.host=s,this.balances=n}async bookMeal(e,t,s,n){return await this.refreshBearerToken(),v(this.credentials.token,this.credentials.hostId,e,t,s,n)}async canBookEvening(){return await this.refreshBearerToken(),k(this.credentials.token,this.credentials.hostId)}async editPassword(e,t){return await this.refreshBearerToken(),B(this.credentials.userId,e,t,this.credentials.token)}async getBalances(){return await this.refreshBearerToken(),p(this.credentials.token,this.credentials.hostId)}async getBookings(e){return await this.refreshBearerToken(),b(this.credentials.token,this.credentials.hostId,e)}async getEstablishment(e){await this.refreshBearerToken();const t=e||this.host?.etabId;if(!t)throw new Error("You need to provide an establishment ID to get the establishment. You can also disable the minimalist mode on authentication.");return P(this.credentials.token,t)}async getHistory(){return await this.refreshBearerToken(),w(this.credentials.token,this.credentials.hostId)}async getHistoryEvent(e){return await this.refreshBearerToken(),g(this.credentials.token,this.credentials.hostId,e)}async getHost(){return await this.refreshBearerToken(),m(this.credentials.token,this.credentials.hostId)}async getLastPayment(){return await this.refreshBearerToken(),y(this.credentials.token,this.credentials.hostId)}async getPayment(e){return await this.refreshBearerToken(),x(this.credentials.token,e)}async getSiblings(){return await this.refreshBearerToken(),D(this.credentials.token,this.credentials.hostId)}async initPayment(e){return await this.refreshBearerToken(),f(this.credentials.token,this.credentials.hostId,e)}async refreshBearerToken(e=!1){if(!e&&this.credentials.token_expiry>Date.now())return!1;if(!this.credentials.password||!this.credentials.username)throw new Error("You need to provide a username and password to refresh the bearer token.");const t=await E(this.credentials.username,this.credentials.password,!0,!1);return this.credentials=t.credentials,!0}async searchEstablishments(e,t="",s=10,n=!1){return await this.refreshBearerToken(),T(e,t,s,n,this.credentials.token)}};export{t as Balance,a as Booking,r as BookingDay,z as Client,o as Establishment,n as HistoryEvent,l as Host,s as Payment,i as Terminal,E as authenticateWithCredentials,N as authenticateWithTicket,v as bookMeal,k as canBookEvening,B as editPassword,p as getBalances,b as getBookings,P as getEstablishment,C as getEstablishmentBy2P5,w as getHistory,g as getHistoryEvent,m as getHost,D as getHostSiblings,y as getLastPayment,x as getPayment,f as initPayment,I as requestPasswordReset,T as searchEstablishments};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rest/RESTManager.ts","../src/rest/endpoints.ts","../src/structures/Balance.ts","../src/structures/Payment.ts","../src/structures/HistoryEvent.ts","../src/structures/Booking.ts","../src/structures/Terminal.ts","../src/structures/BookingDay.ts","../src/utils/weekRange.ts","../src/structures/Establishment.ts","../src/structures/Host.ts","../src/utils/transformers.ts","../src/routes/Host.ts","../src/routes/Account.ts","../src/routes/Establishment.ts","../src/routes/Payment.ts","../src/utils/authenticate.ts","../src/structures/Client.ts"],"names":["responseData","manager"],"mappings":"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","file":"index.mjs","sourcesContent":["/** @module RESTManager */\nimport { RequestOptions } from \"../types/request-handler\";\n\nexport class RestManager {\n private readonly baseURL: string;\n\n constructor(baseURL: string) {\n this.baseURL = baseURL;\n }\n\n private async sendRequest<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers } = options;\n const url = `${this.baseURL}/${path}`;\n\n const response = await fetch(url, {\n method,\n body: body ? JSON.stringify(body) : undefined,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n \"User-Agent\": \"@raphckrman/turboself-api\"\n }\n });\n\n if (!response.ok) {\n const responseData = await response.json();\n throw new Error(`${response.status}: ${JSON.stringify(responseData)}`);\n }\n\n const responseData = await response.json();\n return responseData as T;\n }\n\n async get<T>(\n path: string,\n headers?: Record<string, string>\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"GET\",\n path: path,\n headers: headers\n });\n }\n\n async post<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"POST\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async put<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"PUT\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async delete<T>(\n path: string,\n params?: Record<string, any>,\n options?: RequestOptions\n ): Promise<T> {\n const urlParams = new URLSearchParams(params).toString();\n const urlPath = urlParams ? `${path}?${urlParams}` : path;\n return this.sendRequest<T>({\n method: \"DELETE\",\n path: urlPath,\n headers: options?.headers\n });\n }\n}\n","/** REST/Endpoints */\nexport const BASE_URL = () => \"https://api-rest-prod.incb.fr/api\";\n\nexport const AUTH_LOGIN = () => \"v1/auth/login\";\nexport const AUTH_SIGNUP = () => \"v1/creation-comptes\";\nexport const AUTH_PASSWORD_RESET = (email: string) => `v1/utilisateurs/password?email=${email}`;\nexport const AUTH_PASSWORD_CHANGE = () => \"v1/utilisateurs/password\";\n\nexport const USER_BY_ID = (userId: number) => `v1/utilisateurs/${userId}`;\nexport const USER_BY_HOTE = (hostId: number) => `v1/utilisateurs/hotes/${hostId}`;\n\nexport const HOST = (hostId: number) => `v1/hotes/${hostId}`;\nexport const HOST_BALANCE = (hostId: number) => `v1/comptes/hotes/${hostId}/3`;\nexport const HOST_ACCOUNTS = (hostId: number) => `v2/hotes/${hostId}/comptes`;\nexport const HOST_SIBLINGS = (hostId: number) => `v1/hotes/${hostId}/freres-soeurs`;\nexport const HOST_BOOK_EVENING = (hostId: number) => `v1/hotes/${hostId}/resa-soir`;\nexport const HOST_HISTORY_GLOBAL = (hostId: number) => `v1/historiques/hotes/${hostId}`;\nexport const HOST_INIT_PAYMENT = (hostId: number) => `v2/hotes/${hostId}/paiements/init`;\nexport const HOST_PAYMENTS_LATEST = (hostId: number) => `v2/hotes/${hostId}/paiements-payline/latest`;\nexport const HOST_HISTORY_SPECIFIC = (hostId: number, eventId: number) => `v2/hotes/${hostId}/historiques/${eventId}`;\nexport const HOST_RESERVATIONS = (hostId: number, week?: number) => `v1/reservations/hotes/${hostId}/semaines${\"?num=\" + week || \"\"}`;\nexport const HOST_RESERVATIONS_SPECIFIC = (hostId: number, reservationId: string) => `v2/hotes/${hostId}/reservations/${reservationId}`;\nexport const HOST_BOOK_MEAL = (hostId: number) => `v2/hotes/${hostId}/reservations-jours`;\n\nexport const ESTABLISHMENT_BY_CODE = (code: string) => `v2/etablissements?code2p5=${code}`;\nexport const ESTABLISHMENT_BY_ID = (establishmentId: number) => `v1/etablissements/etabId/${establishmentId}`;\nexport const ESTABLISHMENT_SEARCH = (query: string, code: string, limit: number) => `v1/etablissements?q=${query}&code2p5=${code}&limit=${limit}`;\n\nexport const TERMINALS_BY_ID = (terminalId: number) => `v1/bornes/${terminalId}`;\n\nexport const PAYMENTS_SPECIFIC = (paymentToken: string) => `v1/paiements-payline/${paymentToken}`;\n","export class Balance {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: number,\n /** Internal identifier of the host */\n public hostId: number,\n /** Label of the balance */\n public label: string,\n /** Amount of the balance */\n public amount: number,\n /** Estimated host account balance (taking into account future reservations and OK payments) */\n public estimatedAmount: number,\n /** Date of the estimated balance */\n public estimatedDate: Date\n ) {}\n}\n","export class Payment {\n constructor(\n /** Internal identifier of Payline payment in the digital space */\n public id: number | null,\n /** Host ID of the buyer */\n public hostId: number,\n /** Amount of the payment */\n public amount: number,\n /** Status of the payment */\n public status: string,\n /** Payment token */\n public token: string,\n /** URL of the payment page */\n public url: string | null,\n /** URL to redirect to if the payment is cancelled */\n public cancelURL: string,\n /** URL to redirect to if the payment is successful */\n public returnURL: string,\n /** Date of the payment */\n public date: Date\n ) {}\n\n}\n","export class HistoryEvent {\n constructor(\n /** Internal identifier of a host's history in digital space */\n public id: number,\n /** Date of the operation */\n public date: Date,\n /** Operation details */\n public label: string,\n /** Amount of the operation */\n public amount: number\n ) {}\n\n}\n","import { BookingDay } from \"./BookingDay\";\nimport { Terminal } from \"./Terminal\";\n\nexport class Booking {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: string,\n /** Calendar week number */\n public week: number,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Week Start Date */\n public from: Date,\n /** Week End Date */\n public to: Date,\n /** Terminal information */\n public terminal: Terminal,\n /** Days of the week available to book */\n public days: Array<BookingDay>\n ) {}\n}\n","export class Terminal {\n constructor(\n /** Internal identifier of the Self terminal in the digital space */\n public id: number,\n /** Internal identfeir of the Self terminal in the local database */\n public localId: number,\n /** 2P5 Code of the establishment */\n public code: number,\n /** Terminal Name (eg. Self) */\n public name: string,\n public prices: Array<{\n /** Internal identifier of the price in the digital space */\n id: number;\n /** Internal identifier of the price in the local database */\n localId: number;\n /** Name of the price */\n name: string;\n /** Price in cents */\n price: number;\n }>\n ) {}\n}\n","import { bookMeal } from \"../routes/Host\";\n\nexport class BookingDay {\n constructor(\n private token: string,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Internal identifier of the booking week in the digital space */\n public id: string,\n /** Whether the day is booked */\n public booked: boolean,\n /** Whether the day is available to book */\n public canBook: boolean,\n /** Day of the week */\n public dayNumber: number,\n /** Message to display */\n public message: string,\n /** Number of reservations this day */\n public reservations: number,\n /** Date of the day */\n public date: Date\n ) {}\n\n async book(reservations = 1, bookEvening = false): Promise<BookingDay> {\n this.booked = reservations > 0;\n return bookMeal(this.token, this.hostId, this.id, this.date.getDay(), reservations, bookEvening);\n }\n}\n","export function getWeekRange(weekNumber: number, year: number): { from: Date; to: Date; } {\n weekNumber -= 2;\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfWeek = firstDayOfYear.getDay();\n const daysToFirstMonday = (dayOfWeek === 0) ? 1 : (8 - dayOfWeek);\n const firstMonday = new Date(firstDayOfYear);\n firstMonday.setDate(firstDayOfYear.getDate() + daysToFirstMonday);\n const weekStartDate = new Date(firstMonday);\n weekStartDate.setDate(firstMonday.getDate() + weekNumber * 7);\n const weekEndDate = new Date(weekStartDate);\n weekEndDate.setDate(weekStartDate.getDate() + 6);\n weekStartDate.setHours(0, 0, 0, 0);\n weekEndDate.setHours(23, 59, 59, 999);\n const timezoneOffset = weekStartDate.getTimezoneOffset() * 60000;\n const fromLocal = new Date(weekStartDate.getTime() - timezoneOffset);\n const toLocal = new Date(weekEndDate.getTime() - timezoneOffset);\n return { from: fromLocal, to: toLocal };\n}\n","/** @class Establishment */\n\nimport {\n Closure,\n Contact,\n Location,\n Permissions,\n SSOConfiguration,\n Synchronisation\n} from \"../types/establishment\";\n\nexport class Establishment {\n constructor(\n /** Internal identifier of the establishment on the digital space */\n public id: number,\n /** Name of establishment (max length: 50) */\n public name: string,\n /** Currency symbol */\n public currencySymbol: string | null,\n /** 2p5 code */\n public code: string | null,\n /** URL of the establishment logo */\n public logoUrl: string | null,\n /** UAI (Unité Administrative Immatriculée) code, unique to each establishment */\n public uai: string | null,\n /** Server MAC Adress */\n public macAddress: string | null,\n /** Digital space greeting */\n public motd: string,\n /** Minimum number of meals to credit the Self account */\n public minMealsToCredit: number | null,\n /** Minimum debt to credit the Forfait account */\n public minDebtToCredit: number | null,\n /** Minimum amount to credit the Self account */\n public minAmountToCredit: number | null,\n /** If the establishment is disabled */\n public disabled: boolean | null,\n public closures: Array<Closure>,\n public location: Location,\n public contact: Contact,\n public permissions: Permissions,\n public sso: SSOConfiguration | null,\n public synchronisation: Synchronisation\n ) {}\n\n}\n","/** @class Host */\n\nexport class Host {\n constructor(\n /** Internal identifier of the host on the digital space */\n public id: number,\n /** Internal identifier of the host in the TurboSelf local database */\n public localId: number,\n public etabId: number,\n /** First name of the host */\n public firstName: string,\n /** Last name of the host */\n public lastName: string,\n /** Host mode */\n public mode: \"Argent\" | \"Forfait\",\n /** Host quality */\n public quality: string,\n /** Host's Class */\n public division: string,\n /** Lunch Price */\n public lunchPrice: number,\n /** Type of host (Student or Commensal or Trainee) */\n public type: number,\n /** Host coded card number */\n public cardNumber: number,\n /** Access URL for Cafeteria pre-order */\n public cafeteriaUrl: string | null,\n public permissions: {\n /** Does the student have the right to payment in the digital space? */\n payment?: boolean;\n /** Does the student have the right to reservation on the digital space? */\n reservation?: boolean;\n /** Is the student entitled to pre-order Cafeteria on the digital space? */\n cafeteria?: boolean;\n /** Is the host allowed to book if their balance is insufficient? */\n bookWithNegativeBalance?: boolean;\n /** Number of passages or reservations authorized at the Self for a service */\n maxPassages?: number;\n }\n ) {}\n\n\n}\n","import { Establishment } from \"../structures/Establishment\";\nimport { Host } from \"../structures/Host\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { rawHostResult } from \"../types/host\";\n\nfunction isRawEstablishmentResult(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): establishment is rawEstablishmentResult {\n return (establishment as rawEstablishmentResult).id !== undefined;\n}\n\nexport function transformToEstablishment(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): Establishment {\n return new Establishment(\n isRawEstablishmentResult(establishment) ? (establishment.id ?? 0) : 0,\n isRawEstablishmentResult(establishment) ? (establishment.nom || \"N/A\") : establishment.nom,\n isRawEstablishmentResult(establishment) ? (establishment.currencySymbol || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.code2p5 || null) : establishment.code2p5,\n isRawEstablishmentResult(establishment) ? (establishment.logoUrl || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.numEtab || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.pcServeur || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.msgAccueil || \"\") : \"You are not logged in so you can't see all data\",\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.nbRepasMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.creanceMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.montantCreditMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.desactive || false) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.fermetures?.map(closure => ({\n id: closure.id,\n canBook: !closure.rsv,\n canPay: !closure.paiement,\n from: new Date(closure.du),\n to: new Date(closure.au)\n })) || []) : [],\n isRawEstablishmentResult(establishment) ? ({\n city: establishment.ville,\n address: establishment.adr1 + \" \" + establishment.adr2,\n postcode: establishment.cp\n }) : {\n city: null,\n address: null,\n postcode: null\n },\n isRawEstablishmentResult(establishment) ? ({\n phoneNumber: establishment.tel || null,\n faxNumber: establishment.fax || null,\n email: establishment.configuration?.email || null,\n website: establishment.configuration?.url || null\n }) : {\n phoneNumber: null,\n faxNumber: null,\n email: null,\n website: null\n },\n isRawEstablishmentResult(establishment) ? ({\n maxReservationsStudentMoney: establishment.configurationSelf?.nbmultiElvArg || null,\n maxReservationsStudentPackage: establishment.configurationSelf?.nbmultiElvFor || null,\n maxReservationsCommensalMoney: establishment.configurationSelf?.nbmultiComArg || null,\n maxReservationsCommensalPackage: establishment.configurationSelf?.nbmultiComFor || null,\n maxReservationsTraineeMoney: establishment.configurationSelf?.nbmultiStgArg || null,\n maxReservationsTraineePackage: establishment.configurationSelf?.nbmultiStgFor || null,\n qrCodeStudent: establishment.configuration?.autoriseQrCodeEleve || null,\n qrCodeCommensal: establishment.configuration?.autoriseQrCodeCommensal || null,\n qrCodeTrainee: establishment.configuration?.autoriseQrCodeStagiaire || null,\n hideHistory: establishment.configuration?.cacherHistorique || null\n }) : {\n maxReservationsStudentMoney: null,\n maxReservationsStudentPackage: null,\n maxReservationsCommensalMoney: null,\n maxReservationsCommensalPackage: null,\n maxReservationsTraineeMoney: null,\n maxReservationsTraineePackage: null,\n qrCodeStudent: null,\n qrCodeCommensal: null,\n qrCodeTrainee: null,\n hideHistory: null\n },\n isRawEstablishmentResult(establishment) ? ({\n id: establishment.configuration?.sso?.id || null,\n entCode: establishment.configuration?.sso?.entCode || null,\n entName: establishment.configuration?.sso?.entName || null,\n serveurCas: establishment.configuration?.sso?.serveurCas || null,\n service: establishment.configuration?.sso?.service || null\n }) : {\n id: null,\n entCode: null,\n entName: null,\n serveurCas: null,\n service: null\n },\n isRawEstablishmentResult(establishment) ? ({\n firstSync: new Date(establishment.datePremSynchro || 0),\n lastSync: new Date(establishment.dateDernSynchro || 0)\n }) : {\n firstSync: new Date(0),\n lastSync: new Date(0)\n }\n );\n}\n\nexport function transformToHost(host: rawHostResult): Host {\n return new Host(\n host.id,\n host.idOrig,\n host.etab.id,\n host.prenom,\n host.nom,\n host.mode,\n host.qualite,\n host.division,\n host.prixDej,\n host.type,\n host.carteCodee,\n host.urlCafeteria || null,\n {\n payment: host.droitPaiement || false,\n reservation: host.droitReservation || false,\n cafeteria: host.droitCafeteria || false,\n bookWithNegativeBalance: host.autoriseReservSoldeIns,\n maxPassages: host.nbMulti\n }\n );\n}\n","import { RestManager } from \"../rest/RESTManager\";\nimport {\n HOST,\n HOST_BALANCE,\n HOST_BOOK_EVENING,\n HOST_BOOK_MEAL,\n HOST_HISTORY_GLOBAL,\n HOST_HISTORY_SPECIFIC,\n HOST_INIT_PAYMENT,\n HOST_PAYMENTS_LATEST,\n HOST_RESERVATIONS,\n HOST_SIBLINGS\n} from \"../rest/endpoints\";\nimport { Host } from \"../structures/Host\";\nimport {\n rawBookingResult,\n rawBookResult,\n rawHistoryGet,\n rawHostBalanceResult,\n rawHostResult,\n rawPaymentInitResult\n} from \"../types/host\";\nimport { Balance } from \"../structures/Balance\";\nimport { Payment } from \"../structures/Payment\";\nimport { HistoryEvent } from \"../structures/HistoryEvent\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { Booking } from \"../structures/Booking\";\nimport { Terminal } from \"../structures/Terminal\";\nimport { BookingDay } from \"../structures/BookingDay\";\nimport { getWeekRange } from \"../utils/weekRange\";\nimport { transformToHost } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getHost = async (token: string, hostId: number): Promise<Host> => {\n const rawHostGet = await manager.get<rawHostResult>(HOST(hostId), { Authorization: `Bearer ${token}` });\n\n return transformToHost(rawHostGet);\n};\n\nexport const getBalances = async (token: string, hostId: number): Promise<Array<Balance>> => {\n const rawBalanceGet = await manager.get<Array<rawHostBalanceResult>>(HOST_BALANCE(hostId), { Authorization: `Bearer ${token}` });\n const balances: Array<Balance> = [];\n for (const balance of rawBalanceGet) {\n const dateString = balance.montantEstimeMsg.match(/(\\d{2})\\/(\\d{2})\\/(\\d{4})/)?.slice(1, 4);\n let date = new Date();\n if (dateString) {\n date = new Date(parseInt(dateString[2], 10), parseInt(dateString[1], 10) - 1, parseInt(dateString[0], 10));\n }\n balances.push(new Balance(\n balance.id,\n balance.hote.id,\n balance.appli.lib,\n balance.montant,\n balance.montantEstime,\n date\n ));\n }\n\n return balances;\n};\n\n\nexport const initPayment = async (token: string, hostId: number, amount: number): Promise<Payment> => {\n const rawPaymentInit = await manager.post<rawPaymentInitResult>(HOST_INIT_PAYMENT(hostId), [{\n paiementPayline: {\n hote: {\n id: hostId\n }\n },\n montant: amount\n }], {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n return new Payment(\n null,\n hostId,\n amount,\n \"INIT\",\n rawPaymentInit.token,\n rawPaymentInit.redirectURL,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPaymentInit.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPaymentInit.token,\n new Date()\n );\n};\n\nexport const getHistory = async (token: string, hostId: number): Promise<Array<HistoryEvent>> => {\n const rawHistory = await manager.get<Array<rawHistoryGet>>(HOST_HISTORY_GLOBAL(hostId), { Authorization: `Bearer ${token}` });\n const history: Array<HistoryEvent> = [];\n for (const event of rawHistory) {\n history.push(new HistoryEvent(\n event.id,\n new Date(event.date),\n event.detail,\n (event.credit ?? 0) - (event.debit ?? 0)\n ));\n }\n\n return history;\n};\n\nexport const getHistoryEvent = async (token: string, hostId: number, eventId: number): Promise<HistoryEvent> => {\n const rawHistory = await manager.get<rawHistoryGet>(HOST_HISTORY_SPECIFIC(hostId, eventId), { Authorization: `Bearer ${token}` });\n return new HistoryEvent(\n rawHistory.id,\n new Date(rawHistory.date),\n rawHistory.detail,\n (rawHistory.credit ?? 0) - (rawHistory.debit ?? 0)\n );\n};\n\nexport const getLastPayment = async (token: string, hostId: number): Promise<Payment> => {\n const rawPayment = await manager.get<rawPaymentResult>(HOST_PAYMENTS_LATEST(hostId), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPayment.id,\n hostId,\n rawPayment.montant,\n rawPayment.statut,\n rawPayment.token,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPayment.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPayment.token,\n new Date(rawPayment.date)\n );\n};\n\nexport const canBookEvening = async (token: string, hostId: number): Promise<boolean> => manager.get<boolean>(HOST_BOOK_EVENING(hostId), { Authorization: `Bearer ${token}` });\n\nexport const getBookings = async (token: string, hostId: number, week?: number): Promise<Array<Booking>> => {\n const rawBooking = await manager.get<rawBookingResult>(HOST_RESERVATIONS(hostId, week), { Authorization: `Bearer ${token}` });\n if (!rawBooking.rsvWebDto[0]) {\n throw new Error(\"No booking found for this week.\");\n }\n const weekRange = getWeekRange(rawBooking.rsvWebDto[0].semaine, rawBooking.rsvWebDto[0].annee);\n const bookings = [];\n const days = [];\n for (const rawBookingDto of rawBooking.rsvWebDto) {\n for (const rawDay of rawBookingDto.jours) {\n days.push(new BookingDay(\n token,\n hostId,\n rawBookingDto.id,\n rawDay.dayReserv > 0,\n rawDay.autorise,\n rawDay.dayOfWeek,\n rawDay.msg || \"\",\n rawDay.dayReserv,\n new Date(weekRange.from.getTime() + (rawDay.dayOfWeek - 1) * 86400000)\n ));\n }\n\n bookings.push(new Booking(\n rawBookingDto.id,\n rawBookingDto.semaine,\n rawBookingDto.hote.id,\n weekRange.from,\n weekRange.to,\n new Terminal(\n rawBookingDto.borne.id,\n rawBookingDto.borne.idOrig,\n rawBookingDto.borne.code2p5,\n rawBookingDto.borne.lib,\n rawBookingDto.borne.prix.map(price => ({\n id: price.id,\n localId: price.idOrig,\n name: price.lib,\n price: price.prix\n }))\n ),\n days\n ));\n }\n\n return bookings;\n};\n\nexport const bookMeal = async (token: string, hostId: number, bookId: string, day: number, reservations = 1, bookEvening = false): Promise<BookingDay> => {\n const rawBook = await manager.post<rawBookResult>(HOST_BOOK_MEAL(hostId), {\n dayOfWeek: day,\n dayReserv: reservations,\n web: {\n id: bookId\n },\n hasHoteResaSoirActive: bookEvening\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return new BookingDay(\n token,\n hostId,\n rawBook.id,\n rawBook.dayReserv > 0,\n true,\n rawBook.dayOfWeek,\n rawBook.msg || \"\",\n rawBook.dayReserv,\n new Date()\n );\n};\n\nexport const getHostSiblings = async (token: string, hostId: number): Promise<Array<Host>> => {\n const rawSiblings = await manager.get<Array<rawHostResult>>(HOST_SIBLINGS(hostId), { Authorization: `Bearer ${token}` });\n const siblings: Array<Host> = [];\n for (const rawSibling of rawSiblings) {\n siblings.push(transformToHost(rawSibling));\n }\n\n return siblings;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { rawPasswordChangeResult, rawRequestPasswordResetResult } from \"../types/account\";\nimport { AUTH_PASSWORD_CHANGE, AUTH_PASSWORD_RESET } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const requestPasswordReset = async (email: string): Promise<boolean> => {\n const rawRequestPasswordReset = await manager.get<rawRequestPasswordResetResult>(AUTH_PASSWORD_RESET(email));\n if (rawRequestPasswordReset.rejected.length !== 0) {\n throw new Error(`Failed to send password reset email to ${rawRequestPasswordReset.rejected.join(\", \")}`);\n }\n return true;\n};\n\nexport const editPassword = async (user: number, actualPassword: string, password: string, token: string): Promise<string> => {\n const rawPasswordChange = await manager.put<rawPasswordChangeResult>(AUTH_PASSWORD_CHANGE(), {\n id: user,\n password: actualPassword,\n newPassword: password\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return rawPasswordChange.token;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { ESTABLISHMENT_BY_CODE, ESTABLISHMENT_BY_ID, ESTABLISHMENT_SEARCH } from \"../rest/endpoints\";\nimport { Establishment } from \"../structures/Establishment\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { transformToEstablishment } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const searchEstablishments = async (query: string, code = \"\", limit = 10, minimalist = false, token?: string): Promise<Array<Establishment>> => {\n const rawEstablishmentSearch = await manager.get<Array<rawEstablishmentSearchResult>>(ESTABLISHMENT_SEARCH(query, code, limit));\n\n const establishments: Array<Establishment> = [];\n if (token && !minimalist) {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(await getEstablishmentBy2P5(token, establishment.code2p5));\n }\n } else {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(transformToEstablishment(establishment));\n }\n }\n\n\n return establishments;\n};\n\nexport const getEstablishmentBy2P5 = async (token: string, code2p5: string): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<Array<rawEstablishmentResult>>(ESTABLISHMENT_BY_CODE(code2p5), {\n Authorization: `Bearer ${token}`\n });\n if (rawEstablishmentGet.length === 0) {\n throw new Error(\"Establishment not found\");\n }\n const establishment = rawEstablishmentGet[0];\n return transformToEstablishment(establishment);\n};\n\nexport const getEstablishment = async (token: string, etabId: number): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<rawEstablishmentResult>(ESTABLISHMENT_BY_ID(etabId), {\n Authorization: `Bearer ${token}`\n });\n return transformToEstablishment(rawEstablishmentGet);\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { Payment } from \"../structures/Payment\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { PAYMENTS_SPECIFIC } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getPayment = async (token: string, paymentToken: string): Promise<Payment> => {\n const rawPaymentGet = await manager.get<rawPaymentResult>(PAYMENTS_SPECIFIC(paymentToken), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPaymentGet.id,\n rawPaymentGet.hote.id,\n rawPaymentGet.montant,\n rawPaymentGet.statut,\n paymentToken,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + paymentToken,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + paymentToken,\n new Date(rawPaymentGet.date)\n );\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { AUTH_LOGIN } from \"../rest/endpoints\";\nimport { getEstablishment } from \"../routes/Establishment\";\nimport { getBalances, getHost } from \"../routes/Host\";\nimport { Client } from \"../structures/Client\";\nimport { rawAuthResult } from \"../types/authentication\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nconst createClient = async (\n data: rawAuthResult,\n remember: boolean,\n username: string | null,\n password: string | null,\n minimalist: boolean\n): Promise<Client> => {\n if (minimalist) {\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n });\n }\n\n const host = await getHost(data.access_token, data.hoteId);\n\n const [balance, establishment] = await Promise.all([\n getBalances(data.access_token, data.hoteId),\n getEstablishment(data.access_token, host.etabId)\n ]);\n\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n }, establishment, host, balance);\n};\n\nexport const authenticateWithCredentials = async (\n username: string,\n password: string,\n remember = true,\n minimalist = false,\n hoteId?: number\n): Promise<Client> => {\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password,\n hoteId\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n\nexport const authenticateWithTicket = async (\n ent: \"PRONOTE\" | string,\n ticket: string,\n remember = true,\n minimalist = false\n): Promise<Client> => {\n const response = await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${ent}&ticket=${ticket}`);\n const cookies = response.headers.get(\"set-cookie\");\n const username: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n const password: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n","import { Establishment } from \"./Establishment\";\nimport { Host } from \"./Host\";\nimport { Balance } from \"./Balance\";\nimport { Payment } from \"./Payment\";\nimport { HistoryEvent } from \"./HistoryEvent\";\nimport { Booking } from \"./Booking\";\nimport { BookingDay } from \"./BookingDay\";\nimport { AuthCredentials } from \"../types/authentication\";\nimport {\n bookMeal,\n canBookEvening,\n getBalances,\n getBookings,\n getHistory,\n getHistoryEvent,\n getHost,\n getHostSiblings,\n getLastPayment,\n initPayment\n} from \"../routes/Host\";\nimport { getEstablishment, searchEstablishments } from \"../routes/Establishment\";\nimport { authenticateWithCredentials } from \"../utils/authenticate\";\nimport { getPayment } from \"../routes/Payment\";\nimport { editPassword } from \"../routes/Account\";\n\nexport class Client {\n constructor(\n private credentials: AuthCredentials,\n public establishment?: Establishment,\n public host?: Host,\n public balances?: Array<Balance>\n ) {}\n /** This method is used to book a meal.\n * @param bookId The booking ID\n * @param day The day\n * @param reservations The number of reservations\n * @param bookEvening Whether to book the evening\n */\n async bookMeal(bookId: string, day: number, reservations?: number, bookEvening?: boolean): Promise<BookingDay> {\n await this.refreshBearerToken();\n return bookMeal(this.credentials.token, this.credentials.hostId, bookId, day, reservations, bookEvening);\n }\n /** This method is used to check if the client can book an evening.\n */\n async canBookEvening(): Promise<boolean> {\n await this.refreshBearerToken();\n return canBookEvening(this.credentials.token, this.credentials.hostId);\n }\n\n /** This method is used to edit the password of the client.\n * @param actualPassword The actual password\n * @param password The new password\n * @returns The token of the request\n */\n async editPassword(actualPassword: string, password: string): Promise<string> {\n await this.refreshBearerToken();\n return editPassword(this.credentials.userId, actualPassword, password, this.credentials.token);\n }\n\n /** This method is used to get the balances of the client.\n */\n async getBalances(): Promise<Array<Balance>> {\n await this.refreshBearerToken();\n return getBalances(this.credentials.token, this.credentials.hostId);\n }\n async getBookings(week?: number): Promise<Array<Booking>> {\n await this.refreshBearerToken();\n return getBookings(this.credentials.token, this.credentials.hostId, week);\n }\n /** This method is used to get the establishment of the client.\n * @param establishmentId The establishment ID to get. If not provided, the establishment of the host will be returned.\n */\n async getEstablishment(establishmentId?: number): Promise<Establishment> {\n await this.refreshBearerToken();\n const etabId = establishmentId || this.host?.etabId;\n if (!etabId) {\n throw new Error(\n \"You need to provide an establishment ID to get the establishment. \" +\n \"You can also disable the minimalist mode on authentication.\"\n );\n }\n return getEstablishment(this.credentials.token, etabId);\n }\n /** This method is used to get the history of the client.\n */\n async getHistory(): Promise<Array<HistoryEvent>> {\n await this.refreshBearerToken();\n return getHistory(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific history event.\n * @param eventId The event ID\n */\n async getHistoryEvent(eventId: number): Promise<HistoryEvent> {\n await this.refreshBearerToken();\n return getHistoryEvent(this.credentials.token, this.credentials.hostId, eventId);\n }\n /** This method is used to get the host of the client.\n */\n async getHost(): Promise<Host> {\n await this.refreshBearerToken();\n return getHost(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get the last payment of the client.\n */\n async getLastPayment(): Promise<Payment> {\n await this.refreshBearerToken();\n return getLastPayment(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific payment.\n * @param paymentToken The payment token\n */\n async getPayment(paymentToken: string): Promise<Payment> {\n await this.refreshBearerToken();\n return getPayment(this.credentials.token, paymentToken);\n }\n\n /** This method is used to get siblings of the host\n */\n async getSiblings(): Promise<Array<Host>> {\n await this.refreshBearerToken();\n return getHostSiblings(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to initialize a payment.\n * @param amount The amount\n */\n async initPayment(amount: number): Promise<Payment> {\n await this.refreshBearerToken();\n return initPayment(this.credentials.token, this.credentials.hostId, amount);\n }\n async refreshBearerToken(force = false): Promise<boolean> {\n if (!force && this.credentials.token_expiry > Date.now()) {\n return false;\n }\n if (!this.credentials.password || !this.credentials.username) {\n throw new Error(\"You need to provide a username and password to refresh the bearer token.\");\n }\n const client = await authenticateWithCredentials(this.credentials.username, this.credentials.password, true, false);\n this.credentials = client.credentials;\n return true;\n }\n\n\n /** This method is used to search for establishments.\n * @param query The query to search for.\n * @param code The establishment code to search for.\n * @param limit The maximum number of establishments to return.\n * @param minimalist Whether to return only minimalist data or the full establishment data (more requests).\n */\n async searchEstablishments(query: string, code = \"\", limit = 10, minimalist = false): Promise<Array<Establishment>> {\n await this.refreshBearerToken();\n return searchEstablishments(query, code, limit, minimalist, this.credentials.token);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/rest/RESTManager.ts","../src/rest/endpoints.ts","../src/structures/Balance.ts","../src/structures/Payment.ts","../src/structures/HistoryEvent.ts","../src/structures/Booking.ts","../src/structures/Terminal.ts","../src/structures/BookingDay.ts","../src/utils/weekRange.ts","../src/structures/Establishment.ts","../src/structures/Host.ts","../src/utils/transformers.ts","../src/routes/Host.ts","../src/routes/Account.ts","../src/routes/Establishment.ts","../src/routes/Payment.ts","../src/utils/authenticate.ts","../src/structures/Client.ts"],"names":["responseData","manager"],"mappings":"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","file":"index.mjs","sourcesContent":["/** @module RESTManager */\nimport { RequestOptions } from \"../types/request-handler\";\n\nexport class RestManager {\n private readonly baseURL: string;\n\n constructor(baseURL: string) {\n this.baseURL = baseURL;\n }\n\n private async sendRequest<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers } = options;\n const url = `${this.baseURL}/${path}`;\n\n const response = await fetch(url, {\n method,\n body: body ? JSON.stringify(body) : undefined,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n \"User-Agent\": \"@raphckrman/turboself-api\"\n }\n });\n\n if (!response.ok) {\n const responseData = await response.json();\n throw new Error(`${response.status}: ${JSON.stringify(responseData)}`);\n }\n\n const responseData = await response.json();\n return responseData as T;\n }\n\n async get<T>(\n path: string,\n headers?: Record<string, string>\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"GET\",\n path: path,\n headers: headers\n });\n }\n\n async post<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"POST\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async put<T>(\n path: string,\n body: any,\n options?: RequestOptions\n ): Promise<T> {\n return this.sendRequest<T>({\n method: \"PUT\",\n path,\n body,\n headers: options?.headers\n });\n }\n\n async delete<T>(\n path: string,\n params?: Record<string, any>,\n options?: RequestOptions\n ): Promise<T> {\n const urlParams = new URLSearchParams(params).toString();\n const urlPath = urlParams ? `${path}?${urlParams}` : path;\n return this.sendRequest<T>({\n method: \"DELETE\",\n path: urlPath,\n headers: options?.headers\n });\n }\n}\n","/** REST/Endpoints */\nexport const BASE_URL = () => \"https://api-rest-prod.incb.fr/api\";\n\nexport const AUTH_LOGIN = () => \"v1/auth/login\";\nexport const AUTH_SIGNUP = () => \"v1/creation-comptes\";\nexport const AUTH_PASSWORD_RESET = (email: string) => `v1/utilisateurs/password?email=${email}`;\nexport const AUTH_PASSWORD_CHANGE = () => \"v1/utilisateurs/password\";\n\nexport const USER_BY_ID = (userId: number) => `v1/utilisateurs/${userId}`;\nexport const USER_BY_HOTE = (hostId: number) => `v1/utilisateurs/hotes/${hostId}`;\n\nexport const HOST = (hostId: number) => `v1/hotes/${hostId}`;\nexport const HOST_BALANCE = (hostId: number) => `v1/comptes/hotes/${hostId}/3`;\nexport const HOST_ACCOUNTS = (hostId: number) => `v2/hotes/${hostId}/comptes`;\nexport const HOST_SIBLINGS = (hostId: number) => `v1/hotes/${hostId}/freres-soeurs`;\nexport const HOST_BOOK_EVENING = (hostId: number) => `v1/hotes/${hostId}/resa-soir`;\nexport const HOST_HISTORY_GLOBAL = (hostId: number) => `v1/historiques/hotes/${hostId}`;\nexport const HOST_INIT_PAYMENT = (hostId: number) => `v2/hotes/${hostId}/paiements/init`;\nexport const HOST_PAYMENTS_LATEST = (hostId: number) => `v2/hotes/${hostId}/paiements-payline/latest`;\nexport const HOST_HISTORY_SPECIFIC = (hostId: number, eventId: number) => `v2/hotes/${hostId}/historiques/${eventId}`;\nexport const HOST_RESERVATIONS = (hostId: number, week?: number) => `v1/reservations/hotes/${hostId}/semaines${\"?num=\" + week || \"\"}`;\nexport const HOST_RESERVATIONS_SPECIFIC = (hostId: number, reservationId: string) => `v2/hotes/${hostId}/reservations/${reservationId}`;\nexport const HOST_BOOK_MEAL = (hostId: number) => `v2/hotes/${hostId}/reservations-jours`;\n\nexport const ESTABLISHMENT_BY_CODE = (code: string) => `v2/etablissements?code2p5=${code}`;\nexport const ESTABLISHMENT_BY_ID = (establishmentId: number) => `v1/etablissements/etabId/${establishmentId}`;\nexport const ESTABLISHMENT_SEARCH = (query: string, code: string, limit: number) => `v1/etablissements?q=${query}&code2p5=${code}&limit=${limit}`;\n\nexport const TERMINALS_BY_ID = (terminalId: number) => `v1/bornes/${terminalId}`;\n\nexport const PAYMENTS_SPECIFIC = (paymentToken: string) => `v1/paiements-payline/${paymentToken}`;\n","export class Balance {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: number,\n /** Internal identifier of the host */\n public hostId: number,\n /** Label of the balance */\n public label: string,\n /** Amount of the balance */\n public amount: number,\n /** Estimated host account balance (taking into account future reservations and OK payments) */\n public estimatedAmount: number,\n /** Date of the estimated balance */\n public estimatedDate: Date\n ) {}\n}\n","export class Payment {\n constructor(\n /** Internal identifier of Payline payment in the digital space */\n public id: number | null,\n /** Host ID of the buyer */\n public hostId: number,\n /** Amount of the payment */\n public amount: number,\n /** Status of the payment */\n public status: string,\n /** Payment token */\n public token: string,\n /** URL of the payment page */\n public url: string | null,\n /** URL to redirect to if the payment is cancelled */\n public cancelURL: string,\n /** URL to redirect to if the payment is successful */\n public returnURL: string,\n /** Date of the payment */\n public date: Date\n ) {}\n\n}\n","export class HistoryEvent {\n constructor(\n /** Internal identifier of a host's history in digital space */\n public id: number,\n /** Date of the operation */\n public date: Date,\n /** Operation details */\n public label: string,\n /** Amount of the operation */\n public amount: number\n ) {}\n\n}\n","import { BookingDay } from \"./BookingDay\";\nimport { Terminal } from \"./Terminal\";\n\nexport class Booking {\n constructor(\n /** Internal identifier of a host's accounting in the digital space */\n public id: string,\n /** Calendar week number */\n public week: number,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Week Start Date */\n public from: Date,\n /** Week End Date */\n public to: Date,\n /** Terminal information */\n public terminal: Terminal,\n /** Days of the week available to book */\n public days: Array<BookingDay>\n ) {}\n}\n","export class Terminal {\n constructor(\n /** Internal identifier of the Self terminal in the digital space */\n public id: number,\n /** Internal identfeir of the Self terminal in the local database */\n public localId: number,\n /** 2P5 Code of the establishment */\n public code: number,\n /** Terminal Name (eg. Self) */\n public name: string,\n public prices: Array<{\n /** Internal identifier of the price in the digital space */\n id: number;\n /** Internal identifier of the price in the local database */\n localId: number;\n /** Name of the price */\n name: string;\n /** Price in cents */\n price: number;\n }>\n ) {}\n}\n","import { bookMeal } from \"../routes/Host\";\n\nexport class BookingDay {\n constructor(\n private token: string,\n /** Internal identifier of the host on the digital space */\n public hostId: number,\n /** Internal identifier of the booking week in the digital space */\n public id: string,\n /** Whether the day is booked */\n public booked: boolean,\n /** Whether the day is available to book */\n public canBook: boolean,\n /** Day of the week */\n public dayNumber: number,\n /** Message to display */\n public message: string,\n /** Number of reservations this day */\n public reservations: number,\n /** Date of the day */\n public date: Date\n ) {}\n\n async book(reservations = 1, bookEvening = false): Promise<BookingDay> {\n this.booked = reservations > 0;\n return bookMeal(this.token, this.hostId, this.id, this.date.getDay(), reservations, bookEvening);\n }\n}\n","export function getWeekRange(weekNumber: number, year: number): { from: Date; to: Date; } {\n weekNumber -= 2;\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfWeek = firstDayOfYear.getDay();\n const daysToFirstMonday = (dayOfWeek === 0) ? 1 : (8 - dayOfWeek);\n const firstMonday = new Date(firstDayOfYear);\n firstMonday.setDate(firstDayOfYear.getDate() + daysToFirstMonday);\n const weekStartDate = new Date(firstMonday);\n weekStartDate.setDate(firstMonday.getDate() + weekNumber * 7);\n const weekEndDate = new Date(weekStartDate);\n weekEndDate.setDate(weekStartDate.getDate() + 6);\n weekStartDate.setHours(0, 0, 0, 0);\n weekEndDate.setHours(23, 59, 59, 999);\n const timezoneOffset = weekStartDate.getTimezoneOffset() * 60000;\n const fromLocal = new Date(weekStartDate.getTime() - timezoneOffset);\n const toLocal = new Date(weekEndDate.getTime() - timezoneOffset);\n return { from: fromLocal, to: toLocal };\n}\n","/** @class Establishment */\n\nimport {\n Closure,\n Contact,\n Location,\n Permissions,\n SSOConfiguration,\n Synchronisation\n} from \"../types/establishment\";\n\nexport class Establishment {\n constructor(\n /** Internal identifier of the establishment on the digital space */\n public id: number,\n /** Name of establishment (max length: 50) */\n public name: string,\n /** Currency symbol */\n public currencySymbol: string | null,\n /** 2p5 code */\n public code: string | null,\n /** URL of the establishment logo */\n public logoUrl: string | null,\n /** UAI (Unité Administrative Immatriculée) code, unique to each establishment */\n public uai: string | null,\n /** Server MAC Adress */\n public macAddress: string | null,\n /** Digital space greeting */\n public motd: string,\n /** Minimum number of meals to credit the Self account */\n public minMealsToCredit: number | null,\n /** Minimum debt to credit the Forfait account */\n public minDebtToCredit: number | null,\n /** Minimum amount to credit the Self account */\n public minAmountToCredit: number | null,\n /** If the establishment is disabled */\n public disabled: boolean | null,\n public closures: Array<Closure>,\n public location: Location,\n public contact: Contact,\n public permissions: Permissions,\n public sso: SSOConfiguration | null,\n public synchronisation: Synchronisation\n ) {}\n\n}\n","/** @class Host */\n\nexport class Host {\n constructor(\n /** Internal identifier of the host on the digital space */\n public id: number,\n /** Internal identifier of the host in the TurboSelf local database */\n public localId: number,\n public etabId: number,\n /** First name of the host */\n public firstName: string,\n /** Last name of the host */\n public lastName: string,\n /** Host mode */\n public mode: \"Argent\" | \"Forfait\",\n /** Host quality */\n public quality: string,\n /** Host's Class */\n public division: string,\n /** Lunch Price */\n public lunchPrice: number,\n /** Type of host (Student or Commensal or Trainee) */\n public type: number,\n /** Host coded card number */\n public cardNumber: number,\n /** Access URL for Cafeteria pre-order */\n public cafeteriaUrl: string | null,\n public permissions: {\n /** Does the student have the right to payment in the digital space? */\n payment?: boolean;\n /** Does the student have the right to reservation on the digital space? */\n reservation?: boolean;\n /** Is the student entitled to pre-order Cafeteria on the digital space? */\n cafeteria?: boolean;\n /** Is the host allowed to book if their balance is insufficient? */\n bookWithNegativeBalance?: boolean;\n /** Number of passages or reservations authorized at the Self for a service */\n maxPassages?: number;\n }\n ) {}\n\n\n}\n","import { Establishment } from \"../structures/Establishment\";\nimport { Host } from \"../structures/Host\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { rawHostResult } from \"../types/host\";\n\nfunction isRawEstablishmentResult(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): establishment is rawEstablishmentResult {\n return (establishment as rawEstablishmentResult).id !== undefined;\n}\n\nexport function transformToEstablishment(establishment: rawEstablishmentResult | rawEstablishmentSearchResult): Establishment {\n return new Establishment(\n isRawEstablishmentResult(establishment) ? (establishment.id ?? 0) : 0,\n isRawEstablishmentResult(establishment) ? (establishment.nom || \"N/A\") : establishment.nom,\n isRawEstablishmentResult(establishment) ? (establishment.currencySymbol || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.code2p5 || null) : establishment.code2p5,\n isRawEstablishmentResult(establishment) ? (establishment.logoUrl || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.numEtab || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.pcServeur || null) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.msgAccueil || \"\") : \"You are not logged in so you can't see all data\",\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.nbRepasMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.creanceMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.montantCreditMini || 0) : null,\n isRawEstablishmentResult(establishment) ? (establishment.desactive || false) : null,\n isRawEstablishmentResult(establishment) ? (establishment.configuration?.fermetures?.map(closure => ({\n id: closure.id,\n canBook: !closure.rsv,\n canPay: !closure.paiement,\n from: new Date(closure.du),\n to: new Date(closure.au)\n })) || []) : [],\n isRawEstablishmentResult(establishment) ? ({\n city: establishment.ville,\n address: establishment.adr1 + \" \" + establishment.adr2,\n postcode: establishment.cp\n }) : {\n city: null,\n address: null,\n postcode: null\n },\n isRawEstablishmentResult(establishment) ? ({\n phoneNumber: establishment.tel || null,\n faxNumber: establishment.fax || null,\n email: establishment.configuration?.email || null,\n website: establishment.configuration?.url || null\n }) : {\n phoneNumber: null,\n faxNumber: null,\n email: null,\n website: null\n },\n isRawEstablishmentResult(establishment) ? ({\n maxReservationsStudentMoney: establishment.configurationSelf?.nbmultiElvArg || null,\n maxReservationsStudentPackage: establishment.configurationSelf?.nbmultiElvFor || null,\n maxReservationsCommensalMoney: establishment.configurationSelf?.nbmultiComArg || null,\n maxReservationsCommensalPackage: establishment.configurationSelf?.nbmultiComFor || null,\n maxReservationsTraineeMoney: establishment.configurationSelf?.nbmultiStgArg || null,\n maxReservationsTraineePackage: establishment.configurationSelf?.nbmultiStgFor || null,\n qrCodeStudent: establishment.configuration?.autoriseQrCodeEleve || null,\n qrCodeCommensal: establishment.configuration?.autoriseQrCodeCommensal || null,\n qrCodeTrainee: establishment.configuration?.autoriseQrCodeStagiaire || null,\n hideHistory: establishment.configuration?.cacherHistorique || null\n }) : {\n maxReservationsStudentMoney: null,\n maxReservationsStudentPackage: null,\n maxReservationsCommensalMoney: null,\n maxReservationsCommensalPackage: null,\n maxReservationsTraineeMoney: null,\n maxReservationsTraineePackage: null,\n qrCodeStudent: null,\n qrCodeCommensal: null,\n qrCodeTrainee: null,\n hideHistory: null\n },\n isRawEstablishmentResult(establishment) ? ({\n id: establishment.configuration?.sso?.id || null,\n entCode: establishment.configuration?.sso?.entCode || null,\n entName: establishment.configuration?.sso?.entName || null,\n serveurCas: establishment.configuration?.sso?.serveurCas || null,\n service: establishment.configuration?.sso?.service || null\n }) : {\n id: null,\n entCode: null,\n entName: null,\n serveurCas: null,\n service: null\n },\n isRawEstablishmentResult(establishment) ? ({\n firstSync: new Date(establishment.datePremSynchro || 0),\n lastSync: new Date(establishment.dateDernSynchro || 0)\n }) : {\n firstSync: new Date(0),\n lastSync: new Date(0)\n }\n );\n}\n\nexport function transformToHost(host: rawHostResult): Host {\n return new Host(\n host.id,\n host.idOrig,\n host.etab.id,\n host.prenom,\n host.nom,\n host.mode,\n host.qualite,\n host.division,\n host.prixDej,\n host.type,\n host.carteCodee,\n host.urlCafeteria || null,\n {\n payment: host.droitPaiement || false,\n reservation: host.droitReservation || false,\n cafeteria: host.droitCafeteria || false,\n bookWithNegativeBalance: host.autoriseReservSoldeIns,\n maxPassages: host.nbMulti\n }\n );\n}\n","import { RestManager } from \"../rest/RESTManager\";\nimport {\n HOST,\n HOST_BALANCE,\n HOST_BOOK_EVENING,\n HOST_BOOK_MEAL,\n HOST_HISTORY_GLOBAL,\n HOST_HISTORY_SPECIFIC,\n HOST_INIT_PAYMENT,\n HOST_PAYMENTS_LATEST,\n HOST_RESERVATIONS,\n HOST_SIBLINGS\n} from \"../rest/endpoints\";\nimport { Host } from \"../structures/Host\";\nimport {\n rawBookingResult,\n rawBookResult,\n rawHistoryGet,\n rawHostBalanceResult,\n rawHostResult,\n rawPaymentInitResult\n} from \"../types/host\";\nimport { Balance } from \"../structures/Balance\";\nimport { Payment } from \"../structures/Payment\";\nimport { HistoryEvent } from \"../structures/HistoryEvent\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { Booking } from \"../structures/Booking\";\nimport { Terminal } from \"../structures/Terminal\";\nimport { BookingDay } from \"../structures/BookingDay\";\nimport { getWeekRange } from \"../utils/weekRange\";\nimport { transformToHost } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getHost = async (token: string, hostId: number): Promise<Host> => {\n const rawHostGet = await manager.get<rawHostResult>(HOST(hostId), { Authorization: `Bearer ${token}` });\n\n return transformToHost(rawHostGet);\n};\n\nexport const getBalances = async (token: string, hostId: number): Promise<Array<Balance>> => {\n const rawBalanceGet = await manager.get<Array<rawHostBalanceResult>>(HOST_BALANCE(hostId), { Authorization: `Bearer ${token}` });\n const balances: Array<Balance> = [];\n for (const balance of rawBalanceGet) {\n const dateString = balance.montantEstimeMsg\n ? balance.montantEstimeMsg.match(/(\\d{2})\\/(\\d{2})\\/(\\d{4})/)?.slice(1, 4)\n : undefined;\n let date = new Date();\n if (dateString) {\n date = new Date(parseInt(dateString[2], 10), parseInt(dateString[1], 10) - 1, parseInt(dateString[0], 10));\n }\n balances.push(new Balance(\n balance.id,\n balance.hote.id,\n balance.appli.lib,\n balance.montant,\n balance.montantEstime,\n date\n ));\n }\n\n return balances;\n};\n\n\nexport const initPayment = async (token: string, hostId: number, amount: number): Promise<Payment> => {\n const rawPaymentInit = await manager.post<rawPaymentInitResult>(HOST_INIT_PAYMENT(hostId), [{\n paiementPayline: {\n hote: {\n id: hostId\n }\n },\n montant: amount\n }], {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n return new Payment(\n null,\n hostId,\n amount,\n \"INIT\",\n rawPaymentInit.token,\n rawPaymentInit.redirectURL,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPaymentInit.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPaymentInit.token,\n new Date()\n );\n};\n\nexport const getHistory = async (token: string, hostId: number): Promise<Array<HistoryEvent>> => {\n const rawHistory = await manager.get<Array<rawHistoryGet>>(HOST_HISTORY_GLOBAL(hostId), { Authorization: `Bearer ${token}` });\n const history: Array<HistoryEvent> = [];\n for (const event of rawHistory) {\n history.push(new HistoryEvent(\n event.id,\n new Date(event.date),\n event.detail,\n (event.credit ?? 0) - (event.debit ?? 0)\n ));\n }\n\n return history;\n};\n\nexport const getHistoryEvent = async (token: string, hostId: number, eventId: number): Promise<HistoryEvent> => {\n const rawHistory = await manager.get<rawHistoryGet>(HOST_HISTORY_SPECIFIC(hostId, eventId), { Authorization: `Bearer ${token}` });\n return new HistoryEvent(\n rawHistory.id,\n new Date(rawHistory.date),\n rawHistory.detail,\n (rawHistory.credit ?? 0) - (rawHistory.debit ?? 0)\n );\n};\n\nexport const getLastPayment = async (token: string, hostId: number): Promise<Payment> => {\n const rawPayment = await manager.get<rawPaymentResult>(HOST_PAYMENTS_LATEST(hostId), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPayment.id,\n hostId,\n rawPayment.montant,\n rawPayment.statut,\n rawPayment.token,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + rawPayment.token,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + rawPayment.token,\n new Date(rawPayment.date)\n );\n};\n\nexport const canBookEvening = async (token: string, hostId: number): Promise<boolean> => manager.get<boolean>(HOST_BOOK_EVENING(hostId), { Authorization: `Bearer ${token}` });\n\nexport const getBookings = async (token: string, hostId: number, week?: number): Promise<Array<Booking>> => {\n const rawBooking = await manager.get<rawBookingResult>(HOST_RESERVATIONS(hostId, week), { Authorization: `Bearer ${token}` });\n if (!rawBooking.rsvWebDto[0]) {\n throw new Error(\"No booking found for this week.\");\n }\n const weekRange = getWeekRange(rawBooking.rsvWebDto[0].semaine, rawBooking.rsvWebDto[0].annee);\n const bookings = [];\n const days = [];\n for (const rawBookingDto of rawBooking.rsvWebDto) {\n for (const rawDay of rawBookingDto.jours) {\n days.push(new BookingDay(\n token,\n hostId,\n rawBookingDto.id,\n rawDay.dayReserv > 0,\n rawDay.autorise,\n rawDay.dayOfWeek,\n rawDay.msg || \"\",\n rawDay.dayReserv,\n new Date(weekRange.from.getTime() + (rawDay.dayOfWeek - 1) * 86400000)\n ));\n }\n\n bookings.push(new Booking(\n rawBookingDto.id,\n rawBookingDto.semaine,\n rawBookingDto.hote.id,\n weekRange.from,\n weekRange.to,\n new Terminal(\n rawBookingDto.borne.id,\n rawBookingDto.borne.idOrig,\n rawBookingDto.borne.code2p5,\n rawBookingDto.borne.lib,\n rawBookingDto.borne.prix.map(price => ({\n id: price.id,\n localId: price.idOrig,\n name: price.lib,\n price: price.prix\n }))\n ),\n days\n ));\n }\n\n return bookings;\n};\n\nexport const bookMeal = async (token: string, hostId: number, bookId: string, day: number, reservations = 1, bookEvening = false): Promise<BookingDay> => {\n const rawBook = await manager.post<rawBookResult>(HOST_BOOK_MEAL(hostId), {\n dayOfWeek: day,\n dayReserv: reservations,\n web: {\n id: bookId\n },\n hasHoteResaSoirActive: bookEvening\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return new BookingDay(\n token,\n hostId,\n rawBook.id,\n rawBook.dayReserv > 0,\n true,\n rawBook.dayOfWeek,\n rawBook.msg || \"\",\n rawBook.dayReserv,\n new Date()\n );\n};\n\nexport const getHostSiblings = async (token: string, hostId: number): Promise<Array<Host>> => {\n const rawSiblings = await manager.get<Array<rawHostResult>>(HOST_SIBLINGS(hostId), { Authorization: `Bearer ${token}` });\n const siblings: Array<Host> = [];\n for (const rawSibling of rawSiblings) {\n siblings.push(transformToHost(rawSibling));\n }\n\n return siblings;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { rawPasswordChangeResult, rawRequestPasswordResetResult } from \"../types/account\";\nimport { AUTH_PASSWORD_CHANGE, AUTH_PASSWORD_RESET } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const requestPasswordReset = async (email: string): Promise<boolean> => {\n const rawRequestPasswordReset = await manager.get<rawRequestPasswordResetResult>(AUTH_PASSWORD_RESET(email));\n if (rawRequestPasswordReset.rejected.length !== 0) {\n throw new Error(`Failed to send password reset email to ${rawRequestPasswordReset.rejected.join(\", \")}`);\n }\n return true;\n};\n\nexport const editPassword = async (user: number, actualPassword: string, password: string, token: string): Promise<string> => {\n const rawPasswordChange = await manager.put<rawPasswordChangeResult>(AUTH_PASSWORD_CHANGE(), {\n id: user,\n password: actualPassword,\n newPassword: password\n }, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n\n return rawPasswordChange.token;\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { ESTABLISHMENT_BY_CODE, ESTABLISHMENT_BY_ID, ESTABLISHMENT_SEARCH } from \"../rest/endpoints\";\nimport { Establishment } from \"../structures/Establishment\";\nimport { rawEstablishmentResult, rawEstablishmentSearchResult } from \"../types/establishment\";\nimport { transformToEstablishment } from \"../utils/transformers\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const searchEstablishments = async (query: string, code = \"\", limit = 10, minimalist = false, token?: string): Promise<Array<Establishment>> => {\n const rawEstablishmentSearch = await manager.get<Array<rawEstablishmentSearchResult>>(ESTABLISHMENT_SEARCH(query, code, limit));\n\n const establishments: Array<Establishment> = [];\n if (token && !minimalist) {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(await getEstablishmentBy2P5(token, establishment.code2p5));\n }\n } else {\n for (const establishment of rawEstablishmentSearch) {\n establishments.push(transformToEstablishment(establishment));\n }\n }\n\n\n return establishments;\n};\n\nexport const getEstablishmentBy2P5 = async (token: string, code2p5: string): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<Array<rawEstablishmentResult>>(ESTABLISHMENT_BY_CODE(code2p5), {\n Authorization: `Bearer ${token}`\n });\n if (rawEstablishmentGet.length === 0) {\n throw new Error(\"Establishment not found\");\n }\n const establishment = rawEstablishmentGet[0];\n return transformToEstablishment(establishment);\n};\n\nexport const getEstablishment = async (token: string, etabId: number): Promise<Establishment> => {\n const rawEstablishmentGet = await manager.get<rawEstablishmentResult>(ESTABLISHMENT_BY_ID(etabId), {\n Authorization: `Bearer ${token}`\n });\n return transformToEstablishment(rawEstablishmentGet);\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { Payment } from \"../structures/Payment\";\nimport { rawPaymentResult } from \"../types/payment\";\nimport { PAYMENTS_SPECIFIC } from \"../rest/endpoints\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nexport const getPayment = async (token: string, paymentToken: string): Promise<Payment> => {\n const rawPaymentGet = await manager.get<rawPaymentResult>(PAYMENTS_SPECIFIC(paymentToken), { Authorization: `Bearer ${token}` });\n return new Payment(\n rawPaymentGet.id,\n rawPaymentGet.hote.id,\n rawPaymentGet.montant,\n rawPaymentGet.statut,\n paymentToken,\n null,\n \"https://espacenumerique.turbo-self.com/PagePaiementRefuse.aspx?token=\" + paymentToken,\n \"https://espacenumerique.turbo-self.com/PagePaiementValide.aspx?token=\" + paymentToken,\n new Date(rawPaymentGet.date)\n );\n};\n","import { RestManager } from \"../rest/RESTManager\";\nimport { AUTH_LOGIN } from \"../rest/endpoints\";\nimport { getEstablishment } from \"../routes/Establishment\";\nimport { getBalances, getHost } from \"../routes/Host\";\nimport { Client } from \"../structures/Client\";\nimport { rawAuthResult } from \"../types/authentication\";\n\nconst manager = new RestManager(\"https://api-rest-prod.incb.fr/api\");\n\nconst createClient = async (\n data: rawAuthResult,\n remember: boolean,\n username: string | null,\n password: string | null,\n minimalist: boolean\n): Promise<Client> => {\n if (minimalist) {\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n });\n }\n\n const host = await getHost(data.access_token, data.hoteId);\n\n const [balance, establishment] = await Promise.all([\n getBalances(data.access_token, data.hoteId),\n getEstablishment(data.access_token, host.etabId)\n ]);\n\n return new Client({\n token: data.access_token,\n hostId: data.hoteId,\n userId: data.userId,\n username: remember ? username : null,\n password: remember ? password : null,\n token_expiry: Date.now() + 3300000\n }, establishment, host, balance);\n};\n\nexport const authenticateWithCredentials = async (\n username: string,\n password: string,\n remember = true,\n minimalist = false,\n hoteId?: number\n): Promise<Client> => {\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password,\n hoteId\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n\nexport const authenticateWithTicket = async (\n ent: \"PRONOTE\" | string,\n ticket: string,\n remember = true,\n minimalist = false\n): Promise<Client> => {\n const response = await fetch(`https://espacenumerique.turbo-self.com/Connexion.aspx?ent=${ent}&ticket=${ticket}`);\n const cookies = response.headers.get(\"set-cookie\");\n const username: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n const password: string = cookies?.split(\";\")[0].split(\"=\")[1] ?? \"\";\n\n const data = await manager.post<rawAuthResult>(AUTH_LOGIN(), {\n username,\n password\n });\n\n return createClient(data, remember, username, password, minimalist);\n};\n","import { Establishment } from \"./Establishment\";\nimport { Host } from \"./Host\";\nimport { Balance } from \"./Balance\";\nimport { Payment } from \"./Payment\";\nimport { HistoryEvent } from \"./HistoryEvent\";\nimport { Booking } from \"./Booking\";\nimport { BookingDay } from \"./BookingDay\";\nimport { AuthCredentials } from \"../types/authentication\";\nimport {\n bookMeal,\n canBookEvening,\n getBalances,\n getBookings,\n getHistory,\n getHistoryEvent,\n getHost,\n getHostSiblings,\n getLastPayment,\n initPayment\n} from \"../routes/Host\";\nimport { getEstablishment, searchEstablishments } from \"../routes/Establishment\";\nimport { authenticateWithCredentials } from \"../utils/authenticate\";\nimport { getPayment } from \"../routes/Payment\";\nimport { editPassword } from \"../routes/Account\";\n\nexport class Client {\n constructor(\n private credentials: AuthCredentials,\n public establishment?: Establishment,\n public host?: Host,\n public balances?: Array<Balance>\n ) {}\n /** This method is used to book a meal.\n * @param bookId The booking ID\n * @param day The day\n * @param reservations The number of reservations\n * @param bookEvening Whether to book the evening\n */\n async bookMeal(bookId: string, day: number, reservations?: number, bookEvening?: boolean): Promise<BookingDay> {\n await this.refreshBearerToken();\n return bookMeal(this.credentials.token, this.credentials.hostId, bookId, day, reservations, bookEvening);\n }\n /** This method is used to check if the client can book an evening.\n */\n async canBookEvening(): Promise<boolean> {\n await this.refreshBearerToken();\n return canBookEvening(this.credentials.token, this.credentials.hostId);\n }\n\n /** This method is used to edit the password of the client.\n * @param actualPassword The actual password\n * @param password The new password\n * @returns The token of the request\n */\n async editPassword(actualPassword: string, password: string): Promise<string> {\n await this.refreshBearerToken();\n return editPassword(this.credentials.userId, actualPassword, password, this.credentials.token);\n }\n\n /** This method is used to get the balances of the client.\n */\n async getBalances(): Promise<Array<Balance>> {\n await this.refreshBearerToken();\n return getBalances(this.credentials.token, this.credentials.hostId);\n }\n async getBookings(week?: number): Promise<Array<Booking>> {\n await this.refreshBearerToken();\n return getBookings(this.credentials.token, this.credentials.hostId, week);\n }\n /** This method is used to get the establishment of the client.\n * @param establishmentId The establishment ID to get. If not provided, the establishment of the host will be returned.\n */\n async getEstablishment(establishmentId?: number): Promise<Establishment> {\n await this.refreshBearerToken();\n const etabId = establishmentId || this.host?.etabId;\n if (!etabId) {\n throw new Error(\n \"You need to provide an establishment ID to get the establishment. \" +\n \"You can also disable the minimalist mode on authentication.\"\n );\n }\n return getEstablishment(this.credentials.token, etabId);\n }\n /** This method is used to get the history of the client.\n */\n async getHistory(): Promise<Array<HistoryEvent>> {\n await this.refreshBearerToken();\n return getHistory(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific history event.\n * @param eventId The event ID\n */\n async getHistoryEvent(eventId: number): Promise<HistoryEvent> {\n await this.refreshBearerToken();\n return getHistoryEvent(this.credentials.token, this.credentials.hostId, eventId);\n }\n /** This method is used to get the host of the client.\n */\n async getHost(): Promise<Host> {\n await this.refreshBearerToken();\n return getHost(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get the last payment of the client.\n */\n async getLastPayment(): Promise<Payment> {\n await this.refreshBearerToken();\n return getLastPayment(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to get a specific payment.\n * @param paymentToken The payment token\n */\n async getPayment(paymentToken: string): Promise<Payment> {\n await this.refreshBearerToken();\n return getPayment(this.credentials.token, paymentToken);\n }\n\n /** This method is used to get siblings of the host\n */\n async getSiblings(): Promise<Array<Host>> {\n await this.refreshBearerToken();\n return getHostSiblings(this.credentials.token, this.credentials.hostId);\n }\n /** This method is used to initialize a payment.\n * @param amount The amount\n */\n async initPayment(amount: number): Promise<Payment> {\n await this.refreshBearerToken();\n return initPayment(this.credentials.token, this.credentials.hostId, amount);\n }\n async refreshBearerToken(force = false): Promise<boolean> {\n if (!force && this.credentials.token_expiry > Date.now()) {\n return false;\n }\n if (!this.credentials.password || !this.credentials.username) {\n throw new Error(\"You need to provide a username and password to refresh the bearer token.\");\n }\n const client = await authenticateWithCredentials(this.credentials.username, this.credentials.password, true, false);\n this.credentials = client.credentials;\n return true;\n }\n\n\n /** This method is used to search for establishments.\n * @param query The query to search for.\n * @param code The establishment code to search for.\n * @param limit The maximum number of establishments to return.\n * @param minimalist Whether to return only minimalist data or the full establishment data (more requests).\n */\n async searchEstablishments(query: string, code = \"\", limit = 10, minimalist = false): Promise<Array<Establishment>> {\n await this.refreshBearerToken();\n return searchEstablishments(query, code, limit, minimalist, this.credentials.token);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "turboself-api",
3
- "version": "2.1.5",
3
+ "version": "2.1.6",
4
4
  "description": "A wrapper around Turboself internal API.",
5
5
  "repository": "github:raphckrman/turboself-api",
6
6
  "main": "./dist/index.js",