feat: deploy standalone Hono/Bun auth and API backend

This commit is contained in:
2026-05-29 13:38:44 -07:00
parent 7c8def0aaa
commit 62e73eedd2
86 changed files with 16694 additions and 38 deletions

239
README.md Normal file
View File

@@ -0,0 +1,239 @@
# TalkCody Agent Marketplace API
The backend API service for TalkCody Agent Marketplace, built with Hono, Bun, and Drizzle ORM.
## Tech Stack
- **Runtime**: Bun
- **Framework**: Hono
- **Database**: Neon (Serverless PostgreSQL)
- **ORM**: Drizzle
- **Authentication**: @hono/oauth-providers (GitHub, Google)
- **Validation**: Zod
- **JWT**: jose
## Getting Started
### Prerequisites
- Bun >= 1.0.0
- Neon PostgreSQL database (free tier available)
- GitHub OAuth App credentials
- Google OAuth App credentials
### Setup
1. Install dependencies:
```bash
bun install
```
2. Copy environment variables:
```bash
cp .env.example .env
```
3. Fill in your `.env` file with actual values:
```env
DATABASE_URL=postgresql://user:password@host:5432/database
JWT_SECRET=your-secure-random-string
GITHUB_CLIENT_ID=your-github-app-id
GITHUB_CLIENT_SECRET=your-github-app-secret
GOOGLE_CLIENT_ID=your-google-app-id
GOOGLE_CLIENT_SECRET=your-google-app-secret
# Optional: explicit callback URL registered in Google Console
# Example: https://api.talkcody.com/api/auth/google
GOOGLE_REDIRECT_URI=
```
4. Generate database migrations:
```bash
bun run db:generate
```
5. Run migrations:
```bash
bun run db:migrate
```
6. Seed the database with initial data:
```bash
bun run db:seed
```
### Development
Run the development server with hot reload:
```bash
bun run dev
```
The API will be available at `http://localhost:3000`
### Testing
Run tests:
```bash
bun test
```
### Database Management
```bash
# Generate migrations from schema changes
bun run db:generate
# Run migrations
bun run db:migrate
# Push schema changes directly (dev only)
bun run db:push
# Open Drizzle Studio (database GUI)
bun run db:studio
# Seed database with initial data
bun run db:seed
```
### Building for Production
Build for Bun runtime:
```bash
bun run build
```
Build for Cloudflare Workers:
```bash
bun run build:cloudflare
```
### Deployment
#### Cloudflare Workers
1. Install Wrangler CLI:
```bash
bun install -g wrangler
```
2. Login to Cloudflare:
```bash
wrangler login
```
3. Set environment variables:
```bash
wrangler secret put DATABASE_URL
wrangler secret put JWT_SECRET
wrangler secret put GITHUB_CLIENT_ID
wrangler secret put GITHUB_CLIENT_SECRET
wrangler secret put GOOGLE_CLIENT_ID
wrangler secret put GOOGLE_CLIENT_SECRET
```
4. Deploy:
```bash
bun run deploy
```
#### Other Platforms (Railway, Fly.io, etc.)
Use the standard Bun deployment process for your platform.
## API Endpoints
### Health Check
- `GET /health` - Health check and database status
### Authentication
- `GET /api/auth/github` - GitHub OAuth
- `GET /api/auth/github/callback` - GitHub OAuth callback
- `GET /api/auth/google` - Google OAuth
- `GET /api/auth/google/callback` - Google OAuth callback
- `GET /api/auth/me` - Get current user (requires auth)
- `POST /api/auth/logout` - Logout
### Marketplace (Public)
- `GET /api/marketplace/agents` - List agents (with filters)
- `GET /api/marketplace/agents/featured` - Featured agents
- `GET /api/marketplace/agents/:slug` - Agent details
- `GET /api/marketplace/agents/:slug/versions` - Agent versions
- `GET /api/marketplace/agents/:slug/versions/:version` - Version details
- `POST /api/marketplace/agents/:slug/download` - Track download
- `POST /api/marketplace/agents/:slug/install` - Track install
- `GET /api/marketplace/categories` - List categories
- `GET /api/marketplace/tags` - List tags
- `GET /api/marketplace/collections` - List collections
- `GET /api/marketplace/collections/:slug` - Collection details
### Agents (Requires Auth)
- `POST /api/agents` - Publish new agent
- `PUT /api/agents/:slug` - Update agent
- `DELETE /api/agents/:slug` - Delete agent
- `POST /api/agents/:slug/versions` - Publish new version
### Users (Requires Auth)
- `GET /api/users/me/agents` - Get my agents
- `GET /api/users/me/stats` - Get my statistics
## Project Structure
```
apps/api/
├── src/
│ ├── index.ts # Main application entry
│ ├── db/
│ │ ├── schema.ts # Database schema
│ │ ├── client.ts # Database connection
│ │ ├── migrate.ts # Migration script
│ │ ├── seed.ts # Seed script
│ │ └── migrations/ # Migration files
│ ├── routes/ # API routes
│ │ ├── auth.ts
│ │ ├── marketplace.ts
│ │ ├── agents.ts
│ │ └── users.ts
│ ├── services/ # Business logic
│ │ ├── agent-service.ts
│ │ ├── user-service.ts
│ │ ├── auth-service.ts
│ │ └── stats-service.ts
│ ├── middlewares/ # Middleware
│ │ ├── auth.ts
│ │ └── error-handler.ts
│ ├── lib/ # Utilities
│ │ ├── jwt.ts
│ │ └── utils.ts
│ └── types/ # Type definitions
│ ├── env.ts
│ └── context.ts
├── package.json
├── tsconfig.json
├── drizzle.config.ts
├── wrangler.toml
└── README.md
```
## License
MIT