Skip to content

[UPSTREAM-7] fix(typescript): convert 64-bit resource method values to Long for a proto request - #70

Closed
moetemp wants to merge 1 commit into
moe/up/proto-unsigned-intsfrom
moe/up/ts-long-resource-params
Closed

moetemp wants to merge 1 commit into
moe/up/proto-unsigned-intsfrom
moe/up/ts-long-resource-params

Conversation

@moetemp

@moetemp moetemp commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

What changed?

This PR converts a 64-bit resource field or method param to Long when the method's request is proto-backed. The param stays a number, as other WIT-authored values do.

Depends on #72 (UPSTREAM-14). The chain's base, moe/brook/review/upstream-set, is a copy of upstream main.
Part of the Brook review series.

Why?

A WIT s64 is a number in TypeScript, but the proto-backed request has a Long field. So resources.ts didn't type-check.

How did you test it?

The stream-service sample gets s64 params on append-records and read-records. Without the fix, its resources.ts fails tsc.
Locally, cargo validate passes and cargo clippy adds no warnings. Fork CI doesn't run on this base.

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
moetemp force-pushed the moe/up/ts-long-resource-params branch from 9567a26 to 8321346 Compare October 25, 2026 22:19
@moetemp
moetemp changed the base branch from moe/up/resource-docs to moe/brook/review/upstream-set October 25, 2026 22:19
@moetemp
moetemp marked this pull request as ready for review October 25, 2026 22:20
@moetemp
moetemp force-pushed the moe/up/ts-long-resource-params branch from 8321346 to b7daf25 Compare October 26, 2026 20:56
@moetemp
moetemp force-pushed the moe/brook/review/upstream-set branch from e33cc76 to ac6b723 Compare October 26, 2026 20:56
@moetemp
moetemp changed the base branch from moe/brook/review/upstream-set to moe/up/proto-unsigned-ints October 26, 2026 20:57
@moetemp
moetemp force-pushed the moe/up/ts-long-resource-params branch from b7daf25 to f518ff8 Compare October 26, 2026 22:34
A proto-backed request holds a 64-bit integer as a `Long`, but a resource
method takes a number. The method body converts its 64-bit params and fields.
@moetemp
moetemp force-pushed the moe/up/proto-unsigned-ints branch from a2bfff7 to c00a0d9 Compare October 26, 2026 22:37
@moetemp
moetemp force-pushed the moe/up/ts-long-resource-params branch from f518ff8 to 7046833 Compare October 26, 2026 22:37
@moetemp

moetemp commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Opened upstream as temporalio/nexgen#296, on upstream main. It doesn't need #72 there, so it goes up on its own. Closing this one.

@moetemp moetemp closed this Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant