{"id":51070618,"url":"https://github.com/maseshi/apishioru","last_synced_at":"2026-06-23T10:01:33.217Z","repository":{"id":347369928,"uuid":"1193824747","full_name":"Maseshi/APIShioru","owner":"Maseshi","description":"🪧 (Web API) Backend API for Shioru dashboard","archived":false,"fork":false,"pushed_at":"2026-03-28T11:34:48.000Z","size":47,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-19T03:22:51.450Z","etag":null,"topics":["bun","elysiajs","typescript","vercel"],"latest_commit_sha":null,"homepage":"https://shioru-api.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Maseshi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-27T16:06:41.000Z","updated_at":"2026-03-28T12:04:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Maseshi/APIShioru","commit_stats":null,"previous_names":["maseshi/apishioru"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Maseshi/APIShioru","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maseshi%2FAPIShioru","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maseshi%2FAPIShioru/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maseshi%2FAPIShioru/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maseshi%2FAPIShioru/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Maseshi","download_url":"https://codeload.github.com/Maseshi/APIShioru/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maseshi%2FAPIShioru/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34684686,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","elysiajs","typescript","vercel"],"created_at":"2026-06-23T10:01:31.930Z","updated_at":"2026-06-23T10:01:33.205Z","avatar_url":"https://github.com/Maseshi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shioru API\n\nBackend API for [Shioru](https://shiorus.web.app/) dashboard — handles Discord OAuth2 authentication and guild configuration management.\n\nBuilt with [Elysia](https://elysiajs.com/) + [Bun](https://bun.sh/) + [Firebase Admin SDK](https://firebase.google.com/docs/admin/setup).\n\n## Prerequisites\n\n- [Bun](https://bun.sh/) runtime installed\n- A [Discord application](https://discord.com/developers/applications) with OAuth2 configured\n- A [Firebase](https://firebase.google.com/) project with Realtime Database\n\n## Setup\n\n1. Clone the repository\n2. Install dependencies:\n   ```bash\n   bun install\n   ```\n3. Copy `.env.example` to `.env` and fill in the values:\n   ```bash\n   cp .env.example .env\n   ```\n\n## Environment Variables\n\n| Variable | Description | Default |\n|---|---|---|\n| `DISCORD_CLIENT_ID` | Discord OAuth2 client ID | — |\n| `DISCORD_CLIENT_SECRET` | Discord OAuth2 client secret | — |\n| `DISCORD_REDIRECT_URI` | OAuth2 callback URL | `http://localhost:3000/auth/callback` |\n| `FIREBASE_SERVICE_ACCOUNT` | Firebase service account (JSON string or file path) | — |\n| `DATABASE_URL` | Firebase Realtime Database URL | — |\n| `JWT_SECRET` | Secret key for JWT signing | — |\n| `FRONTEND_URL` | Frontend URL for CORS and redirects | `http://localhost:5173` |\n| `PORT` | Server port | `3000` |\n| `NODE_ENV` | Environment mode | `development` |\n\n## Development\n\n```bash\nbun run dev\n```\n\nThe server starts at http://localhost:3000 with hot reload enabled.\n\n## API Endpoints\n\n### Health\n\n| Method | Path | Description |\n|---|---|---|\n| `GET` | `/` | API status |\n| `GET` | `/health` | Health check |\n\n### Authentication (`/auth`)\n\n| Method | Path | Description |\n|---|---|---|\n| `GET` | `/auth/login` | Initiate Discord OAuth2 flow |\n| `GET` | `/auth/callback` | OAuth2 callback handler |\n| `POST` | `/auth/logout` | Clear auth cookie |\n\n### User (`/api`)\n\n| Method | Path | Description |\n|---|---|---|\n| `GET` | `/api/me` | Get authenticated user info and manageable guilds |\n\n### Guild Configuration (`/api/guilds`)\n\nAll guild routes require authentication and `MANAGE_GUILD` permission.\n\n| Method | Path | Description |\n|---|---|---|\n| `GET` | `/api/guilds/:guildId` | Get full guild config |\n| `GET` | `/api/guilds/:guildId/language` | Get language settings |\n| `PUT` | `/api/guilds/:guildId/language` | Update language settings |\n| `GET` | `/api/guilds/:guildId/djs` | Get DJ settings |\n| `PUT` | `/api/guilds/:guildId/djs` | Update DJ settings |\n| `GET` | `/api/guilds/:guildId/notification` | Get notification settings |\n| `PUT` | `/api/guilds/:guildId/notification/:eventName` | Update notification event |\n| `GET` | `/api/guilds/:guildId/antibot` | Get anti-bot settings |\n| `PUT` | `/api/guilds/:guildId/antibot` | Update anti-bot settings |\n| `GET` | `/api/guilds/:guildId/captcha` | Get captcha settings |\n| `PUT` | `/api/guilds/:guildId/captcha` | Update captcha settings |\n| `GET` | `/api/guilds/:guildId/chat` | Get chat conversations |\n| `PUT` | `/api/guilds/:guildId/chat` | Update chat conversations |\n\n## Project Structure\n\n```\nsrc/\n├── index.ts             # Server entry point\n├── routes/\n│   ├── auth.ts          # Authentication endpoints\n│   ├── api.ts           # User API endpoints\n│   └── guilds.ts        # Guild configuration endpoints\n├── middleware/\n│   ├── guildAdmin.ts    # Guild authorization \u0026 caching\n│   └── rateLimit.ts     # Rate limiting\n└── services/\n    ├── discord.ts       # Discord OAuth2 \u0026 API\n    ├── firebase.ts      # Firebase Realtime Database\n    └── jwt.ts           # JWT configuration\n```\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaseshi%2Fapishioru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaseshi%2Fapishioru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaseshi%2Fapishioru/lists"}