From c915c21d47a2b417979b20e9e9d9b6ff30a03c0d Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 31 Dec 2025 19:51:21 +0900 Subject: refactor(client): use Hono InferResponseType for API response types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace manually defined AuthResponse and User types with Hono's InferResponseType to automatically derive types from server definitions. This ensures client types stay in sync with server responses. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/client/api/client.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/client/api/client.ts') diff --git a/src/client/api/client.ts b/src/client/api/client.ts index 7741942..7607eb6 100644 --- a/src/client/api/client.ts +++ b/src/client/api/client.ts @@ -1,6 +1,13 @@ -import { hc } from "hono/client"; +import { hc, type InferResponseType } from "hono/client"; import type { AppType } from "../../server/index.js"; -import type { ApiError, AuthResponse, Tokens } from "./types"; +import type { ApiError, Tokens } from "./types"; + +// Create a temporary client just for type inference +const _rpc = hc(""); + +// Infer response types from server definitions +export type LoginResponse = InferResponseType; +export type User = LoginResponse["user"]; export class ApiClientError extends Error { constructor( @@ -120,12 +127,12 @@ export class ApiClient { } } - async login(username: string, password: string): Promise { + async login(username: string, password: string): Promise { const res = await this.rpc.api.auth.login.$post({ json: { username, password }, }); - const data = await this.handleResponse(res); + const data = await this.handleResponse(res); this.tokenStorage.setTokens({ accessToken: data.accessToken, -- cgit v1.2.3-70-g09d2