mirror of
https://github.com/xtr-dev/rondevu-server.git
synced 2025-12-10 10:53:24 +00:00
Replace KV storage with D1, add peer_id field, simplify README
Storage changes: - Remove KV storage adapter - Add D1 storage adapter for Cloudflare Workers - Update schema to use peer_id instead of info field - Add database migrations for D1 Documentation: - Simplify README to be more concise - Update deployment instructions for D1 - Add D1_SETUP.md explaining migration from KV - Update DEPLOYMENT.md with D1 setup steps API changes: - Replace info field with peerId in session creation - Update all storage interfaces and implementations 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
24
src/app.ts
24
src/app.ts
@@ -67,8 +67,8 @@ export function createApp(storage: Storage, config: AppConfig) {
|
||||
return c.json({ error: 'Missing required parameter: topic' }, 400);
|
||||
}
|
||||
|
||||
if (topic.length > 256) {
|
||||
return c.json({ error: 'Topic string must be 256 characters or less' }, 400);
|
||||
if (topic.length > 1024) {
|
||||
return c.json({ error: 'Topic string must be 1024 characters or less' }, 400);
|
||||
}
|
||||
|
||||
const sessions = await storage.listSessionsByTopic(origin, topic);
|
||||
@@ -76,7 +76,7 @@ export function createApp(storage: Storage, config: AppConfig) {
|
||||
return c.json({
|
||||
sessions: sessions.map(s => ({
|
||||
code: s.code,
|
||||
info: s.info,
|
||||
peerId: s.peerId,
|
||||
offer: s.offer,
|
||||
offerCandidates: s.offerCandidates,
|
||||
createdAt: s.createdAt,
|
||||
@@ -92,29 +92,29 @@ export function createApp(storage: Storage, config: AppConfig) {
|
||||
/**
|
||||
* POST /:topic/offer
|
||||
* Creates a new offer and returns a unique session code
|
||||
* Body: { info: string, offer: string }
|
||||
* Body: { peerId: string, offer: string }
|
||||
*/
|
||||
app.post('/:topic/offer', async (c) => {
|
||||
try {
|
||||
const origin = c.req.header('Origin') || c.req.header('origin') || 'unknown';
|
||||
const topic = c.req.param('topic');
|
||||
const body = await c.req.json();
|
||||
const { info, offer } = body;
|
||||
const { peerId, offer, code: customCode } = body;
|
||||
|
||||
if (!topic || typeof topic !== 'string') {
|
||||
return c.json({ error: 'Missing or invalid required parameter: topic' }, 400);
|
||||
}
|
||||
|
||||
if (topic.length > 256) {
|
||||
return c.json({ error: 'Topic string must be 256 characters or less' }, 400);
|
||||
if (topic.length > 1024) {
|
||||
return c.json({ error: 'Topic string must be 1024 characters or less' }, 400);
|
||||
}
|
||||
|
||||
if (!info || typeof info !== 'string') {
|
||||
return c.json({ error: 'Missing or invalid required parameter: info' }, 400);
|
||||
if (!peerId || typeof peerId !== 'string') {
|
||||
return c.json({ error: 'Missing or invalid required parameter: peerId' }, 400);
|
||||
}
|
||||
|
||||
if (info.length > 1024) {
|
||||
return c.json({ error: 'Info string must be 1024 characters or less' }, 400);
|
||||
if (peerId.length > 1024) {
|
||||
return c.json({ error: 'PeerId string must be 1024 characters or less' }, 400);
|
||||
}
|
||||
|
||||
if (!offer || typeof offer !== 'string') {
|
||||
@@ -122,7 +122,7 @@ export function createApp(storage: Storage, config: AppConfig) {
|
||||
}
|
||||
|
||||
const expiresAt = Date.now() + config.sessionTimeout;
|
||||
const code = await storage.createSession(origin, topic, info, offer, expiresAt);
|
||||
const code = await storage.createSession(origin, topic, peerId, offer, expiresAt, customCode);
|
||||
|
||||
return c.json({ code }, 200);
|
||||
} catch (err) {
|
||||
|
||||
Reference in New Issue
Block a user