ilokesto

ky 훅

Fetcher는 ky에 위임하므로 hook 기반 패턴이 그대로 유지됩니다. 추가로 제공되는 context.openapi metadata는 route-level instrumentation을 쉽게 만듭니다.

const api = createFetcher<paths>({
  prefixUrl: '/api',
  hooks: {
    beforeRequest: [
      (request, options) => {
        request.headers.set('x-client', 'web');
        console.debug('request', {
          method: options.context.openapi?.method,
          template: options.context.openapi?.pathTemplate,
        });
      },
    ],
    afterResponse: [
      (_request, options, response) => {
        reportMetric('http.response', {
          path: options.context.openapi?.pathTemplate,
          status: response.status,
        });
      },
    ],
  },
});

인증 클라이언트

Base client를 한 번 만들고 authenticated branch에는 extend를 사용하세요.

const api = createFetcher<paths>({ prefixUrl: '/api' });

export function withToken(token: string) {
  return api.extend({
    headers: {
      Authorization: `Bearer ${token}`,
    },
  });
}

extend는 typed fetcher를 반환하므로 composition 이후에도 route inference가 유지됩니다.

목차