summaryrefslogtreecommitdiff
path: root/packages/backend/src/config/load.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/config/load.ts')
-rw-r--r--packages/backend/src/config/load.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/packages/backend/src/config/load.ts b/packages/backend/src/config/load.ts
new file mode 100644
index 0000000000..1b5457cdb0
--- /dev/null
+++ b/packages/backend/src/config/load.ts
@@ -0,0 +1,61 @@
+/**
+ * Config loader
+ */
+
+import * as fs from 'fs';
+import { fileURLToPath } from 'url';
+import { dirname } from 'path';
+import * as yaml from 'js-yaml';
+import { Source, Mixin } from './types';
+
+//const _filename = fileURLToPath(import.meta.url);
+const _filename = __filename;
+const _dirname = dirname(_filename);
+
+/**
+ * Path of configuration directory
+ */
+const dir = `${_dirname}/../../../../.config`;
+
+/**
+ * Path of configuration file
+ */
+const path = process.env.NODE_ENV === 'test'
+ ? `${dir}/test.yml`
+ : `${dir}/default.yml`;
+
+export default function load() {
+ const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../../built/meta.json`, 'utf-8'));
+ const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
+
+ const mixin = {} as Mixin;
+
+ const url = tryCreateUrl(config.url);
+
+ config.url = url.origin;
+
+ config.port = config.port || parseInt(process.env.PORT || '', 10);
+
+ mixin.version = meta.version;
+ mixin.host = url.host;
+ mixin.hostname = url.hostname;
+ mixin.scheme = url.protocol.replace(/:$/, '');
+ mixin.wsScheme = mixin.scheme.replace('http', 'ws');
+ mixin.wsUrl = `${mixin.wsScheme}://${mixin.host}`;
+ mixin.apiUrl = `${mixin.scheme}://${mixin.host}/api`;
+ mixin.authUrl = `${mixin.scheme}://${mixin.host}/auth`;
+ mixin.driveUrl = `${mixin.scheme}://${mixin.host}/files`;
+ mixin.userAgent = `Misskey/${meta.version} (${config.url})`;
+
+ if (!config.redis.prefix) config.redis.prefix = mixin.host;
+
+ return Object.assign(config, mixin);
+}
+
+function tryCreateUrl(url: string) {
+ try {
+ return new URL(url);
+ } catch (e) {
+ throw `url="${url}" is not a valid URL.`;
+ }
+}