A decentralized music tracking and discovery platform built on AT Protocol 🎵

Merge branch 'main' into feat/feed-generator

+9 -4
+6 -3
apps/api/src/index.ts
··· 12 12 likeTrack, 13 13 unLikeTrack, 14 14 } from "lovedtracks/lovedtracks.service"; 15 + import dns from "node:dns"; 15 16 import { scrobbleTrack } from "nowplaying/nowplaying.service"; 16 17 import { rateLimiter } from "ratelimiter"; 17 18 import subscribe from "subscribers"; ··· 37 38 import usersApp from "./users/app"; 38 39 import webscrobbler from "./webscrobbler/app"; 39 40 41 + dns.setDefaultResultOrder("ipv4first"); 42 + 40 43 subscribe(ctx); 41 44 42 45 const app = new Hono(); ··· 47 50 rateLimiter({ 48 51 limit: 1000, 49 52 window: 30, // 👈 30 seconds 50 - }), 53 + }) 51 54 ); 52 55 53 56 app.use("*", async (c, next) => { ··· 162 165 ctx.redis.get(`nowplaying:${user.did}:status`), 163 166 ]); 164 167 return c.json( 165 - nowPlaying ? { ...JSON.parse(nowPlaying), is_playing: status === "1" } : {}, 168 + nowPlaying ? { ...JSON.parse(nowPlaying), is_playing: status === "1" } : {} 166 169 ); 167 170 }); 168 171 ··· 314 317 listeners: 1, 315 318 sha256: item.track.sha256, 316 319 id: item.scrobble.id, 317 - })), 320 + })) 318 321 ); 319 322 }); 320 323
+3 -1
apps/api/src/server.ts
··· 4 4 import express from "express"; 5 5 import { createProxyMiddleware } from "http-proxy-middleware"; 6 6 import { createServer } from "lexicon"; 7 + import dns from "node:dns"; 7 8 import API from "./xrpc"; 9 + dns.setDefaultResultOrder("ipv4first"); 8 10 9 11 const proxyMiddleware = createProxyMiddleware<Request, Response>({ 10 12 target: "http://localhost:8000", ··· 29 31 30 32 app.listen(process.env.ROCKSKY_XPRC_PORT || 3004, () => { 31 33 console.log( 32 - `Rocksky XRPC API is running on port ${process.env.ROCKSKY_XRPC_PORT || 3004}`, 34 + `Rocksky XRPC API is running on port ${process.env.ROCKSKY_XRPC_PORT || 3004}` 33 35 ); 34 36 });