@shardworks/oculus-apparatus 0.1.128
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.
- package/LICENSE +15 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/oculus.d.ts +15 -0
- package/dist/oculus.d.ts.map +1 -0
- package/dist/oculus.js +466 -0
- package/dist/oculus.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sean Boots
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
+
PERFORMANCE OF THIS SOFTWARE.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @shardworks/oculus-apparatus — The Oculus.
|
|
3
|
+
*
|
|
4
|
+
* Web dashboard apparatus for the guild. Serves pages contributed by plugins,
|
|
5
|
+
* exposes guild tools as REST endpoints, and provides a unified web interface.
|
|
6
|
+
*/
|
|
7
|
+
export { type OculusApi, type OculusConfig, type OculusKit, type PageContribution, type RouteContribution, } from './types.ts';
|
|
8
|
+
export { createOculus } from './oculus.ts';
|
|
9
|
+
import type { OculusConfig } from './types.ts';
|
|
10
|
+
declare module '@shardworks/nexus-core' {
|
|
11
|
+
interface GuildConfig {
|
|
12
|
+
oculus?: OculusConfig;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
declare const _default: import("@shardworks/nexus-core").Plugin;
|
|
16
|
+
export default _default;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,WAAW;QACnB,MAAM,CAAC,EAAE,YAAY,CAAC;KACvB;CACF;;AAED,wBAA8B"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @shardworks/oculus-apparatus — The Oculus.
|
|
3
|
+
*
|
|
4
|
+
* Web dashboard apparatus for the guild. Serves pages contributed by plugins,
|
|
5
|
+
* exposes guild tools as REST endpoints, and provides a unified web interface.
|
|
6
|
+
*/
|
|
7
|
+
import { createOculus } from "./oculus.js";
|
|
8
|
+
export {} from "./types.js";
|
|
9
|
+
export { createOculus } from "./oculus.js";
|
|
10
|
+
export default createOculus();
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAMN,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C,eAAe,YAAY,EAAE,CAAC"}
|
package/dist/oculus.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Oculus — web dashboard apparatus.
|
|
3
|
+
*
|
|
4
|
+
* Serves a web dashboard via Hono. Plugins contribute pages as static asset
|
|
5
|
+
* directories and custom API routes through kit contributions. Guild tools are
|
|
6
|
+
* automatically exposed as REST endpoints.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import type { Plugin } from '@shardworks/nexus-core';
|
|
10
|
+
export declare function toolNameToRoute(name: string): string;
|
|
11
|
+
export declare function permissionToMethod(permission: string | undefined): 'GET' | 'POST' | 'DELETE';
|
|
12
|
+
export declare function coerceParams(shape: Record<string, z.ZodTypeAny>, params: Record<string, string>): Record<string, unknown>;
|
|
13
|
+
export declare function injectChrome(html: string, stylesheetPath: string, navHtml: string): string;
|
|
14
|
+
export declare function createOculus(): Plugin;
|
|
15
|
+
//# sourceMappingURL=oculus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oculus.d.ts","sourceRoot":"","sources":["../src/oculus.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,MAAM,EAA8C,MAAM,wBAAwB,CAAC;AAiCjG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAS5F;AAoBD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,EACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA4B1F;AAgED,wBAAgB,YAAY,IAAI,MAAM,CAsVrC"}
|
package/dist/oculus.js
ADDED
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Oculus — web dashboard apparatus.
|
|
3
|
+
*
|
|
4
|
+
* Serves a web dashboard via Hono. Plugins contribute pages as static asset
|
|
5
|
+
* directories and custom API routes through kit contributions. Guild tools are
|
|
6
|
+
* automatically exposed as REST endpoints.
|
|
7
|
+
*/
|
|
8
|
+
import fs from 'node:fs';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { Hono } from 'hono';
|
|
11
|
+
import { serve } from '@hono/node-server';
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { guild } from '@shardworks/nexus-core';
|
|
14
|
+
// ── MIME types ────────────────────────────────────────────────────────
|
|
15
|
+
const MIME_TYPES = {
|
|
16
|
+
'.html': 'text/html; charset=utf-8',
|
|
17
|
+
'.css': 'text/css; charset=utf-8',
|
|
18
|
+
'.js': 'application/javascript; charset=utf-8',
|
|
19
|
+
'.mjs': 'application/javascript; charset=utf-8',
|
|
20
|
+
'.json': 'application/json; charset=utf-8',
|
|
21
|
+
'.png': 'image/png',
|
|
22
|
+
'.jpg': 'image/jpeg',
|
|
23
|
+
'.jpeg': 'image/jpeg',
|
|
24
|
+
'.gif': 'image/gif',
|
|
25
|
+
'.svg': 'image/svg+xml',
|
|
26
|
+
'.ico': 'image/x-icon',
|
|
27
|
+
'.woff': 'font/woff',
|
|
28
|
+
'.woff2': 'font/woff2',
|
|
29
|
+
'.ttf': 'font/ttf',
|
|
30
|
+
'.map': 'application/json',
|
|
31
|
+
};
|
|
32
|
+
function getMimeType(filePath) {
|
|
33
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
34
|
+
return MIME_TYPES[ext] ?? 'application/octet-stream';
|
|
35
|
+
}
|
|
36
|
+
// ── Tool→REST mapping helpers ─────────────────────────────────────────
|
|
37
|
+
export function toolNameToRoute(name) {
|
|
38
|
+
const idx = name.indexOf('-');
|
|
39
|
+
if (idx === -1)
|
|
40
|
+
return `/api/${name}`;
|
|
41
|
+
return `/api/${name.slice(0, idx)}/${name.slice(idx + 1)}`;
|
|
42
|
+
}
|
|
43
|
+
export function permissionToMethod(permission) {
|
|
44
|
+
if (permission === undefined)
|
|
45
|
+
return 'GET';
|
|
46
|
+
const level = permission.includes(':')
|
|
47
|
+
? permission.slice(permission.lastIndexOf(':') + 1)
|
|
48
|
+
: permission;
|
|
49
|
+
if (level === 'read')
|
|
50
|
+
return 'GET';
|
|
51
|
+
if (level === 'write' || level === 'admin')
|
|
52
|
+
return 'POST';
|
|
53
|
+
if (level === 'delete')
|
|
54
|
+
return 'DELETE';
|
|
55
|
+
return 'POST';
|
|
56
|
+
}
|
|
57
|
+
// ── Query param coercion ──────────────────────────────────────────────
|
|
58
|
+
function isNumberSchema(schema) {
|
|
59
|
+
let inner = schema;
|
|
60
|
+
if (inner instanceof z.ZodOptional)
|
|
61
|
+
inner = inner.unwrap();
|
|
62
|
+
if (inner instanceof z.ZodDefault)
|
|
63
|
+
inner = inner.unwrap();
|
|
64
|
+
if (inner instanceof z.ZodOptional)
|
|
65
|
+
inner = inner.unwrap();
|
|
66
|
+
return inner instanceof z.ZodNumber;
|
|
67
|
+
}
|
|
68
|
+
function isBooleanSchema(schema) {
|
|
69
|
+
let inner = schema;
|
|
70
|
+
if (inner instanceof z.ZodOptional)
|
|
71
|
+
inner = inner.unwrap();
|
|
72
|
+
if (inner instanceof z.ZodDefault)
|
|
73
|
+
inner = inner.unwrap();
|
|
74
|
+
if (inner instanceof z.ZodOptional)
|
|
75
|
+
inner = inner.unwrap();
|
|
76
|
+
return inner instanceof z.ZodBoolean;
|
|
77
|
+
}
|
|
78
|
+
export function coerceParams(shape, params) {
|
|
79
|
+
const result = { ...params };
|
|
80
|
+
for (const [key, schema] of Object.entries(shape)) {
|
|
81
|
+
const value = result[key];
|
|
82
|
+
if (typeof value !== 'string')
|
|
83
|
+
continue;
|
|
84
|
+
if (isNumberSchema(schema)) {
|
|
85
|
+
result[key] = Number(value);
|
|
86
|
+
}
|
|
87
|
+
else if (isBooleanSchema(schema)) {
|
|
88
|
+
result[key] = value === 'true';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
// ── Chrome injection ─────────────────────────────────────────────────
|
|
94
|
+
export function injectChrome(html, stylesheetPath, navHtml) {
|
|
95
|
+
// Check for </head> case-insensitively
|
|
96
|
+
const headCloseMatch = html.match(/<\/head>/i);
|
|
97
|
+
const bodyOpenMatch = html.match(/<body[^>]*>/i);
|
|
98
|
+
// If neither tag present, return unmodified
|
|
99
|
+
if (!headCloseMatch && !bodyOpenMatch)
|
|
100
|
+
return html;
|
|
101
|
+
let result = html;
|
|
102
|
+
// Insert stylesheet link before </head>
|
|
103
|
+
if (headCloseMatch && headCloseMatch.index !== undefined) {
|
|
104
|
+
const idx = headCloseMatch.index;
|
|
105
|
+
result =
|
|
106
|
+
result.slice(0, idx) +
|
|
107
|
+
`<link rel="stylesheet" href="${stylesheetPath}">` +
|
|
108
|
+
result.slice(idx);
|
|
109
|
+
}
|
|
110
|
+
// Insert nav after <body...>
|
|
111
|
+
// Need to recalculate position after potential head insertion
|
|
112
|
+
const bodyMatch = result.match(/<body[^>]*>/i);
|
|
113
|
+
if (bodyMatch && bodyMatch.index !== undefined) {
|
|
114
|
+
const idx = bodyMatch.index + bodyMatch[0].length;
|
|
115
|
+
result = result.slice(0, idx) + navHtml + result.slice(idx);
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
function buildNavHtml(pages) {
|
|
120
|
+
const pageLinks = pages
|
|
121
|
+
.map((p) => `<a href="/pages/${p.id}/">${p.title}</a>`)
|
|
122
|
+
.join('\n ');
|
|
123
|
+
return `<nav id="oculus-nav">
|
|
124
|
+
<a href="/">Guild</a>
|
|
125
|
+
${pageLinks}
|
|
126
|
+
</nav>`;
|
|
127
|
+
}
|
|
128
|
+
function zodTypeToJsonType(zodType) {
|
|
129
|
+
if (zodType instanceof z.ZodString)
|
|
130
|
+
return 'string';
|
|
131
|
+
if (zodType instanceof z.ZodNumber)
|
|
132
|
+
return 'number';
|
|
133
|
+
if (zodType instanceof z.ZodBoolean)
|
|
134
|
+
return 'boolean';
|
|
135
|
+
if (zodType instanceof z.ZodArray)
|
|
136
|
+
return 'array';
|
|
137
|
+
if (zodType instanceof z.ZodObject)
|
|
138
|
+
return 'object';
|
|
139
|
+
if (zodType instanceof z.ZodEnum)
|
|
140
|
+
return 'string';
|
|
141
|
+
if (zodType instanceof z.ZodLiteral)
|
|
142
|
+
return typeof zodType._def.values[0];
|
|
143
|
+
if (zodType instanceof z.ZodUnion)
|
|
144
|
+
return 'union';
|
|
145
|
+
if (zodType instanceof z.ZodNullable)
|
|
146
|
+
return zodTypeToJsonType(zodType.unwrap());
|
|
147
|
+
return 'unknown';
|
|
148
|
+
}
|
|
149
|
+
function extractSingleParam(zodType) {
|
|
150
|
+
let isOptional = false;
|
|
151
|
+
let inner = zodType;
|
|
152
|
+
if (inner instanceof z.ZodOptional) {
|
|
153
|
+
isOptional = true;
|
|
154
|
+
inner = inner.unwrap();
|
|
155
|
+
}
|
|
156
|
+
if (inner instanceof z.ZodDefault) {
|
|
157
|
+
isOptional = true;
|
|
158
|
+
inner = inner.unwrap();
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
type: zodTypeToJsonType(inner),
|
|
162
|
+
description: inner.description ?? null,
|
|
163
|
+
optional: isOptional,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function extractParams(schema) {
|
|
167
|
+
const shape = schema.shape;
|
|
168
|
+
const result = {};
|
|
169
|
+
for (const [key, zodType] of Object.entries(shape)) {
|
|
170
|
+
result[key] = extractSingleParam(zodType);
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
// ── Apparatus factory ─────────────────────────────────────────────────
|
|
175
|
+
export function createOculus() {
|
|
176
|
+
let serverPort = 7470;
|
|
177
|
+
let server = null;
|
|
178
|
+
const api = {
|
|
179
|
+
port() {
|
|
180
|
+
return serverPort;
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
return {
|
|
184
|
+
apparatus: {
|
|
185
|
+
requires: ['tools'],
|
|
186
|
+
consumes: ['pages', 'routes'],
|
|
187
|
+
provides: api,
|
|
188
|
+
async start(ctx) {
|
|
189
|
+
const g = guild();
|
|
190
|
+
const oculusConfig = g.guildConfig().oculus ?? {};
|
|
191
|
+
const port = oculusConfig.port ?? 7470;
|
|
192
|
+
const app = new Hono();
|
|
193
|
+
// Track registered pages and custom route paths
|
|
194
|
+
const pages = [];
|
|
195
|
+
const customRoutePaths = new Set();
|
|
196
|
+
const mappedToolRoutes = new Set();
|
|
197
|
+
// ── Custom route registration helper ─────────────────────────
|
|
198
|
+
function registerCustomRoute(route, pluginId) {
|
|
199
|
+
if (!route.path.startsWith('/api/')) {
|
|
200
|
+
console.warn(`[oculus] Custom route "${route.path}" from "${pluginId}" must start with /api/ — skipped`);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const method = route.method.toLowerCase();
|
|
204
|
+
app[method](route.path, route.handler);
|
|
205
|
+
customRoutePaths.add(route.path);
|
|
206
|
+
}
|
|
207
|
+
// ── Page serving helper ───────────────────────────────────────
|
|
208
|
+
function resolveDirForPackage(packageName, dir) {
|
|
209
|
+
return path.join(g.home, 'node_modules', packageName, dir);
|
|
210
|
+
}
|
|
211
|
+
function registerPage(page, resolvedDir) {
|
|
212
|
+
pages.push({ ...page });
|
|
213
|
+
app.get(`/pages/${page.id}/*`, async (c) => {
|
|
214
|
+
const requestPath = c.req.path;
|
|
215
|
+
const prefix = `/pages/${page.id}/`;
|
|
216
|
+
const filePath = requestPath.slice(prefix.length) || 'index.html';
|
|
217
|
+
// Prevent directory traversal
|
|
218
|
+
if (filePath.includes('..')) {
|
|
219
|
+
return c.text('Not found', 404);
|
|
220
|
+
}
|
|
221
|
+
const absolutePath = path.join(resolvedDir, filePath);
|
|
222
|
+
// Ensure file is within resolved dir
|
|
223
|
+
if (!absolutePath.startsWith(resolvedDir)) {
|
|
224
|
+
return c.text('Not found', 404);
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
const content = fs.readFileSync(absolutePath);
|
|
228
|
+
const mimeType = getMimeType(absolutePath);
|
|
229
|
+
// Only inject chrome for the root index.html
|
|
230
|
+
const isIndexHtml = filePath === 'index.html' || filePath === '';
|
|
231
|
+
if (isIndexHtml && mimeType.startsWith('text/html')) {
|
|
232
|
+
const html = content.toString('utf-8');
|
|
233
|
+
const navHtml = buildNavHtml(pages);
|
|
234
|
+
const injected = injectChrome(html, '/static/style.css', navHtml);
|
|
235
|
+
return new Response(injected, {
|
|
236
|
+
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return new Response(content, {
|
|
240
|
+
headers: { 'Content-Type': mimeType },
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return c.text('Not found', 404);
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
// ── Tool route registration helper ───────────────────────────
|
|
249
|
+
function registerToolRoute(toolDef, instrumentarium) {
|
|
250
|
+
const routePath = toolNameToRoute(toolDef.name);
|
|
251
|
+
const method = permissionToMethod(toolDef.permission);
|
|
252
|
+
if (mappedToolRoutes.has(routePath))
|
|
253
|
+
return;
|
|
254
|
+
if (customRoutePaths.has(routePath)) {
|
|
255
|
+
console.warn(`[oculus] Tool route ${method} ${routePath} conflicts with custom route from plugin — skipped`);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
void instrumentarium; // suppress unused warning
|
|
259
|
+
const shape = toolDef.params.shape;
|
|
260
|
+
if (method === 'GET') {
|
|
261
|
+
app.get(routePath, async (c) => {
|
|
262
|
+
try {
|
|
263
|
+
const rawQuery = c.req.query();
|
|
264
|
+
const coerced = coerceParams(shape, rawQuery);
|
|
265
|
+
const validated = toolDef.params.parse(coerced);
|
|
266
|
+
const result = await toolDef.handler(validated);
|
|
267
|
+
return c.json(result);
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
if (err instanceof z.ZodError) {
|
|
271
|
+
return c.json({ error: err.message, details: err.issues }, 400);
|
|
272
|
+
}
|
|
273
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
274
|
+
return c.json({ error: message }, 500);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
else if (method === 'DELETE') {
|
|
279
|
+
app.delete(routePath, async (c) => {
|
|
280
|
+
try {
|
|
281
|
+
const body = await c.req.json();
|
|
282
|
+
const validated = toolDef.params.parse(body);
|
|
283
|
+
const result = await toolDef.handler(validated);
|
|
284
|
+
return c.json(result);
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
if (err instanceof z.ZodError) {
|
|
288
|
+
return c.json({ error: err.message, details: err.issues }, 400);
|
|
289
|
+
}
|
|
290
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
291
|
+
return c.json({ error: message }, 500);
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
app.post(routePath, async (c) => {
|
|
297
|
+
try {
|
|
298
|
+
const body = await c.req.json();
|
|
299
|
+
const validated = toolDef.params.parse(body);
|
|
300
|
+
const result = await toolDef.handler(validated);
|
|
301
|
+
return c.json(result);
|
|
302
|
+
}
|
|
303
|
+
catch (err) {
|
|
304
|
+
if (err instanceof z.ZodError) {
|
|
305
|
+
return c.json({ error: err.message, details: err.issues }, 400);
|
|
306
|
+
}
|
|
307
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
308
|
+
return c.json({ error: message }, 500);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
mappedToolRoutes.add(routePath);
|
|
313
|
+
}
|
|
314
|
+
// ── Scan contributions from a kit ────────────────────────────
|
|
315
|
+
function scanKit(kit) {
|
|
316
|
+
const oculusKit = kit.kit;
|
|
317
|
+
if (oculusKit.routes) {
|
|
318
|
+
for (const route of oculusKit.routes) {
|
|
319
|
+
registerCustomRoute(route, kit.id);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (oculusKit.pages) {
|
|
323
|
+
for (const page of oculusKit.pages) {
|
|
324
|
+
const resolvedDir = resolveDirForPackage(kit.packageName, page.dir);
|
|
325
|
+
registerPage(page, resolvedDir);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function scanApparatus(apparatus) {
|
|
330
|
+
if (!apparatus.apparatus.supportKit)
|
|
331
|
+
return;
|
|
332
|
+
const oculusKit = apparatus.apparatus.supportKit;
|
|
333
|
+
if (oculusKit.routes) {
|
|
334
|
+
for (const route of oculusKit.routes) {
|
|
335
|
+
registerCustomRoute(route, apparatus.id);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (oculusKit.pages) {
|
|
339
|
+
for (const page of oculusKit.pages) {
|
|
340
|
+
const resolvedDir = resolveDirForPackage(apparatus.packageName, page.dir);
|
|
341
|
+
registerPage(page, resolvedDir);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// ── Scan existing kits and apparatuses ───────────────────────
|
|
346
|
+
for (const kit of g.kits()) {
|
|
347
|
+
scanKit(kit);
|
|
348
|
+
}
|
|
349
|
+
for (const apparatus of g.apparatuses()) {
|
|
350
|
+
scanApparatus(apparatus);
|
|
351
|
+
}
|
|
352
|
+
// ── Register custom routes first ─────────────────────────────
|
|
353
|
+
// (already done in scanKit/scanApparatus above)
|
|
354
|
+
// ── Register tool routes ─────────────────────────────────────
|
|
355
|
+
const instrumentarium = g.apparatus('tools');
|
|
356
|
+
const allTools = instrumentarium.list();
|
|
357
|
+
const patronTools = allTools.filter((r) => !r.definition.callableBy || r.definition.callableBy.includes('patron'));
|
|
358
|
+
for (const resolved of patronTools) {
|
|
359
|
+
registerToolRoute(resolved.definition, instrumentarium);
|
|
360
|
+
}
|
|
361
|
+
// ── GET /api/_tools ──────────────────────────────────────────
|
|
362
|
+
app.get('/api/_tools', (c) => {
|
|
363
|
+
const tools = instrumentarium.list().filter((r) => !r.definition.callableBy || r.definition.callableBy.includes('patron'));
|
|
364
|
+
const entries = tools.map((r) => ({
|
|
365
|
+
name: r.definition.name,
|
|
366
|
+
route: toolNameToRoute(r.definition.name),
|
|
367
|
+
method: permissionToMethod(r.definition.permission),
|
|
368
|
+
description: r.definition.description,
|
|
369
|
+
params: extractParams(r.definition.params),
|
|
370
|
+
}));
|
|
371
|
+
return c.json(entries);
|
|
372
|
+
});
|
|
373
|
+
// ── Static assets ────────────────────────────────────────────
|
|
374
|
+
const staticDir = path.join(import.meta.dirname, 'static');
|
|
375
|
+
app.get('/static/*', (c) => {
|
|
376
|
+
const requestPath = c.req.path;
|
|
377
|
+
const filePath = requestPath.slice('/static/'.length);
|
|
378
|
+
if (filePath.includes('..')) {
|
|
379
|
+
return c.text('Not found', 404);
|
|
380
|
+
}
|
|
381
|
+
const absolutePath = path.join(staticDir, filePath);
|
|
382
|
+
try {
|
|
383
|
+
const content = fs.readFileSync(absolutePath);
|
|
384
|
+
const mimeType = getMimeType(absolutePath);
|
|
385
|
+
return new Response(content, {
|
|
386
|
+
headers: { 'Content-Type': mimeType },
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
return c.text('Not found', 404);
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
// ── Home page ────────────────────────────────────────────────
|
|
394
|
+
app.get('/', (c) => {
|
|
395
|
+
const guildName = g.guildConfig().name;
|
|
396
|
+
const navHtml = buildNavHtml(pages);
|
|
397
|
+
const pageLinks = pages.length > 0
|
|
398
|
+
? pages
|
|
399
|
+
.map((p) => `<li><a href="/pages/${p.id}/">${p.title}</a></li>`)
|
|
400
|
+
.join('\n ')
|
|
401
|
+
: '<li class="empty-state">No pages registered.</li>';
|
|
402
|
+
const html = `<!DOCTYPE html>
|
|
403
|
+
<html lang="en">
|
|
404
|
+
<head>
|
|
405
|
+
<meta charset="UTF-8">
|
|
406
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
407
|
+
<title>${guildName} — Guild Dashboard</title>
|
|
408
|
+
<link rel="stylesheet" href="/static/style.css">
|
|
409
|
+
</head>
|
|
410
|
+
<body>
|
|
411
|
+
${navHtml}
|
|
412
|
+
<main style="padding: 24px;">
|
|
413
|
+
<h1>${guildName}</h1>
|
|
414
|
+
<div class="card">
|
|
415
|
+
<h2>Pages</h2>
|
|
416
|
+
<ul>
|
|
417
|
+
${pageLinks}
|
|
418
|
+
</ul>
|
|
419
|
+
</div>
|
|
420
|
+
</main>
|
|
421
|
+
</body>
|
|
422
|
+
</html>`;
|
|
423
|
+
return c.html(html);
|
|
424
|
+
});
|
|
425
|
+
// ── Late-arriving plugins ─────────────────────────────────────
|
|
426
|
+
ctx.on('plugin:initialized', (plugin) => {
|
|
427
|
+
const loaded = plugin;
|
|
428
|
+
if ('apparatus' in loaded) {
|
|
429
|
+
scanApparatus(loaded);
|
|
430
|
+
}
|
|
431
|
+
else if ('kit' in loaded) {
|
|
432
|
+
scanKit(loaded);
|
|
433
|
+
}
|
|
434
|
+
// Check for new patron-callable tools
|
|
435
|
+
const currentTools = instrumentarium.list().filter((r) => !r.definition.callableBy || r.definition.callableBy.includes('patron'));
|
|
436
|
+
for (const resolved of currentTools) {
|
|
437
|
+
registerToolRoute(resolved.definition, instrumentarium);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
// ── Start HTTP server ─────────────────────────────────────────
|
|
441
|
+
await new Promise((resolve, reject) => {
|
|
442
|
+
server = serve({ fetch: app.fetch, port }, () => {
|
|
443
|
+
serverPort = port;
|
|
444
|
+
console.log(`[oculus] Listening on http://localhost:${port}`);
|
|
445
|
+
resolve();
|
|
446
|
+
});
|
|
447
|
+
server.on('error', reject);
|
|
448
|
+
});
|
|
449
|
+
},
|
|
450
|
+
async stop() {
|
|
451
|
+
if (server) {
|
|
452
|
+
await new Promise((resolve, reject) => {
|
|
453
|
+
server.close((err) => {
|
|
454
|
+
if (err)
|
|
455
|
+
reject(err);
|
|
456
|
+
else
|
|
457
|
+
resolve();
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
server = null;
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
},
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
//# sourceMappingURL=oculus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oculus.js","sourceRoot":"","sources":["../src/oculus.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
/** A page contributed by a plugin kit or apparatus supportKit. */
|
|
3
|
+
export interface PageContribution {
|
|
4
|
+
/** Unique page ID — becomes the URL segment: /pages/{id}/ */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Human-readable title used in navigation. */
|
|
7
|
+
title: string;
|
|
8
|
+
/**
|
|
9
|
+
* Path to the directory containing the page's static assets,
|
|
10
|
+
* relative to the contributing package's root in node_modules.
|
|
11
|
+
* Must contain an index.html entry point.
|
|
12
|
+
*/
|
|
13
|
+
dir: string;
|
|
14
|
+
}
|
|
15
|
+
/** A custom route contributed by a plugin kit or apparatus supportKit. */
|
|
16
|
+
export interface RouteContribution {
|
|
17
|
+
/** HTTP method (uppercase): 'GET', 'POST', 'DELETE', etc. */
|
|
18
|
+
method: string;
|
|
19
|
+
/** Hono path pattern. Must begin with /api/. */
|
|
20
|
+
path: string;
|
|
21
|
+
/** Hono handler function. */
|
|
22
|
+
handler: (c: Context) => Response | Promise<Response>;
|
|
23
|
+
}
|
|
24
|
+
/** Kit contribution interface — consumed by the Oculus. */
|
|
25
|
+
export interface OculusKit {
|
|
26
|
+
pages?: PageContribution[];
|
|
27
|
+
routes?: RouteContribution[];
|
|
28
|
+
}
|
|
29
|
+
/** The Oculus configuration from guild.json under 'oculus'. */
|
|
30
|
+
export interface OculusConfig {
|
|
31
|
+
/** Port to listen on. Default: 7470. */
|
|
32
|
+
port?: number;
|
|
33
|
+
}
|
|
34
|
+
/** The Oculus's public API, exposed via provides. */
|
|
35
|
+
export interface OculusApi {
|
|
36
|
+
/** The port the server is listening on. */
|
|
37
|
+
port(): number;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,2DAA2D;AAC3D,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,IAAI,IAAI,MAAM,CAAC;CAChB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shardworks/oculus-apparatus",
|
|
3
|
+
"version": "0.1.128",
|
|
4
|
+
"license": "ISC",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/shardworks/nexus",
|
|
8
|
+
"directory": "packages/plugins/oculus"
|
|
9
|
+
},
|
|
10
|
+
"description": "The Oculus — web dashboard apparatus for the guild",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@hono/node-server": "^1.13.7",
|
|
20
|
+
"hono": "^4.7.11",
|
|
21
|
+
"zod": "4.3.6",
|
|
22
|
+
"@shardworks/nexus-core": "0.1.128",
|
|
23
|
+
"@shardworks/tools-apparatus": "0.1.128"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "25.5.0"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"test": "node --disable-warning=ExperimentalWarning --experimental-transform-types --test 'src/**/*.test.ts'",
|
|
34
|
+
"typecheck": "tsc --noEmit"
|
|
35
|
+
}
|
|
36
|
+
}
|