local-serverless-stack 0.0.7 → 0.0.10
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/CHANGELOG.md +24 -0
- package/bin/cli.js +109 -5
- package/dist/server/index.js +7 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/queues.d.ts +3 -0
- package/dist/server/routes/queues.d.ts.map +1 -0
- package/dist/server/routes/queues.js +47 -0
- package/dist/server/routes/queues.js.map +1 -0
- package/dist/server/routes/seeds.d.ts +3 -0
- package/dist/server/routes/seeds.d.ts.map +1 -0
- package/dist/server/routes/seeds.js +59 -0
- package/dist/server/routes/seeds.js.map +1 -0
- package/dist/server/services/config-manager.d.ts +2 -0
- package/dist/server/services/config-manager.d.ts.map +1 -1
- package/dist/server/services/config-manager.js +8 -0
- package/dist/server/services/config-manager.js.map +1 -1
- package/dist/server/services/queue-inspector.d.ts +46 -0
- package/dist/server/services/queue-inspector.d.ts.map +1 -0
- package/dist/server/services/queue-inspector.js +182 -0
- package/dist/server/services/queue-inspector.js.map +1 -0
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +3 -0
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/dist/server/services/seed-manager.d.ts +45 -0
- package/dist/server/services/seed-manager.d.ts.map +1 -0
- package/dist/server/services/seed-manager.js +239 -0
- package/dist/server/services/seed-manager.js.map +1 -0
- package/dist/ui/assets/index-BZ8sqKTK.css +1 -0
- package/dist/ui/assets/index-CeFqbFF4.js +28 -0
- package/dist/ui/index.html +2 -2
- package/package.json +2 -1
- package/dist/ui/assets/index-7WT0rkfU.css +0 -1
- package/dist/ui/assets/index-M0lXeUj-.js +0 -19
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,30 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.0.9] - 2026-05-18
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **DynamoDB seeding**: drop `{tableName}.json` files into the directory configured by the new `seedsDir` option (default `./seeds`) and items get marshalled and inserted into the matching DynamoDB table. Items are written as plain JSON (no AWS attribute-typed envelope) — `@aws-sdk/util-dynamodb`'s `marshall` infers types automatically.
|
|
12
|
+
- **Auto-seed on table creation**: when `ResourceProvisioner` creates a DynamoDB table, the `SeedManager` checks for a matching seed file and applies it in the background. Idempotent — re-runs are a `PutItem` merge by primary key. Failures are logged and never break the provisioner.
|
|
13
|
+
- **`/api/seeds` endpoints**: `GET /api/seeds` (list seed files + whether each target table exists), `POST /api/seeds/run` (apply one or all), `POST /api/seeds/clear` (delete every item from one table or from all tables that have a seed file).
|
|
14
|
+
- **CLI commands**: `npx lss seed [tableName]` and `npx lss seed:clear [tableName]`. With no argument they operate on every table that has a corresponding seed file.
|
|
15
|
+
- **Seeds dashboard tab**: new "Seeds" tab listing each seed file with its item count and whether the target table exists in LocalStack, plus per-row "Apply"/"Clear" buttons and global "Re-apply all"/"Clear all" actions.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- `ConfigManager` accepts the new `seedsDir` option (and `LSS_SEEDS_DIR` env var). Relative paths are resolved against the current working directory. Surfaced in the startup summary.
|
|
19
|
+
|
|
20
|
+
## [0.0.8] - 2026-05-18
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- **Queue inspection UI**: new "Queues" tab in the dashboard. For each SQS queue it shows available messages, in-flight messages, processed-since-orchestrator-start, delayed messages, and the Lambda consumers (event source mappings) attached to it. Click "Details" for full attributes (visibility timeout, retention, FIFO, creation time) plus a per-consumer panel.
|
|
24
|
+
- **`/api/queues` endpoints**: `GET /api/queues` (list), `GET /api/queues/:name` (details), `POST /api/queues/:name/reset-processed` (reset processed counter).
|
|
25
|
+
- **Queue metrics tracker**: `QueueInspector` polls LocalStack every 5s and derives a per-queue "processed" count from drops in the in-flight bucket that are not re-queued as retries.
|
|
26
|
+
- **TreeUI design system**: dashboard now uses [`@treeui/vue`](https://www.npmjs.com/package/@treeui/vue) components throughout — `TNavbar`, `TContainer`, `TTabs`, `TCard`, `TStat`, `TTable`, `TBadge`, `TTag`, `TButton`, `TInput`, `TFormField`, `TModal`, `TConfirmDialog`, `TEmptyState`, `TSpinner`, `TProgress`, `TAlert`, `TStack`, `TGrid`, `TDivider`, `TToastProvider` / `useToast()`. Toasts replace native `alert()` calls. Dark theme is applied by default with a light/dark toggle in the navbar.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- `ServicesList` and `ResourcesOverview` rewritten on top of TreeUI primitives.
|
|
30
|
+
- Delete service now goes through a `TConfirmDialog` instead of `window.confirm`.
|
|
31
|
+
|
|
8
32
|
## [0.0.6] - 2026-05-17
|
|
9
33
|
|
|
10
34
|
### Added
|
package/bin/cli.js
CHANGED
|
@@ -235,6 +235,97 @@ function showStatus() {
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
+
function getServerPort() {
|
|
239
|
+
const cfg = getConfig(loadConfig());
|
|
240
|
+
return cfg.serverPort;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function postJson(path, body) {
|
|
244
|
+
return new Promise((resolve, reject) => {
|
|
245
|
+
const http = require('http');
|
|
246
|
+
const payload = JSON.stringify(body || {});
|
|
247
|
+
const req = http.request(
|
|
248
|
+
{
|
|
249
|
+
hostname: 'localhost',
|
|
250
|
+
port: getServerPort(),
|
|
251
|
+
path,
|
|
252
|
+
method: 'POST',
|
|
253
|
+
headers: {
|
|
254
|
+
'Content-Type': 'application/json',
|
|
255
|
+
'Content-Length': Buffer.byteLength(payload),
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
res => {
|
|
259
|
+
let data = '';
|
|
260
|
+
res.on('data', chunk => (data += chunk));
|
|
261
|
+
res.on('end', () => {
|
|
262
|
+
let parsed;
|
|
263
|
+
try { parsed = data ? JSON.parse(data) : {}; } catch { parsed = { raw: data }; }
|
|
264
|
+
if (res.statusCode >= 200 && res.statusCode < 300) {
|
|
265
|
+
resolve(parsed);
|
|
266
|
+
} else {
|
|
267
|
+
reject(new Error(parsed.error || `HTTP ${res.statusCode}`));
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
},
|
|
271
|
+
);
|
|
272
|
+
req.on('error', reject);
|
|
273
|
+
req.write(payload);
|
|
274
|
+
req.end();
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function ensureRunningOrExit() {
|
|
279
|
+
if (!fs.existsSync(PID_FILE)) {
|
|
280
|
+
console.error('❌ LSS Orchestrator is not running. Start it with: npx lss start');
|
|
281
|
+
process.exit(1);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function printSeedRunResults(results) {
|
|
286
|
+
for (const r of results) {
|
|
287
|
+
if (r.skipped) {
|
|
288
|
+
console.log(` ⚠ ${r.tableName}: skipped (${r.reason})`);
|
|
289
|
+
} else {
|
|
290
|
+
console.log(` ✓ ${r.tableName}: ${r.inserted} item(s) inserted`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function printSeedClearResults(results) {
|
|
296
|
+
for (const r of results) {
|
|
297
|
+
if (r.skipped) {
|
|
298
|
+
console.log(` ⚠ ${r.tableName}: skipped (${r.reason})`);
|
|
299
|
+
} else {
|
|
300
|
+
console.log(` ✓ ${r.tableName}: ${r.deleted} item(s) deleted`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
async function runSeed(tableName) {
|
|
306
|
+
ensureRunningOrExit();
|
|
307
|
+
try {
|
|
308
|
+
console.log(tableName ? `🌱 Seeding ${tableName}...` : '🌱 Seeding all tables with seed files...');
|
|
309
|
+
const res = await postJson('/api/seeds/run', tableName ? { tableName } : {});
|
|
310
|
+
printSeedRunResults(res.results || []);
|
|
311
|
+
} catch (e) {
|
|
312
|
+
console.error('❌ Seed failed:', e.message);
|
|
313
|
+
process.exit(1);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
async function clearSeed(tableName) {
|
|
318
|
+
ensureRunningOrExit();
|
|
319
|
+
try {
|
|
320
|
+
console.log(tableName ? `🧹 Clearing ${tableName}...` : '🧹 Clearing all seeded tables...');
|
|
321
|
+
const res = await postJson('/api/seeds/clear', tableName ? { tableName } : {});
|
|
322
|
+
printSeedClearResults(res.results || []);
|
|
323
|
+
} catch (e) {
|
|
324
|
+
console.error('❌ Clear failed:', e.message);
|
|
325
|
+
process.exit(1);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
238
329
|
function showHelp() {
|
|
239
330
|
console.log(`
|
|
240
331
|
Local Serverless Stack (LSS) CLI
|
|
@@ -242,11 +333,15 @@ Local Serverless Stack (LSS) CLI
|
|
|
242
333
|
Usage: npx lss <command> [options]
|
|
243
334
|
|
|
244
335
|
Commands:
|
|
245
|
-
start
|
|
246
|
-
stop
|
|
247
|
-
status
|
|
248
|
-
logs
|
|
249
|
-
|
|
336
|
+
start Start the LSS Orchestrator in background
|
|
337
|
+
stop Stop the LSS Orchestrator
|
|
338
|
+
status Check if the orchestrator is running
|
|
339
|
+
logs Show the logs
|
|
340
|
+
seed [table] Apply seed file(s) from seedsDir into DynamoDB
|
|
341
|
+
(no args = all matching tables)
|
|
342
|
+
seed:clear [table] Delete all items from the given table (or all
|
|
343
|
+
tables with a seed file when no arg is given)
|
|
344
|
+
help Show this help message
|
|
250
345
|
|
|
251
346
|
Options:
|
|
252
347
|
--enable-dynamo-proxy Enable DynamoDB proxy on port 8000 (for start command)
|
|
@@ -290,6 +385,9 @@ Examples:
|
|
|
290
385
|
npx lss stop # Stop the orchestrator
|
|
291
386
|
npx lss status # Check status
|
|
292
387
|
npx lss logs # View logs
|
|
388
|
+
npx lss seed # Seed every table that has a {name}.json file
|
|
389
|
+
npx lss seed users # Seed only the "users" table
|
|
390
|
+
npx lss seed:clear users # Delete all items from "users"
|
|
293
391
|
`);
|
|
294
392
|
}
|
|
295
393
|
|
|
@@ -322,6 +420,12 @@ switch (command) {
|
|
|
322
420
|
case 'logs':
|
|
323
421
|
showLogs();
|
|
324
422
|
break;
|
|
423
|
+
case 'seed':
|
|
424
|
+
runSeed(process.argv[3]);
|
|
425
|
+
break;
|
|
426
|
+
case 'seed:clear':
|
|
427
|
+
clearSeed(process.argv[3]);
|
|
428
|
+
break;
|
|
325
429
|
case 'help':
|
|
326
430
|
case '--help':
|
|
327
431
|
case '-h':
|
package/dist/server/index.js
CHANGED
|
@@ -4,8 +4,11 @@ import path from 'path';
|
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import { servicesRouter, processManager } from './routes/services.js';
|
|
6
6
|
import { resourcesRouter } from './routes/resources.js';
|
|
7
|
+
import { queuesRouter } from './routes/queues.js';
|
|
8
|
+
import { seedsRouter } from './routes/seeds.js';
|
|
7
9
|
import { LocalStackManager } from './services/localstack-manager.js';
|
|
8
10
|
import { ConfigManager } from './services/config-manager.js';
|
|
11
|
+
import { QueueInspector } from './services/queue-inspector.js';
|
|
9
12
|
import { startDynamoProxy } from './dev/dynamo-proxy.js';
|
|
10
13
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
14
|
const __dirname = path.dirname(__filename);
|
|
@@ -18,6 +21,8 @@ app.use(express.json());
|
|
|
18
21
|
// API routes
|
|
19
22
|
app.use('/api/services', servicesRouter);
|
|
20
23
|
app.use('/api/resources', resourcesRouter);
|
|
24
|
+
app.use('/api/queues', queuesRouter);
|
|
25
|
+
app.use('/api/seeds', seedsRouter);
|
|
21
26
|
// Health check
|
|
22
27
|
app.get('/api/health', (_req, res) => {
|
|
23
28
|
res.json({
|
|
@@ -43,6 +48,7 @@ async function start() {
|
|
|
43
48
|
console.log(`✅ Server running on http://localhost:${PORT}`);
|
|
44
49
|
console.log(`✅ LocalStack running on ${localstack.getEndpoint()}`);
|
|
45
50
|
});
|
|
51
|
+
QueueInspector.getInstance().startPolling();
|
|
46
52
|
// Optional DynamoDB proxy
|
|
47
53
|
if (configManager.isEnableDynamoProxy()) {
|
|
48
54
|
const proxyPort = configManager.getDynamoProxyPort();
|
|
@@ -59,6 +65,7 @@ async function start() {
|
|
|
59
65
|
// Graceful shutdown
|
|
60
66
|
process.on('SIGINT', async () => {
|
|
61
67
|
console.log('\n🛑 Shutting down gracefully...');
|
|
68
|
+
QueueInspector.getInstance().stopPolling();
|
|
62
69
|
processManager.stopAll();
|
|
63
70
|
await processManager.cleanup();
|
|
64
71
|
const localstack = LocalStackManager.getInstance();
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;AAClD,MAAM,IAAI,GAAG,aAAa,CAAC,gBAAgB,EAAE,CAAC;AAE9C,aAAa;AACb,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAChB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,aAAa;AACb,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;AACzC,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queues.d.ts","sourceRoot":"","sources":["../../../src/server/routes/queues.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA4CxB,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { QueueInspector } from '../services/queue-inspector.js';
|
|
3
|
+
const router = Router();
|
|
4
|
+
const inspector = QueueInspector.getInstance();
|
|
5
|
+
router.get('/', async (_req, res) => {
|
|
6
|
+
try {
|
|
7
|
+
const queues = await inspector.listQueues();
|
|
8
|
+
res.json(queues);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const message = error instanceof Error ? error.message : 'Failed to list queues';
|
|
12
|
+
res.status(500).json({ error: message });
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
router.get('/:name', async (req, res) => {
|
|
16
|
+
try {
|
|
17
|
+
const name = req.params.name;
|
|
18
|
+
if (!name || typeof name !== 'string' || name.includes('/') || name.includes('..')) {
|
|
19
|
+
return res.status(400).json({ error: 'Invalid queue name' });
|
|
20
|
+
}
|
|
21
|
+
const queue = await inspector.getQueue(name);
|
|
22
|
+
if (!queue) {
|
|
23
|
+
return res.status(404).json({ error: 'Queue not found' });
|
|
24
|
+
}
|
|
25
|
+
return res.json(queue);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : 'Failed to fetch queue';
|
|
29
|
+
return res.status(500).json({ error: message });
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
router.post('/:name/reset-processed', async (req, res) => {
|
|
33
|
+
try {
|
|
34
|
+
const name = req.params.name;
|
|
35
|
+
if (!name || typeof name !== 'string' || name.includes('/') || name.includes('..')) {
|
|
36
|
+
return res.status(400).json({ error: 'Invalid queue name' });
|
|
37
|
+
}
|
|
38
|
+
inspector.resetProcessedCount(name);
|
|
39
|
+
return res.json({ success: true });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const message = error instanceof Error ? error.message : 'Failed to reset counter';
|
|
43
|
+
return res.status(500).json({ error: message });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
export { router as queuesRouter };
|
|
47
|
+
//# sourceMappingURL=queues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queues.js","sourceRoot":"","sources":["../../../src/server/routes/queues.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeds.d.ts","sourceRoot":"","sources":["../../../src/server/routes/seeds.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA0DxB,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { SeedManager } from '../services/seed-manager.js';
|
|
3
|
+
import { ConfigManager } from '../services/config-manager.js';
|
|
4
|
+
const router = Router();
|
|
5
|
+
const seeds = SeedManager.getInstance();
|
|
6
|
+
function isValidTableName(name) {
|
|
7
|
+
return (typeof name === 'string' &&
|
|
8
|
+
name.length > 0 &&
|
|
9
|
+
!name.includes('/') &&
|
|
10
|
+
!name.includes('..') &&
|
|
11
|
+
!name.includes('\\'));
|
|
12
|
+
}
|
|
13
|
+
router.get('/', async (_req, res) => {
|
|
14
|
+
try {
|
|
15
|
+
const entries = await seeds.list();
|
|
16
|
+
res.json({
|
|
17
|
+
seedsDir: ConfigManager.getInstance().getSeedsDir(),
|
|
18
|
+
entries,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
const message = error instanceof Error ? error.message : 'Failed to list seeds';
|
|
23
|
+
res.status(500).json({ error: message });
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
router.post('/run', async (req, res) => {
|
|
27
|
+
try {
|
|
28
|
+
const { tableName } = req.body ?? {};
|
|
29
|
+
if (tableName !== undefined && !isValidTableName(tableName)) {
|
|
30
|
+
return res.status(400).json({ error: 'Invalid tableName' });
|
|
31
|
+
}
|
|
32
|
+
const result = tableName
|
|
33
|
+
? [await seeds.seedTable(tableName)]
|
|
34
|
+
: await seeds.seedAll();
|
|
35
|
+
return res.json({ results: result });
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const message = error instanceof Error ? error.message : 'Failed to run seeds';
|
|
39
|
+
return res.status(500).json({ error: message });
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
router.post('/clear', async (req, res) => {
|
|
43
|
+
try {
|
|
44
|
+
const { tableName } = req.body ?? {};
|
|
45
|
+
if (tableName !== undefined && !isValidTableName(tableName)) {
|
|
46
|
+
return res.status(400).json({ error: 'Invalid tableName' });
|
|
47
|
+
}
|
|
48
|
+
const result = tableName
|
|
49
|
+
? [await seeds.clearTable(tableName)]
|
|
50
|
+
: await seeds.clearAllSeeded();
|
|
51
|
+
return res.json({ results: result });
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const message = error instanceof Error ? error.message : 'Failed to clear seeds';
|
|
55
|
+
return res.status(500).json({ error: message });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
export { router as seedsRouter };
|
|
59
|
+
//# sourceMappingURL=seeds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../../src/server/routes/seeds.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ export interface LSSConfig {
|
|
|
15
15
|
services?: string[];
|
|
16
16
|
persistence?: boolean;
|
|
17
17
|
debug?: boolean;
|
|
18
|
+
seedsDir?: string;
|
|
18
19
|
}
|
|
19
20
|
export declare class ConfigManager {
|
|
20
21
|
private static instance;
|
|
@@ -41,6 +42,7 @@ export declare class ConfigManager {
|
|
|
41
42
|
getServices(): string[];
|
|
42
43
|
isPersistence(): boolean;
|
|
43
44
|
isDebug(): boolean;
|
|
45
|
+
getSeedsDir(): string;
|
|
44
46
|
getConfigPath(): string;
|
|
45
47
|
/**
|
|
46
48
|
* Print configuration summary
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/server/services/config-manager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,SAAS;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,IAAI,CAAC,EAAE,cAAc,CAAC;IAGtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAGtC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,KAAK,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/server/services/config-manager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,SAAS;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,IAAI,CAAC,EAAE,cAAc,CAAC;IAGtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAGtC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAIhB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,WAAW;IAuDnB,SAAS,IAAI,SAAS;IAItB,aAAa,IAAI,MAAM;IAKvB,gBAAgB,IAAI,MAAM;IAI1B,iBAAiB,IAAI,MAAM;IAI3B,qBAAqB,IAAI,MAAM;IAQ/B,OAAO,IAAI,cAAc;IAIzB,UAAU,IAAI,OAAO;IAIrB,oBAAoB,IAAI,iBAAiB;IAIzC,oBAAoB,IAAI,MAAM;IAI9B,kBAAkB,IAAI,MAAM;IAQ5B,sBAAsB,IAAI,MAAM,GAAG,SAAS;IAI5C,mBAAmB,IAAI,OAAO;IAQ9B,kBAAkB,IAAI,MAAM;IAI5B,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM,EAAE;IAIvB,aAAa,IAAI,OAAO;IAOxB,OAAO,IAAI,OAAO;IAOlB,WAAW,IAAI,MAAM;IAKrB,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,YAAY,IAAI,IAAI;IAuBpB,kBAAkB,IAAI,MAAM;CAI7B"}
|
|
@@ -93,6 +93,9 @@ export class ConfigManager {
|
|
|
93
93
|
if (process.env.LSS_DEBUG) {
|
|
94
94
|
this.config.debug = process.env.LSS_DEBUG === 'true' || process.env.LSS_DEBUG === '1';
|
|
95
95
|
}
|
|
96
|
+
if (process.env.LSS_SEEDS_DIR) {
|
|
97
|
+
this.config.seedsDir = process.env.LSS_SEEDS_DIR;
|
|
98
|
+
}
|
|
96
99
|
}
|
|
97
100
|
getConfig() {
|
|
98
101
|
return this.config;
|
|
@@ -164,6 +167,10 @@ export class ConfigManager {
|
|
|
164
167
|
}
|
|
165
168
|
return false;
|
|
166
169
|
}
|
|
170
|
+
getSeedsDir() {
|
|
171
|
+
const raw = this.config.seedsDir ?? './seeds';
|
|
172
|
+
return path.isAbsolute(raw) ? raw : path.resolve(process.cwd(), raw);
|
|
173
|
+
}
|
|
167
174
|
getConfigPath() {
|
|
168
175
|
return this.configPath;
|
|
169
176
|
}
|
|
@@ -186,6 +193,7 @@ export class ConfigManager {
|
|
|
186
193
|
console.log(` AWS Region: ${this.getRegion()}`);
|
|
187
194
|
console.log(` Services: ${this.getServices().join(', ')}`);
|
|
188
195
|
console.log(` Persistence: ${this.isPersistence()}`);
|
|
196
|
+
console.log(` Seeds Dir: ${this.getSeedsDir()}`);
|
|
189
197
|
if (this.getConfigPath()) {
|
|
190
198
|
console.log(` Config File: ${this.getConfigPath()}`);
|
|
191
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/server/services/config-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/server/services/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface QueueConsumer {
|
|
2
|
+
functionName: string;
|
|
3
|
+
uuid?: string;
|
|
4
|
+
state?: string;
|
|
5
|
+
batchSize?: number;
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface QueueSnapshot {
|
|
9
|
+
name: string;
|
|
10
|
+
url: string;
|
|
11
|
+
arn?: string;
|
|
12
|
+
available: number;
|
|
13
|
+
inFlight: number;
|
|
14
|
+
delayed: number;
|
|
15
|
+
processed: number;
|
|
16
|
+
total: number;
|
|
17
|
+
fifo: boolean;
|
|
18
|
+
visibilityTimeout?: number;
|
|
19
|
+
messageRetentionPeriod?: number;
|
|
20
|
+
createdAt?: number;
|
|
21
|
+
lastModifiedAt?: number;
|
|
22
|
+
consumers: QueueConsumer[];
|
|
23
|
+
lastPolledAt: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class QueueInspector {
|
|
26
|
+
private static instance;
|
|
27
|
+
private sqsClient;
|
|
28
|
+
private lambdaClient;
|
|
29
|
+
private metrics;
|
|
30
|
+
private pollInterval;
|
|
31
|
+
private readonly pollFrequencyMs;
|
|
32
|
+
private constructor();
|
|
33
|
+
static getInstance(): QueueInspector;
|
|
34
|
+
startPolling(): void;
|
|
35
|
+
stopPolling(): void;
|
|
36
|
+
listQueues(): Promise<QueueSnapshot[]>;
|
|
37
|
+
getQueue(queueName: string): Promise<QueueSnapshot | null>;
|
|
38
|
+
private refreshMetrics;
|
|
39
|
+
private fetchQueueUrls;
|
|
40
|
+
private fetchEventSourceMappingsByQueueArn;
|
|
41
|
+
private buildSnapshot;
|
|
42
|
+
private updateMetricsForQueue;
|
|
43
|
+
private updateMetricsState;
|
|
44
|
+
resetProcessedCount(queueName: string): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=queue-inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-inspector.d.ts","sourceRoot":"","sources":["../../../src/server/services/queue-inspector.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IAExC,OAAO;IAMP,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC,YAAY,IAAI,IAAI;IAOpB,WAAW,IAAI,IAAI;IAOb,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAUtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;YAclD,cAAc;YASd,cAAc;YASd,kCAAkC;YA0BlC,aAAa;YA4Cb,qBAAqB;IAmBnC,OAAO,CAAC,kBAAkB;IA2B1B,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAO7C"}
|