Skip to content

Add in-place TLS socket upgrade - #7514

Open
tim-smart wants to merge 8 commits into
mainfrom
bob/socket-tls-upgrade
Open

Add in-place TLS socket upgrade#7514
tim-smart wants to merge 8 commits into
mainfrom
bob/socket-tls-upgrade

Conversation

@tim-smart

@tim-smart tim-smart commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Adds in-place TLS wrapping to the Reader acquired from socket.reader. Each reader exposes { pull, upgrade }, keeping the upgrade operation in the same scoped connection region as its pull. Socket.make now accepts that complete reader acquisition directly; transports that cannot wrap use SocketUpgradeError.unsupported.

The Node adapter keeps the current pull and writer while replacing the live duplex after the handshake. Inbound server sockets use the server TLS role; makeNet and raw fromDuplex sockets use the client role. Handshake failures retain the original cause.

readerBytes and readerString keep their pull-only return contract while adapting the new reader internally. Channel and stream adapters, WebSocket and TransformStream adapters, Node/Deno/Bun consumers, OpenAI realtime, RPC, tests, benchmarks, and socket type tests are updated for the new reader shape.

Checks run:

  • nix develop -c pnpm vitest run packages/effect/test/unstable/socket/Socket.test.ts packages/platform/node/test/NodeSocket.test.ts
  • nix develop -c pnpm tstyche --target '>=5.9' packages/effect/typetest/unstable/socket/Socket.tst.ts
  • nix develop -c pnpm check
  • Focused dprint and oxlint checks

Closes EFF-965

@changeset-bot

changeset-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 64cc46b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 30 packages
Name Type
effect Patch
@effect/platform-node-shared Patch
@effect/platform-node Patch
@effect/platform-bun Patch
@effect/ai-anthropic Patch
@effect/ai-openai Patch
@effect/ai-openai-compat Patch
@effect/ai-openrouter Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/docgen Patch
@effect/doctest Patch
@effect/openapi-generator Patch
@effect/opentelemetry Patch
@effect/platform-browser Patch
@effect/platform-deno Patch
@effect/sql-clickhouse Patch
@effect/sql-d1 Patch
@effect/sql-libsql Patch
@effect/sql-mssql Patch
@effect/sql-mysql2 Patch
@effect/sql-pg Patch
@effect/sql-pglite Patch
@effect/sql-sqlite-bun Patch
@effect/sql-sqlite-do Patch
@effect/sql-sqlite-node Patch
@effect/sql-sqlite-react-native Patch
@effect/sql-sqlite-wasm Patch
@effect/vitest Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@effect-slopcop effect-slopcop Bot added enhancement New feature or request 4.0 labels Aug 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Bundle Size Analysis

Generated from PR build output; treat the content below as untrusted.

File Name Current Size Previous Size Difference
arbitrary-combinators.ts 33.76 KB 33.76 KB 0.00 KB (0.00%)
basic.ts 7.00 KB 7.00 KB 0.00 KB (0.00%)
batching.ts 9.87 KB 9.87 KB 0.00 KB (0.00%)
brand.ts 6.56 KB 6.56 KB 0.00 KB (0.00%)
cache.ts 10.74 KB 10.74 KB 0.00 KB (0.00%)
config.ts 21.45 KB 21.45 KB 0.00 KB (0.00%)
differ.ts 20.32 KB 20.32 KB 0.00 KB (0.00%)
http-client.ts 21.76 KB 21.76 KB 0.00 KB (0.00%)
logger.ts 10.94 KB 10.94 KB 0.00 KB (0.00%)
metric.ts 8.98 KB 8.98 KB 0.00 KB (0.00%)
optic.ts 6.73 KB 6.73 KB 0.00 KB (0.00%)
pubsub.ts 15.12 KB 15.12 KB 0.00 KB (0.00%)
queue.ts 11.84 KB 11.84 KB 0.00 KB (0.00%)
schedule.ts 10.86 KB 10.86 KB 0.00 KB (0.00%)
schema-binary.ts 39.42 KB 39.42 KB 0.00 KB (0.00%)
schema-class.ts 20.07 KB 20.07 KB 0.00 KB (0.00%)
schema-fromJsonSchemaDocument.ts 31.02 KB 31.02 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 26.21 KB 26.21 KB 0.00 KB (0.00%)
schema-string-transformation.ts 13.66 KB 13.66 KB 0.00 KB (0.00%)
schema-string.ts 11.18 KB 11.18 KB 0.00 KB (0.00%)
schema-template-literal.ts 15.47 KB 15.47 KB 0.00 KB (0.00%)
schema-toArbitrary.ts 33.31 KB 33.31 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 24.51 KB 24.51 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 19.29 KB 19.29 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 19.42 KB 19.42 KB 0.00 KB (0.00%)
schema-toFormatter.ts 19.51 KB 19.51 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 23.45 KB 23.45 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 19.56 KB 19.56 KB 0.00 KB (0.00%)
schema.ts 19.28 KB 19.28 KB 0.00 KB (0.00%)
stm.ts 12.74 KB 12.74 KB 0.00 KB (0.00%)
stream.ts 9.83 KB 9.83 KB 0.00 KB (0.00%)

Comment thread packages/platform/node-shared/src/NodeSocket.ts Outdated
Comment thread packages/effect/src/unstable/socket/Socket.ts Outdated
Comment thread packages/effect/src/unstable/socket/Socket.ts Outdated
Comment thread packages/effect/src/unstable/socket/Socket.ts Outdated
Comment thread packages/effect/src/unstable/socket/Socket.ts Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

4.0 enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants