bunqueue-dashboard 0.0.36 → 0.0.37
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/README.md +20 -7
- package/agent/backup/resultValidation.ts +1 -1
- package/agent/backup/routes.ts +4 -3
- package/agent/flow/routes.ts +7 -6
- package/agent/index.ts +17 -4
- package/agent/managedTarget.ts +41 -2
- package/agent/manager/config.ts +1 -1
- package/agent/queue/routes.ts +21 -14
- package/agent/server/controlRoutes.ts +39 -7
- package/agent/server/controlTarget.ts +116 -0
- package/agent/server/errors.ts +1 -0
- package/agent/server/handler.ts +10 -1
- package/agent/server/router.ts +19 -8
- package/agent/server/types.ts +7 -0
- package/agent/server.ts +10 -0
- package/agent/workflow/runtimeRoutes.ts +5 -4
- package/agent/workflows.ts +1 -1
- package/dist/.vite/manifest.json +207 -207
- package/dist/assets/{AddJob-UUa2fSXE.js → AddJob-CWkkVHmf.js} +1 -1
- package/dist/assets/{Alerts-7oGYfQMb.js → Alerts-Gh1pVbqj.js} +1 -1
- package/dist/assets/{Benchmark-C2NFp_kj.js → Benchmark-Dir2A1CQ.js} +1 -1
- package/dist/assets/{BulkAddJobs-CL4yBae-.js → BulkAddJobs-Di_IgRSH.js} +1 -1
- package/dist/assets/{CopilotPanel-BQ2Cgo9p.js → CopilotPanel-Db5nYpo1.js} +1 -1
- package/dist/assets/{Cron-DfWBhoBf.js → Cron-BRgWcBGk.js} +1 -1
- package/dist/assets/{CronManager-DAK7RSOX.js → CronManager-CbM0x_s0.js} +1 -1
- package/dist/assets/{Database-DqL7giEj.js → Database-BeoEreW0.js} +1 -1
- package/dist/assets/{Diagnostics-D98YwN-6.js → Diagnostics-Cw9iJ84f.js} +1 -1
- package/dist/assets/{Dlq-BHmA5PTI.js → Dlq-DfCg04Jd.js} +1 -1
- package/dist/assets/{DlqControl-DihxvP-i.js → DlqControl-BRCkUXvb.js} +1 -1
- package/dist/assets/{DlqPro-ncgnDtpE.js → DlqPro-BHJwBYsN.js} +1 -1
- package/dist/assets/{Flows-B5N5Cil0.js → Flows-BAzbFP_W.js} +2 -2
- package/dist/assets/{JobInspector-B40nFiGh.js → JobInspector-qvW_APO6.js} +2 -2
- package/dist/assets/{Jobs-Bla3IEef.js → Jobs-URpnFjC6.js} +1 -1
- package/dist/assets/{JobsPro-CnczVx7x.js → JobsPro-pQ_RFSU3.js} +1 -1
- package/dist/assets/{Logs-T91Q3cH0.js → Logs-C5jX2OPE.js} +1 -1
- package/dist/assets/{LogsPro-CMn6-Wwv.js → LogsPro-Cq_npmmS.js} +1 -1
- package/dist/assets/{McpServer-BQBabwW-.js → McpServer-DtCTmQBu.js} +2 -2
- package/dist/assets/{Metrics-DxT_RI2B.js → Metrics-BdxitePr.js} +1 -1
- package/dist/assets/{MetricsPro-Cjen-nAP.js → MetricsPro-orHfW0mg.js} +1 -1
- package/dist/assets/{Overview-XN2ej8ph.js → Overview-DaNns1aj.js} +1 -1
- package/dist/assets/{QueueActions-C-Aferd6.js → QueueActions-jiTzndPH.js} +1 -1
- package/dist/assets/{QueueControl-B8Q9NX6t.js → QueueControl-l5bSdMgb.js} +1 -1
- package/dist/assets/{QueueDetail-BMhG0jUB.js → QueueDetail-URK2pjtH.js} +1 -1
- package/dist/assets/{QueueDetailPro-BKTTyLR4.js → QueueDetailPro-C9M5CV4K.js} +1 -1
- package/dist/assets/{Queues-COqPMoY9.js → Queues-DeLXlww2.js} +1 -1
- package/dist/assets/{QueuesOverview-pWdrPy8Z.js → QueuesOverview-DoQ-MUfT.js} +1 -1
- package/dist/assets/{S3Backup-BmsZ8xtq.js → S3Backup-D2agV9_z.js} +1 -1
- package/dist/assets/{S3BackupPro-AtlsPUJL.js → S3BackupPro--WSZWTQn.js} +3 -3
- package/dist/assets/{ServerControl-D3XwHr72.js → ServerControl-QVd6m_iR.js} +3 -3
- package/dist/assets/{Settings-BofKZoHn.js → Settings-CiJRj_SM.js} +1 -1
- package/dist/assets/{Usage-DAR9E22v.js → Usage-DbHJgA4t.js} +1 -1
- package/dist/assets/{UsagePro-Bc30N2Lo.js → UsagePro-LoPo3k1L.js} +1 -1
- package/dist/assets/{Webhooks-Bg2k1PU4.js → Webhooks-CuzIJHwk.js} +1 -1
- package/dist/assets/{Workers-BqUZMJVQ.js → Workers-BpUgpwUH.js} +1 -1
- package/dist/assets/{WorkersPro-C9aSadUh.js → WorkersPro-BYY0P1Pt.js} +1 -1
- package/dist/assets/{Workflows-BEFMfHmo.js → Workflows-ByJw4FFH.js} +1 -1
- package/dist/assets/{api-CQ5Z7xR7.js → api-V_sVpHDo.js} +1 -1
- package/dist/assets/{bq-BeBxa743.js → bq-DYmbVkgR.js} +1 -1
- package/dist/assets/{connectionStore-DbBYqHEY.js → connectionStore-CKFQrxDo.js} +1 -1
- package/dist/assets/{controlConnectionEpoch-CFSO6237.js → controlConnectionEpoch-JM4omZ6j.js} +1 -1
- package/dist/assets/{flowMutationSafety-CoOp94wS.js → flowMutationSafety-DObp9nJo.js} +1 -1
- package/dist/assets/index-D64v2vNO.js +8 -0
- package/dist/assets/{install-Cd9Is10G.js → install-jXi1SOYY.js} +1 -1
- package/dist/assets/{responses-kPO4rSu5.js → responses-CBLyy1Ob.js} +1 -1
- package/dist/assets/{toastStore-CS_9Xndn.js → toastStore-B7n0zS0y.js} +1 -1
- package/dist/assets/{upstreamPaths-D_LPsv7b.js → upstreamPaths-CDVsu6IM.js} +1 -1
- package/dist/assets/{usePolledData-DzlUpBOO.js → usePolledData-c53tx1jw.js} +1 -1
- package/dist/assets/{useServerActionGuard-BlH-Kso1.js → useServerActionGuard-OTv6_fU0.js} +1 -1
- package/dist/assets/{useThroughputSeries-C2pa1Wd_.js → useThroughputSeries-DWHQl7cM.js} +1 -1
- package/dist/index.html +7 -7
- package/package.json +5 -3
- package/scripts/embedded.gen.ts +160 -160
- package/scripts/serve.ts +38 -7
- package/scripts/serveHandler.ts +27 -7
- package/scripts/servePolicy.ts +54 -0
- package/dist/assets/index-Cui9IwWy.js +0 -8
package/agent/server/router.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { routeBackupRequest } from '../backup/routes';
|
|
2
2
|
import type { BackupRunnerPort } from '../backup/runner';
|
|
3
3
|
import { routeFlowRequest } from '../flow/routes';
|
|
4
|
+
import type { ManagedTargetPolicy } from '../managedTarget';
|
|
4
5
|
import type { ProcessManager } from '../manager';
|
|
5
6
|
import { routeQueueOperationsRequest } from '../queue/routes';
|
|
6
7
|
import type { QueueOperationsPort } from '../queue/types';
|
|
7
8
|
import type { WorkflowRuntimePort } from '../workflow/runtime';
|
|
8
9
|
import { routeWorkflowRuntimeRequest } from '../workflow/runtimeRoutes';
|
|
9
|
-
import { routeControlRequest } from './controlRoutes';
|
|
10
|
+
import { assertManagedControl, routeControlRequest } from './controlRoutes';
|
|
11
|
+
import type { ServerControlTarget } from './controlTarget';
|
|
10
12
|
import { routeDatabaseRequest } from './databaseRoutes';
|
|
11
13
|
import type { AgentLifecyclePort } from './lifecycle';
|
|
12
14
|
import { managedRuntimeAdmission } from './managedRuntime';
|
|
@@ -23,7 +25,9 @@ export async function routeAgentRequest(
|
|
|
23
25
|
queueRuntime: QueueOperationsPort,
|
|
24
26
|
lifecycle: AgentLifecyclePort,
|
|
25
27
|
origin: string | null,
|
|
26
|
-
allowedOrigins: string[]
|
|
28
|
+
allowedOrigins: string[],
|
|
29
|
+
controlTarget: ServerControlTarget,
|
|
30
|
+
managedTargetPolicy?: ManagedTargetPolicy
|
|
27
31
|
): Promise<RouteResponse | Response | null> {
|
|
28
32
|
if (pathname.startsWith('/control/')) {
|
|
29
33
|
const control = await routeControlRequest(
|
|
@@ -32,7 +36,8 @@ export async function routeAgentRequest(
|
|
|
32
36
|
method,
|
|
33
37
|
manager,
|
|
34
38
|
runtime,
|
|
35
|
-
lifecycle
|
|
39
|
+
lifecycle,
|
|
40
|
+
controlTarget
|
|
36
41
|
);
|
|
37
42
|
if (control) return control;
|
|
38
43
|
}
|
|
@@ -47,7 +52,7 @@ export async function routeAgentRequest(
|
|
|
47
52
|
method,
|
|
48
53
|
managedConfig,
|
|
49
54
|
snapshot.status === 'running',
|
|
50
|
-
{ admission }
|
|
55
|
+
{ admission, targetPolicy: managedTargetPolicy }
|
|
51
56
|
);
|
|
52
57
|
if (flow) return flow;
|
|
53
58
|
}
|
|
@@ -62,7 +67,8 @@ export async function routeAgentRequest(
|
|
|
62
67
|
managedConfig,
|
|
63
68
|
runtime,
|
|
64
69
|
snapshot.status === 'running',
|
|
65
|
-
admission
|
|
70
|
+
admission,
|
|
71
|
+
managedTargetPolicy
|
|
66
72
|
);
|
|
67
73
|
if (workflowRuntime) return workflowRuntime;
|
|
68
74
|
}
|
|
@@ -84,13 +90,15 @@ export async function routeAgentRequest(
|
|
|
84
90
|
managedConfig,
|
|
85
91
|
queueRuntime,
|
|
86
92
|
snapshot.status === 'running',
|
|
87
|
-
admission
|
|
93
|
+
admission,
|
|
94
|
+
managedTargetPolicy
|
|
88
95
|
);
|
|
89
96
|
if (queueOperation) return queueOperation;
|
|
90
97
|
}
|
|
91
98
|
|
|
92
99
|
if (pathname.startsWith('/backup/')) {
|
|
93
100
|
if (pathname === '/backup/restore' && method === 'POST') {
|
|
101
|
+
assertManagedControl(controlTarget);
|
|
94
102
|
return manager.withStoppedMaintenance('restoring a backup', async () => {
|
|
95
103
|
const stoppedSnapshot = manager.getStatus();
|
|
96
104
|
const restoreDesired = manager.getConfig();
|
|
@@ -105,7 +113,9 @@ export async function routeAgentRequest(
|
|
|
105
113
|
restoreConfig,
|
|
106
114
|
stoppedSnapshot.status === 'running',
|
|
107
115
|
await manager.dbStats(),
|
|
108
|
-
backupRunner
|
|
116
|
+
backupRunner,
|
|
117
|
+
undefined,
|
|
118
|
+
managedTargetPolicy
|
|
109
119
|
);
|
|
110
120
|
});
|
|
111
121
|
}
|
|
@@ -119,7 +129,8 @@ export async function routeAgentRequest(
|
|
|
119
129
|
snapshot.status === 'running',
|
|
120
130
|
database,
|
|
121
131
|
backupRunner,
|
|
122
|
-
(extraEnv) => manager.setConfig({ extraEnv })
|
|
132
|
+
(extraEnv) => manager.setConfig({ extraEnv }),
|
|
133
|
+
managedTargetPolicy
|
|
123
134
|
);
|
|
124
135
|
if (backup) return backup;
|
|
125
136
|
}
|
package/agent/server/types.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { WorkflowRuntimePort } from '../workflow/runtime';
|
|
2
|
+
import type { ServerControlTarget } from './controlTarget';
|
|
2
3
|
|
|
3
4
|
export interface AgentOptions {
|
|
4
5
|
allowedOrigins: string[];
|
|
@@ -8,6 +9,12 @@ export interface AgentOptions {
|
|
|
8
9
|
token?: string;
|
|
9
10
|
/** Network exposure: require token on every non-OPTIONS request. */
|
|
10
11
|
requireTokenForAll?: boolean;
|
|
12
|
+
/** Managed child by default; external mode makes lifecycle routes attach-only. */
|
|
13
|
+
controlTarget?: ServerControlTarget;
|
|
14
|
+
/** Exact browser-visible `/api` alias accepted by target-pinned agent routes. */
|
|
15
|
+
managedProxyPath?: string;
|
|
16
|
+
/** Upstream URL the alias must resolve to; it still passes the local-target gate. */
|
|
17
|
+
managedProxyUrl?: string;
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
export interface AgentFetchHandler {
|
package/agent/server.ts
CHANGED
|
@@ -6,6 +6,16 @@
|
|
|
6
6
|
* agent/server/; this file preserves the existing public import path.
|
|
7
7
|
*/
|
|
8
8
|
export { createFetchHandler } from './server/handler';
|
|
9
|
+
export {
|
|
10
|
+
MANAGED_CONTROL_TARGET,
|
|
11
|
+
probeExternalHealth,
|
|
12
|
+
resolveServerControlTarget,
|
|
13
|
+
} from './server/controlTarget';
|
|
14
|
+
export type {
|
|
15
|
+
ExternalHealthProbe,
|
|
16
|
+
ServerControlTarget,
|
|
17
|
+
ServerManagementMode,
|
|
18
|
+
} from './server/controlTarget';
|
|
9
19
|
export { AgentLifecycleGate } from './server/lifecycle';
|
|
10
20
|
export type { AgentLifecyclePort } from './server/lifecycle';
|
|
11
21
|
export {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ExecutionState } from 'bunqueue/workflow';
|
|
2
|
-
import { assertManagedTarget } from '../managedTarget';
|
|
2
|
+
import { assertManagedTarget, type ManagedTargetPolicy } from '../managedTarget';
|
|
3
3
|
import type { ServerConfig } from '../manager';
|
|
4
4
|
import { readLimitedJsonBody } from '../server/jsonBody';
|
|
5
5
|
import type {
|
|
@@ -24,17 +24,18 @@ export async function routeWorkflowRuntimeRequest(
|
|
|
24
24
|
config: ServerConfig,
|
|
25
25
|
runtime: WorkflowRuntimePort,
|
|
26
26
|
serverRunning: boolean,
|
|
27
|
-
admission?: ManagedRuntimeAdmission
|
|
27
|
+
admission?: ManagedRuntimeAdmission,
|
|
28
|
+
targetPolicy?: ManagedTargetPolicy
|
|
28
29
|
): Promise<WorkflowRuntimeRouteResponse | null> {
|
|
29
30
|
if (!isRuntimePath(pathname, method)) return null;
|
|
30
31
|
const query = exactTargetQuery(request.url);
|
|
31
|
-
assertManagedTarget(query, config);
|
|
32
|
+
assertManagedTarget(query, config, targetPolicy);
|
|
32
33
|
const admitted = <T>(
|
|
33
34
|
requiresRunning: boolean,
|
|
34
35
|
operation: (snapshot: ManagedRuntimeSnapshot) => Promise<T>
|
|
35
36
|
): Promise<T> => {
|
|
36
37
|
const execute = async (snapshot: ManagedRuntimeSnapshot) => {
|
|
37
|
-
assertManagedTarget(query, snapshot.config);
|
|
38
|
+
assertManagedTarget(query, snapshot.config, targetPolicy);
|
|
38
39
|
if (requiresRunning && !snapshot.running) {
|
|
39
40
|
throw new Error('Start the managed Bunqueue server before workflow control.');
|
|
40
41
|
}
|
package/agent/workflows.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read-only facade for Bunqueue 2.8.
|
|
2
|
+
* Read-only facade for Bunqueue 2.8.59 Workflow Engine observability.
|
|
3
3
|
* Persistence, decoding and validation live behind this stable public module.
|
|
4
4
|
*/
|
|
5
5
|
export { workflowExecution } from './workflow/detail';
|