local-serverless-stack 0.0.11 → 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 CHANGED
@@ -5,6 +5,19 @@ 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.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
+
8
21
  ## [0.0.11] - 2026-05-18
9
22
 
10
23
  ### Added
@@ -1 +1 @@
1
- {"version":3,"file":"dynamo.d.ts","sourceRoot":"","sources":["../../../src/server/routes/dynamo.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA6HxB,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC"}
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"}
@@ -14,9 +14,13 @@ function fail(res, error, status = 500) {
14
14
  const message = error instanceof Error ? error.message : 'Unknown error';
15
15
  return res.status(status).json({ error: message });
16
16
  }
17
- router.get('/tables', async (_req, res) => {
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) => {
18
22
  try {
19
- const tables = await explorer.listTables();
23
+ const tables = await explorer.listTables(getRegion(req));
20
24
  res.json({ tables });
21
25
  }
22
26
  catch (error) {
@@ -28,7 +32,7 @@ router.get('/tables/:name', async (req, res) => {
28
32
  if (!isValidName(name))
29
33
  return fail(res, new Error('Invalid table name'), 400);
30
34
  try {
31
- const detail = await explorer.describeTable(name);
35
+ const detail = await explorer.describeTable(name, getRegion(req));
32
36
  if (!detail)
33
37
  return res.status(404).json({ error: 'Table not found' });
34
38
  return res.json(detail);
@@ -42,7 +46,7 @@ router.get('/tables/:name/ttl', async (req, res) => {
42
46
  if (!isValidName(name))
43
47
  return fail(res, new Error('Invalid table name'), 400);
44
48
  try {
45
- return res.json(await explorer.describeTtl(name));
49
+ return res.json(await explorer.describeTtl(name, getRegion(req)));
46
50
  }
47
51
  catch (error) {
48
52
  return fail(res, error);
@@ -57,7 +61,7 @@ router.put('/tables/:name/ttl', async (req, res) => {
57
61
  return fail(res, new Error('enabled (boolean) is required'), 400);
58
62
  }
59
63
  try {
60
- return res.json(await explorer.setTtl(name, enabled, attributeName));
64
+ return res.json(await explorer.setTtl(name, enabled, attributeName, getRegion(req)));
61
65
  }
62
66
  catch (error) {
63
67
  return fail(res, error, 400);
@@ -68,7 +72,7 @@ router.post('/tables/:name/scan', async (req, res) => {
68
72
  if (!isValidName(name))
69
73
  return fail(res, new Error('Invalid table name'), 400);
70
74
  try {
71
- return res.json(await explorer.scan(name, req.body ?? {}));
75
+ return res.json(await explorer.scan(name, req.body ?? {}, getRegion(req)));
72
76
  }
73
77
  catch (error) {
74
78
  return fail(res, error, 400);
@@ -79,7 +83,7 @@ router.post('/tables/:name/query', async (req, res) => {
79
83
  if (!isValidName(name))
80
84
  return fail(res, new Error('Invalid table name'), 400);
81
85
  try {
82
- return res.json(await explorer.query(name, req.body ?? {}));
86
+ return res.json(await explorer.query(name, req.body ?? {}, getRegion(req)));
83
87
  }
84
88
  catch (error) {
85
89
  return fail(res, error, 400);
@@ -93,7 +97,7 @@ router.post('/tables/:name/items/get', async (req, res) => {
93
97
  if (!key || typeof key !== 'object')
94
98
  return fail(res, new Error('key is required'), 400);
95
99
  try {
96
- const item = await explorer.getItem(name, key);
100
+ const item = await explorer.getItem(name, key, getRegion(req));
97
101
  return res.json({ item });
98
102
  }
99
103
  catch (error) {
@@ -109,7 +113,7 @@ router.post('/tables/:name/items', async (req, res) => {
109
113
  return fail(res, new Error('item must be a plain object'), 400);
110
114
  }
111
115
  try {
112
- await explorer.putItem(name, item);
116
+ await explorer.putItem(name, item, getRegion(req));
113
117
  return res.json({ success: true });
114
118
  }
115
119
  catch (error) {
@@ -124,7 +128,7 @@ router.post('/tables/:name/items/delete', async (req, res) => {
124
128
  if (!key || typeof key !== 'object')
125
129
  return fail(res, new Error('key is required'), 400);
126
130
  try {
127
- await explorer.deleteItem(name, key);
131
+ await explorer.deleteItem(name, key, getRegion(req));
128
132
  return res.json({ success: true });
129
133
  }
130
134
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"dynamo.js","sourceRoot":"","sources":["../../../src/server/routes/dynamo.ts"],"names":[],"mappings":"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"}
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;AAaxB,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,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 (_req, res) => {
6
+ router.get('/', async (req, res) => {
7
7
  try {
8
- const resources = await provisioner.listAllResources();
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,IAAa,EAAE,GAAa,EAAE,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QACvD,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
+ {"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;AA0DxB,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,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
- router.get('/', async (_req, res) => {
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,IAAa,EAAE,GAAa,EAAE,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC;YACP,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE;YACnD,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;QAChF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAC/E,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC,CAAC,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;QACjF,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../../src/server/routes/seeds.ts"],"names":[],"mappings":"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"}
@@ -44,22 +44,22 @@ export interface ScanQueryOutput {
44
44
  }
45
45
  export declare class DynamoExplorer {
46
46
  private static instance;
47
- private client;
48
- private currentRegion;
47
+ private clients;
48
+ private defaultRegion;
49
49
  private constructor();
50
50
  static getInstance(): DynamoExplorer;
51
- private init;
52
- setRegion(region: string): void;
53
- listTables(): Promise<DynamoTableSummary[]>;
51
+ setDefaultRegion(region: string): void;
52
+ private clientFor;
53
+ listTables(region?: string): Promise<DynamoTableSummary[]>;
54
54
  private summarize;
55
- describeTable(name: string): Promise<DynamoTableDetail | null>;
56
- describeTtl(name: string): Promise<TtlInfo>;
57
- setTtl(name: string, enabled: boolean, attributeName?: string): Promise<TtlInfo>;
58
- scan(name: string, input: ScanQueryInput): Promise<ScanQueryOutput>;
59
- query(name: string, input: ScanQueryInput): Promise<ScanQueryOutput>;
60
- getItem(name: string, key: Record<string, unknown>): Promise<Record<string, unknown> | null>;
61
- putItem(name: string, item: Record<string, unknown>): Promise<void>;
62
- deleteItem(name: string, key: Record<string, unknown>): Promise<void>;
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
63
  private marshallExpressionValues;
64
64
  private formatPagedOutput;
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dynamo-explorer.d.ts","sourceRoot":"","sources":["../../../src/server/services/dynamo-explorer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dynamo-explorer.d.ts","sourceRoot":"","sources":["../../../src/server/services/dynamo-explorer.ts"],"names":[],"mappings":"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"}
@@ -3,36 +3,41 @@ import { marshall, unmarshall } from '@aws-sdk/util-dynamodb';
3
3
  import { LocalStackManager } from './localstack-manager.js';
4
4
  export class DynamoExplorer {
5
5
  static instance;
6
- client;
7
- currentRegion = 'us-east-1';
8
- constructor() {
9
- this.init(this.currentRegion);
10
- }
6
+ clients = new Map();
7
+ defaultRegion = 'us-east-1';
8
+ constructor() { }
11
9
  static getInstance() {
12
10
  if (!DynamoExplorer.instance)
13
11
  DynamoExplorer.instance = new DynamoExplorer();
14
12
  return DynamoExplorer.instance;
15
13
  }
16
- init(region) {
17
- const baseConfig = LocalStackManager.getInstance().getConfig();
18
- this.client = new DynamoDBClient({ ...baseConfig, region });
19
- this.currentRegion = region;
20
- }
21
- setRegion(region) {
22
- if (region && region !== this.currentRegion)
23
- this.init(region);
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;
24
27
  }
25
- async listTables() {
26
- const list = await this.client.send(new ListTablesCommand({}));
28
+ async listTables(region) {
29
+ const client = this.clientFor(region);
30
+ const list = await client.send(new ListTablesCommand({}));
27
31
  const names = list.TableNames ?? [];
28
- const summaries = await Promise.all(names.map(name => this.summarize(name)));
32
+ const summaries = await Promise.all(names.map((name) => this.summarize(name, region)));
29
33
  return summaries.filter((s) => s !== null);
30
34
  }
31
- async summarize(name) {
35
+ async summarize(name, region) {
32
36
  try {
37
+ const client = this.clientFor(region);
33
38
  const [desc, ttl] = await Promise.all([
34
- this.client.send(new DescribeTableCommand({ TableName: name })),
35
- this.describeTtl(name),
39
+ client.send(new DescribeTableCommand({ TableName: name })),
40
+ this.describeTtl(name, region),
36
41
  ]);
37
42
  const table = desc.Table;
38
43
  if (!table)
@@ -62,11 +67,12 @@ export class DynamoExplorer {
62
67
  return null;
63
68
  }
64
69
  }
65
- async describeTable(name) {
66
- const summary = await this.summarize(name);
70
+ async describeTable(name, region) {
71
+ const summary = await this.summarize(name, region);
67
72
  if (!summary)
68
73
  return null;
69
- const desc = await this.client.send(new DescribeTableCommand({ TableName: name }));
74
+ const client = this.clientFor(region);
75
+ const desc = await client.send(new DescribeTableCommand({ TableName: name }));
70
76
  const table = desc.Table;
71
77
  return {
72
78
  ...summary,
@@ -77,9 +83,10 @@ export class DynamoExplorer {
77
83
  streamViewType: table.StreamSpecification?.StreamViewType,
78
84
  };
79
85
  }
80
- async describeTtl(name) {
86
+ async describeTtl(name, region) {
81
87
  try {
82
- const res = await this.client.send(new DescribeTimeToLiveCommand({ TableName: name }));
88
+ const client = this.clientFor(region);
89
+ const res = await client.send(new DescribeTimeToLiveCommand({ TableName: name }));
83
90
  const desc = res.TimeToLiveDescription;
84
91
  const status = desc?.TimeToLiveStatus;
85
92
  const enabled = status === 'ENABLED' || status === 'ENABLING';
@@ -89,25 +96,27 @@ export class DynamoExplorer {
89
96
  return { enabled: false };
90
97
  }
91
98
  }
92
- async setTtl(name, enabled, attributeName) {
99
+ async setTtl(name, enabled, attributeName, region) {
93
100
  if (enabled && !attributeName) {
94
101
  throw new Error('attributeName is required when enabling TTL');
95
102
  }
96
- const current = await this.describeTtl(name);
103
+ const current = await this.describeTtl(name, region);
97
104
  // UpdateTimeToLive requires the attribute name even when disabling — pass the current one.
98
105
  const attr = enabled ? attributeName : current.attributeName ?? attributeName ?? 'ttl';
99
- await this.client.send(new UpdateTimeToLiveCommand({
106
+ const client = this.clientFor(region);
107
+ await client.send(new UpdateTimeToLiveCommand({
100
108
  TableName: name,
101
109
  TimeToLiveSpecification: { Enabled: enabled, AttributeName: attr },
102
110
  }));
103
111
  return { enabled, attributeName: attr };
104
112
  }
105
- async scan(name, input) {
113
+ async scan(name, input, region) {
106
114
  const eav = this.marshallExpressionValues(input.expressionAttributeValues);
107
115
  const esk = input.exclusiveStartKey
108
116
  ? marshall(input.exclusiveStartKey, { removeUndefinedValues: true })
109
117
  : undefined;
110
- const res = await this.client.send(new ScanCommand({
118
+ const client = this.clientFor(region);
119
+ const res = await client.send(new ScanCommand({
111
120
  TableName: name,
112
121
  FilterExpression: input.filterExpression || undefined,
113
122
  ProjectionExpression: input.projectionExpression || undefined,
@@ -119,7 +128,7 @@ export class DynamoExplorer {
119
128
  }));
120
129
  return this.formatPagedOutput(res);
121
130
  }
122
- async query(name, input) {
131
+ async query(name, input, region) {
123
132
  if (!input.keyConditionExpression) {
124
133
  throw new Error('keyConditionExpression is required for query');
125
134
  }
@@ -127,7 +136,8 @@ export class DynamoExplorer {
127
136
  const esk = input.exclusiveStartKey
128
137
  ? marshall(input.exclusiveStartKey, { removeUndefinedValues: true })
129
138
  : undefined;
130
- const res = await this.client.send(new QueryCommand({
139
+ const client = this.clientFor(region);
140
+ const res = await client.send(new QueryCommand({
131
141
  TableName: name,
132
142
  KeyConditionExpression: input.keyConditionExpression,
133
143
  FilterExpression: input.filterExpression || undefined,
@@ -141,18 +151,20 @@ export class DynamoExplorer {
141
151
  }));
142
152
  return this.formatPagedOutput(res);
143
153
  }
144
- async getItem(name, key) {
145
- const res = await this.client.send(new GetItemCommand({
154
+ async getItem(name, key, region) {
155
+ const client = this.clientFor(region);
156
+ const res = await client.send(new GetItemCommand({
146
157
  TableName: name,
147
158
  Key: marshall(key, { removeUndefinedValues: true }),
148
159
  }));
149
160
  return res.Item ? unmarshall(res.Item) : null;
150
161
  }
151
- async putItem(name, item) {
162
+ async putItem(name, item, region) {
152
163
  if (!item || typeof item !== 'object') {
153
164
  throw new Error('Item must be a plain object');
154
165
  }
155
- await this.client.send(new PutItemCommand({
166
+ const client = this.clientFor(region);
167
+ await client.send(new PutItemCommand({
156
168
  TableName: name,
157
169
  Item: marshall(item, {
158
170
  removeUndefinedValues: true,
@@ -160,8 +172,9 @@ export class DynamoExplorer {
160
172
  }),
161
173
  }));
162
174
  }
163
- async deleteItem(name, key) {
164
- await this.client.send(new DeleteItemCommand({
175
+ async deleteItem(name, key, region) {
176
+ const client = this.clientFor(region);
177
+ await client.send(new DeleteItemCommand({
165
178
  TableName: name,
166
179
  Key: marshall(key, { removeUndefinedValues: true }),
167
180
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"dynamo-explorer.js","sourceRoot":"","sources":["../../../src/server/services/dynamo-explorer.ts"],"names":[],"mappings":"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"}
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,IAAI,OAAO,CAAC;QAChC,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;YAUY,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"}
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"}
@@ -129,7 +129,7 @@ export class ResourceProvisioner {
129
129
  : undefined,
130
130
  }));
131
131
  console.log(` ✓ Created DynamoDB table: ${resource.name}`);
132
- SeedManager.getInstance().seedOnTableCreated(resource.name);
132
+ SeedManager.getInstance().seedOnTableCreated(resource.name, this.currentRegion);
133
133
  }
134
134
  catch (error) {
135
135
  const errorName = error instanceof Error && 'name' in error ? error.name : '';
@@ -407,35 +407,40 @@ export const handler = async (event, context) => {
407
407
  }
408
408
  throw new Error(`Event source not found: ${arnRef} (resolved as: ${resourceName})`);
409
409
  }
410
- async listAllResources() {
410
+ async listAllResources(region) {
411
+ const baseConfig = LocalStackManager.getInstance().getConfig();
412
+ const config = region ? { ...baseConfig, region } : { ...baseConfig, region: this.currentRegion };
413
+ const dynamo = region && region !== this.currentRegion ? new DynamoDBClient(config) : this.dynamoClient;
414
+ const sqs = region && region !== this.currentRegion ? new SQSClient(config) : this.sqsClient;
415
+ const sns = region && region !== this.currentRegion ? new SNSClient(config) : this.snsClient;
411
416
  const [tables, queues, topics] = await Promise.all([
412
- this.listDynamoDBTables(),
413
- this.listSQSQueues(),
414
- this.listSNSTopics(),
417
+ this.listDynamoDBTables(dynamo),
418
+ this.listSQSQueues(sqs),
419
+ this.listSNSTopics(sns),
415
420
  ]);
416
421
  return { tables, queues, topics };
417
422
  }
418
- async listDynamoDBTables() {
423
+ async listDynamoDBTables(client = this.dynamoClient) {
419
424
  try {
420
- const response = await this.dynamoClient.send(new ListTablesCommand({}));
425
+ const response = await client.send(new ListTablesCommand({}));
421
426
  return response.TableNames || [];
422
427
  }
423
428
  catch {
424
429
  return [];
425
430
  }
426
431
  }
427
- async listSQSQueues() {
432
+ async listSQSQueues(client = this.sqsClient) {
428
433
  try {
429
- const response = await this.sqsClient.send(new ListQueuesCommand({}));
434
+ const response = await client.send(new ListQueuesCommand({}));
430
435
  return response.QueueUrls?.map(url => url.split('/').pop()) || [];
431
436
  }
432
437
  catch {
433
438
  return [];
434
439
  }
435
440
  }
436
- async listSNSTopics() {
441
+ async listSNSTopics(client = this.snsClient) {
437
442
  try {
438
- const response = await this.snsClient.send(new ListTopicsCommand({}));
443
+ const response = await client.send(new ListTopicsCommand({}));
439
444
  return response.Topics?.map(t => {
440
445
  const arn = t.TopicArn?.split(':').pop();
441
446
  return arn || '';