@camstack/server 1.2.477 → 1.2.479
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/dist/agent/agent-service.js +27 -71
- package/dist/agent/agent-undeploy.js +255 -0
- package/dist/agent/main.js +13 -0
- package/dist/api/core/cap-providers.js +91 -3
- package/dist/api/trpc/generated-cap-routers.js +8 -133
- package/dist/api/trpc/trpc.router.js +22 -2
- package/dist/core/addon/addon-uninstall.js +259 -0
- package/dist/core/addon-bridge/addon-bridge.service.js +5 -5
- package/dist/core/agent/agent-addon-backfill.js +20 -18
- package/dist/core/agent/agent-registry.service.js +35 -7
- package/dist/server-root/index.js +0 -1
- package/dist/single-copy-cleanup.js +0 -1
- package/package.json +13 -13
- package/dist/api/bridge-addons.router.js +0 -109
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/server",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.479",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"private": false,
|
|
6
6
|
"files": [
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"scripts": {
|
|
19
19
|
"build": "tsc -p tsconfig.build.json && tsup && node scripts/copy-closure-patches.mjs",
|
|
20
20
|
"postinstall": "node scripts/closure-postinstall.mjs",
|
|
21
|
-
"dev": "npx concurrently -n server,ui -c blue,magenta \"CAMSTACK_RESTART_TOUCH_FILE=src/launcher.ts tsx watch --env-file=.env --ignore=./camstack-data --ignore=../../packages/core/dist --ignore=../../packages/sdk/dist --ignore=../../packages/ui-library/dist
|
|
22
|
-
"serve": "CAMSTACK_RESTART_TOUCH_FILE=src/launcher.ts tsx watch --env-file=.env --ignore=./camstack-data --ignore=../../packages/core/dist --ignore=../../packages/sdk/dist --ignore=../../packages/ui-library/dist
|
|
21
|
+
"dev": "npx concurrently -n server,ui -c blue,magenta \"CAMSTACK_RESTART_TOUCH_FILE=src/launcher.ts tsx watch --env-file=.env --ignore=./camstack-data --ignore=../../packages/core/dist --ignore=../../packages/sdk/dist --ignore=../../packages/ui-library/dist src/launcher.ts\" \"cd ../../packages/addon-admin-ui && npx vite --port 3001\"",
|
|
22
|
+
"serve": "CAMSTACK_RESTART_TOUCH_FILE=src/launcher.ts tsx watch --env-file=.env --ignore=./camstack-data --ignore=../../packages/core/dist --ignore=../../packages/sdk/dist --ignore=../../packages/ui-library/dist src/launcher.ts",
|
|
23
23
|
"serve:once": "tsx --env-file=.env src/launcher.ts",
|
|
24
24
|
"start": "node --env-file=.env dist/launcher.js",
|
|
25
25
|
"typecheck": "tsc --noEmit -p tsconfig.spec.json",
|
|
@@ -37,18 +37,18 @@
|
|
|
37
37
|
]
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@camstack/addon-admin-ui": "1.2.
|
|
41
|
-
"@camstack/addon-agent-ui": "1.2.
|
|
40
|
+
"@camstack/addon-admin-ui": "1.2.352",
|
|
41
|
+
"@camstack/addon-agent-ui": "1.2.190",
|
|
42
42
|
"@camstack/addon-auth": "1.2.130",
|
|
43
|
-
"@camstack/addon-decoder-nodeav": "1.2.
|
|
43
|
+
"@camstack/addon-decoder-nodeav": "1.2.121",
|
|
44
44
|
"@camstack/addon-notifiers": "1.2.128",
|
|
45
|
-
"@camstack/addon-pipeline": "1.2.
|
|
46
|
-
"@camstack/addon-pipeline-orchestrator": "1.2.
|
|
47
|
-
"@camstack/addon-post-analysis": "1.2.
|
|
48
|
-
"@camstack/sdk": "1.2.
|
|
49
|
-
"@camstack/system": "1.2.
|
|
50
|
-
"@camstack/types": "1.2.
|
|
51
|
-
"@camstack/ui-library": "1.2.
|
|
45
|
+
"@camstack/addon-pipeline": "1.2.345",
|
|
46
|
+
"@camstack/addon-pipeline-orchestrator": "1.2.297",
|
|
47
|
+
"@camstack/addon-post-analysis": "1.2.342",
|
|
48
|
+
"@camstack/sdk": "1.2.126",
|
|
49
|
+
"@camstack/system": "1.2.374",
|
|
50
|
+
"@camstack/types": "1.2.325",
|
|
51
|
+
"@camstack/ui-library": "1.2.248",
|
|
52
52
|
"@fastify/compress": "^9.0.0",
|
|
53
53
|
"@fastify/cookie": "^11.0.2",
|
|
54
54
|
"@fastify/cors": "^11.2.0",
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createBridgeAddonsRouter = createBridgeAddonsRouter;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const server_1 = require("@trpc/server");
|
|
6
|
-
const trpc_middleware_1 = require("./trpc/trpc.middleware");
|
|
7
|
-
function createBridgeAddonsRouter(bridge, addonSearch, addonRegistry, toastService) {
|
|
8
|
-
return (0, trpc_middleware_1.trpcRouter)({
|
|
9
|
-
/** List all addon packages installed in the addons directory */
|
|
10
|
-
listPackages: trpc_middleware_1.protectedProcedure.query(() => {
|
|
11
|
-
const installer = bridge.getInstaller();
|
|
12
|
-
if (!installer)
|
|
13
|
-
return [];
|
|
14
|
-
return installer.listInstalled();
|
|
15
|
-
}),
|
|
16
|
-
/** List all available addons across all loaded packages */
|
|
17
|
-
listAddons: trpc_middleware_1.protectedProcedure.query(() => {
|
|
18
|
-
return bridge.listAvailableAddons().map((id) => {
|
|
19
|
-
const addon = bridge.getLoader().getAddon(id);
|
|
20
|
-
return {
|
|
21
|
-
id,
|
|
22
|
-
packageName: addon?.packageName ?? 'unknown',
|
|
23
|
-
slot: addon?.declaration.slot ?? null,
|
|
24
|
-
};
|
|
25
|
-
});
|
|
26
|
-
}),
|
|
27
|
-
/** Install a community addon package from npm */
|
|
28
|
-
installPackage: trpc_middleware_1.adminProcedure
|
|
29
|
-
.input(zod_1.z.object({ packageName: zod_1.z.string(), version: zod_1.z.string().optional() }))
|
|
30
|
-
.mutation(async ({ input }) => {
|
|
31
|
-
const installer = bridge.getInstaller();
|
|
32
|
-
if (!installer) {
|
|
33
|
-
throw new server_1.TRPCError({
|
|
34
|
-
code: 'PRECONDITION_FAILED',
|
|
35
|
-
message: 'Addon installer not available — bridge may have failed to initialize',
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
await installer.install(input.packageName, input.version);
|
|
39
|
-
await bridge.reloadPackages();
|
|
40
|
-
const result = addonRegistry
|
|
41
|
-
? await addonRegistry.loadNewAddons()
|
|
42
|
-
: { loaded: [], failed: [] };
|
|
43
|
-
toastService?.broadcast({
|
|
44
|
-
title: 'Addon Installed',
|
|
45
|
-
message: `${input.packageName} installed successfully${result.loaded.length ? ` (${result.loaded.join(', ')})` : ''}`,
|
|
46
|
-
severity: result.failed.length ? 'warning' : 'info',
|
|
47
|
-
});
|
|
48
|
-
return { success: true, loaded: result.loaded, failed: result.failed };
|
|
49
|
-
}),
|
|
50
|
-
/** Uninstall a community addon package */
|
|
51
|
-
uninstallPackage: trpc_middleware_1.adminProcedure
|
|
52
|
-
.input(zod_1.z.object({ packageName: zod_1.z.string() }))
|
|
53
|
-
.mutation(async ({ input }) => {
|
|
54
|
-
// Server-side guard: prevent uninstalling required packages.
|
|
55
|
-
// After Phase D bundle merge, the pipeline-related packages
|
|
56
|
-
// (stream-broker, detection-pipeline, motion-wasm, decoders,
|
|
57
|
-
// audio) all live in @camstack/addon-pipeline.
|
|
58
|
-
const REQUIRED = new Set([
|
|
59
|
-
'@camstack/system',
|
|
60
|
-
'@camstack/addon-pipeline',
|
|
61
|
-
'@camstack/addon-pipeline-orchestrator',
|
|
62
|
-
'@camstack/addon-post-analysis',
|
|
63
|
-
'@camstack/addon-admin-ui',
|
|
64
|
-
]);
|
|
65
|
-
if (REQUIRED.has(input.packageName)) {
|
|
66
|
-
throw new server_1.TRPCError({
|
|
67
|
-
code: 'FORBIDDEN',
|
|
68
|
-
message: `Package ${input.packageName} is required and cannot be uninstalled`,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
const installer = bridge.getInstaller();
|
|
72
|
-
if (!installer) {
|
|
73
|
-
throw new server_1.TRPCError({
|
|
74
|
-
code: 'PRECONDITION_FAILED',
|
|
75
|
-
message: 'Addon installer not available — bridge may have failed to initialize',
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
await installer.uninstall(input.packageName);
|
|
79
|
-
await bridge.reloadPackages();
|
|
80
|
-
if (addonRegistry)
|
|
81
|
-
await addonRegistry.loadNewAddons();
|
|
82
|
-
toastService?.broadcast({
|
|
83
|
-
title: 'Addon Uninstalled',
|
|
84
|
-
message: `${input.packageName} has been removed`,
|
|
85
|
-
severity: 'info',
|
|
86
|
-
});
|
|
87
|
-
return { success: true };
|
|
88
|
-
}),
|
|
89
|
-
/** Force reload all addon packages (re-scan directories, re-import modules) */
|
|
90
|
-
reloadPackages: trpc_middleware_1.adminProcedure.mutation(async () => {
|
|
91
|
-
await bridge.reloadPackages();
|
|
92
|
-
return { success: true, message: 'Addon packages reloaded' };
|
|
93
|
-
}),
|
|
94
|
-
/** Search npm for available CamStack addons */
|
|
95
|
-
searchAvailable: trpc_middleware_1.protectedProcedure
|
|
96
|
-
.input(zod_1.z.object({ query: zod_1.z.string().optional() }).optional())
|
|
97
|
-
.query(async ({ input }) => {
|
|
98
|
-
const results = await addonSearch.searchAddons(input?.query);
|
|
99
|
-
// Enrich with install status from locally installed packages
|
|
100
|
-
const installed = bridge.getInstaller()?.listInstalled() ?? [];
|
|
101
|
-
const installedMap = new Map(installed.map((p) => [p.name, p.version]));
|
|
102
|
-
return results.map((r) => ({
|
|
103
|
-
...r,
|
|
104
|
-
installed: installedMap.has(r.name),
|
|
105
|
-
installedVersion: installedMap.get(r.name),
|
|
106
|
-
}));
|
|
107
|
-
}),
|
|
108
|
-
});
|
|
109
|
-
}
|