break up library, move bots to their own repositories

This commit is contained in:
JB
2026-02-12 21:05:15 -05:00
parent 415aa3dbfe
commit cb39431a11
289 changed files with 1931 additions and 6235 deletions

View File

@@ -0,0 +1,33 @@
#/-------------------[DOTENV_PUBLIC_KEY]--------------------/
#/ public-key encryption for .env files /
#/ [how it works](https://dotenvx.com/encryption) /
#/----------------------------------------------------------/
DOTENV_PUBLIC_KEY_DEVELOPMENT="02572da3d4f3a844588a944214c0e142a5a01deaa6551456af146d34b574024416"
# .env.development
#/-------------------[DOTENV_PUBLIC_KEY]--------------------/
#/ public-key encryption for .env files /
#/ [how it works](https://dotenvx.com/encryption) /
#/----------------------------------------------------------/
DOTENV_PUBLIC_KEY="02292a330aa041b5f7efc51504e0c208accba67a6877a217ab43cbb59c3c0c3e66"
# .env
DEBUG="encrypted:BL9a2Dle847wiqvjnB1ryC8L5vJy0pn/5BZJdEMSWBIzcxPN3MhXoHsQ4KQcRXW4xuWLpHq00aAH5kNda3Bu7kPPbnltvhcYoqQSz3giItL8th1T/qm4zc+gM7lNHl/+5G0xJFE="
PORT="encrypted:BKVA322kVuBfcDbptjVrvp9O8+1w0iCNT7Sv777MfCuLHTdJdUZr5jZbcKBD8yxPGpkc6sNdB4j6n2flC5NwExHdO/mdGD1VEBpdcZQCcSO7MYOYt1j0pfLNkvEqpuHnD1tkxT8="
NODE_ENV="encrypted:BLNNdnKOW0f8d614oe1ur73es5z/2MhyJIXmeMNvU/VlOBL1dg/mT4vHosXG908eCyM2Nx1v7GxAfXmdpVSzWltfODwJzPw/lPZV3JFB2yIt4f8zJIHvkHKPMFLupK9bDUUS2m63uvZ4IE0v"
LOG_LEVEL="encrypted:BOZXADbkv9vkzwx7/JC/EcBC00W5li6rbluRVGwy5t0fIj2WaoWXkwlTmHf5NiczQLPCgB+HD6LJxAeef8uEMgN0hwDCBXVGl53HWwDjkmxmmDAdfBmOeldJhDQbFNXumyrmKIOu"
BASE_URL="encrypted:BFjoUMvbNCwqcd8j74dNe+4MZn1STXKTVq8LoP+CPuunNfL9QQkjyR+ryH0rgOH0W0LVLQBszEEpEiFFOohq3/uZlN/UTsqkQXntINvBMvT2S2dTTTafB4jgSoNrS6VDSx3mipO15IzQZ/QlADQrqVI5Y+iB7Y2lAx7M"
EVE_CLIENT_ID="encrypted:BPpft3gC8xuWAg5SzhnoG009FhlJ9K65Ku7QoRrjZFAm7VaR2WDbH7lPMXoXY1/tu2sFln2+iCA0J8VMwqnvmHgocQtE2qPmRHdZUUSuGph76uIU4CNaIRICpXyn3jOfPIjsyBXcsKrMwLEdfeEwkxazDJ8ZAw/r+WHre9xr+iwK"
EVE_CLIENT_SECRET="encrypted:BNXhx7jO6z2IfGU0TLUxMnONUXYWlQvM+RxUYDuOb+Tsncr32aJ4j6pFMHMeUYcqrQIogads6GDNb73trhk9XvpPu8kBgrksdkCtErp47u5++6yRGLkqTmkdpZeja2KCaGx0Bcu4EfP5DS/H9Mc6nvb6+wctj8s/w2MguF6O5gg/2LNDNT3tbrI="
EVE_CALLBACK_URL="encrypted:BPzYFYlfnfLhPQuwRyUZs3F3wxjy6TEHQKNjbu+XnztSS6rJh8eAuW0ThYxee8lBAzLSGgKmjIt1PkYljnTekrR2CKyp3hMhag6W08tzxJDs4qyAsi+X91mEHXrd+ekmr4d5iAZu+sr/rHiK9jkzAsVWA8e8ttAVtW5Us7sb6ovZ1bjWM20oXk+4e5Gg"
ESI_USER_AGENT="encrypted:BI/g/h+eCwT468Io0A9DhVU+z1iWiJwOI75mNDqZMJB1LWyhd/+pneYlcEAJJEsAPP4+YN66qAZ/8PzgH6rVcXS5H27FqwC+/mJFsMfC9jAkFDl38nxDogpKJUAimpG53ERM7LegMMcxAsnr085JduloijL5ylCwEwpiewzWwN+xqOOcQrW6UcQgsgbyonIlqaYstN4NdplvdSC2zvrYN5OnToEoQ2YFiAtU7dTxSx0="
DISCORD_APP_ID="encrypted:BIiCdiy6ypeM3LK9pvkqoNIn0Js7XS5rUQqBNzZcywm9eH21gSit2rb+cwYGBGzYmkv/xG6Zf/CnUA7STrtRFfOD57vF46DVam0now4IVrTWr7X3CZLgBa0TBJgph72rTSTg8HKz8OheH/y7u730uN0OLhw="
DISCORD_APP_SECRET="encrypted:BHNfy9BO/85OpyEQgehnwAByFz0jyE3b/YiK69aVFFKotBjeh9rj/0eg2/LsJvPsAHW3NDHmSWIvo+0gqTMuFbbA52wyLk4HeZmX5yNV6sQfGLitwJVCiyfXWpW81dkwTWF4bPNu/zTDlN7hJVuOTz9o6QN5WRSlbCiuP3n7Ojk8"
DISCORD_PUBLIC_KEY="encrypted:BMzCllTpNrIQy9DkWGqE6tW7XxIEdui58eV5PqmMtwizEptjZVGp+IRtin9SUXBOtugzUUn51KP4+8AQauyFP4/oiEpiCa04lPLy2OF0pTzF61zC6jBb+gGL6fbvA2DWORXkR98sK6IAO5+OaGXy1SnHU1qjM7J5GFBaAywdPmDdLpuD4zJLvXggpooepaHHKer4ViyBAev9QU2Zb9/Ants="
DISCORD_BOT_TOKEN="encrypted:BKJPnAvriqdaKV5eirAAs6TgtmtJMj7ZMjf8Y8sbD+T3WK/tbh8mgNNlyPk+ztre5mQD46vuWMa9F9uYCZcBmlk3XcRiYFwtyIGeaUPw2hT5kswk+jcaj66HKTknF09KwOhjvg3O2394d9p0jNFsx6ioT1ddzoSEKcQkyeBuJAsOTGnPVQKkfUNCRCWXMf6C3pxqVmFP/azfFFQNy8yevXnhZU97Zk9Ohg=="
DISCORD_TEST_GUILD_ID="encrypted:BP+e5/IUX1gJP+/ZtG1LxwWcLeYsYwhM6boSbJv1YDhg3FF/qDM6A3OXsneSBP3PTDwW7e14M5U0jRIMT9YemyuF9r7895fMgBnFbPfSY+WaRDruibFI6QW1RvEcTuFjoU2/kRT6s69C/I1frYEMja2rfw=="
JANICE_KEY="encrypted:BIb85AGnz4hgENGxJYhDmtEE6rEPjfBKZBtJ4KuDNtAjyIEI4kRKQNkOudVxc4BXQ6MXIqhIPIuTE6DdCN03olEfk3Fo5/FmwOr1bWF6pYFbwMxdVgjc9Cj9Lie3+tAnr3MaOfT0y+P+zUiAMWRJELpLv0TzSNhmTAF1LS+9zjUV"
PERPLEXITY_API_KEY="encrypted:BNy5gd/Ku1Dilcfc9VftzIJn5xxDCT0NapIw5i+4h1srz2nNVgDc8w6GvmdBBz/NiPut9x+7Wv5hKVuXh2N07HaO67bTugzZ7dwabQdDJGlRp8mo/TEJMIN9Pm1ztI5HZW4UGfMY4xNILHRJb+JRBNdI4GZSh13i6vyc8ym9BgOXLVTR3ZSCJwFqzeDTgR9R3NhIjUa3"
STAR_KITTEN_KV_DB_PATH="encrypted:BPZyMGyF1A+mQQ+OKNtHJLM+EGyrgkfhO6hHs1YHaoifLsMbJz2NDZmOzDg+ubPTUyjOJ+XbjcVdEFLn23QoOqKtW/WSk6WPPNAgWnWrTl+5XJI7bfGKaaZ1LR1PaB4ftPyMLFyoWVZ2iPHBP1xv"
POSTGRES_URL="encrypted:BLUN+6NZpCkc+8WvJkhB3v8sYoX88maPYzkBi2WXItAOtA2r/1a65yZThcumddnba7WzaaN7xPv0CUA6LZpszP8t59LJ2ewKNJJyi9Z5bHINoedLh57kwlu0TcGsoO/EUPS81V0FZAlxLnmuVvMn/xYxmXJWiTeQRCe4vxLSctMNWgvcWXuQivGrLFh6AMtgfi+FxtkaH5zYXIjDn1Q/U2gKTwyLxmPBrXxFnYx8aGI9Leios605d/4lugra"
NEO4J_URL="encrypted:BGphrNITLIGqF5aVoY9F2IaDVP+IRXuPvtfTRKtNqL8u5JIqkbEBpRknfB3wA2XoYiDsQ2ADfwwSuw5uvj1IWU2/ZS9AEukGJGYa6RP1dI/R0XvRAqS7O9waOH8nuH3KPaTSiEfeLqd+c+3J8MAKgpaysNp1nKGsZa6RzjhYEWxsKw3Yp4LY5d3yRloqxWsAJsd3WnH8cJWvJi0gT04PEJ73gX4TyHlPuduH37uo6os="

View File

@@ -0,0 +1,23 @@
#/-------------------[DOTENV_PUBLIC_KEY]--------------------/
#/ public-key encryption for .env files /
#/ [how it works](https://dotenvx.com/encryption) /
#/----------------------------------------------------------/
DOTENV_PUBLIC_KEY_PRODUCTION="02f0469506f6722d8fcc179c199ff159ca32f082000c8e7a1465891adb50a4c031"
# .env.production
DEBUG="encrypted:BK1eaaKoyGmDyiuLd+fIdaEdCGyYgLyUv5tsNcXvZ8CTMMXi7SBcNSy0K5hI0VC0ptEIX7iO/sZQcQ1K0V9gBFCoNDpuTvO+c3bFKU2nKQ0BBULlXhJNDoETmZ2p9L7KLNDFYQ6d"
PORT="encrypted:BOpbRvBpbB3ra5St/8dv2h/93aL1vu1rVbc9u/V0YZyvP6nJv88rToz2/zfyNDeqsjBA2IO4s3+v3ZtxSJ6XXwd3+or3++yGs7A8t7bGoxVRyzb0uluHh6hWx+DKdxZE7HIYAh0="
NODE_ENV="encrypted:BORW/YY5Y5EV7Lh5L3fSOfKsbyH5/ZBtMH/iuurGnJZlvFhBsZTBm5ms02dLJgFN/F1HFYskR8xLyEnnCCndK3YpdzrPYbVYSPr5EuWsVeX6DbCROi7RY1Zd27kYBSA5QjxHJOxWCIL0djY="
LOG_LEVEL="encrypted:BHAO8Gg4Y3bo9Cwi1+YOvtc0dSgYUS6+UWNTcHfWISsrv4XX1sj/T9wjEGb8Y6dCmenqPSSI0DaBaEoLXDG3S31mdhTPmMfNBWRQQFbIxrz17WtqIDN6MGiI7/6ki5qryzup6ME="
BASE_URL="encrypted:BAAw6UxbwTW7snM4pjPLGsYtZGbyOSDR9BwIo2oPDGPernDYD5YS80ffc7N1cRpLt807Vg41YoDsuj5PnwjmU9Zg7rl6cUnFKnLcvuFHNWdiULcl7bPQjHgZq1/wXwmYRt8p1DOI1nAgZIaxf58hi/c/9pUy5IpE"
DISCORD_APP_ID="encrypted:BEneta1lCVd+uZCdIEOCtilukJb8W/57BZRvSzg7a6MnFkNxqlT2CXiZH6kvO9k+s3qj8zCUdsb6vQP0BzLlmDmmFLQGMn6q/NOlYArn0WlIUz+81JvMOZnv1YH6uFnJczJugtPoBy8d9Jjvn1u6vT+6pfM="
DISCORD_APP_SECRET="encrypted:BG4R0eH2AHda/W+EkwT82dhO1UAjQZAbrXfn0+vOeNT/E3EQZ3VH/o5N1Ed3Hjg/mf90jv+ey3HBimt747dN+IBgkzkYpbs44h/TVZukSPwN5wJR14nVRwtU+ZZYX9UUsb/wjWFn7n5DCCOIs2N5Z/bqbRw4mPruKwBzJ5SD8JgD"
DISCORD_PUBLIC_KEY="encrypted:BBTLdwJa7/tbzH4bddef00+PpJN9ZKCnSKxIWLuc10oKkg5g5TRSt9cnTRZvAsWGeacKxrECyl2WjoPYYI0qqDPZv/OHRejQ1EwDpfEVJVVoL7Xdm3c5Ncs0Vog03al3gEMbc2Zs6X3Teyt4K96PybwZ/fyhqsoHwmJ0mSvafD+2ASYii3tP23TkFewtnOenlZTBblXGkLy5C9Vkvodu1Qg="
DISCORD_BOT_TOKEN="encrypted:BKIDa8iPhX1BKarlpoJOd/qhn/wLz0LsSI3joaCKWcEWpRynWAU1e1lfAA85j1EzVsX2BE2AcUbDS+FDzuacRooOgXk1fcywf2RSA+skDqdSGwNXDUQvOlptTdGyb8Eq10MkQOtUCHn50npULOCFkoGVHunzHCOtLAKzq0n758X8SOswfdWgDLQP8vtB9BF6SfkCu93bDDeZU+gJvYU3x/GwLqlaaJdF0A=="
EVE_CLIENT_ID="encrypted:BA6dxhE8M8b3pDjcXDFBPdMw8aIBd1CUlN+NqnzC9XCZUc5Y7g4n2le0NPk6BwlgbrM9iRRdxzNkfmXiopJ1C33N4t095F/qd2cHAmya05//XAEOnOjA8MYA889rA/Jn1TXY2dSrLfp8UAMFo2pdu7r8QDAXdRUWoefAW/CmD0vR"
EVE_CLIENT_SECRET="encrypted:BP7JP9rGeAWdVBashqAcGmB9v2WstOu7jJiB72jyzEK8PtSXA8eZK4MdFjwkfilZJr9k0kQcIYH4E/koKEW6BANDr5Ph8pYRz+r/lS11fsoJ1HZhujPKyuKIaIVEHxGb94FU7bJb6tAE0ozEZPZzeEZFGKJe5x9dR8qbAuD3oRC9JbidH4Lu2kQ="
EVE_CALLBACK_URL="encrypted:BBOyw5Un+FeDukVE387oHdUZ6k3rMn69WX0Wi8qVWhyW1koCKTAot5jgZA24tKq4JPI71kYb1/5Z7baZCNekfOSUQsVbuFH8g9I9KffWeIIW7AhKA0TWPZCVxGCEFIj/x54DqmXtCnd7YRxYxXaWaSVrCos7lZAR5mnoTN2hBEEQFCWOhA1cX4iP"
ESI_USER_AGENT="encrypted:BADtioS3QPCdtq+RvA90WTk61cnHPadpaeTE4JJDEaWuFygvtbouvrcbPhp6MmkXTrVb1E6Fs6dS74ocCMP+4wSfE4UuJpDos2lTo5eHp/Y65ERqdByQbAUVPQ1tf1vuqrDqBYFiM3LfiQUnulASsmhGsDUgroxPTv0g4hv+4m5/DMR4mClgn5Cb+UoguJRRptWyZi5jCvXwxQzTtRQ1NYqr8WNNMA65oiGCkw=="
AUTH_DB_PATH="encrypted:BOgXzNmmct1BCPLRgrKbrCtERDEUCxyv1gJPEQupSgVmxyjoDCZLu+7dgfMvB7AeDfy2BtelFDpT3geWg+zazyUZO2aN/EvEv56YShh6iTDFONXHWx6l+8uu+l7Dmj9saL8MCJRcTBv4AtYseu7Y4AErK4wbNAEF"
JANICE_KEY="encrypted:BKdgDHUyDpAx5e72lhaOA33hszd6OTCz5p3cDk8AkkLK4JumLtKYJSelkKeHsl+jSSpYgLbwDgS42RL5bYBOJZUXmTCSn01PlxQguoseHzjtyd4HqdRtXtK3AucQOX27ZbY0tEZFzW467suq9NpDKie2cB3mdSJrfS/CJX58VgRi"
PERPLEXITY_API_KEY="encrypted:BL8MWGlcOic+n/V0yWSWai2Pwo8lbYbjcRkD2N7uDf38ogp7dUUdye/1dNWYzjm+ICsWXi5SQNEDkSdysegsJmoUtxBtEnX0Y0GJrQZaY5MEFobSicV5sjSdlh2y1gDcRrGPmvgsDXL/ehs3PWzz2DI0J71BnsziR4CmumkzwSxqot/mtTQMJQaO3UKFXB0RL5bwCWwv"

View File

@@ -0,0 +1,8 @@
trailingComma: all
tabWidth: 2
useTabs: false
semi: true
singleQuote: true
printWidth: 140
experimentalTernaries: true
quoteProps: consistent

View File

@@ -0,0 +1,23 @@
# tsdown-starter
A starter for creating a TypeScript package.
## Development
- Install dependencies:
```bash
npm install
```
- Run the unit tests:
```bash
npm run test
```
- Build the library:
```bash
npm run build
```

View File

@@ -0,0 +1,15 @@
# eve-utils
To install dependencies:
```bash
bun install
```
To run:
```bash
bun run index.ts
```
This project was created using `bun init` in bun v1.3.5. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.

View File

@@ -0,0 +1,7 @@
[test]
coverage = true
coverageSkipTestFiles = true
coverageReporter = ["text", "lcov"]
[run]
bun = true

View File

@@ -0,0 +1,29 @@
{
"name": "@star-kitten/eve-data",
"module": "src/main.ts",
"type": "module",
"private": true,
"devDependencies": {
"@dotenvx/dotenvx": "^1.52.0",
"@types/bun": "^1.3.9"
},
"peerDependencies": {
"typescript": "^5"
},
"dependencies": {
"@duckdb/node-api": "^1.4.4-r.1",
"neo4j-driver": "^6.0.1",
"pg": "^8.18.0",
"redis": "^5.10.0"
},
"scripts": {
"link": "bun link",
"test": "bun test",
"typecheck": "tsc --noEmit",
"release": "bumpp && npm publish",
"dev": "bunx @dotenvx/dotenvx run -f .env.development -- bun run src/main.ts && tsdown --watch",
"build": "bunx @dotenvx/dotenvx run -f .env.production -- bun src/main.ts && tsdown",
"encrypt": "bunx dotenvx encrypt -f .env.development && bunx dotenvx encrypt -f .env.production",
"decrypt": "bunx dotenvx decrypt -f .env.development && bunx dotenvx decrypt -f .env.production"
}
}

View File

@@ -0,0 +1,72 @@
import fs from "fs";
import path from "path";
import { Readable } from "stream";
import { exec } from "child_process";
export async function downloadAndExtract(
url: string,
outputDir: string
): Promise<void> {
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
console.log(`Starting download from ${url}...`);
const response = await fetch(url);
if (!response.ok || !response.body)
throw new Error(`Failed to download ${url}`);
const nodeStream = Readable.fromWeb(response.body as any);
const compressedFilePath = path.join(outputDir, "archive.tar.xz");
const fileStream = fs.createWriteStream(compressedFilePath);
nodeStream.pipe(fileStream);
return new Promise((resolve, reject) => {
fileStream.on("finish", () => {
// Use native tar command to extract files
exec(
`tar -xJf ${compressedFilePath} -C ${outputDir}`,
(error, stdout, stderr) => {
if (error) {
console.error(`Extraction error: ${stderr}`);
reject(error);
} else {
console.log("Extraction complete");
// Clean up the archive file
fs.unlink(compressedFilePath, (err) => {
if (err) {
console.error(`Error removing archive: ${err.message}`);
reject(err);
} else {
console.log("Archive cleaned up");
resolve();
}
});
}
}
);
});
fileStream.on("error", (err) => {
console.error("File stream error", err);
reject(err);
});
});
}
// CLI execution (only runs when file is executed directly)
if (import.meta.main) {
const args = process.argv.slice(2);
if (args.length !== 2) {
console.error("Usage: bun run downloadAndExtract.ts <url> <outputDir>");
process.exit(1);
}
const [url, outputDir] = args;
downloadAndExtract(url, outputDir).catch((err) =>
console.error("Download failed", err)
);
}

View File

@@ -0,0 +1,19 @@
import { Database } from "bun:sqlite";
import { join } from "node:path";
const db = new Database(join(process.cwd(), 'data/evestatic.db'));
const query = db.query("SELECT * FROM mapSolarSystems");
const results = query.all();
const output = results.reduce((acc: any, system: any) => {
acc[system.solarSystemID] = system;
return acc;
}, {});
const jsonData = JSON.stringify(output, null, 2);
const fs = await import('fs/promises');
await fs.writeFile(join(process.cwd(), 'data/reference-data/solar_systems.json'), jsonData);
db.close();

View File

@@ -0,0 +1,26 @@
import { downloadAndExtract } from "./download-and-extract";
async function main() {
const referenceDataUrl =
"https://data.everef.net/reference-data/reference-data-latest.tar.xz";
const hoboleaksSDEUrl =
"https://data.everef.net/hoboleaks-sde/hoboleaks-sde-latest.tar.xz";
const referenceDataOutputDir = "./data/reference-data";
const hoboleaksSDEOutputDir = "./data/hoboleaks-sde";
try {
await downloadAndExtract(referenceDataUrl, referenceDataOutputDir);
console.log("Reference data downloaded and extracted successfully");
} catch (err) {
console.error("Error during download and extraction", err);
}
try {
await downloadAndExtract(hoboleaksSDEUrl, hoboleaksSDEOutputDir);
console.log("Hoboleaks SDE downloaded and extracted successfully");
} catch (err) {
console.error("Error during download and extraction", err);
}
}
main();

View File

@@ -0,0 +1,25 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"composite": true,
"strict": false,
"noImplicitAny": false,
"skipLibCheck": true,
"lib": ["ESNext"],
"typeRoots": ["src/types", "./node_modules/@types"],
"paths": {
"@/*": ["./src/*"],
"@data/*": ["./data/*"],
"@types/*": ["./types/*"]
},
"emitDeclarationOnly": true,
"noEmit": false,
"noEmitOnError": false,
"declaration": true,
"outDir": "dist/types",
"rootDir": ".",
"allowImportingTsExtensions": true
},
"include": ["src"],
"exclude": ["node_modules", "build", "**/*.test.ts"]
}

View File

@@ -0,0 +1,22 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"composite": true,
"strict": false,
"noImplicitAny": false,
"skipLibCheck": true,
"lib": ["ESNext"],
"typeRoots": ["src/types", "./node_modules/@types"],
"paths": {
"@/*": ["./src/*"]
},
"emitDeclarationOnly": true,
"noEmit": false,
"noEmitOnError": false,
"declaration": true,
"rootDir": "src",
"allowImportingTsExtensions": true
},
"include": ["src"],
"exclude": ["node_modules", "build", "**/*.test.ts"]
}

View File

@@ -0,0 +1,16 @@
import { defineConfig } from 'tsdown';
export default defineConfig([
{
entry: [
'./src/**/*.ts',
'!./src/**/*.test.ts',
],
platform: 'node',
dts: true,
minify: false,
sourcemap: true,
unbundle: true,
external: ['bun:sqlite', 'bun'],
},
]);