typescript wrapper for the forgejo api for deer use (+others too if u want ^-^)
  • TypeScript 99.9%
  • JavaScript 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
era 04e18710d7
Some checks failed
Test (standalone) / run-tests (push) Failing after 7s
test@latest
2026-11-03 09:33:07 -07:00
.forgejo/workflows test@latest 2026-11-03 09:33:07 -07:00
dist auths tested 2026-10-10 12:56:50 -07:00
src test@latest 2026-11-03 09:33:07 -07:00
static initial logo svg 2026-10-19 16:19:51 -07:00
tmp building & test outline 2026-10-10 11:37:54 -07:00
.env.example runner env setup 2026-10-11 12:53:43 -07:00
.gitignore building & test outline 2026-10-10 11:37:54 -07:00
.prettierrc finished init 2026-10-09 20:58:20 -07:00
eslint.config.js finished init 2026-10-09 20:58:20 -07:00
LICENSE whys it doin that 2026-10-11 15:31:52 -07:00
package.json [skip ci] release commit for 1.0.12 2026-10-19 21:57:56 +00:00
pnpm-lock.yaml [skip ci] pre-version-bump 2026-10-15 17:53:54 +00:00
pnpm-workspace.yaml blep 2026-10-11 16:16:23 -07:00
README.md hmm 2026-10-15 10:48:39 -07:00
tsconfig.json rework basic auth to be lighter 2026-10-10 13:33:24 -07:00
vite.config.ts byebye dotenv 2026-10-12 12:19:46 -07:00

forgedoe

"for forgejo does"

this is a very light typescript wrapper around the forgejo http api

it uses the openapi/swagger spec, forgejo version 16.0.3+gitea-1.22.0

source code available on git at https://git.vixen.computer/era/forgedoe

how to use it

install

npm install forgedoe # or your preferred package genre

instantiate with an access token

import { createClient } from 'forgedoe';

const forgejo = await createClient("YOUR.FORGEJO.HOST", {
  kind: 'token',
  token: process.env.YOUR_ACCESS_TOKEN
});

instantiate with username and password

import { createClient } from 'forgedoe';

// Note that Basic Auth is more dangerous (it cannot be scoped) but is required for certain endpoints (e.g. deleting an access token from a user)
const forgejo = await createClient("YOUR.FORGEJO.HOST", {
  kind: 'basic',
  username: 'doof',
  password: process.env.YOUR_PASSWORD,
});

now you can fetch with awesome intellisense !!!

examples

type await forgejo.fetch(' and all available endpoints will populate typescript autosuggest

type await forgejo.fetch('/some/endpoint', ' and the available methods for the given endpoint will populate

type await forgejo.fetch('/some/endpoint', 'method', {}) and the object will have the proper type enforced for the given query. the response object will be typed as a discriminated union of the possible response bodies for each possible http status code

const response = await forgejo.fetch('/repos/{owner}/{repo}/branches', 'post', {
  path: { owner: 'doof', repo: 'projectinator' },
  body: { new_branch_name: 'feature/self-destruct-button' },
});

if (response.status == 201) {
  // Now response.body is properly typed as
  // {
  //   commit: {
  //     added: string[];
  //     author: {
  //       email: string;
  //       name: string;
  //       username: string;
  //     };
  //     committer: {
  //       email: string;
  //       name: string;
  //       username: string;
  //     };
  //     id: string;
  //     message: string;
  //     modified: string[];
  //     removed: string[];
  //     timestamp: string;
  //     url: string;
  //     verification: {
  //       payload: string;
  //       reason: string;
  //       signature: string;
  //       signer: {
  //         email: string;
  //         name: string;
  //         username: string;
  //       };
  //       verified: boolean;
  //     };
  //   };
  //   effective_branch_protection_name: string;
  //   enable_status_check: boolean;
  //   name: string;
  //   protected: boolean;
  //   required_approvals: number;
  //   status_check_contexts: string[];
  //   user_can_merge: boolean;
  //   user_can_push: boolean;
  // };
}

caveats

for endpoints that return binary data, response.body will be an ArrayBuffer containing said data, but will have type unknown. i should fix this probably.

i think this should also work with CommonJS require but idk

attribution

hoof-made with <3 by era 𐂂 in vancouver, canada

thx to all forgejo contributors for making awesome open source software

thx to https://vixen.computer/ for hosting this project and the forgejo instance it was built for