(stream: Readable)
| 238 | } |
| 239 | |
| 240 | private async forStreamRequest(stream: Readable): Promise<VaasVerdict> { |
| 241 | const ws = this.getAuthenticatedWebSocket(); |
| 242 | return new Promise((resolve, reject) => { |
| 243 | const guid = uuidv4(); |
| 244 | if (this.debug) console.debug("uuid", guid); |
| 245 | let contentLength = 0; |
| 246 | this.verdictPromises.set(guid, { // waits for the verdictRequestForStream response |
| 247 | resolve: async (verdictResponse: VerdictResponse) => { |
| 248 | if (verdictResponse.verdict !== Verdict.UNKNOWN) { |
| 249 | throw new VaasServerError( |
| 250 | "Server returned verdict without receiving content", |
| 251 | ); |
| 252 | } |
| 253 | if (verdictResponse.upload_token === undefined || verdictResponse.upload_token == "") { |
| 254 | throw new VaasServerError( |
| 255 | "No upload token set in response", |
| 256 | ); |
| 257 | } |
| 258 | if (verdictResponse.url === undefined || verdictResponse.url == "") { |
| 259 | throw new VaasServerError( |
| 260 | "No upload url set in response", |
| 261 | ); |
| 262 | } |
| 263 | this.verdictPromises.delete(guid); |
| 264 | this.verdictPromises.set(guid, { // waits for the upload response |
| 265 | resolve: async (verdictResponse: VerdictResponse) => { |
| 266 | this.verdictPromises.delete(guid); |
| 267 | resolve( |
| 268 | new VaasVerdict(verdictResponse.sha256, verdictResponse.verdict, verdictResponse.detection, verdictResponse.file_type, verdictResponse.mime_type), |
| 269 | ); |
| 270 | }, |
| 271 | reject: (reason) => reject(reason), |
| 272 | }); |
| 273 | |
| 274 | contentLength = stream.readableLength; |
| 275 | await this.upload(verdictResponse, stream, contentLength); |
| 276 | return; |
| 277 | }, |
| 278 | reject: (reason) => reject(reason), |
| 279 | }); |
| 280 | |
| 281 | const verdictReq = JSON.stringify( |
| 282 | defaultSerializer.serialize( |
| 283 | new VerdictRequestForStream( |
| 284 | guid, |
| 285 | this.connection!.sessionId as string, |
| 286 | ), |
| 287 | ), |
| 288 | ); |
| 289 | ws.send(verdictReq); |
| 290 | }); |
| 291 | } |
| 292 | |
| 293 | /** Connect to VaaS |
| 294 | * @throws {VaasAuthenticationError} Authentication failed. |
no test coverage detected