A Docker-like CLI and HTTP API for managing headless VMs

run format

+25 -32
+25 -32
src/api/machines.ts
··· 35 35 }> {} 36 36 37 37 export class RemoveRunningVmError extends Data.TaggedError( 38 - "RemoveRunningVmError" 38 + "RemoveRunningVmError", 39 39 )<{ 40 40 id: string; 41 41 }> {} ··· 49 49 Effect.flatMap((params) => 50 50 listInstances(params.all === "true" || params.all === "1") 51 51 ), 52 - presentation(c) 53 - ) 54 - ) 55 - ); 52 + presentation(c), 53 + ), 54 + )); 56 55 57 56 app.post("/", (c) => 58 57 Effect.runPromise( ··· 63 62 const image = yield* getImage(params.image); 64 63 if (!image) { 65 64 return yield* Effect.fail( 66 - new ImageNotFoundError({ id: params.image }) 65 + new ImageNotFoundError({ id: params.image }), 67 66 ); 68 67 } 69 68 ··· 97 96 }) 98 97 ), 99 98 presentation(c), 100 - Effect.catchAll((error) => handleError(error, c)) 101 - ) 102 - ) 103 - ); 99 + Effect.catchAll((error) => handleError(error, c)), 100 + ), 101 + )); 104 102 105 103 app.get("/:id", (c) => 106 104 Effect.runPromise( 107 105 pipe( 108 106 parseParams(c), 109 107 Effect.flatMap(({ id }) => getInstanceState(id)), 110 - presentation(c) 111 - ) 112 - ) 113 - ); 108 + presentation(c), 109 + ), 110 + )); 114 111 115 112 app.delete("/:id", (c) => 116 113 Effect.runPromise( ··· 129 126 }) 130 127 ), 131 128 presentation(c), 132 - Effect.catchAll((error) => handleError(error, c)) 133 - ) 134 - ) 135 - ); 129 + Effect.catchAll((error) => handleError(error, c)), 130 + ), 131 + )); 136 132 137 133 app.post("/:id/start", (c) => 138 134 Effect.runPromise( ··· 157 153 ? startRequest.portForward.join(",") 158 154 : vm.portForward, 159 155 }, 160 - firmwareArgs 156 + firmwareArgs, 161 157 ); 162 158 yield* createLogsDir(); 163 159 yield* startDetachedQemu(vm.id, vm, qemuArgs); ··· 165 161 }) 166 162 ), 167 163 presentation(c), 168 - Effect.catchAll((error) => handleError(error, c)) 169 - ) 170 - ) 171 - ); 164 + Effect.catchAll((error) => handleError(error, c)), 165 + ), 166 + )); 172 167 173 168 app.post("/:id/stop", (c) => 174 169 Effect.runPromise( ··· 178 173 Effect.flatMap(killProcess), 179 174 Effect.flatMap(updateToStopped), 180 175 presentation(c), 181 - Effect.catchAll((error) => handleError(error, c)) 182 - ) 183 - ) 184 - ); 176 + Effect.catchAll((error) => handleError(error, c)), 177 + ), 178 + )); 185 179 186 180 app.post("/:id/restart", (c) => 187 181 Effect.runPromise( ··· 208 202 ? startRequest.portForward.join(",") 209 203 : vm.portForward, 210 204 }, 211 - firmwareArgs 205 + firmwareArgs, 212 206 ); 213 207 yield* createLogsDir(); 214 208 yield* startDetachedQemu(vm.id, vm, qemuArgs); ··· 216 210 }) 217 211 ), 218 212 presentation(c), 219 - Effect.catchAll((error) => handleError(error, c)) 220 - ) 221 - ) 222 - ); 213 + Effect.catchAll((error) => handleError(error, c)), 214 + ), 215 + )); 223 216 224 217 export default app;