@logsnag/node
Version:
LogSnag client for Node.js applications
2 lines (1 loc) • 2.73 kB
JavaScript
var c="https://api.logsnag.com",d="/v1",a={LOG:c+d+"/log",IDENTIFY:c+d+"/identify",INSIGHT:c+d+"/insight",GROUP:c+"/v1/group",PAGE:c+d+"/page"};var n=class extends Error{message;constructor(e,r,s){super(`HTTP Error Response: ${e} ${r}`),this.message=this.createReadableString(s)}createReadableString(e){let r="[LogSnag] Failed to publish: ";return e&&e.validation&&Array.isArray(e.validation.body)?r+=e.validation.body.map(s=>s.message).join(", "):r+=": Please check our docs at https://docs.logsnag.com",r}toString(){return this.message}toJSON(){return{message:this.message}}};function p(i){return Math.abs(Date.now()-i)<Math.abs(Date.now()-i*1e3)}function u(i){if(i)return i instanceof Date&&(i=i.getTime()),p(i)&&(i=Math.floor(i/1e3)),i}var h=class{token;project;disabled=!1;constructor({token:e,project:r,disableTracking:s=!1}){this.token=e,this.project=r,this.disabled=s||!1}disableTracking(){this.disabled=!0}enableTracking(){this.disabled=!1}isTrackingDisabled(){return this.disabled}getProject(){return this.project}createAuthorizationHeader(){return`Bearer ${this.token}`}createHeaders(){return{"Content-Type":"application/json",Authorization:this.createAuthorizationHeader()}}get insight(){return{track:this.insightTrack.bind(this),increment:this.insightIncrement.bind(this)}}async track(e){if(this.isTrackingDisabled())return!0;let r=this.createHeaders(),s="POST";e.timestamp=u(e.timestamp);let o=JSON.stringify({...e,project:this.getProject()}),t=await fetch(a.LOG,{method:s,body:o,headers:r});if(!t.ok)throw new n(t.status,t.statusText,await t.json());return!0}async identify(e){if(this.isTrackingDisabled())return!0;let r=this.createHeaders(),s="POST",o=JSON.stringify({...e,project:this.getProject()}),t=await fetch(a.IDENTIFY,{method:s,body:o,headers:r});if(!t.ok)throw new n(t.status,t.statusText,await t.json());return!0}async group(e){if(this.isTrackingDisabled())return!0;let r=this.createHeaders(),s="POST",o=JSON.stringify({...e,project:this.getProject()}),t=await fetch(a.GROUP,{method:s,body:o,headers:r});if(!t.ok)throw new n(t.status,t.statusText,await t.json());return!0}async insightTrack(e){if(this.isTrackingDisabled())return!0;let r=this.createHeaders(),s="POST",o=JSON.stringify({...e,project:this.getProject()}),t=await fetch(a.INSIGHT,{method:s,body:o,headers:r});if(!t.ok)throw new n(t.status,t.statusText,await t.json());return!0}async insightIncrement(e){if(this.isTrackingDisabled())return!0;let r=this.createHeaders(),s="PATCH",o=JSON.stringify({project:this.getProject(),icon:e.icon,title:e.title,value:{$inc:e.value}}),t=await fetch(a.INSIGHT,{method:s,body:o,headers:r});if(!t.ok)throw new n(t.status,t.statusText,await t.json());return!0}};export{n as HTTPResponseError,h as LogSnag};