From 3afcc1d104c57957cdc0f92cd29d12307088ccea Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Apr 2026 12:04:39 +0000 Subject: [PATCH 1/2] Initial plan From 56296278966e32cb34f42522c34ddb263ed7e969 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Apr 2026 12:07:49 +0000 Subject: [PATCH 2/2] feat: export getCookies, setCookie, getSetCookies, deleteCookie, parseCookie and Cookie type from undici Agent-Logs-Url: https://github.com/node-modules/urllib/sessions/ff57bdc1-581c-491f-94bc-7cfe12407c04 Co-authored-by: fengmk2 <156269+fengmk2@users.noreply.github.com> --- src/index.ts | 7 +++++- test/index.test.ts | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 525679bb..67604e15 100644 --- a/src/index.ts +++ b/src/index.ts @@ -98,8 +98,13 @@ export { Response, Headers, FormData, + getCookies, + setCookie, + getSetCookies, + deleteCookie, + parseCookie, } from 'undici'; -export type { RequestInfo, RequestInit, BodyInit, ResponseInit } from 'undici'; +export type { RequestInfo, RequestInit, BodyInit, ResponseInit, Cookie } from 'undici'; // HttpClient2 is keep compatible with urllib@2 HttpClient2 export { HttpClient, HttpClient as HttpClient2, HEADER_USER_AGENT as USER_AGENT } from './HttpClient.js'; export type { RequestDiagnosticsMessage, ResponseDiagnosticsMessage, ClientOptions } from './HttpClient.js'; diff --git a/test/index.test.ts b/test/index.test.ts index 3c392e67..8761a8d9 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -10,7 +10,14 @@ import urllib, { MockAgent, setGlobalDispatcher, getGlobalDispatcher, + getCookies, + setCookie, + getSetCookies, + deleteCookie, + parseCookie, + Headers, } from '../src/index.js'; +import type { Cookie } from '../src/index.js'; import { startServer } from './fixtures/server.js'; import { readableToBytes } from './utils.js'; @@ -423,4 +430,55 @@ describe('index.test.ts', () => { assert.equal(response.status, 200); }); }); + + describe('Cookie utilities', () => { + it('should export getCookies from undici', () => { + assert.equal(typeof getCookies, 'function'); + const headers = new Headers(); + headers.set('cookie', 'foo=bar; hello=world'); + const cookies = getCookies(headers); + assert.equal(cookies.foo, 'bar'); + assert.equal(cookies.hello, 'world'); + }); + + it('should export setCookie from undici', () => { + assert.equal(typeof setCookie, 'function'); + const headers = new Headers(); + const cookie: Cookie = { name: 'foo', value: 'bar' }; + setCookie(headers, cookie); + const setCookieHeader = headers.get('set-cookie'); + assert(setCookieHeader); + assert.match(setCookieHeader, /foo=bar/); + }); + + it('should export getSetCookies from undici', () => { + assert.equal(typeof getSetCookies, 'function'); + const headers = new Headers(); + headers.append('set-cookie', 'foo=bar'); + headers.append('set-cookie', 'hello=world'); + const cookies = getSetCookies(headers); + assert.equal(cookies.length, 2); + assert.equal(cookies[0].name, 'foo'); + assert.equal(cookies[0].value, 'bar'); + assert.equal(cookies[1].name, 'hello'); + assert.equal(cookies[1].value, 'world'); + }); + + it('should export deleteCookie from undici', () => { + assert.equal(typeof deleteCookie, 'function'); + const headers = new Headers(); + deleteCookie(headers, 'foo'); + const setCookieHeader = headers.get('set-cookie'); + assert(setCookieHeader); + assert.match(setCookieHeader, /foo=/); + }); + + it('should export parseCookie from undici', () => { + assert.equal(typeof parseCookie, 'function'); + const cookie = parseCookie('foo=bar'); + assert(cookie); + assert.equal(cookie.name, 'foo'); + assert.equal(cookie.value, 'bar'); + }); + }); });