@zze/mock-server 0.2.4
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 +643 -0
- package/dist/__tests__/mock-server.test.d.ts +5 -0
- package/dist/__tests__/mock-server.test.d.ts.map +1 -0
- package/dist/__tests__/mock-server.test.js +599 -0
- package/dist/__tests__/mock-server.test.js.map +1 -0
- package/dist/admin/__tests__/admin-router.test.d.ts +2 -0
- package/dist/admin/__tests__/admin-router.test.d.ts.map +1 -0
- package/dist/admin/__tests__/admin-router.test.js +621 -0
- package/dist/admin/__tests__/admin-router.test.js.map +1 -0
- package/dist/admin/admin-router.d.ts +27 -0
- package/dist/admin/admin-router.d.ts.map +1 -0
- package/dist/admin/admin-router.js +616 -0
- package/dist/admin/admin-router.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +10 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/types.d.ts +185 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +33 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/config/__tests__/config-discovery.test.d.ts +2 -0
- package/dist/config/__tests__/config-discovery.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-discovery.test.js +52 -0
- package/dist/config/__tests__/config-discovery.test.js.map +1 -0
- package/dist/config/__tests__/config-loader.test.d.ts +2 -0
- package/dist/config/__tests__/config-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-loader.test.js +124 -0
- package/dist/config/__tests__/config-loader.test.js.map +1 -0
- package/dist/config/__tests__/file-loader.test.d.ts +2 -0
- package/dist/config/__tests__/file-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/file-loader.test.js +63 -0
- package/dist/config/__tests__/file-loader.test.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js.map +1 -0
- package/dist/config/config-discovery.d.ts +23 -0
- package/dist/config/config-discovery.d.ts.map +1 -0
- package/dist/config/config-discovery.js +60 -0
- package/dist/config/config-discovery.js.map +1 -0
- package/dist/config/config-loader.d.ts +56 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +162 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-writer.d.ts +96 -0
- package/dist/config/config-writer.d.ts.map +1 -0
- package/dist/config/config-writer.js +248 -0
- package/dist/config/config-writer.js.map +1 -0
- package/dist/config/file-loader.d.ts +16 -0
- package/dist/config/file-loader.d.ts.map +1 -0
- package/dist/config/file-loader.js +90 -0
- package/dist/config/file-loader.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +23 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mock-server.d.ts +243 -0
- package/dist/mock-server.d.ts.map +1 -0
- package/dist/mock-server.js +387 -0
- package/dist/mock-server.js.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts +2 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.js +358 -0
- package/dist/resolver/__tests__/response-resolver.test.js.map +1 -0
- package/dist/resolver/index.d.ts +4 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +9 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/response-resolver.d.ts +73 -0
- package/dist/resolver/response-resolver.d.ts.map +1 -0
- package/dist/resolver/response-resolver.js +167 -0
- package/dist/resolver/response-resolver.js.map +1 -0
- package/dist/resolver/types.d.ts +47 -0
- package/dist/resolver/types.d.ts.map +1 -0
- package/dist/resolver/types.js +9 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts +2 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.js +66 -0
- package/dist/schemas/__tests__/config.validator.test.js.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js +103 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.js +92 -0
- package/dist/schemas/__tests__/flow.schema.test.js.map +1 -0
- package/dist/schemas/config.validator.d.ts +39 -0
- package/dist/schemas/config.validator.d.ts.map +1 -0
- package/dist/schemas/config.validator.js +117 -0
- package/dist/schemas/config.validator.js.map +1 -0
- package/dist/schemas/endpoint.schema.d.ts +108 -0
- package/dist/schemas/endpoint.schema.d.ts.map +1 -0
- package/dist/schemas/endpoint.schema.js +87 -0
- package/dist/schemas/endpoint.schema.js.map +1 -0
- package/dist/schemas/flow.schema.d.ts +46 -0
- package/dist/schemas/flow.schema.d.ts.map +1 -0
- package/dist/schemas/flow.schema.js +73 -0
- package/dist/schemas/flow.schema.js.map +1 -0
- package/dist/schemas/http.schema.d.ts +15 -0
- package/dist/schemas/http.schema.d.ts.map +1 -0
- package/dist/schemas/http.schema.js +32 -0
- package/dist/schemas/http.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +6 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +33 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/scenario.schema.d.ts +54 -0
- package/dist/schemas/scenario.schema.d.ts.map +1 -0
- package/dist/schemas/scenario.schema.js +75 -0
- package/dist/schemas/scenario.schema.js.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts +2 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.js +296 -0
- package/dist/server/__tests__/mock-server-app.test.js.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mock-server-app.d.ts +119 -0
- package/dist/server/mock-server-app.d.ts.map +1 -0
- package/dist/server/mock-server-app.js +304 -0
- package/dist/server/mock-server-app.js.map +1 -0
- package/dist/server/types.d.ts +38 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +11 -0
- package/dist/server/types.js.map +1 -0
- package/dist/state/__tests__/state-manager.test.d.ts +2 -0
- package/dist/state/__tests__/state-manager.test.d.ts.map +1 -0
- package/dist/state/__tests__/state-manager.test.js +275 -0
- package/dist/state/__tests__/state-manager.test.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/state-manager.d.ts +92 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +198 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/state/types.d.ts +30 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/ui/assets/index-SADMOgPE.js +10 -0
- package/dist/ui/assets/index-rj7m-XdG.css +1 -0
- package/dist/ui/index.html +29 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts +2 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts.map +1 -0
- package/dist/watcher/__tests__/config-watcher.test.js +372 -0
- package/dist/watcher/__tests__/config-watcher.test.js.map +1 -0
- package/dist/watcher/config-watcher.d.ts +100 -0
- package/dist/watcher/config-watcher.d.ts.map +1 -0
- package/dist/watcher/config-watcher.js +358 -0
- package/dist/watcher/config-watcher.js.map +1 -0
- package/dist/watcher/index.d.ts +7 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +8 -0
- package/dist/watcher/index.js.map +1 -0
- package/dist/watcher/types.d.ts +64 -0
- package/dist/watcher/types.d.ts.map +1 -0
- package/dist/watcher/types.js +15 -0
- package/dist/watcher/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,616 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ADMIN_API_PATH = void 0;
|
|
4
|
+
exports.createAdminRouter = createAdminRouter;
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const types_js_1 = require("./types.js");
|
|
7
|
+
function createAdminRouter(optionsOrGetEndpoints, getFlowsArg, stateManagerArg) {
|
|
8
|
+
// Handle both signatures
|
|
9
|
+
let getEndpoints;
|
|
10
|
+
let getFlows;
|
|
11
|
+
let stateManager;
|
|
12
|
+
let getConfigWriter;
|
|
13
|
+
let getOnConfigChange;
|
|
14
|
+
if (typeof optionsOrGetEndpoints === 'function') {
|
|
15
|
+
// Legacy signature
|
|
16
|
+
getEndpoints = optionsOrGetEndpoints;
|
|
17
|
+
getFlows = getFlowsArg;
|
|
18
|
+
stateManager = stateManagerArg;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
// New options object
|
|
22
|
+
getEndpoints = optionsOrGetEndpoints.getEndpoints;
|
|
23
|
+
getFlows = optionsOrGetEndpoints.getFlows;
|
|
24
|
+
stateManager = optionsOrGetEndpoints.stateManager;
|
|
25
|
+
getConfigWriter = optionsOrGetEndpoints.getConfigWriter;
|
|
26
|
+
getOnConfigChange = optionsOrGetEndpoints.getOnConfigChange;
|
|
27
|
+
}
|
|
28
|
+
const router = (0, express_1.Router)();
|
|
29
|
+
// Parse JSON bodies
|
|
30
|
+
router.use((req, res, next) => {
|
|
31
|
+
if (req.headers['content-type']?.includes('application/json')) {
|
|
32
|
+
// Body already parsed by parent app
|
|
33
|
+
}
|
|
34
|
+
next();
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* GET /config
|
|
38
|
+
* Returns all configured endpoints and flows
|
|
39
|
+
*/
|
|
40
|
+
router.get('/config', (req, res) => {
|
|
41
|
+
const endpoints = getEndpoints();
|
|
42
|
+
const flows = getFlows();
|
|
43
|
+
const response = {
|
|
44
|
+
endpoints: endpoints.map((endpoint) => ({
|
|
45
|
+
id: endpoint.id,
|
|
46
|
+
path: endpoint.path,
|
|
47
|
+
method: endpoint.method,
|
|
48
|
+
scenarios: endpoint.scenarios.map((scenario) => ({
|
|
49
|
+
id: scenario.id,
|
|
50
|
+
name: scenario.name,
|
|
51
|
+
status: scenario.status,
|
|
52
|
+
})),
|
|
53
|
+
defaultScenarioId: endpoint.defaultScenarioId,
|
|
54
|
+
})),
|
|
55
|
+
flows: flows.map((flow) => ({
|
|
56
|
+
id: flow.id,
|
|
57
|
+
name: flow.name,
|
|
58
|
+
description: flow.description,
|
|
59
|
+
category: flow.category,
|
|
60
|
+
endpointScenarios: flow.endpointScenarios,
|
|
61
|
+
})),
|
|
62
|
+
};
|
|
63
|
+
res.json(response);
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* GET /state
|
|
67
|
+
* Returns current runtime state
|
|
68
|
+
*/
|
|
69
|
+
router.get('/state', (req, res) => {
|
|
70
|
+
const state = stateManager.getState();
|
|
71
|
+
const response = {
|
|
72
|
+
activeFlowId: state.activeFlowId,
|
|
73
|
+
activeScenarios: state.activeScenarios,
|
|
74
|
+
};
|
|
75
|
+
res.json(response);
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* POST /scenarios/activate
|
|
79
|
+
* Activate a specific scenario for an endpoint
|
|
80
|
+
*/
|
|
81
|
+
router.post('/scenarios/activate', (req, res) => {
|
|
82
|
+
const parseResult = types_js_1.ActivateScenarioRequestSchema.safeParse(req.body);
|
|
83
|
+
if (!parseResult.success) {
|
|
84
|
+
const errorResponse = {
|
|
85
|
+
error: 'Invalid request body',
|
|
86
|
+
details: parseResult.error.issues,
|
|
87
|
+
};
|
|
88
|
+
res.status(400).json(errorResponse);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const { endpointId, scenarioId } = parseResult.data;
|
|
92
|
+
try {
|
|
93
|
+
stateManager.activateScenario(endpointId, scenarioId);
|
|
94
|
+
res.status(204).end();
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
const errorResponse = {
|
|
98
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
99
|
+
};
|
|
100
|
+
res.status(400).json(errorResponse);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
/**
|
|
104
|
+
* POST /flows/activate
|
|
105
|
+
* Activate or deactivate a flow
|
|
106
|
+
*/
|
|
107
|
+
router.post('/flows/activate', (req, res) => {
|
|
108
|
+
const parseResult = types_js_1.ActivateFlowRequestSchema.safeParse(req.body);
|
|
109
|
+
if (!parseResult.success) {
|
|
110
|
+
const errorResponse = {
|
|
111
|
+
error: 'Invalid request body',
|
|
112
|
+
details: parseResult.error.issues,
|
|
113
|
+
};
|
|
114
|
+
res.status(400).json(errorResponse);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const { flowId } = parseResult.data;
|
|
118
|
+
try {
|
|
119
|
+
if (flowId === null) {
|
|
120
|
+
stateManager.deactivateFlow();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
stateManager.activateFlow(flowId);
|
|
124
|
+
}
|
|
125
|
+
res.status(204).end();
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const errorResponse = {
|
|
129
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
130
|
+
};
|
|
131
|
+
res.status(400).json(errorResponse);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
/**
|
|
135
|
+
* POST /reset
|
|
136
|
+
* Reset all state to defaults
|
|
137
|
+
*/
|
|
138
|
+
router.post('/reset', (req, res) => {
|
|
139
|
+
stateManager.reset();
|
|
140
|
+
res.status(204).end();
|
|
141
|
+
});
|
|
142
|
+
// ============================================
|
|
143
|
+
// Endpoint CRUD Operations
|
|
144
|
+
// ============================================
|
|
145
|
+
/**
|
|
146
|
+
* GET /endpoints/:id
|
|
147
|
+
* Get a single endpoint's full configuration (including scenario bodies)
|
|
148
|
+
*/
|
|
149
|
+
router.get('/endpoints/:id', (req, res) => {
|
|
150
|
+
const { id } = req.params;
|
|
151
|
+
const endpoints = getEndpoints();
|
|
152
|
+
const endpoint = endpoints.find((e) => e.id === id);
|
|
153
|
+
if (!endpoint) {
|
|
154
|
+
const errorResponse = {
|
|
155
|
+
error: 'Endpoint not found',
|
|
156
|
+
details: `No endpoint with id "${id}"`,
|
|
157
|
+
};
|
|
158
|
+
res.status(404).json(errorResponse);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
res.json({
|
|
162
|
+
id: endpoint.id,
|
|
163
|
+
path: endpoint.path,
|
|
164
|
+
method: endpoint.method,
|
|
165
|
+
defaultScenarioId: endpoint.defaultScenarioId,
|
|
166
|
+
scenarios: endpoint.scenarios.map((s) => ({
|
|
167
|
+
id: s.id,
|
|
168
|
+
name: s.name,
|
|
169
|
+
status: s.status,
|
|
170
|
+
body: s.body,
|
|
171
|
+
headers: s.headers,
|
|
172
|
+
delay: s.delay,
|
|
173
|
+
})),
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
/**
|
|
177
|
+
* POST /endpoints
|
|
178
|
+
* Create a new endpoint
|
|
179
|
+
*/
|
|
180
|
+
router.post('/endpoints', async (req, res) => {
|
|
181
|
+
const configWriter = getConfigWriter?.();
|
|
182
|
+
if (!configWriter) {
|
|
183
|
+
const errorResponse = {
|
|
184
|
+
error: 'Endpoint management not available',
|
|
185
|
+
details: 'ConfigWriter not configured',
|
|
186
|
+
};
|
|
187
|
+
res.status(501).json(errorResponse);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const parseResult = types_js_1.EndpointRequestSchema.safeParse(req.body);
|
|
191
|
+
if (!parseResult.success) {
|
|
192
|
+
const errorResponse = {
|
|
193
|
+
error: 'Invalid request body',
|
|
194
|
+
details: parseResult.error.issues,
|
|
195
|
+
};
|
|
196
|
+
res.status(400).json(errorResponse);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const endpoint = parseResult.data;
|
|
200
|
+
// Check if endpoint with this ID already exists
|
|
201
|
+
const existingEndpoint = getEndpoints().find((e) => e.id === endpoint.id);
|
|
202
|
+
if (existingEndpoint) {
|
|
203
|
+
const errorResponse = {
|
|
204
|
+
error: `Endpoint with id '${endpoint.id}' already exists`,
|
|
205
|
+
};
|
|
206
|
+
res.status(409).json(errorResponse);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
const result = await configWriter.writeEndpoint(endpoint);
|
|
211
|
+
if (!result.success) {
|
|
212
|
+
const errorResponse = {
|
|
213
|
+
error: 'Failed to create endpoint',
|
|
214
|
+
details: result.error,
|
|
215
|
+
};
|
|
216
|
+
res.status(500).json(errorResponse);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// Trigger config reload if available
|
|
220
|
+
const onConfigChange = getOnConfigChange?.();
|
|
221
|
+
if (onConfigChange) {
|
|
222
|
+
await onConfigChange();
|
|
223
|
+
}
|
|
224
|
+
res.status(201).json({ id: endpoint.id, filePath: result.filePath });
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
const errorResponse = {
|
|
228
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
229
|
+
};
|
|
230
|
+
res.status(500).json(errorResponse);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
/**
|
|
234
|
+
* PUT /endpoints/:id
|
|
235
|
+
* Update an existing endpoint
|
|
236
|
+
*/
|
|
237
|
+
router.put('/endpoints/:id', async (req, res) => {
|
|
238
|
+
const configWriter = getConfigWriter?.();
|
|
239
|
+
if (!configWriter) {
|
|
240
|
+
const errorResponse = {
|
|
241
|
+
error: 'Endpoint management not available',
|
|
242
|
+
details: 'ConfigWriter not configured',
|
|
243
|
+
};
|
|
244
|
+
res.status(501).json(errorResponse);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const { id } = req.params;
|
|
248
|
+
const parseResult = types_js_1.EndpointRequestSchema.safeParse(req.body);
|
|
249
|
+
if (!parseResult.success) {
|
|
250
|
+
const errorResponse = {
|
|
251
|
+
error: 'Invalid request body',
|
|
252
|
+
details: parseResult.error.issues,
|
|
253
|
+
};
|
|
254
|
+
res.status(400).json(errorResponse);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const endpoint = parseResult.data;
|
|
258
|
+
// Ensure the ID in the body matches the URL parameter
|
|
259
|
+
if (endpoint.id !== id) {
|
|
260
|
+
const errorResponse = {
|
|
261
|
+
error: 'Endpoint ID in body must match URL parameter',
|
|
262
|
+
};
|
|
263
|
+
res.status(400).json(errorResponse);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
// Check if endpoint exists
|
|
267
|
+
const existingEndpoint = getEndpoints().find((e) => e.id === id);
|
|
268
|
+
if (!existingEndpoint) {
|
|
269
|
+
const errorResponse = {
|
|
270
|
+
error: `Endpoint with id '${id}' not found`,
|
|
271
|
+
};
|
|
272
|
+
res.status(404).json(errorResponse);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
const result = await configWriter.writeEndpoint(endpoint);
|
|
277
|
+
if (!result.success) {
|
|
278
|
+
const errorResponse = {
|
|
279
|
+
error: 'Failed to update endpoint',
|
|
280
|
+
details: result.error,
|
|
281
|
+
};
|
|
282
|
+
res.status(500).json(errorResponse);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
// Trigger config reload if available
|
|
286
|
+
const onConfigChange = getOnConfigChange?.();
|
|
287
|
+
if (onConfigChange) {
|
|
288
|
+
await onConfigChange();
|
|
289
|
+
}
|
|
290
|
+
res.status(200).json({ id: endpoint.id, filePath: result.filePath });
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
const errorResponse = {
|
|
294
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
295
|
+
};
|
|
296
|
+
res.status(500).json(errorResponse);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
/**
|
|
300
|
+
* DELETE /endpoints/:id
|
|
301
|
+
* Delete an endpoint
|
|
302
|
+
*/
|
|
303
|
+
router.delete('/endpoints/:id', async (req, res) => {
|
|
304
|
+
const configWriter = getConfigWriter?.();
|
|
305
|
+
if (!configWriter) {
|
|
306
|
+
const errorResponse = {
|
|
307
|
+
error: 'Endpoint management not available',
|
|
308
|
+
details: 'ConfigWriter not configured',
|
|
309
|
+
};
|
|
310
|
+
res.status(501).json(errorResponse);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
const { id } = req.params;
|
|
314
|
+
// Check if endpoint exists
|
|
315
|
+
const existingEndpoint = getEndpoints().find((e) => e.id === id);
|
|
316
|
+
if (!existingEndpoint) {
|
|
317
|
+
const errorResponse = {
|
|
318
|
+
error: `Endpoint with id '${id}' not found`,
|
|
319
|
+
};
|
|
320
|
+
res.status(404).json(errorResponse);
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
try {
|
|
324
|
+
const result = await configWriter.deleteEndpoint(id);
|
|
325
|
+
if (!result.success) {
|
|
326
|
+
const errorResponse = {
|
|
327
|
+
error: 'Failed to delete endpoint',
|
|
328
|
+
details: result.error,
|
|
329
|
+
};
|
|
330
|
+
res.status(500).json(errorResponse);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
// Trigger config reload if available
|
|
334
|
+
const onConfigChange = getOnConfigChange?.();
|
|
335
|
+
if (onConfigChange) {
|
|
336
|
+
await onConfigChange();
|
|
337
|
+
}
|
|
338
|
+
res.status(204).end();
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
const errorResponse = {
|
|
342
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
343
|
+
};
|
|
344
|
+
res.status(500).json(errorResponse);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
// ============================================
|
|
348
|
+
// Flow CRUD Operations
|
|
349
|
+
// ============================================
|
|
350
|
+
/**
|
|
351
|
+
* POST /flows
|
|
352
|
+
* Create a new flow
|
|
353
|
+
*/
|
|
354
|
+
router.post('/flows', async (req, res) => {
|
|
355
|
+
const configWriter = getConfigWriter?.();
|
|
356
|
+
if (!configWriter) {
|
|
357
|
+
const errorResponse = {
|
|
358
|
+
error: 'Flow management not available',
|
|
359
|
+
details: 'ConfigWriter not configured',
|
|
360
|
+
};
|
|
361
|
+
res.status(501).json(errorResponse);
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const parseResult = types_js_1.FlowRequestSchema.safeParse(req.body);
|
|
365
|
+
if (!parseResult.success) {
|
|
366
|
+
const errorResponse = {
|
|
367
|
+
error: 'Invalid request body',
|
|
368
|
+
details: parseResult.error.issues,
|
|
369
|
+
};
|
|
370
|
+
res.status(400).json(errorResponse);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const flow = parseResult.data;
|
|
374
|
+
// Check if flow with this ID already exists
|
|
375
|
+
const existingFlow = getFlows().find((f) => f.id === flow.id);
|
|
376
|
+
if (existingFlow) {
|
|
377
|
+
const errorResponse = {
|
|
378
|
+
error: `Flow with id '${flow.id}' already exists`,
|
|
379
|
+
};
|
|
380
|
+
res.status(409).json(errorResponse);
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
try {
|
|
384
|
+
const result = await configWriter.writeFlow(flow);
|
|
385
|
+
if (!result.success) {
|
|
386
|
+
const errorResponse = {
|
|
387
|
+
error: 'Failed to create flow',
|
|
388
|
+
details: result.error,
|
|
389
|
+
};
|
|
390
|
+
res.status(500).json(errorResponse);
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
// Trigger config reload if available
|
|
394
|
+
const onConfigChange = getOnConfigChange?.();
|
|
395
|
+
if (onConfigChange) {
|
|
396
|
+
await onConfigChange();
|
|
397
|
+
}
|
|
398
|
+
res.status(201).json({ id: flow.id, filePath: result.filePath });
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
const errorResponse = {
|
|
402
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
403
|
+
};
|
|
404
|
+
res.status(500).json(errorResponse);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
/**
|
|
408
|
+
* PUT /flows/:id
|
|
409
|
+
* Update an existing flow
|
|
410
|
+
*/
|
|
411
|
+
router.put('/flows/:id', async (req, res) => {
|
|
412
|
+
const configWriter = getConfigWriter?.();
|
|
413
|
+
if (!configWriter) {
|
|
414
|
+
const errorResponse = {
|
|
415
|
+
error: 'Flow management not available',
|
|
416
|
+
details: 'ConfigWriter not configured',
|
|
417
|
+
};
|
|
418
|
+
res.status(501).json(errorResponse);
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
const { id } = req.params;
|
|
422
|
+
const parseResult = types_js_1.FlowRequestSchema.safeParse(req.body);
|
|
423
|
+
if (!parseResult.success) {
|
|
424
|
+
const errorResponse = {
|
|
425
|
+
error: 'Invalid request body',
|
|
426
|
+
details: parseResult.error.issues,
|
|
427
|
+
};
|
|
428
|
+
res.status(400).json(errorResponse);
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
const flow = parseResult.data;
|
|
432
|
+
// Ensure the ID in the body matches the URL parameter
|
|
433
|
+
if (flow.id !== id) {
|
|
434
|
+
const errorResponse = {
|
|
435
|
+
error: 'Flow ID in body must match URL parameter',
|
|
436
|
+
};
|
|
437
|
+
res.status(400).json(errorResponse);
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
// Check if flow exists
|
|
441
|
+
const existingFlow = getFlows().find((f) => f.id === id);
|
|
442
|
+
if (!existingFlow) {
|
|
443
|
+
const errorResponse = {
|
|
444
|
+
error: `Flow with id '${id}' not found`,
|
|
445
|
+
};
|
|
446
|
+
res.status(404).json(errorResponse);
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
try {
|
|
450
|
+
const result = await configWriter.writeFlow(flow);
|
|
451
|
+
if (!result.success) {
|
|
452
|
+
const errorResponse = {
|
|
453
|
+
error: 'Failed to update flow',
|
|
454
|
+
details: result.error,
|
|
455
|
+
};
|
|
456
|
+
res.status(500).json(errorResponse);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
// Trigger config reload if available
|
|
460
|
+
const onConfigChange = getOnConfigChange?.();
|
|
461
|
+
if (onConfigChange) {
|
|
462
|
+
await onConfigChange();
|
|
463
|
+
}
|
|
464
|
+
res.status(200).json({ id: flow.id, filePath: result.filePath });
|
|
465
|
+
}
|
|
466
|
+
catch (error) {
|
|
467
|
+
const errorResponse = {
|
|
468
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
469
|
+
};
|
|
470
|
+
res.status(500).json(errorResponse);
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
/**
|
|
474
|
+
* DELETE /flows/:id
|
|
475
|
+
* Delete a flow
|
|
476
|
+
*/
|
|
477
|
+
router.delete('/flows/:id', async (req, res) => {
|
|
478
|
+
const configWriter = getConfigWriter?.();
|
|
479
|
+
if (!configWriter) {
|
|
480
|
+
const errorResponse = {
|
|
481
|
+
error: 'Flow management not available',
|
|
482
|
+
details: 'ConfigWriter not configured',
|
|
483
|
+
};
|
|
484
|
+
res.status(501).json(errorResponse);
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
const { id } = req.params;
|
|
488
|
+
// Check if flow exists
|
|
489
|
+
const existingFlow = getFlows().find((f) => f.id === id);
|
|
490
|
+
if (!existingFlow) {
|
|
491
|
+
const errorResponse = {
|
|
492
|
+
error: `Flow with id '${id}' not found`,
|
|
493
|
+
};
|
|
494
|
+
res.status(404).json(errorResponse);
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
try {
|
|
498
|
+
const result = await configWriter.deleteFlow(id);
|
|
499
|
+
if (!result.success) {
|
|
500
|
+
const errorResponse = {
|
|
501
|
+
error: 'Failed to delete flow',
|
|
502
|
+
details: result.error,
|
|
503
|
+
};
|
|
504
|
+
res.status(500).json(errorResponse);
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
// Deactivate flow if it was active
|
|
508
|
+
const state = stateManager.getState();
|
|
509
|
+
if (state.activeFlowId === id) {
|
|
510
|
+
stateManager.deactivateFlow();
|
|
511
|
+
}
|
|
512
|
+
// Trigger config reload if available
|
|
513
|
+
const onConfigChange = getOnConfigChange?.();
|
|
514
|
+
if (onConfigChange) {
|
|
515
|
+
await onConfigChange();
|
|
516
|
+
}
|
|
517
|
+
res.status(204).end();
|
|
518
|
+
}
|
|
519
|
+
catch (error) {
|
|
520
|
+
const errorResponse = {
|
|
521
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
522
|
+
};
|
|
523
|
+
res.status(500).json(errorResponse);
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
/**
|
|
527
|
+
* POST /flows/:id/duplicate
|
|
528
|
+
* Duplicate an existing flow with a new ID
|
|
529
|
+
*/
|
|
530
|
+
router.post('/flows/:id/duplicate', async (req, res) => {
|
|
531
|
+
const configWriter = getConfigWriter?.();
|
|
532
|
+
if (!configWriter) {
|
|
533
|
+
const errorResponse = {
|
|
534
|
+
error: 'Flow management not available',
|
|
535
|
+
details: 'ConfigWriter not configured',
|
|
536
|
+
};
|
|
537
|
+
res.status(501).json(errorResponse);
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
const { id } = req.params;
|
|
541
|
+
const parseResult = types_js_1.DuplicateFlowRequestSchema.safeParse(req.body);
|
|
542
|
+
if (!parseResult.success) {
|
|
543
|
+
const errorResponse = {
|
|
544
|
+
error: 'Invalid request body',
|
|
545
|
+
details: parseResult.error.issues,
|
|
546
|
+
};
|
|
547
|
+
res.status(400).json(errorResponse);
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
const { newId, newName } = parseResult.data;
|
|
551
|
+
// Check if source flow exists
|
|
552
|
+
const sourceFlow = getFlows().find((f) => f.id === id);
|
|
553
|
+
if (!sourceFlow) {
|
|
554
|
+
const errorResponse = {
|
|
555
|
+
error: `Flow with id '${id}' not found`,
|
|
556
|
+
};
|
|
557
|
+
res.status(404).json(errorResponse);
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
// Check if new ID already exists
|
|
561
|
+
const existingFlow = getFlows().find((f) => f.id === newId);
|
|
562
|
+
if (existingFlow) {
|
|
563
|
+
const errorResponse = {
|
|
564
|
+
error: `Flow with id '${newId}' already exists`,
|
|
565
|
+
};
|
|
566
|
+
res.status(409).json(errorResponse);
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
try {
|
|
570
|
+
// Create new flow with copied data
|
|
571
|
+
const newFlow = {
|
|
572
|
+
...sourceFlow,
|
|
573
|
+
id: newId,
|
|
574
|
+
name: newName || `${sourceFlow.name} (Copy)`,
|
|
575
|
+
endpointScenarios: { ...sourceFlow.endpointScenarios },
|
|
576
|
+
};
|
|
577
|
+
const result = await configWriter.writeFlow(newFlow);
|
|
578
|
+
if (!result.success) {
|
|
579
|
+
const errorResponse = {
|
|
580
|
+
error: 'Failed to duplicate flow',
|
|
581
|
+
details: result.error,
|
|
582
|
+
};
|
|
583
|
+
res.status(500).json(errorResponse);
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
// Trigger config reload if available
|
|
587
|
+
const onConfigChange = getOnConfigChange?.();
|
|
588
|
+
if (onConfigChange) {
|
|
589
|
+
await onConfigChange();
|
|
590
|
+
}
|
|
591
|
+
res.status(201).json({ id: newId, filePath: result.filePath });
|
|
592
|
+
}
|
|
593
|
+
catch (error) {
|
|
594
|
+
const errorResponse = {
|
|
595
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
596
|
+
};
|
|
597
|
+
res.status(500).json(errorResponse);
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
/**
|
|
601
|
+
* Error handling middleware
|
|
602
|
+
*/
|
|
603
|
+
router.use((err, req, res, next) => {
|
|
604
|
+
console.error('Admin API error:', err);
|
|
605
|
+
const errorResponse = {
|
|
606
|
+
error: 'Internal server error',
|
|
607
|
+
details: err.message,
|
|
608
|
+
};
|
|
609
|
+
res.status(500).json(errorResponse);
|
|
610
|
+
});
|
|
611
|
+
return router;
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Admin API path constant
|
|
615
|
+
*/
|
|
616
|
+
exports.ADMIN_API_PATH = '/mock-admin/api';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-router.js","sourceRoot":"","sources":["../../src/admin/admin-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { ActivateScenarioRequest, ActivateFlowRequest, ConfigResponse, StateResponse, ErrorResponse, } from './types.js';
|
|
2
|
+
export { ActivateScenarioRequestSchema, ActivateFlowRequestSchema, } from './types.js';
|
|
3
|
+
export { createAdminRouter, ADMIN_API_PATH } from './admin-router.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ADMIN_API_PATH = exports.createAdminRouter = exports.ActivateFlowRequestSchema = exports.ActivateScenarioRequestSchema = void 0;
|
|
4
|
+
var types_js_1 = require("./types.js");
|
|
5
|
+
Object.defineProperty(exports, "ActivateScenarioRequestSchema", { enumerable: true, get: function () { return types_js_1.ActivateScenarioRequestSchema; } });
|
|
6
|
+
Object.defineProperty(exports, "ActivateFlowRequestSchema", { enumerable: true, get: function () { return types_js_1.ActivateFlowRequestSchema; } });
|
|
7
|
+
// Admin router
|
|
8
|
+
var admin_router_js_1 = require("./admin-router.js");
|
|
9
|
+
Object.defineProperty(exports, "createAdminRouter", { enumerable: true, get: function () { return admin_router_js_1.createAdminRouter; } });
|
|
10
|
+
Object.defineProperty(exports, "ADMIN_API_PATH", { enumerable: true, get: function () { return admin_router_js_1.ADMIN_API_PATH; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":";;;AASA,uCAGoB;AAFlB,yHAAA,6BAA6B,OAAA;AAC7B,qHAAA,yBAAyB,OAAA;AAG3B,eAAe;AACf,qDAAsE;AAA7D,oHAAA,iBAAiB,OAAA;AAAE,iHAAA,cAAc,OAAA"}
|