@rackbops/plugin-warbandeer 0.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/admin.js +74 -0
  2. package/package.json +2 -1
package/dist/admin.js ADDED
@@ -0,0 +1,74 @@
1
+ // plugins/warbandeer/src/admin/index.ts
2
+ var adminApiVersion = 1;
3
+ var PORT_RE = /^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/;
4
+ function validatePort(value) {
5
+ if (value === "" || PORT_RE.test(value))
6
+ return null;
7
+ return "Enter a port between 1 and 65535, or leave blank to disable the connector.";
8
+ }
9
+ function statusLine(state, port) {
10
+ if (!state)
11
+ return "Not installed.";
12
+ const version = state.installedVersion ? " (v" + state.installedVersion + ")" : "";
13
+ const health = state.active ? "active" : state.error ? "failed to start: " + state.error : "not active";
14
+ const connector = port ? "ingest connector configured (port " + port + ")" : "ingest connector off (no port set)";
15
+ return "Plugin " + health + version + " — " + connector + ".";
16
+ }
17
+ async function savePort(api, value) {
18
+ const invalid = validatePort(value);
19
+ if (invalid)
20
+ return { ok: false, message: invalid };
21
+ const result = await api.setEnv({ WARBANDEER_INGEST_PORT: value });
22
+ if (result.ok)
23
+ return { ok: true, message: value ? "Saved — the bot restarts on port " + value + "." : "Saved — connector disabled." };
24
+ return { ok: false, message: result.error || "Save failed." };
25
+ }
26
+ function mountAdmin(root, api) {
27
+ root.textContent = "";
28
+ const label = document.createElement("label");
29
+ label.textContent = "Ingest port";
30
+ const input = document.createElement("input");
31
+ input.type = "text";
32
+ input.placeholder = "e.g. 8082 (blank = off)";
33
+ const save = document.createElement("button");
34
+ save.textContent = "Save port";
35
+ const status = document.createElement("div");
36
+ status.className = "field-hint";
37
+ const refresh = async () => {
38
+ try {
39
+ const [env, state] = await Promise.all([api.getEnv(), api.getState()]);
40
+ const port = env && env.WARBANDEER_INGEST_PORT || "";
41
+ input.value = port;
42
+ status.textContent = statusLine(state, port);
43
+ } catch (err) {
44
+ status.textContent = "Couldn't load settings: " + (err instanceof Error ? err.message : String(err));
45
+ }
46
+ };
47
+ const onSave = async () => {
48
+ save.disabled = true;
49
+ try {
50
+ const result = await savePort(api, input.value.trim());
51
+ status.textContent = result.message;
52
+ if (result.ok)
53
+ await refresh();
54
+ } catch (err) {
55
+ status.textContent = "Save failed: " + (err instanceof Error ? err.message : String(err));
56
+ } finally {
57
+ save.disabled = false;
58
+ }
59
+ };
60
+ save.addEventListener("click", onSave);
61
+ refresh();
62
+ root.append(label, input, save, status);
63
+ return () => {
64
+ save.removeEventListener("click", onSave);
65
+ root.textContent = "";
66
+ };
67
+ }
68
+ export {
69
+ validatePort,
70
+ statusLine,
71
+ savePort,
72
+ mountAdmin,
73
+ adminApiVersion
74
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rackbops/plugin-warbandeer",
3
- "version": "0.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Warbandeer desktop-app character linking (/link, /unlink, ingest endpoint)",
5
5
  "type": "module",
6
6
  "main": "dist/plugin.js",
@@ -15,6 +15,7 @@
15
15
  },
16
16
  "botPlugin": {
17
17
  "hostApiVersion": 1,
18
+ "adminApiVersion": 1,
18
19
  "intents": [],
19
20
  "commands": ["link", "unlink"],
20
21
  "env": [