Skip to content

fix(http): read response cookies when Headers has no getSetCookie - #8772

Merged
tim-smart merged 1 commit into
Effect-TS:mainfrom
juliusmarminge:t3code/http-get-set-cookie-guard
Oct 5, 2026
Merged

tim-smart merged 1 commit into
Effect-TS:mainfrom
juliusmarminge:t3code/http-get-set-cookie-guard

Conversation

@juliusmarminge

Copy link
Copy Markdown
Contributor

Problem

HttpClientResponse.cookies for a fetch response calls this.source.headers.getSetCookie(). React Native's Headers does not implement getSetCookie, so reading .cookies there throws TypeError: this.source.headers.getSetCookie is not a function. It shows up when code inspects a rejected response, for example while mapping a non-2xx status to an error.

Fix

Treat a missing getSetCookie as no Set-Cookie headers: getSetCookie?.() ?? []. React Native never exposes Set-Cookie to JavaScript, so an empty list is accurate there. Environments that implement it are unchanged.

Testing

  • New test in packages/effect/test/http/HttpClient.test.ts: a Response whose headers.getSetCookie is undefined yields empty cookies. It fails on main with the TypeError and passes with the fix.
  • oxlint and dprint check on the changed files, tsc --noEmit for packages/effect.

We have carried this as a local patch in T3 Code since our mobile app hit it.

React Native's Headers implementation does not provide getSetCookie, so
reading HttpClientResponse.cookies threw a TypeError there. Treat a missing
getSetCookie as no Set-Cookie headers.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 8fe8fb1

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

This PR includes changesets to release 32 packages
Name Type
effect Patch
@effect/opentelemetry Patch
@effect/vitest Patch
@effect/ai-anthropic Patch
@effect/ai-cloudflare Patch
@effect/ai-openai-compat Patch
@effect/ai-openai Patch
@effect/ai-openrouter Patch
@effect/ai-typesafe Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/platform-browser Patch
@effect/platform-bun Patch
@effect/platform-deno Patch
@effect/platform-node-shared Patch
@effect/platform-node 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/docgen Patch
@effect/doctest Patch
@effect/openapi-generator 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-janitor effect-janitor Bot added bug Something isn't working 4.0 labels Oct 5, 2026
juliusmarminge added a commit to pingdotgg/t3code that referenced this pull request Oct 5, 2026
RequestHooks and the ConnectionHooks onPing/onPong/onPingTimeout callbacks
have had no callers since the client connection rewrite (#2978). The
patch now carries only MCP session DELETE (upstream: Effect-TS/effect#8773),
the getSetCookie guard (Effect-TS/effect#8772) and the missed-pong
tolerance (Effect-TS/effect#8774).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 5, 2026

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 38.90 KB 38.90 KB 0.00 KB (0.00%)
basic.ts 7.04 KB 7.04 KB 0.00 KB (0.00%)
batching.ts 10.13 KB 10.13 KB 0.00 KB (0.00%)
brand.ts 6.72 KB 6.72 KB 0.00 KB (0.00%)
cache.ts 10.88 KB 10.88 KB 0.00 KB (0.00%)
config.ts 22.15 KB 22.15 KB 0.00 KB (0.00%)
differ.ts 21.29 KB 21.29 KB 0.00 KB (0.00%)
http-client.ts 22.44 KB 22.43 KB +0.01 KB (+0.02%)
http-router.ts 33.74 KB 33.74 KB 0.00 KB (0.00%)
logger.ts 11.08 KB 11.08 KB 0.00 KB (0.00%)
metric.ts 9.02 KB 9.02 KB 0.00 KB (0.00%)
optic.ts 6.95 KB 6.95 KB 0.00 KB (0.00%)
pubsub.ts 15.16 KB 15.16 KB 0.00 KB (0.00%)
queue.ts 12.08 KB 12.08 KB 0.00 KB (0.00%)
schedule.ts 11.18 KB 11.18 KB 0.00 KB (0.00%)
schema-bigdecimal.ts 13.73 KB 13.73 KB 0.00 KB (0.00%)
schema-binary.ts 39.95 KB 39.95 KB 0.00 KB (0.00%)
schema-class.ts 21.03 KB 21.03 KB 0.00 KB (0.00%)
schema-fromJsonSchemaDocument.ts 32.06 KB 32.06 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 27.24 KB 27.24 KB 0.00 KB (0.00%)
schema-string-transformation.ts 14.46 KB 14.46 KB 0.00 KB (0.00%)
schema-string.ts 11.99 KB 11.99 KB 0.00 KB (0.00%)
schema-template-literal.ts 16.05 KB 16.05 KB 0.00 KB (0.00%)
schema-toArbitrary.ts 38.44 KB 38.44 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 25.26 KB 25.26 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 20.21 KB 20.21 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 20.41 KB 20.41 KB 0.00 KB (0.00%)
schema-toFormatter.ts 20.54 KB 20.54 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 25.00 KB 25.00 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 20.50 KB 20.50 KB 0.00 KB (0.00%)
schema.ts 20.25 KB 20.25 KB 0.00 KB (0.00%)
stm.ts 13.08 KB 13.08 KB 0.00 KB (0.00%)
stream.ts 9.98 KB 9.98 KB 0.00 KB (0.00%)

@tim-smart
tim-smart merged commit bd00773 into Effect-TS:main Oct 5, 2026
8 of 10 checks passed
@effect-bot effect-bot mentioned this pull request Oct 5, 2026

This branch is waiting to be deployed

1 waiting deployment
fork — 8fe8fb16 Waiting Oct 5, 2026 by juliusmarminge via approval-gate #28964
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

4.0 bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants