@checksum-ai/runtime 1.0.68 → 1.0.69
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/package.json +1 -1
- package/test-run-monitor.js +1 -1
package/package.json
CHANGED
package/test-run-monitor.js
CHANGED
|
@@ -12,7 +12,7 @@ var r6=Object.create;var ct=Object.defineProperty;var n6=Object.getOwnPropertyDe
|
|
|
12
12
|
`+r.map(Gm).join(`
|
|
13
13
|
`):" "+Gm(r[0]):"as no adapter specified";throw new E("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return t},adapters:Fs};function Bs(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ke(null,e)}n(Bs,"throwIfCancellationRequested");function V1(e){return Bs(e),e.headers=pe.from(e.headers),e.data=pp.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),I1.getAdapter(e.adapter||pt.adapter)(e).then(n(function(t){return Bs(e),t.data=pp.call(e,e.transformResponse,t),t.headers=pe.from(t.headers),t},"onAdapterResolution"),n(function(t){return rp(t)||(Bs(e),t&&t.response&&(t.response.data=pp.call(e,e.transformResponse,t.response),t.response.headers=pe.from(t.response.headers))),Promise.reject(t)},"onAdapterRejection"))}n(V1,"dispatchRequest");var Km=n(e=>e instanceof pe?e.toJSON():e,"headersToObject");function Ta(e,a){a=a||{};let i={};function t(l,d,m){return u.isPlainObject(l)&&u.isPlainObject(d)?u.merge.call({caseless:m},l,d):u.isPlainObject(d)?u.merge({},d):u.isArray(d)?d.slice():d}n(t,"getMergedValue");function p(l,d,m){if(u.isUndefined(d)){if(!u.isUndefined(l))return t(void 0,l,m)}else return t(l,d,m)}n(p,"mergeDeepProperties");function r(l,d){if(!u.isUndefined(d))return t(void 0,d)}n(r,"valueFromConfig2");function s(l,d){if(u.isUndefined(d)){if(!u.isUndefined(l))return t(void 0,l)}else return t(void 0,d)}n(s,"defaultToConfig2");function o(l,d,m){if(m in a)return t(l,d);if(m in e)return t(void 0,l)}n(o,"mergeDirectKeys");let c={url:r,method:r,data:r,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:o,headers:(l,d)=>p(Km(l),Km(d),!0)};return u.forEach(Object.keys(Object.assign({},e,a)),n(function(d){let m=c[d]||p,h=m(e[d],a[d],d);u.isUndefined(h)&&m!==o||(i[d]=h)},"computeConfigValue")),i}n(Ta,"mergeConfig");var Ls={};["object","boolean","number","function","string","symbol"].forEach((e,a)=>{Ls[e]=n(function(t){return typeof t===e||"a"+(a<1?"n ":" ")+e},"validator")});var Jm={};Ls.transitional=n(function(a,i,t){function p(r,s){return"[Axios v"+xi+"] Transitional option '"+r+"'"+s+(t?". "+t:"")}return n(p,"formatMessage"),(r,s,o)=>{if(a===!1)throw new E(p(s," has been removed"+(i?" in "+i:"")),E.ERR_DEPRECATED);return i&&!Jm[s]&&(Jm[s]=!0,console.warn(p(s," has been deprecated since v"+i+" and will be removed in the near future"))),a?a(r,s,o):!0}},"transitional");function gf(e,a,i){if(typeof e!="object")throw new E("options must be an object",E.ERR_BAD_OPTION_VALUE);let t=Object.keys(e),p=t.length;for(;p-- >0;){let r=t[p],s=a[r];if(s){let o=e[r],c=o===void 0||s(o,r,e);if(c!==!0)throw new E("option "+r+" must be "+c,E.ERR_BAD_OPTION_VALUE);continue}if(i!==!0)throw new E("Unknown option "+r,E.ERR_BAD_OPTION)}}n(gf,"assertOptions");var P1={assertOptions:gf,validators:Ls};var Za=P1.validators,bi=class{constructor(a){this.defaults=a,this.interceptors={request:new os,response:new os}}async request(a,i){try{return await this._request(a,i)}catch(t){if(t instanceof Error){let p;Error.captureStackTrace?Error.captureStackTrace(p={}):p=new Error;let r=p.stack?p.stack.replace(/^.+\n/,""):"";t.stack?r&&!String(t.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(t.stack+=`
|
|
14
14
|
`+r):t.stack=r}throw t}}_request(a,i){typeof a=="string"?(i=i||{},i.url=a):i=a||{},i=Ta(this.defaults,i);let{transitional:t,paramsSerializer:p,headers:r}=i;t!==void 0&&P1.assertOptions(t,{silentJSONParsing:Za.transitional(Za.boolean),forcedJSONParsing:Za.transitional(Za.boolean),clarifyTimeoutError:Za.transitional(Za.boolean)},!1),p!=null&&(u.isFunction(p)?i.paramsSerializer={serialize:p}:P1.assertOptions(p,{encode:Za.function,serialize:Za.function},!0)),i.method=(i.method||this.defaults.method||"get").toLowerCase();let s=r&&u.merge(r.common,r[i.method]);r&&u.forEach(["delete","get","head","post","put","patch","common"],f=>{delete r[f]}),i.headers=pe.concat(s,r);let o=[],c=!0;this.interceptors.request.forEach(n(function(v){typeof v.runWhen=="function"&&v.runWhen(i)===!1||(c=c&&v.synchronous,o.unshift(v.fulfilled,v.rejected))},"unshiftRequestInterceptors"));let l=[];this.interceptors.response.forEach(n(function(v){l.push(v.fulfilled,v.rejected)},"pushResponseInterceptors"));let d,m=0,h;if(!c){let f=[V1.bind(this),void 0];for(f.unshift.apply(f,o),f.push.apply(f,l),h=f.length,d=Promise.resolve(i);m<h;)d=d.then(f[m++],f[m++]);return d}h=o.length;let x=i;for(m=0;m<h;){let f=o[m++],v=o[m++];try{x=f(x)}catch(g){v.call(this,g);break}}try{d=V1.call(this,x)}catch(f){return Promise.reject(f)}for(m=0,h=l.length;m<h;)d=d.then(l[m++],l[m++]);return d}getUri(a){a=Ta(this.defaults,a);let i=fi(a.baseURL,a.url);return mi(i,a.params,a.paramsSerializer)}};n(bi,"Axios");u.forEach(["delete","get","head","options"],n(function(a){bi.prototype[a]=function(i,t){return this.request(Ta(t||{},{method:a,url:i,data:(t||{}).data}))}},"forEachMethodNoData"));u.forEach(["post","put","patch"],n(function(a){function i(t){return n(function(r,s,o){return this.request(Ta(o||{},{method:a,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))},"httpMethod")}n(i,"generateHTTPMethod"),bi.prototype[a]=i(),bi.prototype[a+"Form"]=i(!0)},"forEachMethodWithData"));var up=bi;var dt=class{constructor(a){if(typeof a!="function")throw new TypeError("executor must be a function.");let i;this.promise=new Promise(n(function(r){i=r},"promiseExecutor"));let t=this;this.promise.then(p=>{if(!t._listeners)return;let r=t._listeners.length;for(;r-- >0;)t._listeners[r](p);t._listeners=null}),this.promise.then=p=>{let r,s=new Promise(o=>{t.subscribe(o),r=o}).then(p);return s.cancel=n(function(){t.unsubscribe(r)},"reject"),s},a(n(function(r,s,o){t.reason||(t.reason=new Ke(r,s,o),i(t.reason))},"cancel"))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(a){if(this.reason){a(this.reason);return}this._listeners?this._listeners.push(a):this._listeners=[a]}unsubscribe(a){if(!this._listeners)return;let i=this._listeners.indexOf(a);i!==-1&&this._listeners.splice(i,1)}static source(){let a;return{token:new dt(n(function(p){a=p},"executor")),cancel:a}}};n(dt,"CancelToken");var Ym=dt;function Is(e){return n(function(i){return e.apply(null,i)},"wrap")}n(Is,"spread");function Vs(e){return u.isObject(e)&&e.isAxiosError===!0}n(Vs,"isAxiosError");var Ps={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Ps).forEach(([e,a])=>{Ps[a]=e});var Xm=Ps;function Qm(e){let a=new up(e),i=ep(up.prototype.request,a);return u.extend(i,up.prototype,a,{allOwnKeys:!0}),u.extend(i,a,null,{allOwnKeys:!0}),i.create=n(function(p){return Qm(Ta(e,p))},"create"),i}n(Qm,"createInstance");var X=Qm(pt);X.Axios=up;X.CanceledError=Ke;X.CancelToken=Ym;X.isCancel=rp;X.VERSION=xi;X.toFormData=qa;X.AxiosError=E;X.Cancel=X.CanceledError;X.all=n(function(a){return Promise.all(a)},"all");X.spread=Is;X.isAxiosError=Vs;X.mergeConfig=Ta;X.AxiosHeaders=pe;X.formToJSON=e=>T1(u.isHTMLForm(e)?new FormData(e):e);X.getAdapter=I1.getAdapter;X.HttpStatusCode=Xm;X.default=X;var j1=X;var{Axios:J_,AxiosError:Y_,CanceledError:X_,isCancel:Q_,CancelToken:ey,VERSION:ay,all:iy,Cancel:ty,isAxiosError:py,spread:ry,toFormData:ny,AxiosHeaders:sy,HttpStatusCode:oy,formToJSON:dy,getAdapter:ly,mergeConfig:cy}=j1;var fp=class{constructor(a,i=!1){this.config=a;this.isolationMode=i;this.MAX_UPLOADS=5;this.MONITOR_INTERVAL=5e3;this.UPLOAD_TIMEOUT=6e5;this.WATCH_TIMEOUT=3e5;this.assets=[];this.watchAssets=[];this.stats={passed:0,failed:0,healed:0};this.reportComplete=!1;this.pwTestIdToChecksumTestId={};setInterval(this.monitorUploads.bind(this),this.MONITOR_INTERVAL),this.listenForMessages(),this.startServer()}listenForMessages(){process.stdin.on("data",async a=>{let i=a.toString().trim();if(!i.startsWith("cli:"))return;let[t,p]=i.substring(4).split("=");switch(t){case"report":await this.handleReport(p),this.monitorUploadsCompletion();break;case"shutdown":this.shutdown();break}})}sendMessage(a){setTimeout(()=>{console.log(`${"monitor"}:${a}`)},100)}async handleReport(a){if(console.log(`Handling report ${this.isolationMode?"(isolation mode)":""}`,a),!this.isolationMode)return this.reportAsset=this.initAsset({type:"report",path:a}),await new Xt(a,this.config.sessionId,this.pwTestIdToChecksumTestId).process(),this.uploadAsset(this.reportAsset)}shutdown(){console.log("Received shutdown message from CLI"),this.server.close(),process.exit(0)}async monitorUploadsCompletion(){if(this.isolationMode||!this.reportComplete&&this.reportAsset&&this.reportAsset.complete){this.reportComplete=!0;let i="{}";try{i=JSON.stringify(this.stats)}catch(t){console.log("Error stringifying stats",t)}this.sendMessage(`report-uploaded=${i}`)}if(this.reportComplete&&this.watchAssets.filter(i=>Date.now()-i.addedAt<this.WATCH_TIMEOUT).length===0&&this.assets.filter(i=>i.complete||i.error).length===this.assets.length){this.sendMessage(this.assets.find(i=>i.error)?"complete-with-errors":"complete");return}let a=this.assets.filter(i=>!i.complete&&!i.error&&Date.now()-i.lastProgress>3e4);console.log("Assets upload not progressing more than 30 seconds:",a.map(i=>`${i.info.path} (${i.progress}%)`).join(`
|
|
15
|
-
`)),await _p(1e3),this.monitorUploadsCompletion()}async startServer(){let a=await this.acquirePortNumber();this.sendMessage(`port=${a}`),this.server=(0,t6.createServer)((i,t)=>{let p=n(s=>{t.writeHead(400,{"Content-Type":"text/plain"}),t.end(s)},"returnErrorWithMessage");if(i.method!=="POST"){t.writeHead(404,{"Content-Type":"text/plain"}),t.end("Method not allowed");return}let r="";i.on("data",s=>{r+=s.toString()}),i.on("end",()=>{let s;try{s=JSON.parse(r)}catch{return p("Invalid body")}let{type:o,payload:c,watch:l}=s;switch(console.log("Server received message",o,c),o){case"asset":if(!c.path||!c.type)return p("Missing arguments");l?this.watchAsset(c):this.processAsset(c);break;case"testInfo":if(!c.pwTestId||!c.checksumTestId)return p("Missing arguments");this.pwTestIdToChecksumTestId[c.pwTestId]=c.checksumTestId;break;case"testStats":this.stats[c.passed?"passed":"failed"]++,c.healed&&this.stats.healed++;break;default:return p("Invalid message type")}t.writeHead(200,{"Content-Type":"text/plain"}),t.end("OK")})}),this.server.listen(a)}monitorUploads(){let a=n(()=>this.assets.filter(t=>t.response&&!t.complete&&!t.error),"getActiveUploads"),i=this.assets.filter(t=>!t.response);if(i.length!==0&&!(a().length>=this.MAX_UPLOADS))for(;i.length>0&&a().length<this.MAX_UPLOADS;){let t=i.pop();this.uploadAsset(t)}}async uploadAsset(a){if(this.isolationMode){a.response=new Promise((s,o)=>{setTimeout(()=>{a.complete=!0,s(new Response)},Math.random()*100)});return}let{path:i}=a.info;if(console.log("Uploading file",i),await this.getSignedURLForUpload(a),!a.uploadURL){console.log("Error getting signed URL for asset",i),a.error=!0;return}let p=(0,lt.statSync)(i).size,r=(0,lt.createReadStream)(i);j1.request({method:"PUT",url:a.uploadURL,headers:{"Content-length":p.toString()},data:r,timeout:this.UPLOAD_TIMEOUT,onUploadProgress(s){a.lastProgress=Date.now(),a.progress=Math.round(s.loaded/s.total*100)}}).then(s=>{console.log("File uploaded successfully",i),a.complete=!0,a.response=s.data}).catch(s=>{console.log(
|
|
15
|
+
`)),await _p(1e3),this.monitorUploadsCompletion()}async startServer(){let a=await this.acquirePortNumber();this.sendMessage(`port=${a}`),this.server=(0,t6.createServer)((i,t)=>{let p=n(s=>{t.writeHead(400,{"Content-Type":"text/plain"}),t.end(s)},"returnErrorWithMessage");if(i.method!=="POST"){t.writeHead(404,{"Content-Type":"text/plain"}),t.end("Method not allowed");return}let r="";i.on("data",s=>{r+=s.toString()}),i.on("end",()=>{let s;try{s=JSON.parse(r)}catch{return p("Invalid body")}let{type:o,payload:c,watch:l}=s;switch(console.log("Server received message",o,c),o){case"asset":if(!c.path||!c.type)return p("Missing arguments");l?this.watchAsset(c):this.processAsset(c);break;case"testInfo":if(!c.pwTestId||!c.checksumTestId)return p("Missing arguments");this.pwTestIdToChecksumTestId[c.pwTestId]=c.checksumTestId;break;case"testStats":this.stats[c.passed?"passed":"failed"]++,c.healed&&this.stats.healed++;break;default:return p("Invalid message type")}t.writeHead(200,{"Content-Type":"text/plain"}),t.end("OK")})}),this.server.listen(a)}monitorUploads(){let a=n(()=>this.assets.filter(t=>t.response&&!t.complete&&!t.error),"getActiveUploads"),i=this.assets.filter(t=>!t.response);if(i.length!==0&&!(a().length>=this.MAX_UPLOADS))for(;i.length>0&&a().length<this.MAX_UPLOADS;){let t=i.pop();this.uploadAsset(t)}}async uploadAsset(a){if(this.isolationMode){a.response=new Promise((s,o)=>{setTimeout(()=>{a.complete=!0,s(new Response)},Math.random()*100)});return}let{path:i}=a.info;if(console.log("Uploading file",i),await this.getSignedURLForUpload(a),!a.uploadURL){console.log("Error getting signed URL for asset",i),a.error=!0;return}let p=(0,lt.statSync)(i).size,r=(0,lt.createReadStream)(i);j1.request({method:"PUT",url:a.uploadURL,headers:{"Content-length":p.toString()},data:r,timeout:this.UPLOAD_TIMEOUT,onUploadProgress(s){a.lastProgress=Date.now(),a.progress=Math.round(s.loaded/s.total*100)}}).then(s=>{console.log("File uploaded successfully",i),a.complete=!0,a.response=s.data}).catch(s=>{var o;console.log(`Error uploading asset path: ${i}`),s.response&&console.log(`Status code ${s.response.status}: ${s.response.statusText}`),(o=s.response.data)!=null&&o.message&&console.log(`Error message: ${s.response.data.message}`),a.error=!0})}async getSignedURLForUpload(a){try{let{apiKey:i,sessionId:t,checksumApiURL:p}=this.config,r=a.info,s=await(0,i6.default)(`${p}/client-api/test-runs/${t}/get-upload-url`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",ChecksumAppCode:i},body:JSON.stringify(r)}),{url:o}=await s.json();a.uploadURL=o}catch(i){return console.log("Error getting signed URL for artifact",i),null}}watchAsset(a){console.log("Watching file",a.path),this.watchAssets.push({...a,addedAt:Date.now()});let i=(0,z1.dirname)(a.path),t=(0,z1.basename)(a.path),p=(0,lt.watch)(i,(r,s)=>{s===t&&(console.log("Watched file changed",a.path),this.processAsset(a),p.close(),this.watchAssets=this.watchAssets.filter(o=>o.path!==a.path))})}processAsset(a){if(!this.isolationMode)switch(a.type){case"trace":return this.processTrace(a.path,a.testId);case"har":return this.processHar(a.path,a.testId);case"esra":case"test-files":return this.addAsset(a)}}async processHar(a,i){await _p(1e3);let t=await K0(a);if(console.log("Processed har, sending for upload"),t)return this.addAsset({type:"har",path:t,testId:i})}async processTrace(a,i){await _p(1e3);let t=a.replace(".zip",".processed.zip");await new Qt("runtime",a,t,"$checksum").process(),console.log("Processed trace files, sending for upload"),this.addAsset({type:"trace",path:t,testId:i}),this.addAsset({type:"trace-backup-file",path:a,testId:i})}addAsset(a){if(this.isolationMode)return;console.log("Adding file",a.path);let i=this.initAsset(a);return this.assets.push(i),i}initAsset(a){return{complete:!1,error:!1,response:void 0,info:a}}async acquirePortNumber(){return await new Promise((a,i)=>{let t=a6.createServer();t.unref(),t.on("error",i),t.listen(0,()=>{let p=t.address().port;t.close(()=>{a(p)})})})}};n(fp,"TestRunMonitor");var p6;try{p6=JSON.parse(process.argv[2])}catch(e){console.log("Error starting test run monitor",e),process.exit(1)}var e6;new fp(p6,((e6=process.argv)==null?void 0:e6[3])==="isolated");0&&(module.exports={TestRunMonitor});
|
|
16
16
|
/*! Bundled license information:
|
|
17
17
|
|
|
18
18
|
mime-db/index.js:
|