From 0cc1553046fca2a1fdf2a73fd169e7c47ffc8ded Mon Sep 17 00:00:00 2001 From: Elliot Braem Date: Fri, 31 Jan 2025 18:29:16 -0700 Subject: [PATCH] rspack and hono --- backend/package.json | 61 ++-- backend/rspack.config.cjs | 43 +++ backend/src/index.ts | 367 ++++++++++++------------ backend/src/routes/test.ts | 26 +- backend/src/services/db/index.ts | 14 +- backend/src/services/db/operations.ts | 4 +- backend/src/services/db/queries.ts | 40 +-- backend/src/services/rss/queries.ts | 8 +- backend/src/services/twitter/client.ts | 2 +- backend/src/services/twitter/queries.ts | 16 +- backend/tsconfig.json | 2 +- bun.lockb | Bin 352664 -> 458520 bytes 12 files changed, 302 insertions(+), 281 deletions(-) create mode 100644 backend/rspack.config.cjs diff --git a/backend/package.json b/backend/package.json index e5a0a49..ba8913f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,57 +1,46 @@ { "name": "@curatedotfun/backend", "version": "0.0.1", - "packageManager": "bun@1.0.27", - "type": "module", "scripts": { - "build": "bun build ./src/index.ts --target=bun --outdir=dist --format=esm --external './src/external' && cp -r src/external dist/external/", - "start": "bun run dist/index.js", - "dev": "bun run --watch src/index.ts", - "test": "bun test", - "test:watch": "bun test --watch", - "db:generate": "bun drizzle-kit generate", - "db:migrate": "bun drizzle-kit migrate", - "db:push": "bun drizzle-kit push", - "db:pull": "bun drizzle-kit pull", - "db:check": "bun drizzle-kit check", - "db:up": "bun drizzle-kit up", - "db:studio": "bun drizzle-kit studio" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "build": "rspack build", + "start": "node dist/main.js", + "dev": "rspack serve --hot", + "test": "jest", + "test:watch": "jest --watch", + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:push": "drizzle-kit push", + "db:pull": "drizzle-kit pull", + "db:check": "drizzle-kit check", + "db:up": "drizzle-kit up", + "db:studio": "drizzle-kit studio" }, "devDependencies": { + "@module-federation/enhanced": "^0.8.9", + "@module-federation/node": "^2.6.22", + "@module-federation/runtime": "0.8.9", + "@module-federation/dts-plugin": "^0.8.9", + "@rspack/cli": "^1.2.2", + "@rspack/core": "^1.2.2", + "@types/better-sqlite3": "^7.6.9", + "@types/jest": "^29.5.12", "@types/ora": "^3.2.0", - "bun-types": "^1.1.43", "drizzle-kit": "^0.30.1", "jest": "^29.7.0", "jest-mock-extended": "^4.0.0-beta1", "ts-jest": "^29.2.5", - "ts-node": "^10.9.1", "typescript": "^5.3.3" }, "dependencies": { - "@elysiajs/cors": "^1.2.0", - "@elysiajs/static": "^1.2.0", - "@elysiajs/swagger": "^1.2.0", + "@hono/node-server": "^1.13.8", + "@hono/swagger-ui": "^0.5.0", + "@hono/zod-validator": "^0.4.2", "@libsql/client": "^0.14.0", - "@types/cors": "^2.8.17", "agent-twitter-client": "^0.0.16", - "cors": "^2.8.5", + "better-sqlite3": "^9.4.0", "dotenv": "^16.0.3", "drizzle-orm": "^0.38.3", - "elysia": "^1.2.10", - "elysia-helmet": "^2.0.0", - "express": "^4.18.2", + "hono": "^4.6.20", "ora": "^8.1.1", "winston": "^3.17.0", "winston-console-format": "^1.0.8" diff --git a/backend/rspack.config.cjs b/backend/rspack.config.cjs new file mode 100644 index 0000000..db42a2a --- /dev/null +++ b/backend/rspack.config.cjs @@ -0,0 +1,43 @@ +const { UniversalFederationPlugin } = require('@module-federation/node'); + +/** @type {import('@rspack/core').Configuration} */ +const config = { + target: 'async-node', + entry: { + main: './src/index.ts', + }, + output: { + publicPath: 'http://localhost:3001/', + library: { type: 'commonjs-module' }, + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: [/node_modules/], + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'typescript', + }, + }, + }, + type: 'javascript/auto', + }, + ], + }, + plugins: [ + new UniversalFederationPlugin({ + remoteType: 'script', + isServer: true, + name: 'host', + useRuntimePlugin: true, + }) + ], + resolve: { + extensions: ['.ts', '.js'], + } +}; + +module.exports = config; diff --git a/backend/src/index.ts b/backend/src/index.ts index 0fc5ac6..0d7ad2d 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,10 +1,13 @@ -import { cors } from "@elysiajs/cors"; -import { staticPlugin } from "@elysiajs/static"; -import { swagger } from "@elysiajs/swagger"; +import { Hono } from "hono"; +import { cors } from "hono/cors"; +import { logger as honoLogger } from "hono/logger"; +import { secureHeaders } from "hono/secure-headers"; +import { serve } from "@hono/node-server"; +import { serveStatic } from "@hono/node-server/serve-static"; +import { swaggerUI } from "@hono/swagger-ui"; import dotenv from "dotenv"; -import { Elysia } from "elysia"; -import { helmet } from "elysia-helmet"; import path from "path"; +import { promises as fs } from "fs"; import configService, { validateEnv } from "./config/config"; import RssPlugin from "./external/rss"; import { db } from "./services/db"; @@ -87,198 +90,184 @@ export async function main() { // Initialize server startSpinner("server", "Starting server..."); - const app = new Elysia() - .use( - helmet({ - contentSecurityPolicy: { - directives: { - defaultSrc: ["'self'"], - imgSrc: ["'self'", "data:", "https:"], - fontSrc: ["'self'", "data:", "https:"], - }, - }, - crossOriginEmbedderPolicy: false, - crossOriginResourcePolicy: { policy: "cross-origin" }, - xFrameOptions: { action: "sameorigin" }, - }), - ) - .use( - cors({ - origin: ALLOWED_ORIGINS, - methods: ["GET", "POST"], - }), - ) - .use(swagger()) - // Include test routes in development - .use(process.env.NODE_ENV === "development" ? testRoutes : new Elysia()) - .get("/health", () => new Response("OK", { status: 200 })) + const app = new Hono(); + + // Middleware + app.use("*", honoLogger()); + app.use("*", cors({ + origin: ALLOWED_ORIGINS, + allowMethods: ["GET", "POST"], + })); + app.use("*", secureHeaders({ + contentSecurityPolicy: { + defaultSrc: ["'self'"], + imgSrc: ["'self'", "data:", "https:"], + fontSrc: ["'self'", "data:", "https:"], + }, + crossOriginEmbedderPolicy: false, + crossOriginResourcePolicy: "cross-origin", + xFrameOptions: "sameorigin", + })); + + // Swagger UI + app.use("/swagger/*", swaggerUI({ url: "/api/swagger.json" })); + + // Include test routes in development + if (process.env.NODE_ENV === "development") { + app.route("/", testRoutes); + } + + app.get("/health", (c) => c.text("OK", 200)) // API Routes - .get("/api/twitter/last-tweet-id", () => { - if (!twitterService) { - throw new Error("Twitter service not available"); - } - const lastTweetId = twitterService.getLastCheckedTweetId(); - return { lastTweetId }; - }) - .post( - "/api/twitter/last-tweet-id", - async ({ body }: { body: { tweetId: string } }) => { - if (!twitterService) { - throw new Error("Twitter service not available"); - } - if ( - !body?.tweetId || - typeof body.tweetId !== "string" || - !body.tweetId.match(/^\d+$/) - ) { - throw new Error("Invalid tweetId format"); - } - await twitterService.setLastCheckedTweetId(body.tweetId); - return { success: true }; - }, - ) - .get( - "/api/submission/:submissionId", - ({ - params: { submissionId }, - }: { - params: { submissionId: string }; - }) => { - const content = db.getSubmission(submissionId); - if (!content) { - throw new Error(`Content not found: ${submissionId}`); - } - return content; - }, - ) - .get("/api/submissions", () => { - return db.getAllSubmissions(); - }) - .get( - "/api/submissions/:feedId", - ({ params: { feedId } }: { params: { feedId: string } }) => { - const config = configService.getConfig(); - const feed = config.feeds.find( - (f) => f.id.toLowerCase() === feedId.toLowerCase(), - ); - if (!feed) { - throw new Error(`Feed not found: ${feedId}`); - } - return db.getSubmissionsByFeed(feedId); - }, - ) - .get( - "/api/feed/:feedId", - ({ params: { feedId } }: { params: { feedId: string } }) => { - const config = configService.getConfig(); - const feed = config.feeds.find( - (f) => f.id.toLowerCase() === feedId.toLowerCase(), - ); - if (!feed) { - throw new Error(`Feed not found: ${feedId}`); - } + app.get("/api/twitter/last-tweet-id", async (c) => { + if (!twitterService) { + throw new Error("Twitter service not available"); + } + const lastTweetId = twitterService.getLastCheckedTweetId(); + return c.json({ lastTweetId }); + }) + app.post("/api/twitter/last-tweet-id", async (c) => { + if (!twitterService) { + throw new Error("Twitter service not available"); + } + const body = await c.req.json(); + if ( + !body?.tweetId || + typeof body.tweetId !== "string" || + !body.tweetId.match(/^\d+$/) + ) { + throw new Error("Invalid tweetId format"); + } + await twitterService.setLastCheckedTweetId(body.tweetId); + return c.json({ success: true }); + }) + app.get("/api/submission/:submissionId", (c) => { + const submissionId = c.req.param("submissionId"); + const content = db.getSubmission(submissionId); + if (!content) { + throw new Error(`Content not found: ${submissionId}`); + } + return c.json(content); + }) + app.get("/api/submissions", (c) => { + return c.json(db.getAllSubmissions()); + }) + app.get("/api/submissions/:feedId", (c) => { + const feedId = c.req.param("feedId"); + const config = configService.getConfig(); + const feed = config.feeds.find( + (f) => f.id.toLowerCase() === feedId.toLowerCase(), + ); + if (!feed) { + throw new Error(`Feed not found: ${feedId}`); + } + return c.json(db.getSubmissionsByFeed(feedId)); + }) + app.get("/api/feed/:feedId", (c) => { + const feedId = c.req.param("feedId"); + const config = configService.getConfig(); + const feed = config.feeds.find( + (f) => f.id.toLowerCase() === feedId.toLowerCase(), + ); + if (!feed) { + throw new Error(`Feed not found: ${feedId}`); + } + return c.json(db.getSubmissionsByFeed(feedId)); + }) + app.get("/api/config", async (c) => { + const rawConfig = await configService.getRawConfig(); + return c.json(rawConfig); + }) + app.get("/api/feeds", async (c) => { + const rawConfig = await configService.getRawConfig(); + return c.json(rawConfig.feeds); + }) + app.get("/api/config/:feedId", (c) => { + const feedId = c.req.param("feedId"); + const config = configService.getConfig(); + const feed = config.feeds.find((f) => f.id === feedId); + if (!feed) { + throw new Error(`Feed not found: ${feedId}`); + } + return c.json(feed); + }) + app.get("/plugin/rss/:feedId", (c) => { + const feedId = c.req.param("feedId"); + if (!distributionService) { + throw new Error("Distribution service not available"); + } + const rssPlugin = distributionService.getPlugin("rss"); + if (!rssPlugin || !(rssPlugin instanceof RssPlugin)) { + throw new Error("RSS plugin not found or invalid"); + } - return db.getSubmissionsByFeed(feedId); - }, - ) - .get("/api/config", async () => { - const rawConfig = await configService.getRawConfig(); - return rawConfig; - }) - .get("/api/feeds", async () => { - const rawConfig = await configService.getRawConfig(); - return rawConfig.feeds; - }) - .get( - "/api/config/:feedId", - ({ params: { feedId } }: { params: { feedId: string } }) => { - const config = configService.getConfig(); - const feed = config.feeds.find((f) => f.id === feedId); - if (!feed) { - throw new Error(`Feed not found: ${feedId}`); - } - return feed; - }, - ) - .get( - "/plugin/rss/:feedId", - ({ params: { feedId } }: { params: { feedId: string } }) => { - if (!distributionService) { - throw new Error("Distribution service not available"); - } - const rssPlugin = distributionService.getPlugin("rss"); - if (!rssPlugin || !(rssPlugin instanceof RssPlugin)) { - throw new Error("RSS plugin not found or invalid"); - } + const service = rssPlugin.getServices().get(feedId); + if (!service) { + throw new Error("RSS service not initialized for this feed"); + } - const service = rssPlugin.getServices().get(feedId); - if (!service) { - throw new Error("RSS service not initialized for this feed"); - } + return c.json(service.getItems()); + }) + // app.post("/api/feeds/:feedId/process", async (c) => { + // const feedId = c.req.param("feedId"); + // // Get feed config + // const config = configService.getConfig(); + // const feed = config.feeds.find((f) => f.id === feedId); + // if (!feed) { + // throw new Error(`Feed not found: ${feedId}`); + // } - return service.getItems(); - }, - ) - // .post( - // "/api/feeds/:feedId/process", - // async ({ params: { feedId } }: { params: { feedId: string } }) => { - // // Get feed config - // const config = configService.getConfig(); - // const feed = config.feeds.find((f) => f.id === feedId); - // if (!feed) { - // throw new Error(`Feed not found: ${feedId}`); - // } + // // Get approved submissions for this feed + // const submissions = db + // .getSubmissionsByFeed(feedId) + // .filter((sub) => + // db + // .getFeedsBySubmission(sub.tweetId) + // .some((feed) => feed.status === "approved"), + // ); - // // Get approved submissions for this feed - // const submissions = db - // .getSubmissionsByFeed(feedId) - // .filter((sub) => - // db - // .getFeedsBySubmission(sub.tweetId) - // .some((feed) => feed.status === "approved"), - // ); + // if (submissions.length === 0) { + // return c.json({ processed: 0 }); + // } - // if (submissions.length === 0) { - // return { processed: 0 }; - // } + // // Process each submission through stream output + // let processed = 0; + // if (!distributionService) { + // throw new Error("Distribution service not available"); + // } + // for (const submission of submissions) { + // try { + // await distributionService.processStreamOutput( + // feedId, + // submission.tweetId, + // submission.content, + // ); + // processed++; + // } catch (error) { + // logger.error( + // `Error processing submission ${submission.tweetId}:`, + // error, + // ); + // } + // } - // // Process each submission through stream output - // let processed = 0; - // if (!distributionService) { - // throw new Error("Distribution service not available"); - // } - // for (const submission of submissions) { - // try { - // await distributionService.processStreamOutput( - // feedId, - // submission.tweetId, - // submission.content, - // ); - // processed++; - // } catch (error) { - // logger.error( - // `Error processing submission ${submission.tweetId}:`, - // error, - // ); - // } - // } + // return c.json({ processed }); + // }); + // Serve static files + app.use("/*", serveStatic({ root: FRONTEND_DIST_PATH })); + + // Serve index.html for all other routes (SPA fallback) + app.get("/*", async (c) => { + const content = await fs.readFile(`${FRONTEND_DIST_PATH}/index.html`, 'utf-8'); + return c.html(content); + }); - // return { processed }; - // }, - // ) - // This was the most annoying thing to set up and debug. Serves our frontend and handles routing. alwaysStatic is essential. - .use( - staticPlugin({ - assets: FRONTEND_DIST_PATH, - prefix: "/", - alwaysStatic: true, - }), - ) - .get("/*", () => Bun.file(`${FRONTEND_DIST_PATH}/index.html`)) - .listen({ - port: PORT, - hostname: "0.0.0.0", - }); + // Start the server + serve({ + fetch: app.fetch.bind(app), + port: PORT, + hostname: "0.0.0.0" + }); succeedSpinner("server", `Server running on port ${PORT}`); diff --git a/backend/src/routes/test.ts b/backend/src/routes/test.ts index 58dcd50..3bfa2a9 100644 --- a/backend/src/routes/test.ts +++ b/backend/src/routes/test.ts @@ -1,5 +1,5 @@ import { Tweet } from "agent-twitter-client"; -import { Elysia } from "elysia"; +import { Hono } from "hono"; import { MockTwitterService } from "../__tests__/mocks/twitter-service.mock"; // Create a single mock instance to maintain state @@ -29,16 +29,16 @@ const createTweet = ( }; }; -export const testRoutes = new Elysia({ prefix: "/api/test" }) - .guard({ - beforeHandle: ({ request }) => { - // Only allow in development and test environments - if (process.env.NODE_ENV === "production") { - return new Response("Not found", { status: 404 }); - } - }, +export const testRoutes = new Hono() + .use("/api/test/*", async (c, next) => { + // Only allow in development and test environments + if (process.env.NODE_ENV === "production") { + return c.text("Not found", 404); + } + await next(); }) - .post("/tweets", async ({ body }) => { + .post("/api/test/tweets", async (c) => { + const body = await c.req.json(); const { id, text, username, inReplyToStatusId, hashtags } = body as { id: string; text: string; @@ -48,11 +48,11 @@ export const testRoutes = new Elysia({ prefix: "/api/test" }) }; const tweet = createTweet(id, text, username, inReplyToStatusId, hashtags); mockTwitterService.addMockTweet(tweet); - return tweet; + return c.json(tweet); }) - .post("/reset", () => { + .post("/api/test/reset", (c) => { mockTwitterService.clearMockTweets(); - return { success: true }; + return c.json({ success: true }); }); // Export for use in tests and for replacing the real service diff --git a/backend/src/services/db/index.ts b/backend/src/services/db/index.ts index fccc27b..f93e2eb 100644 --- a/backend/src/services/db/index.ts +++ b/backend/src/services/db/index.ts @@ -1,8 +1,8 @@ -import { Database } from "bun:sqlite"; -import { BunSQLiteDatabase, drizzle } from "drizzle-orm/bun-sqlite"; +import Database from "better-sqlite3"; +import { BetterSQLite3Database, drizzle } from "drizzle-orm/better-sqlite3"; import { join } from "node:path"; -import { logger } from "utils/logger"; +import { logger } from "../../utils/logger"; import { DBOperations } from "./operations"; import * as queries from "./queries"; @@ -14,19 +14,19 @@ import { TwitterCookie, TwitterSubmission, SubmissionStatus, -} from "types/twitter"; +} from "../../types/twitter"; import * as rssQueries from "../rss/queries"; import * as twitterQueries from "../twitter/queries"; export class DatabaseService { - private db: BunSQLiteDatabase; + private db: BetterSQLite3Database; private operations: DBOperations; private static readonly DB_PATH = process.env.DATABASE_URL?.replace("file:", "") || join(".db", "submissions.sqlite"); constructor() { - const sqlite = new Database(DatabaseService.DB_PATH, { create: true }); - this.db = drizzle(sqlite); + const sqlite = new Database(DatabaseService.DB_PATH); + this.db = drizzle(sqlite, { logger: process.env.NODE_ENV === "development" }); this.operations = new DBOperations(this.db); } diff --git a/backend/src/services/db/operations.ts b/backend/src/services/db/operations.ts index 616a10c..6913868 100644 --- a/backend/src/services/db/operations.ts +++ b/backend/src/services/db/operations.ts @@ -1,4 +1,4 @@ -import { BunSQLiteDatabase } from "drizzle-orm/bun-sqlite"; +import { BetterSQLite3Database } from "drizzle-orm/better-sqlite3"; import { RssItem, saveRssItem, @@ -8,7 +8,7 @@ import { // These are made available for plugins export class DBOperations { - constructor(private db: BunSQLiteDatabase) {} + constructor(private db: BetterSQLite3Database) {} // RSS Operations saveRssItem(feedId: string, item: RssItem): void { diff --git a/backend/src/services/db/queries.ts b/backend/src/services/db/queries.ts index 03ed5b9..fdf1778 100644 --- a/backend/src/services/db/queries.ts +++ b/backend/src/services/db/queries.ts @@ -1,12 +1,12 @@ import { and, eq, sql } from "drizzle-orm"; -import { BunSQLiteDatabase } from "drizzle-orm/bun-sqlite"; +import { BetterSQLite3Database } from "drizzle-orm/better-sqlite3"; import { SubmissionFeed, Moderation, TwitterSubmission, SubmissionStatus, TwitterSubmissionWithFeedData, -} from "types/twitter"; +} from "../../types/twitter"; import { feedPlugins, feeds, @@ -18,7 +18,7 @@ import { import { DbQueryResult, DbFeedQueryResult } from "./types"; export function upsertFeeds( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, feedsToUpsert: { id: string; name: string; description?: string }[], ) { return db.transaction(() => { @@ -43,7 +43,7 @@ export function upsertFeeds( } export function saveSubmissionToFeed( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, submissionId: string, feedId: string, status: SubmissionStatus = SubmissionStatus.PENDING, @@ -59,7 +59,7 @@ export function saveSubmissionToFeed( } export function getFeedsBySubmission( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, submissionId: string, ): SubmissionFeed[] { const results = db @@ -73,14 +73,14 @@ export function getFeedsBySubmission( .where(eq(submissionFeeds.submissionId, submissionId)) .all(); - return results.map((result) => ({ + return results.map((result: any) => ({ ...result, moderationResponseTweetId: result.moderationResponseTweetId ?? undefined, })); } export function saveSubmission( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, submission: TwitterSubmission, ) { return db.insert(submissions).values({ @@ -98,7 +98,7 @@ export function saveSubmission( } export function saveModerationAction( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, moderation: Moderation, ) { return db.insert(moderationHistory).values({ @@ -112,7 +112,7 @@ export function saveModerationAction( } export function getModerationHistory( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, tweetId: string, ): Moderation[] { const results = db @@ -137,7 +137,7 @@ export function getModerationHistory( .orderBy(moderationHistory.createdAt) .all(); - return results.map((result) => ({ + return results.map((result: any) => ({ tweetId: result.tweetId, feedId: result.feedId, adminId: result.adminId, @@ -149,7 +149,7 @@ export function getModerationHistory( } export function updateSubmissionFeedStatus( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, submissionId: string, feedId: string, status: SubmissionStatus, @@ -171,7 +171,7 @@ export function updateSubmissionFeedStatus( } export function getSubmission( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, tweetId: string, ): TwitterSubmission | null { const results = db @@ -244,7 +244,7 @@ export function getSubmission( }; } -export function getAllSubmissions(db: BunSQLiteDatabase): TwitterSubmission[] { +export function getAllSubmissions(db: BetterSQLite3Database): TwitterSubmission[] { const results = db .select({ s: { @@ -323,7 +323,7 @@ export function getAllSubmissions(db: BunSQLiteDatabase): TwitterSubmission[] { } export function cleanupOldSubmissionCounts( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, date: string, ) { return db @@ -332,7 +332,7 @@ export function cleanupOldSubmissionCounts( } export function getDailySubmissionCount( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, userId: string, date: string, ): number { @@ -351,7 +351,7 @@ export function getDailySubmissionCount( } export function incrementDailySubmissionCount( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, userId: string, ) { const today = new Date().toISOString().split("T")[0]; @@ -376,7 +376,7 @@ export function incrementDailySubmissionCount( } export function removeFromSubmissionFeed( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, submissionId: string, feedId: string, ) { @@ -392,7 +392,7 @@ export function removeFromSubmissionFeed( // Feed Plugin queries export function getFeedPlugin( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, feedId: string, pluginId: string, ) { @@ -406,7 +406,7 @@ export function getFeedPlugin( } export function upsertFeedPlugin( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, feedId: string, pluginId: string, config: Record, @@ -428,7 +428,7 @@ export function upsertFeedPlugin( } export function getSubmissionsByFeed( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, feedId: string, ): (TwitterSubmission & { status: SubmissionStatus; diff --git a/backend/src/services/rss/queries.ts b/backend/src/services/rss/queries.ts index dcfab3e..d6cef47 100644 --- a/backend/src/services/rss/queries.ts +++ b/backend/src/services/rss/queries.ts @@ -1,5 +1,5 @@ import { and, eq, sql } from "drizzle-orm"; -import { BunSQLiteDatabase } from "drizzle-orm/bun-sqlite"; +import { BetterSQLite3Database } from "drizzle-orm/better-sqlite3"; import { rssItems } from "./schema"; export interface RssItem { @@ -11,7 +11,7 @@ export interface RssItem { } export function saveRssItem( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, feedId: string, item: RssItem, ) { @@ -26,7 +26,7 @@ export function saveRssItem( } export function getRssItems( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, feedId: string, limit: number = 100, ): RssItem[] { @@ -48,7 +48,7 @@ export function getRssItems( } export function deleteOldRssItems( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, feedId: string, limit: number = 100, ) { diff --git a/backend/src/services/twitter/client.ts b/backend/src/services/twitter/client.ts index 0243dd4..4d02b6f 100644 --- a/backend/src/services/twitter/client.ts +++ b/backend/src/services/twitter/client.ts @@ -1,5 +1,5 @@ import { Scraper, SearchMode, Tweet } from "agent-twitter-client"; -import { TwitterCookie } from "types/twitter"; +import { TwitterCookie } from "../../types/twitter"; import { logger } from "../../utils/logger"; import { db } from "../db"; diff --git a/backend/src/services/twitter/queries.ts b/backend/src/services/twitter/queries.ts index 8b91788..787fed1 100644 --- a/backend/src/services/twitter/queries.ts +++ b/backend/src/services/twitter/queries.ts @@ -1,9 +1,9 @@ import { eq } from "drizzle-orm"; import { twitterCache, twitterCookies } from "./schema"; -import { BunSQLiteDatabase } from "drizzle-orm/bun-sqlite"; +import { BetterSQLite3Database } from "drizzle-orm/better-sqlite3"; // Twitter Cookie Management -export function getTwitterCookies(db: BunSQLiteDatabase, username: string) { +export function getTwitterCookies(db: BetterSQLite3Database, username: string) { return db .select() .from(twitterCookies) @@ -12,7 +12,7 @@ export function getTwitterCookies(db: BunSQLiteDatabase, username: string) { } export function setTwitterCookies( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, username: string, cookiesJson: string, ) { @@ -31,17 +31,17 @@ export function setTwitterCookies( }); } -export function deleteTwitterCookies(db: BunSQLiteDatabase, username: string) { +export function deleteTwitterCookies(db: BetterSQLite3Database, username: string) { return db.delete(twitterCookies).where(eq(twitterCookies.username, username)); } // Twitter Cache Management -export function getTwitterCacheValue(db: BunSQLiteDatabase, key: string) { +export function getTwitterCacheValue(db: BetterSQLite3Database, key: string) { return db.select().from(twitterCache).where(eq(twitterCache.key, key)).get(); } export function setTwitterCacheValue( - db: BunSQLiteDatabase, + db: BetterSQLite3Database, key: string, value: string, ) { @@ -60,10 +60,10 @@ export function setTwitterCacheValue( }); } -export function deleteTwitterCacheValue(db: BunSQLiteDatabase, key: string) { +export function deleteTwitterCacheValue(db: BetterSQLite3Database, key: string) { return db.delete(twitterCache).where(eq(twitterCache.key, key)); } -export function clearTwitterCache(db: BunSQLiteDatabase) { +export function clearTwitterCache(db: BetterSQLite3Database) { return db.delete(twitterCache); } diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 2e6c2a8..3f90201 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -19,5 +19,5 @@ "types": ["bun-types"] }, "include": ["src/**/*"], - "exclude": ["node_modules", "dist", "tests"] + "exclude": ["node_modules", "dist", "tests"], } diff --git a/bun.lockb b/bun.lockb index 3bd94612b10c30dbd08a2cef2f47ac565fdd61d2..5da0480077036cdeda4a298d86269e228b359b65 100755 GIT binary patch delta 99494 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
23Te1GCm8mc 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 delta 35570 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