UNPKG

hud-sdk

Version:

Hud's Node SDK

2 lines 8.44 kB
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var s=t();for(var n in s)("object"==typeof exports?exports:e)[n]=s[n]}}(global,()=>(()=>{"use strict";var e={523:e=>{e.exports=require("./logger")},2312:function(e,t,s){var n,r=this&&this.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s);var r=Object.getOwnPropertyDescriptor(t,s);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,n,r)}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[t.length]=s);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s=n(e),i=0;i<s.length;i++)"default"!==s[i]&&r(t,e,s[i]);return o(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.HudClient=void 0;const a=s(5809),u=s(2546),d=s(523),l=i(s(8938)),c=s(6982),g=s(6261),f=s(9023),h=s(3106),p=(0,f.promisify)(h.gzip),_="node-sdk",m=(0,c.randomUUID)();class w{sessionId;httpClient;extensionEventEmitter;static config={baseURL:a.hudConfig.sink.url,timeout:a.hudConfig.sink.timeout,headers:{"Content-Type":"application/json"}};static defaultRequest={version:"1.0.0",source:_,event_version:"1.0.0"};constructor(e){this.httpClient=l.default.create(w.config),this.extensionEventEmitter=e}setSession(e){const{sessionId:t,extraHeaders:s}=e;this.sessionId=t,this.httpClient.defaults.headers.common[a.hudConfig.sink.session_attr]=t;try{for(const[e,t]of Object.entries(s))try{this.httpClient.defaults.headers.common[e]=t}catch(s){d.worker_logger.error("Failed to set extra header",{msg:s instanceof Error?s.message:void 0,stack:s instanceof Error?s.stack:void 0,key:e,value:t})}}catch(e){d.worker_logger.error("Failed to set extra headers",{msg:e instanceof Error?e.message:void 0,stack:e instanceof Error?e.stack:void 0})}}setExtensionEventEmitter(e){this.extensionEventEmitter=e}async logs(e){const t={logs:e,send_time:(new Date).toISOString()};await this._requestRelentless(a.hudConfig.endpoints.logs,t,"logs"),d.worker_logger.debug("sent logs successfully",{size:e.length})}async sessionslessLogs(e,t,s,n){const r={logs:e,send_time:(new Date).toISOString(),token:t,sdk_version:a.SDK_VERSION,sdk_type:_,sdk_runtime_type:n??"sdk",run_id:s??m};await this._requestRelentless(a.hudConfig.endpoints.sessionslessLogs,r,"sessionslessLogs"),d.worker_logger.debug("sent logs successfully",{size:e.length})}async send(e,t,s={}){const n={...w.defaultRequest,type:e,raw:t,send_time:(new Date).toISOString(),...s};await this._requestRelentless(a.hudConfig.endpoints.send,n,e),d.worker_logger.debug("sent event successfully",{type:e})}async batch(e,t,s={}){const n={...w.defaultRequest,type:e,arr:t,send_time:(new Date).toISOString(),...s};await this._requestRelentless(a.hudConfig.endpoints.batch,n,e),d.worker_logger.debug("sent batched events successfully",{type:e})}async getRemoteConfig(){const e=await this._requestDataRelentless(a.hudConfig.endpoints.getRemoteConfig,{},"getRemoteConfig");return d.worker_logger.info("Received remote configuration from server",{remoteConfiguration:e}),e}async getMode(e){const t={extra:e,send_time:(new Date).toISOString()},s=await this._requestDataRelentless(a.hudConfig.endpoints.getMode,t,"getMode");return d.worker_logger.info("Received mode from server "+s),s}async storeObject(e,t){const s={key:e,value:t.toString("base64")},n=await this._requestDataRelentless(a.hudConfig.endpoints.storeObject,s,"storeObject");if("reference"in n)return d.worker_logger.debug("Stored object successfully",{reference:n.reference}),n.reference;d.worker_logger.error("Failed to store object",{key:e,response:n})}async validateToken(e){const t={...w.defaultRequest,token:e,send_time:(new Date).toISOString()};try{return await this._requestRelentless(a.hudConfig.endpoints.validateToken,t,"validateToken"),!0}catch(e){if(e instanceof u.HudClientUnauthorizedError)return!1}return!1}async getUploadUrls(e,t,s){const n={...w.defaultRequest,send_time:(new Date).toISOString(),build_id:e,token:t,num_urls:s};return(await this._requestRelentless(a.hudConfig.endpoints.getUploadUrls,n,"getUploadUrls")).data.urls}async triggerReingest(e){const t={...w.defaultRequest,type:"triggerReingest",send_time:(new Date).toISOString(),build_id:e};await this._requestRelentless(a.hudConfig.endpoints.triggerReingest,t,"triggerReingest")}async completed(e,t){const s={...w.defaultRequest,build_id:e,token:t,send_time:(new Date).toISOString()};await this._requestRelentless(a.hudConfig.endpoints.completed,s,"completed")}async sendFileDeclarationsCi(e,t){d.worker_logger.debug("Sending file declarations request",{count:t.length});const s={...e,files:t},n=await this._requestRelentless(a.hudConfig.endpoints.fileDeclarationsCi,s,"fileDeclarations");return{files:n.data.files,send_all:n.data.send_all}}async sendFileDeclarations(e){d.worker_logger.debug("Sending file declarations request",{count:e.length});const t={files:e},s=await this._requestRelentless(a.hudConfig.endpoints.fileDeclarations,t,"fileDeclarations");return{files:s.data.files,send_all:s.data.send_all}}async getEndpointsDurationsInvestigationThresholds(){return await this._requestDataRelentless(a.hudConfig.endpoints.endpointsDurationsInvestigationThresholds,{},"endpointsDurationsInvestigationThresholds","get")}async _requestRelentless(e,t,s,n="post",r=3){const o={"X-Hud-Type":s,"X-Hud-Request-ID":(0,c.randomUUID)()},i=[];let a;for(let c=0;c<r;c++)try{const r=await this._request(e,t,s,o,n);return(0,u.incrementSentEventsCount)(s),r}catch(t){if(t instanceof Error&&(a=t),t instanceof l.AxiosError){if(401===t.response?.status)throw d.worker_logger.error("Unauthorized request",{endpoint:e,requestType:s}),new u.HudClientUnauthorizedError(`Unauthorized request for ${e}`);const{code:n,name:r,status:o,message:a}=t;i.push({code:n,name:r,status:o,message:a})}else if(t instanceof Error){const{name:e,message:s}=t;i.push({name:e,message:s})}await new Promise(e=>setTimeout(e,1))}throw d.worker_logger.error("Exceeded max retries to request",{endpoint:e,requestType:s,failures:i,retries:r}),new u.HudClientError(`Exceeded max retries for ${e}`,a instanceof l.AxiosError?a.code:void 0)}async _requestDataRelentless(e,t,s,n="post",r=3){return(await this._requestRelentless(e,t,s,n,r)).data}async _request(e,t,s,n,r="post"){try{this.extensionEventEmitter&&await(0,g.once)(this.extensionEventEmitter,"eventloop");const s="get"===r?void 0:await this._gzipCompress(JSON.stringify(t));return n={...n,"Content-Encoding":"gzip","Content-Type":"application/json"},await(0,u.suppressTraces)(async()=>await this.httpClient.request({url:e,method:r,data:s,headers:n}))()}catch(t){if(t instanceof l.AxiosError){const{code:n,name:r,status:o,cause:i,message:a}=t;d.worker_logger.error(`${e} request failed`,{requestType:s,code:n,name:r,status:o,cause:i,msg:a})}else d.worker_logger.error("Caught an unexpected error",{msg:t instanceof Error?t.message:void 0,stack:t instanceof Error?t.stack:void 0});throw t}}async _gzipCompress(e){return p(e)}async initSession(e,t,s,n){const r={token:e,service:t,start_time:s.toISOString(),type:_,version:"1.0.0",sdk_version:a.SDK_VERSION,tags:n};d.worker_logger.debug("Requesting init",{data:r});const o=await this._requestRelentless(a.hudConfig.endpoints.init,r,"init");if(o.status===a.hudConfig.throttleStatusCode)throw d.worker_logger.debug("Init request throttled"),new u.HudSessionThrottle;const i=o.data.sessionId,l=o.data.extraHeaders??{};return d.worker_logger.info("Succesfuly created session with backend",{host:w.config.baseURL,service:t,sessionId:i,extraHeaders:l,tags:n}),{sessionId:i,extraHeaders:l}}}t.HudClient=w},2546:e=>{e.exports=require("./lib")},3106:e=>{e.exports=require("zlib")},5809:e=>{e.exports=require("./config")},6261:e=>{e.exports=require("events")},6982:e=>{e.exports=require("crypto")},8938:e=>{e.exports=require("axios")},9023:e=>{e.exports=require("util")}},t={};return function s(n){var r=t[n];if(void 0!==r)return r.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,s),o.exports}(2312)})()); //# sourceMappingURL=client.js.map