https://github.com/tsdk-monorepo/hacker-news-api-sdk
The Browser and Node.js SDK of Hacker News API
https://github.com/tsdk-monorepo/hacker-news-api-sdk
hacker-news-api tsdk typescript-library
Last synced: 10 months ago
JSON representation
The Browser and Node.js SDK of Hacker News API
- Host: GitHub
- URL: https://github.com/tsdk-monorepo/hacker-news-api-sdk
- Owner: tsdk-monorepo
- Created: 2023-12-13T04:20:30.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-02-23T11:37:29.000Z (over 1 year ago)
- Last Synced: 2025-03-22T22:42:50.374Z (about 1 year ago)
- Topics: hacker-news-api, tsdk, typescript-library
- Language: TypeScript
- Homepage: https://hn-api-sdk.tsdk.dev
- Size: 343 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Hackernews API sdk
Use [tsdk](https://tsdk.dev) 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:
```sh
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)
```ts
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`:
```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`
```ts user-api-hooks.ts
import "./user-api";
export * from "hn-api-sdk/lib/user-api-hooks";
```
Step 2, import module from `./user-api.ts`:
```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`
```sh
pnpm install
pnpm run ready
```
Then, sync `hn-api-sdk` packakge files:
```sh
pnpm --filter=api sync-sdk
```
Publish to npm
```sh
pnpm --filter=hn-api-sdk start-publish
```
### Npm package
https://www.npmjs.com/package/hn-api-sdk
### Thanks
- https://transform.tools/json-to-typescript
- https://github.com/HackerNews/API
- https://tsdk.dev