Backend REST API para integração com o smart contract QuestManager no Soroban (Stellar).
- 🔐 Autenticação Passkey: Login biométrico com Kale passkey-kit
- ⚡ Smart Wallets: Carteiras inteligentes na Stellar com assinatura via passkey
- 📝 Gestão de Quests: Criar, listar, resolver e cancelar quests
- 👥 Gestão de Usuários: Registro, elegibilidade e estatísticas
- 🌐 Integração Soroban: Comunicação completa com o smart contract
- 🔒 Autenticação Múltipla: JWT, Passkeys e Wallet tradicional
- 🛡️ Rate Limiting: Proteção contra abuso da API
- 📊 Logs Estruturados: Sistema de logging completo
- 💓 Health Checks: Monitoramento de saúde da aplicação
src/
├── config/ # Configurações (Soroban, JWT, etc.)
├── controllers/ # Lógica das rotas REST
├── services/ # Integração com Soroban e lógica de negócio
├── models/ # Tipos e interfaces TypeScript
├── routes/ # Definição das rotas Express
├── utils/ # Funções auxiliares (logger, auth, etc.)
├── middleware/ # Middlewares customizados
└── index.ts # Entrypoint do servidor
- Node.js 18+
- npm ou yarn
- Conta Stellar testnet/mainnet configurada
npm installCopie o arquivo de exemplo e configure as variáveis:
cp .env.example .envEdite o .env com suas configurações:
# Stellar/Soroban Configuration
CONTRACT_ID=your_contract_id_here
NETWORK_PASSPHRASE=Test SDF Network ; September 2015
RPC_URL=https://soroban-testnet.stellar.org:443
# Admin Configuration
ADMIN_SECRET=your_admin_secret_key_here
ADMIN_PUBLIC_KEY=your_admin_public_key_here
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-here
JWT_EXPIRATION=24hnpm run devnpm run build
npm startGET /api/v1/quests- Lista todas as quests ativasGET /api/v1/quests/:id- Detalhes de uma quest específicaPOST /api/v1/quests- Cria uma nova quest (admin)POST /api/v1/quests/:id/register- Registra usuário em uma questPOST /api/v1/quests/:id/eligible- Marca usuário como elegível (admin)POST /api/v1/quests/:id/resolve- Resolve quest (admin)POST /api/v1/quests/:id/cancel- Cancela quest (admin)GET /api/v1/quests/:id/participants- Lista participantes da questPOST /api/v1/quests/:id/distribute- Distribui prêmios (admin)
GET /api/v1/users/:address/quests- Quests do usuárioGET /api/v1/users/:address/stats- Estatísticas do usuário
POST /auth/passkey/register- Cria wallet com passkey usando KalePOST /auth/passkey/connect- Conecta a wallet existente com passkeyPOST /auth/passkey/quest/:id/register- Registro em quest com passkeyPOST /auth/passkey/quest/:id/claim-rewards- Claim de recompensas com passkeyGET /auth/signers/:contractId- Lista signatários de um contrato wallet
GET /health- Health check da aplicaçãoGET /api/v1/info- Informações da APIGET /auth/info- Info sobre métodos de autenticaçãoGET /auth/health- Health check específico de autenticação
curl -X POST http://localhost:3000/api/v1/quests \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ADMIN_JWT" \
-d '{
"title": "Trading Volume Challenge",
"description": "Trade minimum $1000 volume on DEX",
"reward_token": "USDC",
"reward_amount": "100",
"max_participants": 50,
"start_time": 1693843200,
"end_time": 1694448000,
"quest_type": "TRADING_VOLUME",
"conditions": {
"min_volume": "1000"
}
}'curl -X POST http://localhost:3000/api/v1/quests/1/register \
-H "Content-Type: application/json" \
-d '{
"user_address": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}'curl http://localhost:3000/api/v1/quests?page=1&limit=10&status=ACTIVE- Autenticação JWT: Protege rotas administrativas
- Rate Limiting: Previne abuso da API
- Helmet: Headers de segurança HTTP
- CORS: Configuração flexível de origens
- Validação: Validação rigorosa de inputs
npm run dev # Executa em modo desenvolvimento
npm run build # Compila TypeScript
npm start # Executa versão compilada
npm test # Executa testes
npm run lint # Executa linting
npm run lint:fix # Corrige problemas de lintcurl http://localhost:3000/healthResposta:
{
"status": "healthy",
"timestamp": "2024-09-15T10:30:00.000Z",
"services": {
"database": true,
"soroban_rpc": true,
"contract": true
},
"version": "1.0.0"
}# Executar todos os testes
npm test
# Executar com coverage
npm run test:coverage
# Executar em modo watch
npm run test:watch- Criar
Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist ./dist
EXPOSE 3000
CMD ["npm", "start"]- Build e run:
docker build -t apollo-backend .
docker run -p 3000:3000 --env-file .env apollo-backend- Build da aplicação:
npm run build-
Upload dos arquivos
dist/,package.jsone.env -
Instalar dependências no servidor:
npm ci --only=production- Iniciar aplicação:
npm start- Fork do projeto
- Criar branch (
git checkout -b feature/AmazingFeature) - Commit das mudanças (
git commit -m 'Add some AmazingFeature') - Push da branch (
git push origin feature/AmazingFeature) - Abrir Pull Request
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Para suporte e dúvidas:
- Abra uma issue no GitHub
- Entre em contato com a equipe Apollo
Desenvolvido com ❤️ pela equipe Apollo