gizmo-api
Version:
A minimal wrapper for interfacing with the Gizmo API.
176 lines (138 loc) • 3.5 kB
Markdown
# gizmo-api <a href="https://github.com/GizmoDevelopment/gizmo-api/actions"><img src="https://img.shields.io/github/actions/workflow/status/GizmoDevelopment/gizmo-api/build.yml?branch=master"></a>
A minimal wrapper for interfacing with the Gizmo API.
# Table of Contents
- [Installation](#installation)
- [Node](#node)
- [Browser](#browser)
- [Building](#building)
- [Usage](#usage)
- [Example](#example)
- [Documentation](#documentation)
- [Interfaces](#interfaces)
- [User](#user)
- [AuthenticatedUser](#authenticateduser)
- [Methods](#methods)
- [getUserById](#fetching-a-specific-user-by-their-id)
- [getAuthenticatedUser](#fetching-a-specific-user-by-their-token)
- [searchForUser](#searching-for-a-user)
- [login](#logging-in-and-receiving-the-token)
# Installation
### Node
```
npm i gizmo-api
```
### Browser
```html
<script src="https://cdn.gizmo.moe/scripts/gizmo-api@1.2.7.bundle.js"></script>
<script>
// Module will then be exposed under the variable 'gizmo'
</script>
```
# Building
If you want to build the module and bundle from source, use the following command:
```
npm run build
```
Or alternatively, you can either build the browser bundle or node module separately.
```
npm run build:node
```
```
npm run build:browser
```
# Usage
### JavaScript `(CommonJS)`
```js
const gizmo = require("gizmo-api");
```
### TypeScript `(ESM)`
```ts
import gizmo from "gizmo-api";
```
# Example
Simple user search:
```ts
import { searchForUser } from "gizmo-api";
searchForUser("tja").then(user => {
console.log(user);
});
```
This will log the following:
```json
{
"id": 1,
"username": "Tjaz",
"badges": [ "DEVELOPER", "MODERATOR" ],
"avatar_url": "https://cdn.gizmo.moe/uploads/avatars/...",
"banner_url": "https://cdn.gizmo.moe/uploads/banners/...",
"about_me": "...",
"created_at": 1534514387
}
```
# Documentation
You are limited to **1 request** per **0.1 seconds**!
## Types
### User
A base user.
```ts
import type { User } from "gizmo-api"
interface User {
id: number;
username: string;
badges: Badge[];
avatar_url: string | null;
banner_url: string | null;
about_me: string;
created_at: number;
}
```
### Badge
The badge union.
```ts
import type { Badge } from "gizmo-api"
type Badge = "DEVELOPER" | "MODERATOR";
```
To check for whether a user has a certain badge, use the provided enum and method:
```ts
import { userHasBadge, BADGES } from "gizmo-api"
const BADGES = {
DEVELOPER: "DEVELOPER",
MODERATOR: "MODERATOR"
};
userHasBadge(user, BADGES.DEVELOPER);
```
Or alternatively, you can do the checking manually:
```ts
import { BADGES } from "gizmo-api"
user.badges.includes(BADGES.DEVELOPER);
```
### AuthenticatedUser
```ts
interface AuthenticatedUser extends User {
token: string;
}
```
## Methods
### Fetching a specific user by their ID
```ts
function getUserById (id: number): Promise<User>;
```
### Fetching a specific user by their token
```ts
function getAuthenticatedUser (token: string): Promise<User>;
```
### Searching for a user
```ts
type UserID = number;
type Username = string;
type SearchQuery = UserID | Username;
function searchForUser (query: SearchQuery): Promise<User>;
```
### Logging in and receiving the token
```ts
function login (username: string, password: string): Promise<AuthenticatedUser>;
```
### Checking if a user has a badge
```ts
function userHasBadge (user: User | AuthenticatedUser, badge: Badge): boolean;
```