local-serverless-stack 0.0.10 → 0.0.12
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 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/dynamo.d.ts +3 -0
- package/dist/server/routes/dynamo.d.ts.map +1 -0
- package/dist/server/routes/dynamo.js +139 -0
- package/dist/server/routes/dynamo.js.map +1 -0
- package/dist/server/routes/resources.d.ts.map +1 -1
- package/dist/server/routes/resources.js +3 -2
- package/dist/server/routes/resources.js.map +1 -1
- package/dist/server/routes/seeds.d.ts.map +1 -1
- package/dist/server/routes/seeds.js +12 -6
- package/dist/server/routes/seeds.js.map +1 -1
- package/dist/server/services/dynamo-explorer.d.ts +66 -0
- package/dist/server/services/dynamo-explorer.d.ts.map +1 -0
- package/dist/server/services/dynamo-explorer.js +202 -0
- package/dist/server/services/dynamo-explorer.js.map +1 -0
- package/dist/server/services/resource-provisioner.d.ts +1 -1
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +16 -11
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/dist/server/services/seed-manager.d.ts +10 -9
- package/dist/server/services/seed-manager.d.ts.map +1 -1
- package/dist/server/services/seed-manager.js +44 -34
- package/dist/server/services/seed-manager.js.map +1 -1
- package/dist/ui/assets/index-iqHgjD5V.js +30 -0
- package/dist/ui/index.html +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/index-CeFqbFF4.js +0 -28
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +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.
|
|
8
|
+
## [0.0.12] - 2026-05-19
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Region selector in the dashboard navbar** (AWS Console–style). The selected region is persisted in `localStorage` and is automatically appended as `?region=<value>` to every API request. The Overview, DynamoDB, and Seeds tabs now reload from scratch when the region changes (keyed remount).
|
|
12
|
+
- **`examples/sample-microservice`**: end-to-end test microservice (`serverless.yml` + JS handlers) that exercises DynamoDB (PK-only / composite key + GSI / stream), SQS, SNS and Lambda event sources — meant for poking at the dashboard with real data. Includes its own `lss.config.json` (default ports), seed fixtures for Users/Orders, and `npm run lss:*` scripts that delegate to the local LSS CLI via relative paths.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- `DynamoExplorer`, `SeedManager`, and `ResourceProvisioner.listAllResources` now keep a per-region client cache and accept an optional `region` argument on every public method. Each `/api/dynamo/*`, `/api/seeds/*`, and `/api/resources` route reads `?region=` from the query string and forwards it through.
|
|
16
|
+
- Auto-seed on table creation now passes the provisioning region down so seeds land in the correct namespace when a service is registered in a non-default region.
|
|
17
|
+
|
|
18
|
+
### Known limitations
|
|
19
|
+
- The **Queues** tab is not yet region-aware — `QueueInspector` still polls the singleton's region (the one set by the most recently registered service). A region-aware refactor of the inspector is planned for a follow-up.
|
|
20
|
+
|
|
21
|
+
## [0.0.11] - 2026-05-18
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- **DynamoDB explorer**: new "DynamoDB" tab inspired by the AWS Console. Lists every table with key schema, item count, billing mode, TTL/Streams status and per-table warnings (e.g. "TTL not configured"). Clicking a table opens a detail view with three sub-tabs.
|
|
25
|
+
- **Explore items (Scan / Query)**: visual filter builder with attribute / operator / value rows (operators: `=`, `<>`, `<`, `<=`, `>`, `>=`, `begins_with`, `contains`, `attribute_exists`, `attribute_not_exists`). Values are auto-typed (number/boolean/null/JSON). Supports running on the table or any GSI/LSI, configurable limit, and "Load more" pagination via `LastEvaluatedKey`. Query mode requires key conditions (up to PK + SK) and reuses the same builder.
|
|
26
|
+
- **Item CRUD**: per-row "View", "Edit" and "Delete" actions, plus a "Create item" button. Items are edited as plain JSON in a modal with format/validate. Edit performs a `PutItem` (full-replace); if any key attribute changed during edit, the original row is deleted first so it behaves like an update instead of producing a duplicate.
|
|
27
|
+
- **Indexes sub-tab**: lists GSIs and LSIs with their key schema, projection type, item count and status.
|
|
28
|
+
- **Settings sub-tab**: TTL toggle (`UpdateTimeToLive`), Streams view, table identifier (ARN + creation date), item count and size.
|
|
29
|
+
- **`/api/dynamo` endpoints**: `GET /tables`, `GET /tables/:name`, `GET/PUT /tables/:name/ttl`, `POST /tables/:name/scan`, `POST /tables/:name/query`, `POST /tables/:name/items` (PutItem), `POST /tables/:name/items/get` (GetItem), `POST /tables/:name/items/delete`. Items and keys cross the wire as plain JSON — the server `marshall`s/`unmarshall`s.
|
|
30
|
+
|
|
31
|
+
## [0.0.10] - 2026-05-18
|
|
9
32
|
|
|
10
33
|
### Added
|
|
11
34
|
- **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.
|
package/dist/server/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { servicesRouter, processManager } from './routes/services.js';
|
|
|
6
6
|
import { resourcesRouter } from './routes/resources.js';
|
|
7
7
|
import { queuesRouter } from './routes/queues.js';
|
|
8
8
|
import { seedsRouter } from './routes/seeds.js';
|
|
9
|
+
import { dynamoRouter } from './routes/dynamo.js';
|
|
9
10
|
import { LocalStackManager } from './services/localstack-manager.js';
|
|
10
11
|
import { ConfigManager } from './services/config-manager.js';
|
|
11
12
|
import { QueueInspector } from './services/queue-inspector.js';
|
|
@@ -23,6 +24,7 @@ app.use('/api/services', servicesRouter);
|
|
|
23
24
|
app.use('/api/resources', resourcesRouter);
|
|
24
25
|
app.use('/api/queues', queuesRouter);
|
|
25
26
|
app.use('/api/seeds', seedsRouter);
|
|
27
|
+
app.use('/api/dynamo', dynamoRouter);
|
|
26
28
|
// Health check
|
|
27
29
|
app.get('/api/health', (_req, res) => {
|
|
28
30
|
res.json({
|
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,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,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;AAC3C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACrC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,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":"dynamo.d.ts","sourceRoot":"","sources":["../../../src/server/routes/dynamo.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAkIxB,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { DynamoExplorer } from '../services/dynamo-explorer.js';
|
|
3
|
+
const router = Router();
|
|
4
|
+
const explorer = DynamoExplorer.getInstance();
|
|
5
|
+
function isValidName(name) {
|
|
6
|
+
return (typeof name === 'string' &&
|
|
7
|
+
name.length > 0 &&
|
|
8
|
+
name.length <= 255 &&
|
|
9
|
+
!name.includes('/') &&
|
|
10
|
+
!name.includes('..') &&
|
|
11
|
+
!name.includes('\\'));
|
|
12
|
+
}
|
|
13
|
+
function fail(res, error, status = 500) {
|
|
14
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
15
|
+
return res.status(status).json({ error: message });
|
|
16
|
+
}
|
|
17
|
+
function getRegion(req) {
|
|
18
|
+
const r = req.query.region;
|
|
19
|
+
return typeof r === 'string' && r ? r : undefined;
|
|
20
|
+
}
|
|
21
|
+
router.get('/tables', async (req, res) => {
|
|
22
|
+
try {
|
|
23
|
+
const tables = await explorer.listTables(getRegion(req));
|
|
24
|
+
res.json({ tables });
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
fail(res, error);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
router.get('/tables/:name', async (req, res) => {
|
|
31
|
+
const { name } = req.params;
|
|
32
|
+
if (!isValidName(name))
|
|
33
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
34
|
+
try {
|
|
35
|
+
const detail = await explorer.describeTable(name, getRegion(req));
|
|
36
|
+
if (!detail)
|
|
37
|
+
return res.status(404).json({ error: 'Table not found' });
|
|
38
|
+
return res.json(detail);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
return fail(res, error);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
router.get('/tables/:name/ttl', async (req, res) => {
|
|
45
|
+
const { name } = req.params;
|
|
46
|
+
if (!isValidName(name))
|
|
47
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
48
|
+
try {
|
|
49
|
+
return res.json(await explorer.describeTtl(name, getRegion(req)));
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return fail(res, error);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
router.put('/tables/:name/ttl', async (req, res) => {
|
|
56
|
+
const { name } = req.params;
|
|
57
|
+
if (!isValidName(name))
|
|
58
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
59
|
+
const { enabled, attributeName } = req.body ?? {};
|
|
60
|
+
if (typeof enabled !== 'boolean') {
|
|
61
|
+
return fail(res, new Error('enabled (boolean) is required'), 400);
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
return res.json(await explorer.setTtl(name, enabled, attributeName, getRegion(req)));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
return fail(res, error, 400);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
router.post('/tables/:name/scan', async (req, res) => {
|
|
71
|
+
const { name } = req.params;
|
|
72
|
+
if (!isValidName(name))
|
|
73
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
74
|
+
try {
|
|
75
|
+
return res.json(await explorer.scan(name, req.body ?? {}, getRegion(req)));
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
return fail(res, error, 400);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
router.post('/tables/:name/query', async (req, res) => {
|
|
82
|
+
const { name } = req.params;
|
|
83
|
+
if (!isValidName(name))
|
|
84
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
85
|
+
try {
|
|
86
|
+
return res.json(await explorer.query(name, req.body ?? {}, getRegion(req)));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return fail(res, error, 400);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
router.post('/tables/:name/items/get', async (req, res) => {
|
|
93
|
+
const { name } = req.params;
|
|
94
|
+
if (!isValidName(name))
|
|
95
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
96
|
+
const { key } = req.body ?? {};
|
|
97
|
+
if (!key || typeof key !== 'object')
|
|
98
|
+
return fail(res, new Error('key is required'), 400);
|
|
99
|
+
try {
|
|
100
|
+
const item = await explorer.getItem(name, key, getRegion(req));
|
|
101
|
+
return res.json({ item });
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return fail(res, error);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
router.post('/tables/:name/items', async (req, res) => {
|
|
108
|
+
const { name } = req.params;
|
|
109
|
+
if (!isValidName(name))
|
|
110
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
111
|
+
const { item } = req.body ?? {};
|
|
112
|
+
if (!item || typeof item !== 'object' || Array.isArray(item)) {
|
|
113
|
+
return fail(res, new Error('item must be a plain object'), 400);
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
await explorer.putItem(name, item, getRegion(req));
|
|
117
|
+
return res.json({ success: true });
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
return fail(res, error, 400);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
router.post('/tables/:name/items/delete', async (req, res) => {
|
|
124
|
+
const { name } = req.params;
|
|
125
|
+
if (!isValidName(name))
|
|
126
|
+
return fail(res, new Error('Invalid table name'), 400);
|
|
127
|
+
const { key } = req.body ?? {};
|
|
128
|
+
if (!key || typeof key !== 'object')
|
|
129
|
+
return fail(res, new Error('key is required'), 400);
|
|
130
|
+
try {
|
|
131
|
+
await explorer.deleteItem(name, key, getRegion(req));
|
|
132
|
+
return res.json({ success: true });
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return fail(res, error, 400);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
export { router as dynamoRouter };
|
|
139
|
+
//# sourceMappingURL=dynamo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamo.js","sourceRoot":"","sources":["../../../src/server/routes/dynamo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/server/routes/resources.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/server/routes/resources.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAcxB,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -3,9 +3,10 @@ import { ResourceProvisioner } from '../services/resource-provisioner.js';
|
|
|
3
3
|
const router = Router();
|
|
4
4
|
const provisioner = ResourceProvisioner.getInstance();
|
|
5
5
|
// List all provisioned resources
|
|
6
|
-
router.get('/', async (
|
|
6
|
+
router.get('/', async (req, res) => {
|
|
7
7
|
try {
|
|
8
|
-
const
|
|
8
|
+
const region = typeof req.query.region === 'string' && req.query.region ? req.query.region : undefined;
|
|
9
|
+
const resources = await provisioner.listAllResources(region);
|
|
9
10
|
res.json(resources);
|
|
10
11
|
}
|
|
11
12
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/server/routes/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AACxB,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;AAEtD,iCAAiC;AACjC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/server/routes/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AACxB,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;AAEtD,iCAAiC;AACjC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seeds.d.ts","sourceRoot":"","sources":["../../../src/server/routes/seeds.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,4CAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"seeds.d.ts","sourceRoot":"","sources":["../../../src/server/routes/seeds.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAiExB,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,CAAC"}
|
|
@@ -10,9 +10,13 @@ function isValidTableName(name) {
|
|
|
10
10
|
!name.includes('..') &&
|
|
11
11
|
!name.includes('\\'));
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
function getRegion(req) {
|
|
14
|
+
const r = req.query.region;
|
|
15
|
+
return typeof r === 'string' && r ? r : undefined;
|
|
16
|
+
}
|
|
17
|
+
router.get('/', async (req, res) => {
|
|
14
18
|
try {
|
|
15
|
-
const entries = await seeds.list();
|
|
19
|
+
const entries = await seeds.list(getRegion(req));
|
|
16
20
|
res.json({
|
|
17
21
|
seedsDir: ConfigManager.getInstance().getSeedsDir(),
|
|
18
22
|
entries,
|
|
@@ -29,9 +33,10 @@ router.post('/run', async (req, res) => {
|
|
|
29
33
|
if (tableName !== undefined && !isValidTableName(tableName)) {
|
|
30
34
|
return res.status(400).json({ error: 'Invalid tableName' });
|
|
31
35
|
}
|
|
36
|
+
const region = getRegion(req);
|
|
32
37
|
const result = tableName
|
|
33
|
-
? [await seeds.seedTable(tableName)]
|
|
34
|
-
: await seeds.seedAll();
|
|
38
|
+
? [await seeds.seedTable(tableName, region)]
|
|
39
|
+
: await seeds.seedAll(region);
|
|
35
40
|
return res.json({ results: result });
|
|
36
41
|
}
|
|
37
42
|
catch (error) {
|
|
@@ -45,9 +50,10 @@ router.post('/clear', async (req, res) => {
|
|
|
45
50
|
if (tableName !== undefined && !isValidTableName(tableName)) {
|
|
46
51
|
return res.status(400).json({ error: 'Invalid tableName' });
|
|
47
52
|
}
|
|
53
|
+
const region = getRegion(req);
|
|
48
54
|
const result = tableName
|
|
49
|
-
? [await seeds.clearTable(tableName)]
|
|
50
|
-
: await seeds.clearAllSeeded();
|
|
55
|
+
? [await seeds.clearTable(tableName, region)]
|
|
56
|
+
: await seeds.clearAllSeeded(region);
|
|
51
57
|
return res.json({ results: result });
|
|
52
58
|
}
|
|
53
59
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../../src/server/routes/seeds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AACxB,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;AAExC,SAAS,gBAAgB,CAAC,IAAa;IACrC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,CAAC,MAAM,GAAG,CAAC;QACf,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../../src/server/routes/seeds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type KeySchemaElement, type AttributeDefinition, type GlobalSecondaryIndexDescription, type LocalSecondaryIndexDescription } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
export interface TtlInfo {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
attributeName?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface DynamoTableSummary {
|
|
7
|
+
name: string;
|
|
8
|
+
status?: string;
|
|
9
|
+
itemCount: number;
|
|
10
|
+
sizeBytes: number;
|
|
11
|
+
keySchema: KeySchemaElement[];
|
|
12
|
+
attributeDefinitions: AttributeDefinition[];
|
|
13
|
+
hasGsi: boolean;
|
|
14
|
+
hasLsi: boolean;
|
|
15
|
+
streamEnabled: boolean;
|
|
16
|
+
ttl: TtlInfo;
|
|
17
|
+
billingMode?: string;
|
|
18
|
+
createdAt?: string;
|
|
19
|
+
warnings: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface DynamoTableDetail extends DynamoTableSummary {
|
|
22
|
+
arn?: string;
|
|
23
|
+
gsis: GlobalSecondaryIndexDescription[];
|
|
24
|
+
lsis: LocalSecondaryIndexDescription[];
|
|
25
|
+
streamArn?: string;
|
|
26
|
+
streamViewType?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ScanQueryInput {
|
|
29
|
+
filterExpression?: string;
|
|
30
|
+
keyConditionExpression?: string;
|
|
31
|
+
projectionExpression?: string;
|
|
32
|
+
expressionAttributeNames?: Record<string, string>;
|
|
33
|
+
expressionAttributeValues?: Record<string, unknown>;
|
|
34
|
+
indexName?: string;
|
|
35
|
+
limit?: number;
|
|
36
|
+
exclusiveStartKey?: Record<string, unknown>;
|
|
37
|
+
scanIndexForward?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface ScanQueryOutput {
|
|
40
|
+
items: Record<string, unknown>[];
|
|
41
|
+
count: number;
|
|
42
|
+
scannedCount?: number;
|
|
43
|
+
lastEvaluatedKey?: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
export declare class DynamoExplorer {
|
|
46
|
+
private static instance;
|
|
47
|
+
private clients;
|
|
48
|
+
private defaultRegion;
|
|
49
|
+
private constructor();
|
|
50
|
+
static getInstance(): DynamoExplorer;
|
|
51
|
+
setDefaultRegion(region: string): void;
|
|
52
|
+
private clientFor;
|
|
53
|
+
listTables(region?: string): Promise<DynamoTableSummary[]>;
|
|
54
|
+
private summarize;
|
|
55
|
+
describeTable(name: string, region?: string): Promise<DynamoTableDetail | null>;
|
|
56
|
+
describeTtl(name: string, region?: string): Promise<TtlInfo>;
|
|
57
|
+
setTtl(name: string, enabled: boolean, attributeName?: string, region?: string): Promise<TtlInfo>;
|
|
58
|
+
scan(name: string, input: ScanQueryInput, region?: string): Promise<ScanQueryOutput>;
|
|
59
|
+
query(name: string, input: ScanQueryInput, region?: string): Promise<ScanQueryOutput>;
|
|
60
|
+
getItem(name: string, key: Record<string, unknown>, region?: string): Promise<Record<string, unknown> | null>;
|
|
61
|
+
putItem(name: string, item: Record<string, unknown>, region?: string): Promise<void>;
|
|
62
|
+
deleteItem(name: string, key: Record<string, unknown>, region?: string): Promise<void>;
|
|
63
|
+
private marshallExpressionValues;
|
|
64
|
+
private formatPagedOutput;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=dynamo-explorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamo-explorer.d.ts","sourceRoot":"","sources":["../../../src/server/services/dynamo-explorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { DynamoDBClient, ListTablesCommand, DescribeTableCommand, DescribeTimeToLiveCommand, UpdateTimeToLiveCommand, ScanCommand, QueryCommand, GetItemCommand, PutItemCommand, DeleteItemCommand, } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { marshall, unmarshall } from '@aws-sdk/util-dynamodb';
|
|
3
|
+
import { LocalStackManager } from './localstack-manager.js';
|
|
4
|
+
export class DynamoExplorer {
|
|
5
|
+
static instance;
|
|
6
|
+
clients = new Map();
|
|
7
|
+
defaultRegion = 'us-east-1';
|
|
8
|
+
constructor() { }
|
|
9
|
+
static getInstance() {
|
|
10
|
+
if (!DynamoExplorer.instance)
|
|
11
|
+
DynamoExplorer.instance = new DynamoExplorer();
|
|
12
|
+
return DynamoExplorer.instance;
|
|
13
|
+
}
|
|
14
|
+
setDefaultRegion(region) {
|
|
15
|
+
if (region)
|
|
16
|
+
this.defaultRegion = region;
|
|
17
|
+
}
|
|
18
|
+
clientFor(region) {
|
|
19
|
+
const r = region || this.defaultRegion;
|
|
20
|
+
let client = this.clients.get(r);
|
|
21
|
+
if (!client) {
|
|
22
|
+
const baseConfig = LocalStackManager.getInstance().getConfig();
|
|
23
|
+
client = new DynamoDBClient({ ...baseConfig, region: r });
|
|
24
|
+
this.clients.set(r, client);
|
|
25
|
+
}
|
|
26
|
+
return client;
|
|
27
|
+
}
|
|
28
|
+
async listTables(region) {
|
|
29
|
+
const client = this.clientFor(region);
|
|
30
|
+
const list = await client.send(new ListTablesCommand({}));
|
|
31
|
+
const names = list.TableNames ?? [];
|
|
32
|
+
const summaries = await Promise.all(names.map((name) => this.summarize(name, region)));
|
|
33
|
+
return summaries.filter((s) => s !== null);
|
|
34
|
+
}
|
|
35
|
+
async summarize(name, region) {
|
|
36
|
+
try {
|
|
37
|
+
const client = this.clientFor(region);
|
|
38
|
+
const [desc, ttl] = await Promise.all([
|
|
39
|
+
client.send(new DescribeTableCommand({ TableName: name })),
|
|
40
|
+
this.describeTtl(name, region),
|
|
41
|
+
]);
|
|
42
|
+
const table = desc.Table;
|
|
43
|
+
if (!table)
|
|
44
|
+
return null;
|
|
45
|
+
const warnings = [];
|
|
46
|
+
if (!ttl.enabled)
|
|
47
|
+
warnings.push('TTL not configured');
|
|
48
|
+
return {
|
|
49
|
+
name,
|
|
50
|
+
status: table.TableStatus,
|
|
51
|
+
itemCount: table.ItemCount ?? 0,
|
|
52
|
+
sizeBytes: table.TableSizeBytes ?? 0,
|
|
53
|
+
keySchema: table.KeySchema ?? [],
|
|
54
|
+
attributeDefinitions: table.AttributeDefinitions ?? [],
|
|
55
|
+
hasGsi: (table.GlobalSecondaryIndexes ?? []).length > 0,
|
|
56
|
+
hasLsi: (table.LocalSecondaryIndexes ?? []).length > 0,
|
|
57
|
+
streamEnabled: Boolean(table.StreamSpecification?.StreamEnabled),
|
|
58
|
+
ttl,
|
|
59
|
+
billingMode: table.BillingModeSummary?.BillingMode ?? 'PROVISIONED',
|
|
60
|
+
createdAt: table.CreationDateTime?.toISOString(),
|
|
61
|
+
warnings,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const msg = error instanceof Error ? error.message : 'unknown error';
|
|
66
|
+
console.warn(`[dynamo] failed to describe ${name}: ${msg}`);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async describeTable(name, region) {
|
|
71
|
+
const summary = await this.summarize(name, region);
|
|
72
|
+
if (!summary)
|
|
73
|
+
return null;
|
|
74
|
+
const client = this.clientFor(region);
|
|
75
|
+
const desc = await client.send(new DescribeTableCommand({ TableName: name }));
|
|
76
|
+
const table = desc.Table;
|
|
77
|
+
return {
|
|
78
|
+
...summary,
|
|
79
|
+
arn: table.TableArn,
|
|
80
|
+
gsis: table.GlobalSecondaryIndexes ?? [],
|
|
81
|
+
lsis: table.LocalSecondaryIndexes ?? [],
|
|
82
|
+
streamArn: table.LatestStreamArn,
|
|
83
|
+
streamViewType: table.StreamSpecification?.StreamViewType,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async describeTtl(name, region) {
|
|
87
|
+
try {
|
|
88
|
+
const client = this.clientFor(region);
|
|
89
|
+
const res = await client.send(new DescribeTimeToLiveCommand({ TableName: name }));
|
|
90
|
+
const desc = res.TimeToLiveDescription;
|
|
91
|
+
const status = desc?.TimeToLiveStatus;
|
|
92
|
+
const enabled = status === 'ENABLED' || status === 'ENABLING';
|
|
93
|
+
return { enabled, attributeName: desc?.AttributeName };
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return { enabled: false };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async setTtl(name, enabled, attributeName, region) {
|
|
100
|
+
if (enabled && !attributeName) {
|
|
101
|
+
throw new Error('attributeName is required when enabling TTL');
|
|
102
|
+
}
|
|
103
|
+
const current = await this.describeTtl(name, region);
|
|
104
|
+
// UpdateTimeToLive requires the attribute name even when disabling — pass the current one.
|
|
105
|
+
const attr = enabled ? attributeName : current.attributeName ?? attributeName ?? 'ttl';
|
|
106
|
+
const client = this.clientFor(region);
|
|
107
|
+
await client.send(new UpdateTimeToLiveCommand({
|
|
108
|
+
TableName: name,
|
|
109
|
+
TimeToLiveSpecification: { Enabled: enabled, AttributeName: attr },
|
|
110
|
+
}));
|
|
111
|
+
return { enabled, attributeName: attr };
|
|
112
|
+
}
|
|
113
|
+
async scan(name, input, region) {
|
|
114
|
+
const eav = this.marshallExpressionValues(input.expressionAttributeValues);
|
|
115
|
+
const esk = input.exclusiveStartKey
|
|
116
|
+
? marshall(input.exclusiveStartKey, { removeUndefinedValues: true })
|
|
117
|
+
: undefined;
|
|
118
|
+
const client = this.clientFor(region);
|
|
119
|
+
const res = await client.send(new ScanCommand({
|
|
120
|
+
TableName: name,
|
|
121
|
+
FilterExpression: input.filterExpression || undefined,
|
|
122
|
+
ProjectionExpression: input.projectionExpression || undefined,
|
|
123
|
+
ExpressionAttributeNames: input.expressionAttributeNames,
|
|
124
|
+
ExpressionAttributeValues: eav,
|
|
125
|
+
IndexName: input.indexName || undefined,
|
|
126
|
+
Limit: input.limit,
|
|
127
|
+
ExclusiveStartKey: esk,
|
|
128
|
+
}));
|
|
129
|
+
return this.formatPagedOutput(res);
|
|
130
|
+
}
|
|
131
|
+
async query(name, input, region) {
|
|
132
|
+
if (!input.keyConditionExpression) {
|
|
133
|
+
throw new Error('keyConditionExpression is required for query');
|
|
134
|
+
}
|
|
135
|
+
const eav = this.marshallExpressionValues(input.expressionAttributeValues);
|
|
136
|
+
const esk = input.exclusiveStartKey
|
|
137
|
+
? marshall(input.exclusiveStartKey, { removeUndefinedValues: true })
|
|
138
|
+
: undefined;
|
|
139
|
+
const client = this.clientFor(region);
|
|
140
|
+
const res = await client.send(new QueryCommand({
|
|
141
|
+
TableName: name,
|
|
142
|
+
KeyConditionExpression: input.keyConditionExpression,
|
|
143
|
+
FilterExpression: input.filterExpression || undefined,
|
|
144
|
+
ProjectionExpression: input.projectionExpression || undefined,
|
|
145
|
+
ExpressionAttributeNames: input.expressionAttributeNames,
|
|
146
|
+
ExpressionAttributeValues: eav,
|
|
147
|
+
IndexName: input.indexName || undefined,
|
|
148
|
+
Limit: input.limit,
|
|
149
|
+
ExclusiveStartKey: esk,
|
|
150
|
+
ScanIndexForward: input.scanIndexForward,
|
|
151
|
+
}));
|
|
152
|
+
return this.formatPagedOutput(res);
|
|
153
|
+
}
|
|
154
|
+
async getItem(name, key, region) {
|
|
155
|
+
const client = this.clientFor(region);
|
|
156
|
+
const res = await client.send(new GetItemCommand({
|
|
157
|
+
TableName: name,
|
|
158
|
+
Key: marshall(key, { removeUndefinedValues: true }),
|
|
159
|
+
}));
|
|
160
|
+
return res.Item ? unmarshall(res.Item) : null;
|
|
161
|
+
}
|
|
162
|
+
async putItem(name, item, region) {
|
|
163
|
+
if (!item || typeof item !== 'object') {
|
|
164
|
+
throw new Error('Item must be a plain object');
|
|
165
|
+
}
|
|
166
|
+
const client = this.clientFor(region);
|
|
167
|
+
await client.send(new PutItemCommand({
|
|
168
|
+
TableName: name,
|
|
169
|
+
Item: marshall(item, {
|
|
170
|
+
removeUndefinedValues: true,
|
|
171
|
+
convertClassInstanceToMap: true,
|
|
172
|
+
}),
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
async deleteItem(name, key, region) {
|
|
176
|
+
const client = this.clientFor(region);
|
|
177
|
+
await client.send(new DeleteItemCommand({
|
|
178
|
+
TableName: name,
|
|
179
|
+
Key: marshall(key, { removeUndefinedValues: true }),
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
marshallExpressionValues(values) {
|
|
183
|
+
if (!values || Object.keys(values).length === 0)
|
|
184
|
+
return undefined;
|
|
185
|
+
// marshall expects a plain object — each value is marshalled to AttributeValue individually.
|
|
186
|
+
const out = {};
|
|
187
|
+
for (const [placeholder, v] of Object.entries(values)) {
|
|
188
|
+
const wrapped = marshall({ v }, { removeUndefinedValues: true });
|
|
189
|
+
out[placeholder] = wrapped.v;
|
|
190
|
+
}
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
formatPagedOutput(res) {
|
|
194
|
+
return {
|
|
195
|
+
items: (res.Items ?? []).map(item => unmarshall(item)),
|
|
196
|
+
count: res.Count ?? 0,
|
|
197
|
+
scannedCount: res.ScannedCount,
|
|
198
|
+
lastEvaluatedKey: res.LastEvaluatedKey ? unmarshall(res.LastEvaluatedKey) : undefined,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=dynamo-explorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamo-explorer.js","sourceRoot":"","sources":["../../../src/server/services/dynamo-explorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export declare class ResourceProvisioner {
|
|
|
23
23
|
private resolveLambdaFunctionName;
|
|
24
24
|
private convertCamelCaseToKebab;
|
|
25
25
|
private resolveEventSourceArn;
|
|
26
|
-
listAllResources(): Promise<{
|
|
26
|
+
listAllResources(region?: string): Promise<{
|
|
27
27
|
tables: string[];
|
|
28
28
|
queues: string[];
|
|
29
29
|
topics: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-provisioner.d.ts","sourceRoot":"","sources":["../../../src/server/services/resource-provisioner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,4BAA4B,CAAC;AAGpC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC,OAAO,CAAC,iBAAiB;IAYnB,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,IAAI,CAAC;YAyDF,mBAAmB;YA2DnB,cAAc;YAiCd,cAAc;IAiB5B,OAAO,CAAC,uBAAuB;YAoEjB,wBAAwB;YA0CxB,uBAAuB;IA+CrC,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,uBAAuB;YAOjB,qBAAqB;IAqE7B,gBAAgB,
|
|
1
|
+
{"version":3,"file":"resource-provisioner.d.ts","sourceRoot":"","sources":["../../../src/server/services/resource-provisioner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,4BAA4B,CAAC;AAGpC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC,OAAO,CAAC,iBAAiB;IAYnB,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,IAAI,CAAC;YAyDF,mBAAmB;YA2DnB,cAAc;YAiCd,cAAc;IAiB5B,OAAO,CAAC,uBAAuB;YAoEjB,wBAAwB;YA0CxB,uBAAuB;IA+CrC,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,uBAAuB;YAOjB,qBAAqB;IAqE7B,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;YAgBY,kBAAkB;YASlB,aAAa;YASb,aAAa;IAYrB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAqCnE,mBAAmB;YAYnB,cAAc;YAiBd,cAAc;YAkBd,wBAAwB;CA6BvC"}
|