diff --git a/.gitattributes b/.gitattributes
index 283a77c..28b2196 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,6 +3,6 @@
*.nix -crlf
.husky/pre-commit -crlf
-# Don't display diffs for flake.lock
+# Don't display diffs for large generated files
flake.lock -diff
-package-lock.json
+package-lock.json -diff
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000..2503b38
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,43 @@
+import globals from "globals";
+import path from "node:path";
+import {fileURLToPath} from "node:url";
+import js from "@eslint/js";
+import {FlatCompat} from "@eslint/eslintrc";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const compat = new FlatCompat({
+ baseDirectory: __dirname,
+ recommendedConfig: js.configs.recommended,
+ allConfig: js.configs.all,
+});
+
+export default [
+ {
+ ignores: [
+ "**/node_modules",
+ "**/dist",
+ "**/README.md",
+ "**/COPYING",
+ "src/webrtc",
+ "**/scripts/",
+ "**/assets",
+ ],
+ },
+ ...compat.extends(
+ "eslint:recommended"
+ ),
+ {
+ plugins: {},
+
+ languageOptions: {
+ globals: {
+ ...globals.node,
+ },
+ },
+
+ rules: {
+ "no-mixed-spaces-and-tabs": "off"
+ },
+ },
+];
diff --git a/package-lock.json b/package-lock.json
index ad7a8ed..8ddc880 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,10 @@
"ws": "^8.18.2"
},
"devDependencies": {
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "^9.27.0",
"eslint": "^9.27.0",
+ "globals": "^16.2.0",
"husky": "^9.1.7",
"prettier": "^3.5.3",
"prettier-quick": "^0.0.5"
@@ -126,6 +129,19 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@eslint/js": {
"version": "9.27.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
@@ -1071,9 +1087,9 @@
}
},
"node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz",
+ "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==",
"dev": true,
"license": "MIT",
"engines": {
diff --git a/package.json b/package.json
index 85db6cd..9d2c557 100644
--- a/package.json
+++ b/package.json
@@ -12,8 +12,16 @@
},
"author": "",
"license": "ISC",
+ "_moduleAliases": {
+ "@api": "./src/api",
+ "@db": "./src/db",
+ "@utils": "./src/util"
+ },
"devDependencies": {
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "^9.27.0",
"eslint": "^9.27.0",
+ "globals": "^16.2.0",
"husky": "^9.1.7",
"prettier": "^3.5.3",
"prettier-quick": "^0.0.5"
diff --git a/src/api/index.js b/src/api/index.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/index.js
diff --git a/src/db/index.js b/src/db/index.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/db/index.js
diff --git a/src/util/index.js b/src/util/index.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/util/index.js
|