corellium-typescript
Version:
A beautiful TypeScript Corellium library.
1 lines • 3.38 kB
JavaScript
import{createAppEndpoints as s}from"./app.mjs";import{createDeviceEndpoints as t}from"./device.mjs";import{createImageEndpoints as e}from"./image.mjs";import{wait as r}from"./lib/wait.mjs";const a=(a,n,i)=>{const o=e(a),d=s(a,n),c=t(a,n,i),w=async s=>{const t=await a.GET("/v1/services/matrix/{instanceId}/assessments/{assessmentId}",{params:{path:{instanceId:n,assessmentId:s}}});if(t.error)throw new Error(t.error.error??t.response.statusText);return{...t.data,status:t.data.status}};return{run:async s=>{let t;const e=await c.get();if("on"!==e.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()});t=(await o.create({type:"extension",encoding:"plain",name:"keywords.txt",project:e.project,instance:e.id,file:a})).id??void 0}const i=await(async s=>{const t=await a.POST("/v1/services/matrix/{instanceId}/assessments",{params:{path:{instanceId:n}},body:s});if(t.error)throw new Error(t.error.error??t.response.statusText);return t.data})({bundleId:s.bundleId,wordlistId:t,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(5e3)}for(await(async s=>{const t=await a.POST("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/start",{params:{path:{instanceId:n,assessmentId:s}}});if(t.error)throw new Error(t.error.error??t.response.statusText);return t.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(5e3)}if(s.input){const{eta:t}=await c.input(s.input);t&&await r(t)}for(await(async s=>{const t=await a.POST("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/stop",{params:{path:{instanceId:n,assessmentId:s}}});if(t.error)throw new Error(t.error.error??t.response.statusText);return t.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(5e3)}for(await(async s=>{const t=await a.POST("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/test",{params:{path:{instanceId:n,assessmentId:s}}});if(t.error)throw new Error(t.error.error??t.response.statusText);return t.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(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 t=await a.DELETE("/v1/services/matrix/{instanceId}/assessments/{assessmentId}",{params:{path:{instanceId:n,assessmentId:s}}});if(t.error)throw new Error(t.error.error??t.response.statusText);return t.data},download:async(s,t="json")=>{const e=await a.GET("/v1/services/matrix/{instanceId}/assessments/{assessmentId}/download",{params:{path:{instanceId:n,assessmentId:s},query:{format:t}}});if(e.error)throw new Error(e.error.error??e.response.statusText);return"json"===t?JSON.parse(e.data):e.data}}}};export{a as createMatrixEndpoints};