microsoft / microsoft/typespec

[Bug]: @typespec/http-client-js generates wrong code for binary response definitions

Open
#8,438 0 comments 0 reactions 0 assignees View on GitHub
bug emitter:client:js
Dominant language
Java
Stars
5.9k
Forks
394
Avg merge
1d 23h
Merged PRs (30d)
104

Description

### Describe the bug

Having a definition "by the book" for an API endpoint returning binary data generates JS/TS files with correct typing for the return value, but incorrect actual values when running it.

### Reproduction

The definition

```ts
model Content {
@header contentType: "application/pdf";
@body contents: bytes;
}

...
@get read(): Content
...
```

generates TypeScript code with `Promise` as the return type but in fact it's a `Promise` where the original binary data is parsed to string irreparably. There's no way to get back the original bytes because of the UTF-8 string encoding.

The actual damage is done in [@typespec/ts-http-runtime/fetchHttpClient.js](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/ts-http-runtime/src/fetchHttpClient.ts#L139) but I guess it could be called in a way to return the Blob instead or something.

### Checklist

- [x] Follow our [Code of Conduct](https://github.com/microsoft/typespec/blob/main/CODE_OF_CONDUCT.md)
- [x] Check that there isn't already an issue that request the same bug to avoid creating a duplicate.
- [x] Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/Microsoft/typespec/discussions).
- [x] The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.