Skip to content

Latest commit

 

History

History
166 lines (121 loc) · 2.81 KB

README.md

File metadata and controls

166 lines (121 loc) · 2.81 KB

Hackernews API sdk

Use tsdk to generate hacker news API sdk, based on the offical API documentation:

https://github.com/HackerNews/API

Features

  • TypeScript types
  • Support SWR hooks

Documentation

https://hn-api-sdk.tsdk.dev

Getting Started

Install:

npm install hn-api-sdk

Usage (2 steps):

Step 1, create ./user-api.ts and ./user-api-hooks.ts:

Create user-api.ts (use fetch)

import xior, { XiorError } from "xior";
import { setHandler, setXiorInstance, xiorHandler } from "hn-api-sdk";

export * from "hn-api-sdk/lib/user-api";
export * from "hn-api-sdk/lib/apiconf-refs";
export * from "hn-api-sdk/lib/shared-refs";

export const baseURL = `https://hacker-news.firebaseio.com`;

const xiorInstance = xior.create({
  baseURL,
  headers: {},
});

xiorInstance.interceptors.request.use(
  (config) => {
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

xiorInstance.interceptors.response.use(
  async (response) => {
    return response;
  },
  async (error: XiorError) => {
    return Promise.reject(error?.message);
  }
);

setXiorInstance(xiorInstance);
setHandler(xiorHandler);

Or use axios as the client, create user-api.ts:

import axios, { AxiosError } from "axios";
import { setHandler, setAxiosInstance, axiosHandler } from "hn-api-sdk";

export * from "hn-api-sdk/lib/user-api";
export * from "hn-api-sdk/lib/apiconf-refs";
export * from "hn-api-sdk/lib/shared-refs";

export const baseURL = `https://hacker-news.firebaseio.com`;

const axiosInstance = axios.create({
  baseURL,
  headers: {},
});

axiosInstance.interceptors.request.use(
  (config) => {
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

axiosInstance.interceptors.response.use(
  async (response) => {
    return response;
  },
  async (error: AxiosError) => {
    return Promise.reject(error?.message);
  }
);

setAxiosInstance(axiosInstance);
setHandler(axiosHandler);

Create user-api-hooks.ts

import "./user-api";

export * from "hn-api-sdk/lib/user-api-hooks";

Step 2, import module from ./user-api.ts:

import {
  GetUserDetail,
  GetStories,
  GetStory,
  GetComment,
  GetAsk,
  GetJob,
  GetPoll,
  GetPart,
  GetMaxItemId,
  GetChangedItemsAndProfiles,
} from "./user-api";

GetUserDetail({ id: "jl" }).then((res) => {
  console.log(res.id, res.about, res.submitted);
});

Development

First, install dependencies:

Recommend use pnpm

pnpm install
pnpm run ready

Then, sync hn-api-sdk packakge files:

pnpm --filter=api sync-sdk

Publish to npm

pnpm --filter=hn-api-sdk start-publish

Npm package

https://www.npmjs.com/package/hn-api-sdk

Thanks