corellium-typescript
Version:
A beautiful TypeScript Corellium library.
1 lines • 3.39 kB
JavaScript
"use strict";const s=require("./app.cjs"),e=require("./device.cjs"),t=require("./image.cjs"),r=require("./lib/wait.cjs");exports.createMatrixEndpoints=(a,n,i)=>{const o=t.createImageEndpoints(a),d=s.createAppEndpoints(a,n),c=e.createDeviceEndpoints(a,n,i),w=async s=>{const e=await a.GET("/v1/services/matrix/{instanceId}/assessments/{assessmentId}",{params:{path:{instanceId:n,assessmentId:s}}});if(e.error)throw new Error(e.error.error??e.response.statusText);return{...e.data,status:e.data.status}};return{run:async s=>{let e;const t=await c.get();if("on"!==t.state)throw new Error("Device must be online to run MATRIX assessment");if(await d.run(s.bundleId),s.keywords){const r=new Blob(s.keywords,{type:"text/plain"}),a=new File([r],"keywords.txt",{type:"text/plain",lastModified:Date.now()});e=(await o.create({type:"extension",encoding:"plain",name:"keywords.txt",project:t.project,instance:t.id,file:a})).id??void 0}const i=await(async s=>{const e=await a.POST("/v1/services/matrix/{instanceId}/assessments",{params:{path:{instanceId:n}},body:s});if(e.error)throw new Error(e.error.error??e.response.statusText);return e.data})({bundleId:s.bundleId,wordlistId:e,instanceId:n});if(!i.id)throw new Error("Assessment ID not returned from API");for(;;){const{status:s}=await w(i.id);if("new"===s)break;if("failed"===s)throw new Error("Assessment failed to start");await r.wait(5e3)}for(await(async s=>{const e=await a.POST("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/start",{params:{path:{instanceId:n,assessmentId:s}}});if(e.error)throw new Error(e.error.error??e.response.statusText);return e.data})(i.id);;){const{status:s}=await w(i.id);if("monitoring"===s)break;if("failed"===s)throw new Error("Monitoring failed to start");await r.wait(5e3)}if(s.input){const{eta:e}=await c.input(s.input);e&&await r.wait(e)}for(await(async s=>{const e=await a.POST("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/stop",{params:{path:{instanceId:n,assessmentId:s}}});if(e.error)throw new Error(e.error.error??e.response.statusText);return e.data})(i.id);;){const{status:s}=await w(i.id);if("readyForTesting"===s)break;if("failed"===s)throw new Error("Monitoring failed to stop");await r.wait(5e3)}for(await(async s=>{const e=await a.POST("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/test",{params:{path:{instanceId:n,assessmentId:s}}});if(e.error)throw new Error(e.error.error??e.response.statusText);return e.data})(i.id);;){const{status:s}=await w(i.id);if("complete"===s)break;if("failed"===s)throw new Error("Checks failed to complete");await r.wait(5e3)}return w(i.id)},assessment:{get:async s=>w(s),list:async()=>{const s=await a.GET("/v1/services/matrix/{instanceId}/instances/{instanceId}/assessments",{params:{path:{instanceId:n}}});if(s.error)throw new Error(s.error.error??s.response.statusText);return s.data},delete:async s=>{const e=await a.DELETE("/v1/services/matrix/{instanceId}/assessments/{assessmentId}",{params:{path:{instanceId:n,assessmentId:s}}});if(e.error)throw new Error(e.error.error??e.response.statusText);return e.data},download:async(s,e="json")=>{const t=await a.GET("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/download",{params:{path:{instanceId:n,assessmentId:s},query:{format:e}}});if(t.error)throw new Error(t.error.error??t.response.statusText);return"json"===e?JSON.parse(t.data):t.data}}}};