Repository navigation
[UPSTREAM-15] fix(typescript): build a returned proto-wire resource in an endpoint-less client - #73
Closed
moetemp wants to merge 1 commit into
Conversation
This was referenced Oct 23, 2026
moetemp
added a commit
to temporalio/nexgen
that referenced
this pull request
Oct 23, 2026
) ## What changed? This PR adds a `stream-service` sample for Python and TypeScript, with today's output. #272 adds .NET with its fix. It has a `stream` resource built from a ref, `create-stream`, append, read, describe and close, with 64-bit offsets, payloads and durations. Its records are proto-backed, as a stream service's are. Upstream has no stream protos, so the sample has its own small proto in `descriptors/streamsample/v1/`, with checked-in bindings. The samples README has the commands that regenerate them. `build_examples` now loads every `*.bin` under `descriptors/`. ## Why? Later fixes show their effect as a golden diff on this sample. ## How did you test it? The goldens. A TypeScript test sends a full `ReadRecordsRequest` through the converter, so the TypeScript type file can't drift from the proto. ## What comes next These fixes are ready, in this order. Each one adds its shape to this sample, then the fix. - #272: adds .NET, where the `stream` field of the `Stream` class fails with CS0542, then the fix. - [moetemp#52](moetemp#52): Check required resource fields of a response. Adds `create-stream` returning the `stream` resource. - [moetemp#56](moetemp#56): Allow a result record to hold a resource. Adds a `create-stream-result` holder record. - [moetemp#53](moetemp#53): Emit `@nexus.doc` on resources and methods as Python docstrings. - [moetemp#70](moetemp#70): Convert 64-bit resource method values to `Long` for a proto request in TypeScript. Adds 64-bit method parameters. Needs #265. - [moetemp#54](moetemp#54): Generate a Python caller per service over a transport. Turns on the client for the sample. - [moetemp#55](moetemp#55): Add `@nexus.long-poll` to the Python caller. Marks `read-records` as a long poll. - [moetemp#57](moetemp#57): Add Python client classes for resources with methods. - [moetemp#71](moetemp#71): Drop the bare keyword marker from a Python signature with no parameters. Adds a `stream-writer` interface with no endpoint. - [moetemp#60](moetemp#60): Indent the docstrings of Python caller methods. Adds a doc on a writer operation. - [moetemp#69](moetemp#69): Import record types that an endpoint-less Python client uses in unpacked parameters. Adds `open-writer`. - [moetemp#72](moetemp#72): Plan proto unsigned integers as unsigned. Adds a `uint64` writer id. - [moetemp#73](moetemp#73): Build a returned proto-wire resource in an endpoint-less TypeScript client. Makes `open-writer` return the `writer` resource. #262 adds a `status` enum to the holder record once it merges.
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
from
October 25, 2026 22:19
4605c8f to
737cb59
Compare
moetemp
force-pushed
the
moe/up/proto-unsigned-ints
branch
from
October 25, 2026 22:19
3870c97 to
3e44798
Compare
moetemp
changed the base branch from
moe/up/proto-unsigned-ints
to
moe/up/python-client-record-imports
October 25, 2026 22:19
This was referenced Oct 25, 2026
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
from
October 25, 2026 23:49
737cb59 to
ae82054
Compare
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
from
October 25, 2026 23:49
c3c1da4 to
8077f09
Compare
moetemp
marked this pull request as ready for review
October 25, 2026 23:49
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
from
October 26, 2026 20:56
ae82054 to
e60c196
Compare
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
from
October 26, 2026 20:56
8077f09 to
5a96423
Compare
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
from
October 26, 2026 22:34
e60c196 to
f6020bb
Compare
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
2 times, most recently
from
October 26, 2026 22:37
a85def5 to
d6df728
Compare
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
2 times, most recently
from
October 26, 2026 23:01
20b8c18 to
2475c32
Compare
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
from
October 26, 2026 23:01
d6df728 to
10b1a85
Compare
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
from
October 27, 2026 01:06
2475c32 to
f8cecee
Compare
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
from
October 27, 2026 09:08
207f3e6 to
993cf8a
Compare
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
2 times, most recently
from
October 27, 2026 18:07
6f89d5e to
c56987c
Compare
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
from
October 27, 2026 18:07
993cf8a to
8d54083
Compare
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
from
October 27, 2026 19:00
c56987c to
bd6ed47
Compare
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
from
October 27, 2026 19:00
8d54083 to
9401eef
Compare
The client of a service with no endpoint built a returned resource from a type-only import, without the `requiredField` helper, and passed a `Long` to a number field. So `tsc` failed. Brook's writer now type-checks.
moetemp
force-pushed
the
moe/up/python-client-record-imports
branch
from
October 28, 2026 00:24
9401eef to
b4b1ed3
Compare
moetemp
force-pushed
the
moe/up/ts-endpointless-resource-return
branch
from
October 28, 2026 00:24
bd6ed47 to
7ca79da
Compare
1 of 3 tasks
Owner
Author
|
Closing this. The Streams stack doesn't need it. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed?
This PR builds a resource that an operation returns on a proto wire type, in the TypeScript
<Service>Clientclass of a service with no@nexus.endpoint.services.tsimports the resource class as a value and adds therequiredFieldhelper.Longin an answer.temporalio/nexgen#296converts one toLongin a request.Depends on #69 (UPSTREAM-13), and on
temporalio/nexgen#297and#296, which the base holds.Part of the Brook review series.
Why?
services.tsused the class from animport type, called a missingrequiredField, and put aLongin anumberfield. Sotscfailed.The Python
<Service>Clientinservices.pyhas the same bug. It imports the returned resource class only underTYPE_CHECKING, so the call fails at run time. #75 (UPSTREAM-17) fixes it.How did you test it?
Brook's
open-writerreturns thewriterresource, which has au64writer-id. Without the fix, the writer'sservices.tsfailstsc, so the samples leave it out of the TypeScript build. This PR turns it on. Brook's WIT already has the case, so it's one commit.cargo validatepasses andcargo clippyadds no warnings.