summary refs log tree commit diff
diff options
context:
space:
mode:
authorTheArcaneBrony <myrainbowdash949@gmail.com>2022-08-13 08:54:50 +0200
committerTheArcaneBrony <myrainbowdash949@gmail.com>2022-09-04 10:48:54 +0200
commit87d6a6778c6d502df511b639375fa219ac8713c6 (patch)
tree5da20d24c2f7fd17036e7ce67c72a25ec6c7bc36
parentfeat(plugins): event system (diff)
downloadserver-87d6a6778c6d502df511b639375fa219ac8713c6.tar.xz
Update plugin loading, update example plugin, add ci task for testing if builds work
-rw-r--r--.github/release_body_template.md (renamed from .github/relase_body_template.md)0
-rw-r--r--.github/workflows/test_build.yml29
-rw-r--r--scripts/build.js10
-rw-r--r--src/Server.ts7
-rw-r--r--src/plugins/example-plugin/ExamplePlugin.ts7
-rw-r--r--src/plugins/example-plugin/plugin.json10
-rw-r--r--src/util/index.ts2
-rw-r--r--src/util/plugin/Plugin.ts9
-rw-r--r--src/util/plugin/PluginLoader.ts4
-rw-r--r--src/util/plugin/PluginManifest.ts1
10 files changed, 66 insertions, 13 deletions
diff --git a/.github/relase_body_template.md b/.github/release_body_template.md
index c410b0c2..c410b0c2 100644
--- a/.github/relase_body_template.md
+++ b/.github/release_body_template.md
diff --git a/.github/workflows/test_build.yml b/.github/workflows/test_build.yml
new file mode 100644
index 00000000..dd8744e0
--- /dev/null
+++ b/.github/workflows/test_build.yml
@@ -0,0 +1,29 @@
+on:
+    workflow_dispatch:
+    push:
+        paths:
+            - "**"
+
+name: Test Build
+
+jobs:
+    insiders-build:
+        strategy:
+            matrix:
+                os: [windows, macos, ubuntu]
+                include:
+                    - os: windows
+                    - os: macos
+                    - os: ubuntu
+        runs-on: ${{ matrix.os }}-latest
+        steps:
+            - uses: actions/checkout@v2
+            - uses: actions/setup-node@v2
+              env:
+                  MONGOMS_VERSION: 4.4.3
+              with:
+                  node-version: 18
+            - run: |
+                  cd bundle
+                  npm run setup
+                  npm run build clean logerrors pretty-errors propagate-err
diff --git a/scripts/build.js b/scripts/build.js
index f618100c..7421aa4f 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -29,11 +29,11 @@ if (silent) console.error = console.log = function () {};
 
 if (argv.includes("clean")) {
 	console.log(`[${++i}/${steps}] Cleaning...`);
-	let d = "dist";
-	if (fs.existsSync(d)) {
-		fs.rmSync(d, { recursive: true });
-		if (verbose) console.log(`Deleted ${d}!`);
-	}
+	let d = "../" + "/dist";
+		if (fs.existsSync(d)) {
+			fs.rmSync(d, { recursive: true });
+			if (verbose) console.log(`Deleted ${d}!`);
+		}
 }
 
 console.log(`[${++i}/${steps}] Compiling src files ...`);
diff --git a/src/Server.ts b/src/Server.ts
index 83120412..e672bd0c 100644
--- a/src/Server.ts
+++ b/src/Server.ts
@@ -7,10 +7,7 @@ import * as Gateway from "@fosscord/gateway";
 import { Config, getOrInitialiseDatabase } from "@fosscord/util";
 import * as Sentry from "@sentry/node";
 import * as Tracing from "@sentry/tracing";
-import express from "express";
-import http from "http";
-import { bold, green, yellow } from "picocolors";
-// import { PluginLoader } from "@fosscord/util";
+import { PluginLoader } from "@fosscord/util";
 
 const app = express();
 const server = http.createServer();
@@ -64,7 +61,7 @@ async function main() {
 	}
 
 	console.log(`[Server] ${green(`listening on port ${bold(port)}`)}`);
-	// PluginLoader.loadPlugins();
+	PluginLoader.loadPlugins();
 }
 
 main().catch(console.error);
diff --git a/src/plugins/example-plugin/ExamplePlugin.ts b/src/plugins/example-plugin/ExamplePlugin.ts
new file mode 100644
index 00000000..e6f70657
--- /dev/null
+++ b/src/plugins/example-plugin/ExamplePlugin.ts
@@ -0,0 +1,7 @@
+import { Plugin } from "@fosscord/util";
+
+export default class TestPlugin extends Plugin {
+    onPluginLoaded(): void {
+        console.log("Hello from test plugin! IT WORKS!!!!!!!");
+    }
+}
\ No newline at end of file
diff --git a/src/plugins/example-plugin/plugin.json b/src/plugins/example-plugin/plugin.json
new file mode 100644
index 00000000..2fcb7a00
--- /dev/null
+++ b/src/plugins/example-plugin/plugin.json
@@ -0,0 +1,10 @@
+{
+    "id": "example-plugin",
+    "name": "Fosscord example plugin",
+    "authors": [
+        "The Arcane Brony"
+    ],
+    "repository": "https://github.com/fosscord/fosscord-server",
+    "license": "",
+    "index": "ExamplePlugin.js"
+}
diff --git a/src/util/index.ts b/src/util/index.ts
index b26ed278..0cf30a71 100644
--- a/src/util/index.ts
+++ b/src/util/index.ts
@@ -7,3 +7,5 @@ export * from "./interfaces/index";
 export * from "./schemas";
 export * from "./util/index";
 export * from "./util/MFA";
+export * from "./schemas";
+export * from "./plugin";
\ No newline at end of file
diff --git a/src/util/plugin/Plugin.ts b/src/util/plugin/Plugin.ts
index 96e05843..1c86a006 100644
--- a/src/util/plugin/Plugin.ts
+++ b/src/util/plugin/Plugin.ts
@@ -6,7 +6,14 @@ type PluginEvents = {
 	loaded: () => void;
 };
 
-export class Plugin extends (EventEmitter as new () => TypedEventEmitter<PluginEvents>) {
+//this doesnt work, check later:
+ //(EventEmitter as new () => TypedEventEmitter<PluginEvents>) {
+export class Plugin extends EventEmitter {
+	private _untypedOn = this.on
+	private _untypedEmit = this.emit
+	public on = <K extends keyof PluginEvents>(event: K, listener: PluginEvents[K]): this => this._untypedOn(event, listener)
+	public emit = <K extends keyof PluginEvents>(event: K, ...args: Parameters<PluginEvents[K]>): boolean => this._untypedEmit(event, ...args)
+
 	async init() {
 		// insert default config into database?
 	}
diff --git a/src/util/plugin/PluginLoader.ts b/src/util/plugin/PluginLoader.ts
index b46ef269..e69cb499 100644
--- a/src/util/plugin/PluginLoader.ts
+++ b/src/util/plugin/PluginLoader.ts
@@ -2,7 +2,7 @@ import path from "path";
 import fs from "fs";
 import { Plugin, PluginManifest } from "./";
 
-const root = process.env.PLUGIN_LOCATION || "../plugins";
+const root = process.env.PLUGIN_LOCATION || "dist/plugins";
 
 let pluginsLoaded = false;
 export class PluginLoader {
@@ -24,7 +24,7 @@ export class PluginLoader {
 			console.log(
 				`Plugin info: ${manifest.name} (${manifest.id}), written by ${manifest.authors}, available at ${manifest.repository}`
 			);
-			const module_ = require(path.join(modPath, "dist", "index.js")) as Plugin;
+			const module_ = require(path.join(modPath, manifest.index)) as Plugin;
 			try {
 				await module_.init();
 				module_.emit("loaded");
diff --git a/src/util/plugin/PluginManifest.ts b/src/util/plugin/PluginManifest.ts
index b171956b..01b2b084 100644
--- a/src/util/plugin/PluginManifest.ts
+++ b/src/util/plugin/PluginManifest.ts
@@ -6,4 +6,5 @@ export class PluginManifest {
     license: string;
 	version: string // semver
 	versionCode: number // integer
+    index: string;
 }
\ No newline at end of file