decentralised message store

Compare changes

Choose any two refs to compare.

Changed files
+60 -16
.github
workflows
src
lib
utils
+1
.gitignore
···
/node_modules
/dist
.env
+
.docker.env
*.tsbuildinfo
+2
shell.nix
···
pnpm,
typescript,
typescript-language-server,
+
docker,
callPackage,
}:
···
pnpm
typescript
typescript-language-server
+
docker
];
shellHook = ''
+5 -13
tsconfig.json
···
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
-
"module": "nodenext" /* Specify what module code is generated. */,
+
"module": "bundler" /* Specify what module code is generated. */,
"rootDir": "./src/" /* Specify the root folder within your source files. */,
-
"moduleResolution": "nodenext" /* Specify how TypeScript looks up a file from a given module specifier. */,
+
"moduleResolution": "bundler" /* Specify how TypeScript looks up a file from a given module specifier. */,
"baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */,
"paths": {
-
"@/*": [
-
"src/*"
-
]
+
"@/*": ["src/*"]
} /* 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'. */
···
}
]
},
-
"include": [
-
"src/**/*",
-
"index.ts"
-
],
-
"exclude": [
-
"node_modules",
-
"dist"
-
]
+
"include": ["src/**/*", "index.ts"],
+
"exclude": ["node_modules", "dist"]
}
+1 -1
package.json
···
"build": "tsdown src/index.ts",
"docker:pre-build": "sed \"s/[\\\"']//g\" .env > .docker.env",
"docker:build": "pnpm docker:pre-build && docker build -t gmstn-systems-shard .",
-
"docker:run": "source $(eval pwd)/.docker.env && echo $SERVER_PORT && docker run -p $SERVER_PORT:$SERVER_PORT --env-file .docker.env gmstn-systems-shard",
+
"docker:run": "source $(eval pwd)/.docker.env && echo $SERVER_PORT && docker run --network=host -p $SERVER_PORT:$SERVER_PORT --env-file .docker.env gmstn-systems-shard",
"start": "pnpm build && node dist/index.mjs"
},
"keywords": [],
+47
.github/workflows/push-image.yaml
···
+
name: Build and Push Docker Image
+
+
on:
+
push:
+
tags:
+
- "v*"
+
+
env:
+
REGISTRY: ghcr.io
+
IMAGE_NAME: ${{ github.repository }}
+
+
jobs:
+
build-and-push:
+
runs-on: ubuntu-latest
+
permissions:
+
contents: read
+
packages: write
+
+
steps:
+
- name: Checkout repository
+
uses: actions/checkout@v4
+
+
- name: Log in to GitHub Container Registry
+
uses: docker/login-action@v3
+
with:
+
registry: ${{ env.REGISTRY }}
+
username: ${{ github.actor }}
+
password: ${{ secrets.GITHUB_TOKEN }}
+
+
- name: Extract metadata (tags, labels)
+
id: meta
+
uses: docker/metadata-action@v5
+
with:
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+
tags: |
+
type=semver,pattern={{version}}
+
type=semver,pattern={{major}}.{{minor}}
+
type=semver,pattern={{major}}
+
type=raw,value=latest
+
+
- name: Build and push Docker image
+
uses: docker/build-push-action@v5
+
with:
+
context: .
+
push: true
+
tags: ${{ steps.meta.outputs.tags }}
+
labels: ${{ steps.meta.outputs.labels }}
+3 -1
src/index.ts
···
import { setupServer } from "@/server";
const main = async () => {
-
if (DB_URL === ":memory:" || DB_URL.startsWith("file:"))
+
if (DB_URL === ":memory:" || DB_URL.startsWith("file:")) {
+
console.log("migrating db")
await setupDbWithMigrations("./drizzle");
+
}
const server = await setupServer();
for (const [url, route] of Object.entries(routes)) {
+1 -1
src/lib/utils/gmstn.ts
···
.select()
.from(messagesTable)
.where(eq(messagesTable.channelAtUri, channelAtUriString))
-
.limit(100);
+
.limit(100000);
return { ok: true, data: messages };
};