@lamalibre/create-lamaste 4.2.0 → 4.3.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.
- package/package.json +2 -2
- package/scripts/lamaste-priv +205 -2
- package/src/index.js +4 -4
- package/src/lib/node-version.js +114 -0
- package/src/lib/relay-services.js +15 -1
- package/src/lib/service-config.js +113 -0
- package/src/tasks/gatekeeper.js +8 -3
- package/src/tasks/node.js +34 -75
- package/src/tasks/redeploy.js +36 -0
- package/vendor/docs/00-introduction/how-it-works.md +2 -2
- package/vendor/docs/00-introduction/quickstart.md +5 -5
- package/vendor/docs/00-introduction/what-is-lamaste.md +5 -5
- package/vendor/docs/01-concepts/authentication.md +6 -3
- package/vendor/docs/01-concepts/authorization.md +29 -17
- package/vendor/docs/01-concepts/certificates.md +3 -3
- package/vendor/docs/01-concepts/mtls.md +2 -2
- package/vendor/docs/01-concepts/nginx-reverse-proxy.md +8 -3
- package/vendor/docs/01-concepts/security-model.md +98 -34
- package/vendor/docs/01-concepts/tickets.md +2 -2
- package/vendor/docs/01-concepts/tunneling.md +4 -4
- package/vendor/docs/02-guides/agent-setup.md +34 -16
- package/vendor/docs/02-guides/certificate-management.md +2 -2
- package/vendor/docs/02-guides/cloud-provisioning.md +3 -3
- package/vendor/docs/02-guides/desktop-app-setup.md +10 -10
- package/vendor/docs/02-guides/installation.md +3 -3
- package/vendor/docs/02-guides/onboarding.md +2 -2
- package/vendor/docs/02-guides/standalone-plugin-with-tickets.md +2 -2
- package/vendor/docs/03-architecture/installer-flow.md +2 -2
- package/vendor/docs/03-architecture/installer.md +4 -4
- package/vendor/docs/03-architecture/management-flow.md +1 -1
- package/vendor/docs/03-architecture/nginx-configuration.md +91 -26
- package/vendor/docs/03-architecture/overview.md +8 -8
- package/vendor/docs/03-architecture/panel-client.md +6 -6
- package/vendor/docs/03-architecture/panel-server.md +2 -2
- package/vendor/docs/03-architecture/state-management.md +2 -2
- package/vendor/docs/03-architecture/system-overview.md +1 -1
- package/vendor/docs/04-api-reference/agent-hosted-plugins.md +407 -0
- package/vendor/docs/04-api-reference/app-host.md +360 -0
- package/vendor/docs/04-api-reference/audit-and-notifications.md +57 -0
- package/vendor/docs/04-api-reference/certificates.md +95 -38
- package/vendor/docs/04-api-reference/gatekeeper.md +5 -3
- package/vendor/docs/04-api-reference/lifecycle-hooks.md +333 -0
- package/vendor/docs/04-api-reference/onboarding.md +1 -1
- package/vendor/docs/04-api-reference/overview.md +137 -111
- package/vendor/docs/04-api-reference/registry-and-oidc.md +7 -3
- package/vendor/docs/04-api-reference/tunnels.md +15 -13
- package/vendor/docs/05-operations/backup-and-restore.md +1 -1
- package/vendor/docs/05-operations/uninstalling.md +1 -1
- package/vendor/docs/05-operations/upgrades.md +25 -20
- package/vendor/docs/06-reference/config-files.md +190 -97
- package/vendor/docs/06-reference/glossary.md +3 -3
- package/vendor/docs/06-reference/installer-flags.md +13 -13
- package/vendor/docs/06-reference/ports-and-services.md +1 -1
- package/vendor/docs/06-reference/troubleshooting.md +33 -8
- package/vendor/docs/_index.json +20 -0
- package/vendor/docs/gatekeeper-design.md +22 -19
- package/vendor/docs/identity-directory-design.md +57 -56
- package/vendor/docs/package.json +1 -1
- package/vendor/docs/todo/lib-cli-desktop-refactor.md +27 -27
- package/vendor/gatekeeper/dist/lib/types.d.ts +12 -0
- package/vendor/gatekeeper/dist/lib/types.d.ts.map +1 -1
- package/vendor/gatekeeper/dist/server/index.d.ts +2 -0
- package/vendor/gatekeeper/dist/server/index.d.ts.map +1 -1
- package/vendor/gatekeeper/dist/server/index.js +47 -8
- package/vendor/gatekeeper/dist/server/index.js.map +1 -1
- package/vendor/gatekeeper/dist/server/routes/authz.d.ts.map +1 -1
- package/vendor/gatekeeper/dist/server/routes/authz.js +233 -141
- package/vendor/gatekeeper/dist/server/routes/authz.js.map +1 -1
- package/vendor/gatekeeper/package.json +4 -3
- package/vendor/server/bin/lamaste-server.js +18 -1
- package/vendor/server/package.json +2 -2
- package/vendor/server/src/commands/audit.js +60 -0
- package/vendor/server/src/commands/plugins.js +963 -12
- package/vendor/server/src/commands/push-install.js +317 -0
- package/vendor/server/src/commands/registry-credential.js +2 -1
- package/vendor/server/src/commands/uninstall.js +28 -1
- package/vendor/server/src/ndjson.js +4 -2
- package/vendor/server/src/panel-api.js +32 -4
- package/vendor/server-ui/dist/assets/index-Bc5NCMSv.css +1 -0
- package/vendor/server-ui/dist/assets/index-DBp3cmaU.js +84 -0
- package/vendor/server-ui/dist/index.html +2 -2
- package/vendor/serverd/package.json +2 -2
- package/vendor/serverd/src/index.js +56 -4
- package/vendor/serverd/src/lib/actor.js +24 -0
- package/vendor/serverd/src/lib/agent-jobs.js +330 -0
- package/vendor/serverd/src/lib/app-error.js +10 -0
- package/vendor/serverd/src/lib/audit.js +145 -0
- package/vendor/serverd/src/lib/hook-effects.js +123 -0
- package/vendor/serverd/src/lib/hook-pipelines.js +902 -0
- package/vendor/serverd/src/lib/migrations/state/0006_plugin_agent.sql +4 -0
- package/vendor/serverd/src/lib/migrations/state/0007_audit_and_notifications.sql +29 -0
- package/vendor/serverd/src/lib/migrations/state/0008_plugin_hooks.sql +70 -0
- package/vendor/serverd/src/lib/migrations/state/0009_plugin_agent_half.sql +53 -0
- package/vendor/serverd/src/lib/migrations/state/0010_plugin_routes_and_retained_data.sql +47 -0
- package/vendor/serverd/src/lib/migrations/state/0011_agent_job_signature.sql +14 -0
- package/vendor/serverd/src/lib/mtls.js +89 -8
- package/vendor/serverd/src/lib/nginx.js +298 -44
- package/vendor/serverd/src/lib/notifications.js +107 -0
- package/vendor/serverd/src/lib/plugin-hooks.js +560 -0
- package/vendor/serverd/src/lib/plugin-hosting.js +688 -0
- package/vendor/serverd/src/lib/plugin-lifecycle.js +603 -0
- package/vendor/serverd/src/lib/plugin-operations.js +295 -0
- package/vendor/serverd/src/lib/plugin-packages.js +249 -0
- package/vendor/serverd/src/lib/plugins.js +298 -68
- package/vendor/serverd/src/lib/push-install.js +88 -2
- package/vendor/serverd/src/lib/relay-hooks.js +100 -0
- package/vendor/serverd/src/lib/relay-signing.js +43 -0
- package/vendor/serverd/src/lib/request-hooks.js +79 -0
- package/vendor/serverd/src/lib/retained-data.js +99 -0
- package/vendor/serverd/src/lib/trust-proxy.js +34 -0
- package/vendor/serverd/src/lib/tunnel-hooks.js +88 -0
- package/vendor/serverd/src/lib/vhost-reconcile.js +260 -0
- package/vendor/serverd/src/middleware/twofa-session.js +11 -1
- package/vendor/serverd/src/routes/agent-forwarder.js +37 -0
- package/vendor/serverd/src/routes/management/agent-panel-authz.js +97 -0
- package/vendor/serverd/src/routes/management/agents.js +262 -1
- package/vendor/serverd/src/routes/management/audit.js +81 -0
- package/vendor/serverd/src/routes/management/certs.js +1 -15
- package/vendor/serverd/src/routes/management/plugins.js +569 -54
- package/vendor/serverd/src/routes/management/tunnels.js +26 -0
- package/vendor/serverd/src/routes/management.js +4 -0
- package/vendor/server-ui/dist/assets/index-B5Wp8lu-.js +0 -257
- package/vendor/server-ui/dist/assets/index-BqWWFlTU.css +0 -1
|
@@ -17,14 +17,18 @@ import {
|
|
|
17
17
|
} from '@lamalibre/lamaste/server';
|
|
18
18
|
import {
|
|
19
19
|
AGENT_LABEL_REGEX,
|
|
20
|
+
INTERNAL_PLUGIN_PORT_RANGE,
|
|
20
21
|
PLUGIN_AGENT_CN_PREFIX,
|
|
21
22
|
RESERVED_TUNNEL_PORTS,
|
|
23
|
+
isInternalPluginPort,
|
|
22
24
|
} from '@lamalibre/lamaste';
|
|
23
25
|
import { getConfig } from '../../lib/config.js';
|
|
24
26
|
import { readTunnels, readSites } from '../../lib/state.js';
|
|
25
27
|
import { loadAgentRegistry } from '../../lib/mtls.js';
|
|
26
28
|
import { getChiselCredentialIssuedAt } from '../../lib/chisel-users.js';
|
|
27
29
|
import { buildChiselArgs } from '../../lib/chisel-args.js';
|
|
30
|
+
import { listAgentPluginAssignments } from '../../lib/plugin-hosting.js';
|
|
31
|
+
import { pendingAgentJobs } from '../../lib/agent-jobs.js';
|
|
28
32
|
import {
|
|
29
33
|
tunnelNginxDeps,
|
|
30
34
|
tunnelCertbotDeps,
|
|
@@ -41,6 +45,9 @@ const TunnelPortSchema = z
|
|
|
41
45
|
.max(65535, 'Port must be at most 65535')
|
|
42
46
|
.refine((p) => !RESERVED_TUNNEL_PORTS.includes(p), {
|
|
43
47
|
message: `Ports ${RESERVED_TUNNEL_PORTS.join(', ')} belong to Lamaste services on the relay`,
|
|
48
|
+
})
|
|
49
|
+
.refine((p) => !isInternalPluginPort(p), {
|
|
50
|
+
message: `Ports ${INTERNAL_PLUGIN_PORT_RANGE.min}–${INTERNAL_PLUGIN_PORT_RANGE.max} are reserved for the internal tunnels of agent-hosted plugins`,
|
|
44
51
|
});
|
|
45
52
|
|
|
46
53
|
const AgentLabelSchema = z.string().regex(AGENT_LABEL_REGEX, 'Invalid agent label format');
|
|
@@ -155,6 +162,15 @@ function authorizeFor(request, action) {
|
|
|
155
162
|
if (!mayActOn(request, tunnel)) {
|
|
156
163
|
throw new TunnelError('Tunnel not found', 'NOT_FOUND');
|
|
157
164
|
}
|
|
165
|
+
// An internal plugin tunnel belongs to the plugin's hosting: it is
|
|
166
|
+
// created and removed with it (DELETE /api/plugins/:name/hosting).
|
|
167
|
+
if (tunnel.exposure === 'internal') {
|
|
168
|
+
throw new TunnelError(
|
|
169
|
+
`Cannot ${action} an internal plugin tunnel here — it belongs to the hosting of plugin ` +
|
|
170
|
+
`"${tunnel.pluginRoute ?? tunnel.pluginName ?? '?'}"`,
|
|
171
|
+
'FORBIDDEN',
|
|
172
|
+
);
|
|
173
|
+
}
|
|
158
174
|
if (tunnel.type === 'panel' && request.certRole !== 'admin') {
|
|
159
175
|
const caps = request.certCapabilities || [];
|
|
160
176
|
if (!caps.includes('panel:expose')) {
|
|
@@ -259,6 +275,16 @@ export default async function tunnelRoutes(fastify, _opts) {
|
|
|
259
275
|
port: t.port,
|
|
260
276
|
subdomain: t.subdomain,
|
|
261
277
|
})),
|
|
278
|
+
// The agent-hosted plugins this agent hosts: the agent fetches a
|
|
279
|
+
// plugin's config when it does not hold the secret issued at
|
|
280
|
+
// `secretIssuedAt`, and acknowledges it (see converge).
|
|
281
|
+
appPlugins: AGENT_LABEL_REGEX.test(label) ? await listAgentPluginAssignments(label) : [],
|
|
282
|
+
// Work for the agent's sync, reported to /agents/me/jobs/:id/result:
|
|
283
|
+
// lifecycle hook calls to its agent halves on its own loopback
|
|
284
|
+
// (`hook`), and installing, switching or removing an agent half
|
|
285
|
+
// through its app host helper (`app-install`, `app-activate`,
|
|
286
|
+
// `app-remove`) — see lib/agent-jobs.js for each job's fields.
|
|
287
|
+
agentJobs: AGENT_LABEL_REGEX.test(label) ? await pendingAgentJobs(label) : [],
|
|
262
288
|
};
|
|
263
289
|
} catch (err) {
|
|
264
290
|
request.log.error(err, 'Failed to generate agent config');
|
|
@@ -15,6 +15,8 @@ import storageRoutes from './management/storage.js';
|
|
|
15
15
|
import gatekeeperProxyRoutes from './management/gatekeeper-proxy.js';
|
|
16
16
|
import agentsRoutes from './management/agents.js';
|
|
17
17
|
import registryCredentialRoutes from './management/registry-credential.js';
|
|
18
|
+
import auditRoutes from './management/audit.js';
|
|
19
|
+
import agentPanelAuthzRoutes from './management/agent-panel-authz.js';
|
|
18
20
|
|
|
19
21
|
export default async function managementRoutes(fastify, _opts) {
|
|
20
22
|
fastify.addHook('onRequest', managementOnly());
|
|
@@ -35,4 +37,6 @@ export default async function managementRoutes(fastify, _opts) {
|
|
|
35
37
|
await fastify.register(gatekeeperProxyRoutes);
|
|
36
38
|
await fastify.register(agentsRoutes);
|
|
37
39
|
await fastify.register(registryCredentialRoutes);
|
|
40
|
+
await fastify.register(auditRoutes);
|
|
41
|
+
await fastify.register(agentPanelAuthzRoutes);
|
|
38
42
|
}
|