From 3c383a6c7df17fa1b185474b6fe4280204cc5ea3 Mon Sep 17 00:00:00 2001 From: Mieszko Sabo Date: Tue, 9 Jan 2024 18:57:28 +0100 Subject: [PATCH 1/3] add (opt-in) support for cookies for treaty client --- bun.lockb | Bin 91285 -> 95754 bytes package.json | 157 ++++++++++++++++----------------- src/treaty/cookies.ts | 16 ++++ src/treaty/index.ts | 35 ++++++-- src/treaty/types.ts | 197 +++++++++++++++++++++--------------------- test/treaty.test.ts | 25 ++++++ 6 files changed, 249 insertions(+), 181 deletions(-) create mode 100644 src/treaty/cookies.ts diff --git a/bun.lockb b/bun.lockb index 7a1e34bd8e3992ef895ef1f9c7576e2b6b20f7ef..809408e92c9822b5e93a1b94e81a8bb015ec7a87 100755 GIT binary patch delta 18148 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 delta 15791 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 0.8.0" - }, - "peerDependenciesMeta": { - "@sinclair/typebox": { - "optional": true - } - }, - "devDependencies": { - "@elysiajs/cors": "0.7.0", - "@sinclair/typebox": "^0.31.6", - "@types/node": "^18.15.5", - "bun-types": "^1.0.1", - "elysia": "0.8.0", - "esbuild": "^0.19.3", - "eslint": "^8.26.0", - "rimraf": "^4.4.1", - "tsup": "^7.2.0", - "typescript": "^5.2.2" - }, - "prettier": { - "semi": false, - "tabWidth": 4, - "singleQuote": true, - "trailingComma": "none" - }, - "dependencies": { - "superjson": "^2.2.1" + "./fetch": { + "require": "./dist/fetch.js", + "import": "./dist/fetch.mjs", + "node": "./dist/fetch.js", + "default": "./dist/fetch.js", + "types": "./dist/fetch/index.d.ts" + } + }, + "types": "./src/index.ts", + "keywords": [ + "elysia", + "eden", + "connector" + ], + "homepage": "https://github.com/elysiajs/eden", + "repository": { + "type": "git", + "url": "https://github.com/elysiajs/eden" + }, + "bugs": "https://github.com/elysiajs/eden/issues", + "license": "MIT", + "scripts": { + "dev": "bun run --watch example/index.ts", + "test": "bun test", + "build": "rimraf dist && tsup", + "release": "npm run build && npm run test && npm publish --access public" + }, + "peerDependencies": { + "elysia": ">= 0.8.0" + }, + "peerDependenciesMeta": { + "@sinclair/typebox": { + "optional": true } + }, + "devDependencies": { + "@elysiajs/cookie": "^0.8.0", + "@elysiajs/cors": "0.7.0", + "@sinclair/typebox": "^0.31.6", + "@types/node": "^18.15.5", + "@types/tough-cookie": "^4.0.5", + "bun-types": "^1.0.1", + "elysia": "0.8.0", + "esbuild": "^0.19.3", + "eslint": "^8.26.0", + "rimraf": "^4.4.1", + "tsup": "^7.2.0", + "typescript": "^5.2.2" + }, + "prettier": { + "semi": false, + "tabWidth": 4, + "singleQuote": true, + "trailingComma": "none" + }, + "dependencies": { + "superjson": "^2.2.1", + "tough-cookie": "^4.1.3" + } } diff --git a/src/treaty/cookies.ts b/src/treaty/cookies.ts new file mode 100644 index 0000000..3c90a79 --- /dev/null +++ b/src/treaty/cookies.ts @@ -0,0 +1,16 @@ +import { Cookie, CookieJar } from 'tough-cookie' + +export const addCookiesToJar = ( + jar: CookieJar, + setCookieHeaders: string[], + requestUrl: string +) => { + for (const setCookieHeader of setCookieHeaders) { + const cookie = Cookie.parse(setCookieHeader, { loose: true }) + if (!cookie) { + continue + } + + jar.setCookieSync(cookie, requestUrl) + } +} diff --git a/src/treaty/index.ts b/src/treaty/index.ts index f918264..e0541d8 100644 --- a/src/treaty/index.ts +++ b/src/treaty/index.ts @@ -7,6 +7,9 @@ import type { EdenTreaty } from './types' export type { EdenTreaty } from './types' +import { CookieJar } from 'tough-cookie' +import { addCookiesToJar } from './cookies' + // @ts-ignore const isServer = typeof FileList === 'undefined' @@ -159,11 +162,17 @@ export class EdenWS = InputSchema> { const createProxy = ( domain: string, path = '', - config: EdenTreaty.Config + config: EdenTreaty.Config, + cookieJar: CookieJar ): Record => new Proxy(() => {}, { get(target, key, value) { - return createProxy(domain, `${path}/${key.toString()}`, config) + return createProxy( + domain, + `${path}/${key.toString()}`, + config, + cookieJar + ) }, // @ts-ignore apply( @@ -245,7 +254,10 @@ const createProxy = ( ...config.$fetch?.headers, ...$fetch?.headers, ...options.headers, - ...$headers + ...$headers, + ...(config.persistCookies + ? { Cookie: cookieJar.getCookieStringSync(url) } + : {}) } as Record if (method !== 'GET' && method !== 'HEAD') { @@ -318,6 +330,14 @@ const createProxy = ( headers }) + if (config.persistCookies) { + addCookiesToJar( + cookieJar, + response.headers.getSetCookie(), + url + ) + } + let data if (modifiers.getRaw) return response as any @@ -369,12 +389,15 @@ export const edenTreaty = >( config: EdenTreaty.Config = { fetcher: fetch } -): EdenTreaty.Create => - new Proxy( +): EdenTreaty.Create => { + const jar = new CookieJar() + + return new Proxy( {}, { get(target, key) { - return createProxy(domain, key as string, config) + return createProxy(domain, key as string, config, jar) } } ) as any +} diff --git a/src/treaty/types.ts b/src/treaty/types.ts index 044bf96..7ea641c 100644 --- a/src/treaty/types.ts +++ b/src/treaty/types.ts @@ -25,10 +25,10 @@ type Split = S extends `${infer Head}/${infer Tail}` : Split : [Head, ...Split] : S extends `/` - ? [] - : S extends `${infer Head}/` - ? [Head] - : [S] + ? [] + : S extends `${infer Head}/` + ? [Head] + : [S] type Prettify = { [K in keyof T]: T[K] @@ -55,8 +55,8 @@ export namespace EdenTreaty { type SplitKeys = T extends [infer First, ...infer Rest] ? [First, Rest] : T extends [infer First, ...infer Rest][number] - ? [First, Rest] - : never + ? [First, Rest] + : never type UnwrapPromise = T extends Promise ? A : T @@ -81,14 +81,15 @@ export namespace EdenTreaty { $fetch?: RequestInit fetcher?: typeof fetch transform?: Transform + persistCookies?: boolean } export type DetailedResponse = { - data: any - error: any - response: Response - status: number - headers: Headers + data: any + error: any + response: Response + status: number + headers: Headers }; export type Sign< @@ -105,102 +106,102 @@ export namespace EdenTreaty { : Prefix]: Sign } : Schema[Carry extends '' ? '/' : Carry] extends infer Routes - ? { - [Method in keyof Routes]: Routes[Method] extends infer Route extends + ? { + [Method in keyof Routes]: Routes[Method] extends infer Route extends AnySchema - ? Method extends 'subscribe' - ? undefined extends Route['query'] - ? (params?: { - $query?: Record - }) => EdenWS - : (params: { - $query: Route['query'] - }) => EdenWS - : (( - params: { - $fetch?: RequestInit - getRaw?: boolean - } & (IsUnknown extends false - ? Replace< + ? Method extends 'subscribe' + ? undefined extends Route['query'] + ? (params?: { + $query?: Record + }) => EdenWS + : (params: { + $query: Route['query'] + }) => EdenWS + : (( + params: { + $fetch?: RequestInit + getRaw?: boolean + } & (IsUnknown extends false + ? Replace< Route['body'], Blob | Blob[], Files > - : {}) & - (undefined extends Route['query'] - ? { - $query?: Record - } - : { - $query: Route['query'] - }) & - (undefined extends Route['headers'] - ? { - $headers?: Record - } - : { - $headers: Route['headers'] - }) - ) => Promise< - ( - | { - data: Route['response'] extends { - 200: infer ReturnedType - } - ? Awaited - : unknown - error: null + : {}) & + (undefined extends Route['query'] + ? { + $query?: Record + } + : { + $query: Route['query'] + }) & + (undefined extends Route['headers'] + ? { + $headers?: Record + } + : { + $headers: Route['headers'] + }) + ) => Promise< + ( + | { + data: Route['response'] extends { + 200: infer ReturnedType } - | { - data: null - error: MapError< - Route['response'] - > extends infer Errors - ? IsNever extends true - ? EdenFetchError< + ? Awaited + : unknown + error: null + } + | { + data: null + error: MapError< + Route['response'] + > extends infer Errors + ? IsNever extends true + ? EdenFetchError< number, string > - : Errors - : EdenFetchError - } - ) & { - status: number - response: Response - headers: Record + : Errors + : EdenFetchError + } + ) & { + status: number + response: Response + headers: Record + } + >) extends (params: infer Params) => infer Response + ? { + $params: undefined + $headers: undefined + $query: undefined + } extends Params + ? ( + params?: Params, + options?: { + fetch?: RequestInit + transform?: EdenTreaty.Transform + // @ts-ignore + query?: Params['query'] + // @ts-ignore + headers?: Params['headers'] + } + ) => Response + : ( + params: Params, + options?: { + fetch?: RequestInit + transform?: EdenTreaty.Transform + // @ts-ignore + query?: Params['query'] + // @ts-ignore + headers?: Params['headers'] } - >) extends (params: infer Params) => infer Response - ? { - $params: undefined - $headers: undefined - $query: undefined - } extends Params - ? ( - params?: Params, - options?: { - fetch?: RequestInit - transform?: EdenTreaty.Transform - // @ts-ignore - query?: Params['query'] - // @ts-ignore - headers?: Params['headers'] - } - ) => Response - : ( - params: Params, - options?: { - fetch?: RequestInit - transform?: EdenTreaty.Transform - // @ts-ignore - query?: Params['query'] - // @ts-ignore - headers?: Params['headers'] - } - ) => Response - : never - : never - } - : {} + ) => Response + : never + : never + } + : {} export interface OnMessage extends MessageEvent { data: Data @@ -208,7 +209,7 @@ export namespace EdenTreaty { } export type ExecuteOptions = { - getRaw?: boolean + getRaw?: boolean }; export type ExecuteReturnType = T['getRaw'] extends true ? Response : DetailedResponse; diff --git a/test/treaty.test.ts b/test/treaty.test.ts index 8f23cb7..944ba92 100644 --- a/test/treaty.test.ts +++ b/test/treaty.test.ts @@ -1,4 +1,5 @@ import { Elysia, t } from 'elysia' +import { cookie } from '@elysiajs/cookie' import { edenTreaty } from '../src' import { beforeEach, describe, expect, it, spyOn, mock } from 'bun:test' @@ -13,6 +14,7 @@ const prefix = app.get(`${prefix}/prefixed`, () => 'hi') const app = new Elysia() + .use(cookie) .get('/', () => 'hi') .use(prefix('/prefix')) .post('/', () => 'hi') @@ -50,6 +52,17 @@ const app = new Elysia() .post('/string', ({ body }) => body, { body: t.String() }) + .group('/cookie', (app) => + app + .get('/set-cookie', ({ setCookie }) => { + setCookie('testCookie', 'hello world') + return 'hi' + }) + .get('/get-cookie', ({ cookie: { testCookie } }) => { + console.log('here') + return testCookie ?? 'no cookie' + }) + ) .listen(8082) const client = edenTreaty('http://localhost:8082') @@ -262,4 +275,16 @@ describe('Eden Rest', () => { .method ).toBe('PATCH') }) + + it('supports cookies with `persistCookies` option', async () => { + const client = edenTreaty('http://localhost:8082', { + persistCookies: true + }) + const { data } = await client.cookie['get-cookie'].get() + expect(data).toBe('no cookie') + await client.cookie['set-cookie'].get() + + const { data: afterSetCookie } = await client.cookie['get-cookie'].get() + expect(afterSetCookie).toBe('hello world') + }) }) From 18578067388e422d59b364178748abc952edd1d4 Mon Sep 17 00:00:00 2001 From: Mieszko Sabo Date: Tue, 9 Jan 2024 19:09:56 +0100 Subject: [PATCH 2/3] format --- package.json | 160 ++++++++++++++++++++++---------------------- src/treaty/types.ts | 21 ++---- 2 files changed, 87 insertions(+), 94 deletions(-) diff --git a/package.json b/package.json index 1cb0c91..eb087ae 100644 --- a/package.json +++ b/package.json @@ -1,85 +1,85 @@ { - "name": "@elysiajs/eden", - "version": "0.8.1", - "description": "Fully type-safe Elysia client", - "author": { - "name": "saltyAom", - "url": "https://github.com/SaltyAom", - "email": "saltyaom@gmail.com" - }, - "main": "./dist/index.js", - "exports": { - ".": { - "require": "./dist/index.js", - "import": "./dist/index.mjs", - "node": "./dist/index.js", - "default": "./dist/index.js", - "types": "./dist/index.d.ts" + "name": "@elysiajs/eden", + "version": "0.8.1", + "description": "Fully type-safe Elysia client", + "author": { + "name": "saltyAom", + "url": "https://github.com/SaltyAom", + "email": "saltyaom@gmail.com" }, - "./treaty": { - "require": "./dist/treaty.js", - "import": "./dist/treaty.mjs", - "node": "./dist/treaty.js", - "default": "./dist/treaty.js", - "types": "./dist/treaty/index.d.ts" + "main": "./dist/index.js", + "exports": { + ".": { + "require": "./dist/index.js", + "import": "./dist/index.mjs", + "node": "./dist/index.js", + "default": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./treaty": { + "require": "./dist/treaty.js", + "import": "./dist/treaty.mjs", + "node": "./dist/treaty.js", + "default": "./dist/treaty.js", + "types": "./dist/treaty/index.d.ts" + }, + "./fetch": { + "require": "./dist/fetch.js", + "import": "./dist/fetch.mjs", + "node": "./dist/fetch.js", + "default": "./dist/fetch.js", + "types": "./dist/fetch/index.d.ts" + } }, - "./fetch": { - "require": "./dist/fetch.js", - "import": "./dist/fetch.mjs", - "node": "./dist/fetch.js", - "default": "./dist/fetch.js", - "types": "./dist/fetch/index.d.ts" - } - }, - "types": "./src/index.ts", - "keywords": [ - "elysia", - "eden", - "connector" - ], - "homepage": "https://github.com/elysiajs/eden", - "repository": { - "type": "git", - "url": "https://github.com/elysiajs/eden" - }, - "bugs": "https://github.com/elysiajs/eden/issues", - "license": "MIT", - "scripts": { - "dev": "bun run --watch example/index.ts", - "test": "bun test", - "build": "rimraf dist && tsup", - "release": "npm run build && npm run test && npm publish --access public" - }, - "peerDependencies": { - "elysia": ">= 0.8.0" - }, - "peerDependenciesMeta": { - "@sinclair/typebox": { - "optional": true + "types": "./src/index.ts", + "keywords": [ + "elysia", + "eden", + "connector" + ], + "homepage": "https://github.com/elysiajs/eden", + "repository": { + "type": "git", + "url": "https://github.com/elysiajs/eden" + }, + "bugs": "https://github.com/elysiajs/eden/issues", + "license": "MIT", + "scripts": { + "dev": "bun run --watch example/index.ts", + "test": "bun test", + "build": "rimraf dist && tsup", + "release": "npm run build && npm run test && npm publish --access public" + }, + "peerDependencies": { + "elysia": ">= 0.8.0" + }, + "peerDependenciesMeta": { + "@sinclair/typebox": { + "optional": true + } + }, + "devDependencies": { + "@elysiajs/cookie": "^0.8.0", + "@elysiajs/cors": "0.7.0", + "@sinclair/typebox": "^0.31.6", + "@types/node": "^18.15.5", + "@types/tough-cookie": "^4.0.5", + "bun-types": "^1.0.1", + "elysia": "0.8.0", + "esbuild": "^0.19.3", + "eslint": "^8.26.0", + "rimraf": "^4.4.1", + "tsup": "^7.2.0", + "typescript": "^5.2.2" + }, + "prettier": { + "semi": false, + "tabWidth": 4, + "singleQuote": true, + "trailingComma": "none" + }, + "dependencies": { + "superjson": "^2.2.1", + "tough-cookie": "^4.1.3" } - }, - "devDependencies": { - "@elysiajs/cookie": "^0.8.0", - "@elysiajs/cors": "0.7.0", - "@sinclair/typebox": "^0.31.6", - "@types/node": "^18.15.5", - "@types/tough-cookie": "^4.0.5", - "bun-types": "^1.0.1", - "elysia": "0.8.0", - "esbuild": "^0.19.3", - "eslint": "^8.26.0", - "rimraf": "^4.4.1", - "tsup": "^7.2.0", - "typescript": "^5.2.2" - }, - "prettier": { - "semi": false, - "tabWidth": 4, - "singleQuote": true, - "trailingComma": "none" - }, - "dependencies": { - "superjson": "^2.2.1", - "tough-cookie": "^4.1.3" - } } diff --git a/src/treaty/types.ts b/src/treaty/types.ts index 7ea641c..8bdda06 100644 --- a/src/treaty/types.ts +++ b/src/treaty/types.ts @@ -90,7 +90,7 @@ export namespace EdenTreaty { response: Response status: number headers: Headers - }; + } export type Sign< Schema extends Record>, @@ -107,8 +107,7 @@ export namespace EdenTreaty { } : Schema[Carry extends '' ? '/' : Carry] extends infer Routes ? { - [Method in keyof Routes]: Routes[Method] extends infer Route extends - AnySchema + [Method in keyof Routes]: Routes[Method] extends infer Route extends AnySchema ? Method extends 'subscribe' ? undefined extends Route['query'] ? (params?: { @@ -122,11 +121,7 @@ export namespace EdenTreaty { $fetch?: RequestInit getRaw?: boolean } & (IsUnknown extends false - ? Replace< - Route['body'], - Blob | Blob[], - Files - > + ? Replace : {}) & (undefined extends Route['query'] ? { @@ -158,10 +153,7 @@ export namespace EdenTreaty { Route['response'] > extends infer Errors ? IsNever extends true - ? EdenFetchError< - number, - string - > + ? EdenFetchError : Errors : EdenFetchError } @@ -210,8 +202,9 @@ export namespace EdenTreaty { export type ExecuteOptions = { getRaw?: boolean - }; - export type ExecuteReturnType = T['getRaw'] extends true ? Response : DetailedResponse; + } + export type ExecuteReturnType = + T['getRaw'] extends true ? Response : DetailedResponse export type WSEvent< K extends keyof WebSocketEventMap, From f44fb02430eee89e9c31f57ea7ea18a4c4dbfe35 Mon Sep 17 00:00:00 2001 From: Mieszko Sabo Date: Tue, 9 Jan 2024 19:12:25 +0100 Subject: [PATCH 3/3] format in types --- src/treaty/types.ts | 211 +++++++++++++++++++++++--------------------- 1 file changed, 109 insertions(+), 102 deletions(-) diff --git a/src/treaty/types.ts b/src/treaty/types.ts index 8bdda06..6438b24 100644 --- a/src/treaty/types.ts +++ b/src/treaty/types.ts @@ -25,10 +25,10 @@ type Split = S extends `${infer Head}/${infer Tail}` : Split : [Head, ...Split] : S extends `/` - ? [] - : S extends `${infer Head}/` - ? [Head] - : [S] + ? [] + : S extends `${infer Head}/` + ? [Head] + : [S] type Prettify = { [K in keyof T]: T[K] @@ -55,8 +55,8 @@ export namespace EdenTreaty { type SplitKeys = T extends [infer First, ...infer Rest] ? [First, Rest] : T extends [infer First, ...infer Rest][number] - ? [First, Rest] - : never + ? [First, Rest] + : never type UnwrapPromise = T extends Promise ? A : T @@ -85,12 +85,12 @@ export namespace EdenTreaty { } export type DetailedResponse = { - data: any - error: any - response: Response - status: number - headers: Headers - } + data: any + error: any + response: Response + status: number + headers: Headers + }; export type Sign< Schema extends Record>, @@ -106,94 +106,102 @@ export namespace EdenTreaty { : Prefix]: Sign } : Schema[Carry extends '' ? '/' : Carry] extends infer Routes - ? { - [Method in keyof Routes]: Routes[Method] extends infer Route extends AnySchema - ? Method extends 'subscribe' - ? undefined extends Route['query'] - ? (params?: { - $query?: Record - }) => EdenWS - : (params: { - $query: Route['query'] - }) => EdenWS - : (( - params: { - $fetch?: RequestInit - getRaw?: boolean - } & (IsUnknown extends false - ? Replace - : {}) & - (undefined extends Route['query'] - ? { - $query?: Record - } - : { - $query: Route['query'] - }) & - (undefined extends Route['headers'] - ? { - $headers?: Record + ? { + [Method in keyof Routes]: Routes[Method] extends infer Route extends + AnySchema + ? Method extends 'subscribe' + ? undefined extends Route['query'] + ? (params?: { + $query?: Record + }) => EdenWS + : (params: { + $query: Route['query'] + }) => EdenWS + : (( + params: { + $fetch?: RequestInit + getRaw?: boolean + } & (IsUnknown extends false + ? Replace< + Route['body'], + Blob | Blob[], + Files + > + : {}) & + (undefined extends Route['query'] + ? { + $query?: Record + } + : { + $query: Route['query'] + }) & + (undefined extends Route['headers'] + ? { + $headers?: Record + } + : { + $headers: Route['headers'] + }) + ) => Promise< + ( + | { + data: Route['response'] extends { + 200: infer ReturnedType + } + ? Awaited + : unknown + error: null } - : { - $headers: Route['headers'] - }) - ) => Promise< - ( - | { - data: Route['response'] extends { - 200: infer ReturnedType + | { + data: null + error: MapError< + Route['response'] + > extends infer Errors + ? IsNever extends true + ? EdenFetchError< + number, + string + > + : Errors + : EdenFetchError } - ? Awaited - : unknown - error: null - } - | { - data: null - error: MapError< - Route['response'] - > extends infer Errors - ? IsNever extends true - ? EdenFetchError - : Errors - : EdenFetchError - } - ) & { - status: number - response: Response - headers: Record - } - >) extends (params: infer Params) => infer Response - ? { - $params: undefined - $headers: undefined - $query: undefined - } extends Params - ? ( - params?: Params, - options?: { - fetch?: RequestInit - transform?: EdenTreaty.Transform - // @ts-ignore - query?: Params['query'] - // @ts-ignore - headers?: Params['headers'] + ) & { + status: number + response: Response + headers: Record } - ) => Response - : ( - params: Params, - options?: { - fetch?: RequestInit - transform?: EdenTreaty.Transform - // @ts-ignore - query?: Params['query'] - // @ts-ignore - headers?: Params['headers'] - } - ) => Response - : never - : never - } - : {} + >) extends (params: infer Params) => infer Response + ? { + $params: undefined + $headers: undefined + $query: undefined + } extends Params + ? ( + params?: Params, + options?: { + fetch?: RequestInit + transform?: EdenTreaty.Transform + // @ts-ignore + query?: Params['query'] + // @ts-ignore + headers?: Params['headers'] + } + ) => Response + : ( + params: Params, + options?: { + fetch?: RequestInit + transform?: EdenTreaty.Transform + // @ts-ignore + query?: Params['query'] + // @ts-ignore + headers?: Params['headers'] + } + ) => Response + : never + : never + } + : {} export interface OnMessage extends MessageEvent { data: Data @@ -201,13 +209,12 @@ export namespace EdenTreaty { } export type ExecuteOptions = { - getRaw?: boolean - } - export type ExecuteReturnType = - T['getRaw'] extends true ? Response : DetailedResponse + getRaw?: boolean + }; + export type ExecuteReturnType = T['getRaw'] extends true ? Response : DetailedResponse; export type WSEvent< K extends keyof WebSocketEventMap, Data = unknown > = K extends 'message' ? OnMessage : WebSocketEventMap[K] -} +} \ No newline at end of file