diff --git a/.gitignore b/.gitignore index 87e5610..f20c375 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ yarn-error.log* # vercel .vercel +.turbo **/*.trace **/*.zip @@ -39,4 +40,4 @@ yarn-error.log* **/*.tgz **/*.log package-lock.json -**/*.bun \ No newline at end of file +**/*.bun diff --git a/apps/aqua/.drizzle/0000_same_maelstrom.sql b/apps/aqua/.drizzle/0000_same_maelstrom.sql new file mode 100644 index 0000000..362ed56 --- /dev/null +++ b/apps/aqua/.drizzle/0000_same_maelstrom.sql @@ -0,0 +1,17 @@ +CREATE TABLE `auth_session` ( + `key` text PRIMARY KEY NOT NULL, + `session` text NOT NULL +); +--> statement-breakpoint +CREATE TABLE `auth_state` ( + `key` text PRIMARY KEY NOT NULL, + `state` text NOT NULL +); +--> statement-breakpoint +CREATE TABLE `status` ( + `uri` text PRIMARY KEY NOT NULL, + `authorDid` text NOT NULL, + `status` text NOT NULL, + `createdAt` text NOT NULL, + `indexedAt` text NOT NULL +); diff --git a/apps/aqua/.drizzle/meta/0000_snapshot.json b/apps/aqua/.drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..283d37a --- /dev/null +++ b/apps/aqua/.drizzle/meta/0000_snapshot.json @@ -0,0 +1,111 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "417cce08-b23b-4a9f-ad7e-e96215e0fb38", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "auth_session": { + "name": "auth_session", + "columns": { + "key": { + "name": "key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "session": { + "name": "session", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "auth_state": { + "name": "auth_state", + "columns": { + "key": { + "name": "key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "state": { + "name": "state", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "status": { + "name": "status", + "columns": { + "uri": { + "name": "uri", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "authorDid": { + "name": "authorDid", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "indexedAt": { + "name": "indexedAt", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/apps/aqua/.drizzle/meta/_journal.json b/apps/aqua/.drizzle/meta/_journal.json new file mode 100644 index 0000000..0c09298 --- /dev/null +++ b/apps/aqua/.drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1729467718506, + "tag": "0000_same_maelstrom", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/apps/aqua/.env b/apps/aqua/.env new file mode 100644 index 0000000..5195c4e --- /dev/null +++ b/apps/aqua/.env @@ -0,0 +1,11 @@ +PRIVATE_KEY_1={"kty":"EC","d":"8rx-D2vaik7FgRUaMeK_M8yZQ57J5NFs4MP6300_gek","use":"sig","crv":"P-256","kid":"44J2ZYr_4O3wp1B8GSRPvHMb7Cf506Nss3ISOplRx9I","x":"f9RLs9sqKyL38dPKsQaX-P_qTHVnNRCXuzkjbPvh7Ls","y":"ZnH5GuTAl5TTb-hZzsVgf1kUl4OB6qCS0PmM4_SPXvw","alg":"ES256"} +PRIVATE_KEY_2={"kty":"EC","d":"5Rk8UuCz-chUX_OZ4WgB7lb3OELn-xlGEedk4P-qY_M","use":"sig","crv":"P-256","kid":"kzDrzoJdNtK3bfTiuJYQZSk_Z7nsZqEpzqYSqHVBN_Q","x":"WuMNQ3slMhmvUJze-q4pxmC_Xqu5MkpkD3eSh1dPDBs","y":"0CS96lObk2UWnRbbrhQQDbduyZ_A4zKZtwSQTfqVkcU","alg":"ES256"} +PRIVATE_KEY_3={"kty":"EC","d":"GvpzAoGaHCG3OFe8qqi8FRs3WShGvS8OAOhjcN2vyuQ","use":"sig","crv":"P-256","kid":"y0HFLgCqOSwfbRJdO48dM8prLrLrT-qxNs_UrdvrbNQ","x":"VJ13t663tWZa67wUNQw26iU9iatIg4ZIklNKOrqMiYw","y":"Fqyc7qiOfwaYDXO259G8T66Wg2Kf_WLEjyi0ZenX2pI","alg":"ES256"} +NODE_ENV=development # Options: development, production +PORT=3000 # The port your server will listen on +HOST=localhost # Hostname for the server +PUBLIC_URL= # Set when deployed publicly, e.g. "https://mysite.com". Informs OAuth client id. +DB_PATH=:memory: # The SQLite database path. Leave as ":memory:" to use a temporary in-memory database. +# Secrets +# Must set this in production. May be generated with `openssl rand -base64 33`=undefined +# COOKIE_SECRET="" diff --git a/apps/aqua/bun.lockb b/apps/aqua/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d471a103ac0df60256964d982530cc143d6ea321 GIT binary patch literal 175837 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/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%0A(*weF!z-M8 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 literal 0 HcmV?d00001 diff --git a/apps/aqua/db/schema.ts b/apps/aqua/db/schema.ts new file mode 100644 index 0000000..ee01b78 --- /dev/null +++ b/apps/aqua/db/schema.ts @@ -0,0 +1,55 @@ +import { defineConfig } from "drizzle-kit"; +import { sqliteTable, text } from "drizzle-orm/sqlite-core"; + +export default defineConfig({ + dialect: "sqlite", // 'mysql' | 'postgresql' | 'sqlite' | 'turso' + schema: "./src/db/schema.ts", +}); + +export type DatabaseSchema = { + status: Status; + auth_session: AuthSession; + auth_state: AuthState; +}; + +export type Status = { + uri: string; + authorDid: string; + status: string; + createdAt: string; + indexedAt: string; +}; + +export type AuthSession = { + key: string; + session: AuthSessionJson; +}; + +export type AuthState = { + key: string; + state: AuthStateJson; +}; + +type AuthStateJson = string; + +type AuthSessionJson = string; + +// Tables + +export const status = sqliteTable("status", { + uri: text().primaryKey(), + authorDid: text().notNull(), + status: text().notNull(), + createdAt: text().notNull(), + indexedAt: text().notNull(), +}); + +export const authSession = sqliteTable("auth_session", { + key: text().primaryKey(), + session: text().notNull(), +}); + +export const authState = sqliteTable("auth_state", { + key: text().primaryKey(), + state: text().notNull(), +}); diff --git a/apps/aqua/drizzle.config.ts b/apps/aqua/drizzle.config.ts new file mode 100644 index 0000000..98e00b7 --- /dev/null +++ b/apps/aqua/drizzle.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "drizzle-kit"; +import process from "node:process"; + +export default defineConfig({ + dialect: "sqlite", + schema: "./db/schema.ts", + out: "./.drizzle", + casing: "snake_case", + dbCredentials: { + url: process.env.DATABASE_URL ?? "./db.sqlite", + }, +}); diff --git a/apps/aqua/package.json b/apps/aqua/package.json new file mode 100644 index 0000000..3ce5259 --- /dev/null +++ b/apps/aqua/package.json @@ -0,0 +1,60 @@ +{ + "name": "@teal/aqua", + "type": "module", + "version": "1.0.50", + "main": "index.ts", + "packageManager": "bun@1.0.0+", + "scripts": { + "dev": "tsx watch --clear-screen=false src/index.ts | pino-pretty", + "bun:dev": "bun run src/index.ts | pino-pretty", + "build": "tsup", + "start": "node dist/index.js", + "lexgen": "lex gen-server ./src/lexicon ./lexicons/*", + "clean": "rimraf dist coverage", + "check-types": "tsc --noEmit", + "db:migrate": "drizzle-kit migrate", + "db:seed": "drizzle-kit seed", + "db:studio": "drizzle-kit studio" + }, + "dependencies": { + "@atproto/api": "^0.13.14", + "@atproto/common": "^0.4.4", + "@atproto/identity": "^0.4.2", + "@atproto/lexicon": "^0.4.2", + "@atproto/oauth-client-node": "^0.1.4", + "@atproto/sync": "^0.1.4", + "@atproto/syntax": "^0.3.0", + "@atproto/xrpc-server": "^0.6.4", + "@hono/node-server": "^1.13.4", + "@libsql/client": "^0.14.0", + "dotenv": "^16.4.5", + "drizzle-orm": "^0.35.3", + "envalid": "^8.0.0", + "hono": "^4.6.8", + "jose": "^5.9.6", + "pino": "^9.5.0", + "turbo": "^2.2.3", + "uhtml": "^4.5.11" + }, + "devDependencies": { + "@teal/tsconfig": "*", + "@atproto/lex-cli": "^0.4.1", + "@types/node": "^20.17.5", + "drizzle-kit": "^0.26.2", + "pino-pretty": "^11.3.0", + "rimraf": "^6.0.1", + "tsup": "^8.3.5", + "tsx": "^4.19.2", + "typescript": "^5.6.3" + }, + "tsup": { + "entry": [ + "src", + "!src/**/__tests__/**", + "!src/**/*.test.*" + ], + "splitting": false, + "sourcemap": true, + "clean": true + } +} diff --git a/apps/aqua/scripts/generateJWKS.ts b/apps/aqua/scripts/generateJWKS.ts new file mode 100644 index 0000000..03058e1 --- /dev/null +++ b/apps/aqua/scripts/generateJWKS.ts @@ -0,0 +1,31 @@ +import { generateKeyPair, exportJWK } from "jose"; +import { randomBytes } from "crypto"; + +// Function to create JWKS and append to .env file +async function createJWKS() { + const jwks: any = { keys: [] }; + + for (let i = 0; i < 3; i++) { + // Generate a new key pair + // const alg = "ES256"; + // const { publicKey, privateKey } = await generateKeyPair(alg, { + // extractable: true, + // }); + // // Export the key pair as a JWK + // const jwk = await exportJWK(privateKey); + // jwk.kid = randomBytes(16).toString("hex"); + // jwk.alg = alg; + // jwks.keys.push(jwk); + + // TODO: replace this ASAP if in prod + let res = await fetch( + "https://mkjwk.org/jwk/ec?alg=ES256&use=sig&gen=sha256&crv=P-256", + ); + let jwk_res = await res.json(); + let jwk = jwk_res.jwk; + console.log("PRIVATE_KEY_" + (i + 1) + "=" + JSON.stringify(jwk)); + } +} + +// Execute the function +createJWKS().catch(console.error); diff --git a/apps/aqua/src/auth/client.ts b/apps/aqua/src/auth/client.ts new file mode 100644 index 0000000..352edd8 --- /dev/null +++ b/apps/aqua/src/auth/client.ts @@ -0,0 +1,28 @@ +import { NodeOAuthClient } from "@atproto/oauth-client-node"; +import type { Database } from "@/db"; +import { env } from "@/lib/env"; +import { SessionStore, StateStore } from "./storage"; + +export const createClient = async (db: Database) => { + const publicUrl = env.PUBLIC_URL; + const url = publicUrl || `http://127.0.0.1:${env.PORT}`; + const enc = encodeURIComponent; + return new NodeOAuthClient({ + clientMetadata: { + client_name: "Teal", + client_id: publicUrl + ? `${url}/client-metadata.json` + : `http://localhost?redirect_uri=${enc(`${url}/oauth/callback`)}&scope=${enc("atproto transition:generic")}`, + client_uri: url, + redirect_uris: [`${url}/oauth/callback`], + scope: "atproto transition:generic", + grant_types: ["authorization_code", "refresh_token"], + response_types: ["code"], + application_type: "web", + token_endpoint_auth_method: "none", + dpop_bound_access_tokens: true, + }, + stateStore: new StateStore(db), + sessionStore: new SessionStore(db), + }); +}; diff --git a/apps/aqua/src/auth/router.ts b/apps/aqua/src/auth/router.ts new file mode 100644 index 0000000..e6dacca --- /dev/null +++ b/apps/aqua/src/auth/router.ts @@ -0,0 +1,82 @@ +import { createClient } from "./client"; +import { db } from "@/db"; +import { EnvWithCtx, TealContext } from "@/ctx"; +import { authSession } from "../../db/schema"; +import { Hono } from "hono"; + +interface LoginBody { + handle?: string; +} + +export const login = async (c: TealContext) => { + let body: LoginBody = await c.req.json(); + // Initiate the OAuth flow + const auth = await createClient(db); + if (!body) return Response.json({ error: "Could not parse body" }); + // handle is the handle of the user + if (!body.handle && body.handle === undefined) + return Response.json({ error: "Handle is required" }); + try { + const url = await auth.authorize(body.handle, { + scope: "atproto transition:generic", + state: crypto.randomUUID(), + }); + return Response.json({ redirect_to: url }); + } catch (e) { + console.error(e); + return Response.json({ error: "Could not authorize user" }); + } +}; + +export async function loginGet(handle: string) { + // Initiate the OAuth flow + const auth = await createClient(db); + try { + const url = await auth.authorize("natalie.sh", { + scope: "atproto transition:generic", + }); + return Response.redirect(url); + } catch (e) { + console.error(e); + return Response.json({ error: "Could not authorize user" }); + } +} + +export async function callback(c: TealContext) { + // Initiate the OAuth flow + const auth = await createClient(db); + try { + const honoParams = c.req.query(); + console.log("params", honoParams); + const params = new URLSearchParams(honoParams); + const cb = await auth.callback(params); + + // generate a session key (random) + + const sessionKey = crypto.randomUUID(); + + // insert in session table, return data from cb + + c.var.db.insert(authSession).values({ + key: sessionKey, + session: JSON.stringify(cb.session), + }); + + return Response.json(cb); + } catch (e) { + console.error(e); + return Response.json({ error: "Could not authorize user" }); + } +} + +const app = new Hono(); + +app.get("/login", async (c) => loginGet("natalie.sh")); + +app.post("/login", async (c) => login(c)); + +app.get("/callback", async (c) => callback(c)); + +export const getAuthRouter = () => { + return app; +}; diff --git a/apps/aqua/src/auth/storage.ts b/apps/aqua/src/auth/storage.ts new file mode 100644 index 0000000..c5658ab --- /dev/null +++ b/apps/aqua/src/auth/storage.ts @@ -0,0 +1,85 @@ +import type { + NodeSavedSession, + NodeSavedSessionStore, + NodeSavedState, + NodeSavedStateStore, +} from "@atproto/oauth-client-node"; +import type { Database } from "@/db"; +import { authSession, authState } from "../../db/schema"; +import { eq } from "drizzle-orm"; + +export class StateStore implements NodeSavedStateStore { + constructor(private db: Database) {} + async get(key: string): Promise { + const result = await this.db + .select() + .from(authState) + .where(eq(authState.key, key)) + .limit(1) + .execute(); + // .selectFrom("auth_state") + // .selectAll() + // .where("key", "=", key) + // .executeTakeFirst(); + console.log("getting state", key, result); + if (!result[0]) return; + return JSON.parse(result[0].state) as NodeSavedState; + } + async set(key: string, val: NodeSavedState) { + const state = JSON.stringify(val); + console.log("inserting state", key, state); + await this.db + .insert(authState) + .values({ key, state }) + .onConflictDoUpdate({ + set: { state: state }, + target: authState.key, + }) + .execute(); + // .insertInto("auth_state") + // .values({ key, state }) + // .onConflict((oc) => oc.doUpdateSet({ state })) + // .execute(); + } + async del(key: string) { + await this.db.delete(authState).where(eq(authState.key, key)).execute(); + //.deleteFrom("auth_state").where("key", "=", key).execute(); + } +} + +export class SessionStore implements NodeSavedSessionStore { + constructor(private db: Database) {} + async get(key: string): Promise { + const result = await this.db + .select() + .from(authSession) + .where(eq(authSession.key, key)) + .limit(1) + .all(); + // .selectFrom("auth_session") + // .selectAll() + // .where("key", "=", key) + // .executeTakeFirst(); + if (!result[0]) return; + return JSON.parse(result[0].session) as NodeSavedSession; + } + async set(key: string, val: NodeSavedSession) { + const session = JSON.stringify(val); + await this.db + .insert(authSession) + .values({ key, session }) + .onConflictDoUpdate({ + set: { session: session }, + target: authSession.key, + }) + .execute(); + // .insertInto("auth_session") + // .values({ key, session }) + // .onConflict((oc) => oc.doUpdateSet({ session })) + // .execute(); + } + async del(key: string) { + await this.db.delete(authSession).where(eq(authSession.key, key)).execute(); + //.deleteFrom("auth_session").where("key", "=", key).execute(); + } +} diff --git a/apps/aqua/src/ctx.ts b/apps/aqua/src/ctx.ts new file mode 100644 index 0000000..c179289 --- /dev/null +++ b/apps/aqua/src/ctx.ts @@ -0,0 +1,36 @@ +import { NodeOAuthClient } from "@atproto/oauth-client-node"; +import { Client } from "@libsql/client/."; +import { LibSQLDatabase } from "drizzle-orm/libsql"; +import { Context, Next } from "hono"; +import { createClient } from "./auth/client"; +import { Logger } from "pino"; + +export type TealContext = Context; + +export type EnvWithCtx = { + Variables: Ctx; +}; + +export type Ctx = { + auth: NodeOAuthClient; + db: LibSQLDatabase & { + $client: Client; + }; + logger: Logger; +}; + +export const setupContext = async ( + c: TealContext, + db: LibSQLDatabase & { + $client: Client; + }, + logger: Logger, + next: Next, +) => { + const auth = await createClient(db); + + c.set("db", db); + c.set("auth", auth); + c.set("logger", logger); + await next(); +}; diff --git a/apps/aqua/src/db.ts b/apps/aqua/src/db.ts new file mode 100644 index 0000000..9cc85b6 --- /dev/null +++ b/apps/aqua/src/db.ts @@ -0,0 +1,12 @@ +import { drizzle } from "drizzle-orm/libsql"; +import * as schema from "../db/schema"; +import process from "node:process"; + +export const db = drizzle({ + connection: process.env.DATABASE_URL ?? "file:./db.sqlite", + // doesn't seem to work? + //casing: "snake_case", + schema: schema, +}); + +export type Database = typeof db; diff --git a/apps/aqua/src/index.ts b/apps/aqua/src/index.ts new file mode 100644 index 0000000..15ae8d7 --- /dev/null +++ b/apps/aqua/src/index.ts @@ -0,0 +1,42 @@ +import { serve as serveNode } from "@hono/node-server"; +import { Hono } from "hono"; +import { db } from "@/db"; +import { getAuthRouter, loginGet } from "./auth/router"; +import pino from "pino"; +import { EnvWithCtx, setupContext } from "./ctx"; +import { env } from "./lib/env"; + +const logger = pino({ name: "server start" }); + +const app = new Hono(); + +app.use((c, next) => setupContext(c, db, logger, next)); + +app.get("/", (c) => c.text("Hono meets Node.js")); + +app.get("/info", async (c) => { + const result = await db.query.status.findFirst().execute(); + console.log("result", result); + return c.json(result); +}); + +app.route("/oauth", getAuthRouter()); + +// const run = async () => { +// serve( +// { +// fetch: app.fetch, +// port: env.PORT, +// hostname: env.HOST, +// }, +// (info) => { +// console.log( +// `Listening on ${info.address == "::1" ? "http://localhost" : info.address}:${info.port} (${info.family})`, +// ); +// }, +// ); +// }; + +// run(); + +export default app; diff --git a/apps/aqua/src/lexicon/index.ts b/apps/aqua/src/lexicon/index.ts new file mode 100644 index 0000000..57d2cd6 --- /dev/null +++ b/apps/aqua/src/lexicon/index.ts @@ -0,0 +1,99 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { + createServer as createXrpcServer, + Server as XrpcServer, + Options as XrpcOptions, + AuthVerifier, + StreamAuthVerifier, +} from '@atproto/xrpc-server' +import { schemas } from './lexicons' + +export function createServer(options?: XrpcOptions): Server { + return new Server(options) +} + +export class Server { + xrpc: XrpcServer + app: AppNS + xyz: XyzNS + + constructor(options?: XrpcOptions) { + this.xrpc = createXrpcServer(schemas, options) + this.app = new AppNS(this) + this.xyz = new XyzNS(this) + } +} + +export class AppNS { + _server: Server + bsky: AppBskyNS + + constructor(server: Server) { + this._server = server + this.bsky = new AppBskyNS(server) + } +} + +export class AppBskyNS { + _server: Server + actor: AppBskyActorNS + + constructor(server: Server) { + this._server = server + this.actor = new AppBskyActorNS(server) + } +} + +export class AppBskyActorNS { + _server: Server + + constructor(server: Server) { + this._server = server + } +} + +export class XyzNS { + _server: Server + statusphere: XyzStatusphereNS + + constructor(server: Server) { + this._server = server + this.statusphere = new XyzStatusphereNS(server) + } +} + +export class XyzStatusphereNS { + _server: Server + + constructor(server: Server) { + this._server = server + } +} + +type SharedRateLimitOpts = { + name: string + calcKey?: (ctx: T) => string + calcPoints?: (ctx: T) => number +} +type RouteRateLimitOpts = { + durationMs: number + points: number + calcKey?: (ctx: T) => string + calcPoints?: (ctx: T) => number +} +type HandlerOpts = { blobLimit?: number } +type HandlerRateLimitOpts = SharedRateLimitOpts | RouteRateLimitOpts +type ConfigOf = + | Handler + | { + auth?: Auth + opts?: HandlerOpts + rateLimit?: HandlerRateLimitOpts | HandlerRateLimitOpts[] + handler: Handler + } +type ExtractAuth = Extract< + Awaited>, + { credentials: unknown } +> diff --git a/apps/aqua/src/lexicon/lexicons.ts b/apps/aqua/src/lexicon/lexicons.ts new file mode 100644 index 0000000..b3a4596 --- /dev/null +++ b/apps/aqua/src/lexicon/lexicons.ts @@ -0,0 +1,94 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { LexiconDoc, Lexicons } from '@atproto/lexicon' + +export const schemaDict = { + AppBskyActorProfile: { + lexicon: 1, + id: 'app.bsky.actor.profile', + defs: { + main: { + type: 'record', + description: 'A declaration of a Bluesky account profile.', + key: 'literal:self', + record: { + type: 'object', + properties: { + displayName: { + type: 'string', + maxGraphemes: 64, + maxLength: 640, + }, + description: { + type: 'string', + description: 'Free-form profile description text.', + maxGraphemes: 256, + maxLength: 2560, + }, + avatar: { + type: 'blob', + description: + "Small image to be displayed next to posts from account. AKA, 'profile picture'", + accept: ['image/png', 'image/jpeg'], + maxSize: 1000000, + }, + banner: { + type: 'blob', + description: + 'Larger horizontal image to display behind profile view.', + accept: ['image/png', 'image/jpeg'], + maxSize: 1000000, + }, + labels: { + type: 'union', + description: + 'Self-label values, specific to the Bluesky application, on the overall account.', + refs: ['lex:com.atproto.label.defs#selfLabels'], + }, + joinedViaStarterPack: { + type: 'ref', + ref: 'lex:com.atproto.repo.strongRef', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + XyzStatusphereStatus: { + lexicon: 1, + id: 'xyz.statusphere.status', + defs: { + main: { + type: 'record', + key: 'tid', + record: { + type: 'object', + required: ['status', 'createdAt'], + properties: { + status: { + type: 'string', + minLength: 1, + maxGraphemes: 1, + maxLength: 32, + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, +} +export const schemas: LexiconDoc[] = Object.values(schemaDict) as LexiconDoc[] +export const lexicons: Lexicons = new Lexicons(schemas) +export const ids = { + AppBskyActorProfile: 'app.bsky.actor.profile', + XyzStatusphereStatus: 'xyz.statusphere.status', +} diff --git a/apps/aqua/src/lexicon/types/app/bsky/actor/profile.ts b/apps/aqua/src/lexicon/types/app/bsky/actor/profile.ts new file mode 100644 index 0000000..9fd9b73 --- /dev/null +++ b/apps/aqua/src/lexicon/types/app/bsky/actor/profile.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' +import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef' + +export interface Record { + displayName?: string + /** Free-form profile description text. */ + description?: string + /** Small image to be displayed next to posts from account. AKA, 'profile picture' */ + avatar?: BlobRef + /** Larger horizontal image to display behind profile view. */ + banner?: BlobRef + labels?: + | ComAtprotoLabelDefs.SelfLabels + | { $type: string; [k: string]: unknown } + joinedViaStarterPack?: ComAtprotoRepoStrongRef.Main + createdAt?: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.actor.profile#main' || + v.$type === 'app.bsky.actor.profile') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.profile#main', v) +} diff --git a/apps/aqua/src/lexicon/types/xyz/statusphere/status.ts b/apps/aqua/src/lexicon/types/xyz/statusphere/status.ts new file mode 100644 index 0000000..15ff060 --- /dev/null +++ b/apps/aqua/src/lexicon/types/xyz/statusphere/status.ts @@ -0,0 +1,26 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../lexicons' +import { isObj, hasProp } from '../../../util' +import { CID } from 'multiformats/cid' + +export interface Record { + status: string + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'xyz.statusphere.status#main' || + v.$type === 'xyz.statusphere.status') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('xyz.statusphere.status#main', v) +} diff --git a/apps/aqua/src/lexicon/util.ts b/apps/aqua/src/lexicon/util.ts new file mode 100644 index 0000000..d7e7044 --- /dev/null +++ b/apps/aqua/src/lexicon/util.ts @@ -0,0 +1,13 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +export function isObj(v: unknown): v is Record { + return typeof v === 'object' && v !== null +} + +export function hasProp( + data: object, + prop: K, +): data is Record { + return prop in data +} diff --git a/apps/aqua/src/lib/env.ts b/apps/aqua/src/lib/env.ts new file mode 100644 index 0000000..84fe392 --- /dev/null +++ b/apps/aqua/src/lib/env.ts @@ -0,0 +1,17 @@ +import dotenv from "dotenv"; +import { cleanEnv, host, port, str, testOnly } from "envalid"; +import process from "node:process"; + +dotenv.config(); + +export const env = cleanEnv(process.env, { + NODE_ENV: str({ + devDefault: testOnly("test"), + choices: ["development", "production", "test"], + }), + HOST: host({ devDefault: testOnly("0.0.0.0") }), + PORT: port({ devDefault: testOnly(3000) }), + PUBLIC_URL: str({}), + DB_PATH: str({ devDefault: "file:./db.sqlite" }), + COOKIE_SECRET: str({ devDefault: "secret_cookie! very secret!" }), +}); diff --git a/apps/aqua/src/lib/view.ts b/apps/aqua/src/lib/view.ts new file mode 100644 index 0000000..e1a82e7 --- /dev/null +++ b/apps/aqua/src/lib/view.ts @@ -0,0 +1,12 @@ +// @ts-ignore +import ssr from "uhtml/ssr"; +import type initSSR from "uhtml/types/init-ssr"; +import type { Hole } from "uhtml/types/keyed"; + +export type { Hole }; + +export const { html }: ReturnType = ssr(); + +export function page(hole: Hole) { + return `\n${hole.toDOM().toString()}`; +} diff --git a/apps/aqua/tsconfig.json b/apps/aqua/tsconfig.json new file mode 100644 index 0000000..a258d21 --- /dev/null +++ b/apps/aqua/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@teal/tsconfig/base.json", + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/apps/viridian/go.mod b/apps/viridian/go.mod new file mode 100644 index 0000000..e84049b --- /dev/null +++ b/apps/viridian/go.mod @@ -0,0 +1,5 @@ +module viridian + +go 1.21.5 + +require github.com/pebbe/zmq4 v1.2.11 diff --git a/apps/viridian/go.sum b/apps/viridian/go.sum new file mode 100644 index 0000000..a607dbc --- /dev/null +++ b/apps/viridian/go.sum @@ -0,0 +1,2 @@ +github.com/pebbe/zmq4 v1.2.11 h1:Ua5mgIaZeabUGnH7tqswkUcjkL7JYGai5e8v4hpEU9Q= +github.com/pebbe/zmq4 v1.2.11/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= diff --git a/apps/viridian/main.go b/apps/viridian/main.go new file mode 100644 index 0000000..dd28bb0 --- /dev/null +++ b/apps/viridian/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "fmt" + "sync" + + server "viridian/server" + worker "viridian/worker" +) + +func main() { + var wg sync.WaitGroup + + // Run the server in a goroutine + go server.RunServer() + + // Simulate workers, each running in a separate goroutine + workerCount := worker.GetCoreCount() + fmt.Printf("Starting %d workers\n", workerCount) + for i := 1; i <= workerCount; i++ { + fmt.Printf("Starting worker %d\n", i) + workerID := fmt.Sprintf("worker-%d", i) + wg.Add(1) + go worker.RunWorker(workerID, &wg) + } + + // Wait for all workers to complete (this won't happen in this example since workers run indefinitely) + wg.Wait() +} diff --git a/apps/viridian/package.json b/apps/viridian/package.json new file mode 100644 index 0000000..7718996 --- /dev/null +++ b/apps/viridian/package.json @@ -0,0 +1,11 @@ +{ + "name": "@teal/viridian", + "version": "0.0.0", + "private": true, + "scripts": { + "install": "go mod download", + "build": "go build main.go", + "dev": "go run main.go", + "start": "go run main.go" + } +} diff --git a/apps/viridian/server/server.go b/apps/viridian/server/server.go new file mode 100644 index 0000000..e9d19ff --- /dev/null +++ b/apps/viridian/server/server.go @@ -0,0 +1,62 @@ +package server + +import ( + "fmt" + "time" + + "viridian/types" + + zmq "github.com/pebbe/zmq4" +) + +// RunServer launches the server that distributes jobs to workers +func RunServer() { + server := &types.Server{ + Jobs: []types.Job{{"job1", "pending"}, {"job2", "pending"}, {"job3", "pending"}}, + WorkerJobs: make(map[string]string), + JobStatus: make(map[string]string), + } + + // Initialize job status + for _, job := range server.Jobs { + server.JobStatus[job.ID] = "pending" + } + + // Create a ZeroMQ ROUTER socket for distributing jobs + socket, _ := zmq.NewSocket(zmq.ROUTER) + defer socket.Close() + socket.Bind("tcp://*:5555") + + for len(server.Jobs) > 0 { + // Wait for a worker to send a ready message + workerAddr, _ := socket.RecvMessage(0) + + fmt.Printf("Received ready message from worker %s\n", workerAddr) + + fmt.Print(workerAddr[2]) + + // Lock jobs to pick the next one safely + server.Mu.Lock() + if len(server.Jobs) == 0 { + server.Mu.Unlock() + continue + } + job := server.Jobs[0] + server.Jobs = server.Jobs[1:] + server.Mu.Unlock() + + // Track the job for this worker + server.TrackJob(workerAddr[0], job.ID) + + // Send job to the worker + fmt.Printf("Sending job %s to worker %s\n", job.ID, workerAddr[0]) + socket.SendMessage(workerAddr[0], "", job.ID) + + time.Sleep(1 * time.Second) // Simulate a delay + + // In a real-world scenario, this would be based on a worker response + server.MarkJobCompleted(workerAddr[0]) + } + + fmt.Println("All jobs processed") +} diff --git a/apps/viridian/types/types.go b/apps/viridian/types/types.go new file mode 100644 index 0000000..de715a6 --- /dev/null +++ b/apps/viridian/types/types.go @@ -0,0 +1,46 @@ +package types + +import ( + "strconv" + "sync" +) + +// Job represents a job with an ID and status +type Job struct { + ID string + Status string +} + +// Server represents the state of the server, including jobs, worker-job associations, and job status +type Server struct { + Jobs []Job // Job queue + WorkerJobs map[string]string // Mapping worker ID -> job ID + JobStatus map[string]string // Mapping job ID -> status + Mu sync.Mutex // Mutex to handle concurrency +} + +func (s *Server) AddJob() Job { + s.Mu.Lock() + defer s.Mu.Unlock() + job := Job{"job" + strconv.Itoa(len(s.Jobs)), "pending"} + s.Jobs = append(s.Jobs, job) + + return job +} + +// TrackJob assigns a job to a worker and marks it as in-progress +func (s *Server) TrackJob(workerID, jobID string) { + s.Mu.Lock() + defer s.Mu.Unlock() + s.WorkerJobs[workerID] = jobID + s.JobStatus[jobID] = "in-progress" +} + +// MarkJobCompleted marks a job as completed and removes the worker-job association +func (s *Server) MarkJobCompleted(workerID string) { + s.Mu.Lock() + defer s.Mu.Unlock() + jobID := s.WorkerJobs[workerID] + s.JobStatus[jobID] = "completed" + delete(s.WorkerJobs, workerID) // Remove worker-job association +} diff --git a/apps/viridian/worker/ffmpeg.go b/apps/viridian/worker/ffmpeg.go new file mode 100644 index 0000000..4df0094 --- /dev/null +++ b/apps/viridian/worker/ffmpeg.go @@ -0,0 +1 @@ +package worker diff --git a/apps/viridian/worker/worker.go b/apps/viridian/worker/worker.go new file mode 100644 index 0000000..c8c216e --- /dev/null +++ b/apps/viridian/worker/worker.go @@ -0,0 +1,47 @@ +package worker + +import ( + "fmt" + "runtime" + "sync" + "time" + + zmq "github.com/pebbe/zmq4" +) + +// RunWorker simulates a worker that connects to the server and processes jobs +func RunWorker(id string, wg *sync.WaitGroup) { + defer wg.Done() + + // Create a ZeroMQ REQ socket for receiving jobs + socket, _ := zmq.NewSocket(zmq.REQ) + defer socket.Close() + socket.Connect("tcp://localhost:5555") + + for { + // Send a ready signal to the server + socket.SendMessage(fmt.Sprintf("READY %s", id), 0) + + // Receive the job + msg, err := socket.RecvMessage(0) + if err != nil { + fmt.Println("Error receiving job:", err) + continue + } + job := msg[0] + + // Process the job + fmt.Printf("Worker %s received job: %s\n", id, job) + socket.SendMessage(fmt.Sprintf("RECEIVED %s", job), 0) + + // Simulate processing the job + fmt.Printf("Worker %s processing job: %s\n", id, job) + socket.SendMessage(fmt.Sprintf("PROCESSING %s", job), 0) + time.Sleep(2 * time.Second) // Simulate job processing delay + } +} + +// GetCoreCount returns the number of CPU cores on the current machine +func GetCoreCount() int { + return runtime.NumCPU() +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..ee88f4b79a96de59fbf6fa26922f639eea4ca49b GIT binary patch literal 181784 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 vN@MkJFzD#}bmTxZL=20.0.0" }, - "module": "src/index.js" -} \ No newline at end of file + "workspaces": [ + "apps/*", + "packages/*" + ] +} diff --git a/tsconfig.json b/packages/tsconfig/base.json similarity index 89% rename from tsconfig.json rename to packages/tsconfig/base.json index 1ca2350..2047c00 100644 --- a/tsconfig.json +++ b/packages/tsconfig/base.json @@ -11,7 +11,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "ES2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "ES2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ @@ -25,14 +25,14 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "ES2022", /* Specify what module code is generated. */ + "module": "ES2022" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + //"paths": {} /* Specify a set of entries that re-map imports to additional lookup locations. */, // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - "types": ["bun-types"], /* Specify type package names to be included without being referenced in a source file. */ + // "types": [] /* Specify type package names to be included without being referenced in a source file. */, // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ // "resolveJsonModule": true, /* Enable importing .json files. */ @@ -71,12 +71,12 @@ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ + "strict": true /* Enable all strict type-checking options. */, // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ @@ -98,6 +98,6 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ } } diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json new file mode 100644 index 0000000..0b1976c --- /dev/null +++ b/packages/tsconfig/package.json @@ -0,0 +1,3 @@ +{ + "name": "@teal/tsconfig" +} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 9c1f7a1..0000000 --- a/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Elysia } from "elysia"; - -const app = new Elysia().get("/", () => "Hello Elysia").listen(3000); - -console.log( - `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}` -); diff --git a/traefik/dev_routes.yml b/traefik/dev_routes.yml new file mode 100644 index 0000000..b931a59 --- /dev/null +++ b/traefik/dev_routes.yml @@ -0,0 +1,22 @@ +http: + routers: + frontend: + rule: "PathPrefix(`/`)" + service: frontend + priority: 1 + + backend: + rule: "PathPrefix(`/api`)" + service: backend + priority: 2 + + services: + frontend: + loadBalancer: + servers: + - url: "http://host.docker.internal:3000" + + backend: + loadBalancer: + servers: + - url: "http://host.docker.internal:3031" diff --git a/traefik/dynamic_conf.yml b/traefik/dynamic_conf.yml new file mode 100644 index 0000000..b88a1d2 --- /dev/null +++ b/traefik/dynamic_conf.yml @@ -0,0 +1,24 @@ +http: + middlewares: + security-headers: + headers: + frameDeny: true + sslRedirect: true + browserXssFilter: true + contentTypeNosniff: true + forceSTSHeader: true + stsIncludeSubdomains: true + stsPreload: true + stsSeconds: 31536000 + + cors-headers: + headers: + accessControlAllowMethods: + - GET + - POST + - PUT + - DELETE + - OPTIONS + accessControlAllowHeaders: + - "*" + accessControlAllowOrigin: "*" diff --git a/traefik/traefik.yml b/traefik/traefik.yml new file mode 100644 index 0000000..57ab6b4 --- /dev/null +++ b/traefik/traefik.yml @@ -0,0 +1,56 @@ +api: + insecure: true + dashboard: true + +entryPoints: + web: + address: ":80" + http: + redirections: + entryPoint: + to: websecure + scheme: https + + websecure: + address: ":443" + +providers: + docker: + endpoint: "unix:///var/run/docker.sock" + exposedByDefault: false + network: app_network + + file: + filename: /etc/traefik/dynamic_conf.yml + +certificatesResolvers: + letsencrypt: + acme: + email: your-email@domain.com + storage: /letsencrypt/acme.json + httpChallenge: + entryPoint: web +http: + middlewares: + security-headers: + headers: + frameDeny: true + sslRedirect: true + browserXssFilter: true + contentTypeNosniff: true + forceSTSHeader: true + stsIncludeSubdomains: true + stsPreload: true + stsSeconds: 31536000 + + cors-headers: + headers: + accessControlAllowMethods: + - GET + - POST + - PUT + - DELETE + - OPTIONS + accessControlAllowHeaders: + - "*" + accessControlAllowOrigin: "*" diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..b820747 --- /dev/null +++ b/turbo.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "install": { + "dependsOn": ["^install"] + }, + "build": { + "dependsOn": ["^build"], + "outputs": [".next/**", "!.next/cache/**"] + }, + "check-types": { + "dependsOn": ["^check-types"] + }, + "dev": { + "persistent": true, + "cache": false + } + } +}