diff --git a/quint/src/quintVerifier.ts b/quint/src/quintVerifier.ts index 68e07a65e..70f048038 100644 --- a/quint/src/quintVerifier.ts +++ b/quint/src/quintVerifier.ts @@ -225,19 +225,24 @@ async function loadProtoDefViaReflection(): Promise { + const protoDefResponses: ServerReflectionResponse[] = await new Promise((resolve, reject) => { // Query reflection endpoint const call = reflectionClient.ServerReflectionInfo() call.write({ file_containing_symbol: 'shai.cmdExecutor.CmdExecutor' }) + let responses: ServerReflectionResponse[] = [] + call.on('data', (reflectionResponse: ServerReflectionResponse) => { call.cancel() - resolve(reflectionResponse) + responses.push(reflectionResponse) }) call.on('error', (e: any) => { - // Ignore cancellation errors - if (e.code !== grpc.status.CANCELLED) { + if (e.code === grpc.status.CANCELLED) { + // Cancelled by us, so we have the response + resolve(responses) + } else { + // Ignore cancellation errors // An error has occurred and the stream has been closed. console.error(e) reject(e) @@ -245,6 +250,17 @@ async function loadProtoDefViaReflection(): Promise 1) { + return err( + `Apalache gRPC endpoint is corrupted. Could not extract proto file: multiple responses from reflection service` + ) + } + + // We have a single response + const protoDefResponse = protoDefResponses[0] + if ('error_response' in protoDefResponse) { return err( `Apalache gRPC endpoint is corrupted. Could not extract proto file: ${protoDefResponse.error_response.error_message}`