local-serverless-stack 0.0.1 → 0.0.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/CHANGELOG.md +91 -0
- package/README.md +18 -0
- package/bin/cli.js +91 -10
- package/dist/server/index.js +9 -7
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/example.d.ts +3 -0
- package/dist/server/routes/example.d.ts.map +1 -0
- package/dist/server/routes/example.js +125 -0
- package/dist/server/routes/example.js.map +1 -0
- package/dist/server/routes/services.d.ts.map +1 -1
- package/dist/server/routes/services.js +35 -4
- package/dist/server/routes/services.js.map +1 -1
- package/dist/server/services/cache-manager.d.ts +1 -0
- package/dist/server/services/cache-manager.d.ts.map +1 -1
- package/dist/server/services/cache-manager.js.map +1 -1
- package/dist/server/services/config-manager.d.ts +38 -0
- package/dist/server/services/config-manager.d.ts.map +1 -0
- package/dist/server/services/config-manager.js +150 -0
- package/dist/server/services/config-manager.js.map +1 -0
- package/dist/server/services/localstack-manager.d.ts +1 -0
- package/dist/server/services/localstack-manager.d.ts.map +1 -1
- package/dist/server/services/localstack-manager.js +16 -7
- package/dist/server/services/localstack-manager.js.map +1 -1
- package/dist/server/services/resource-provisioner.d.ts +3 -0
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +18 -4
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/package.json +7 -3
- package/packages/serverless-plugin/README.md +2 -0
- package/packages/serverless-plugin/dist/index.js +8 -1
- package/packages/serverless-plugin/dist/index.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,52 @@ 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.4] - 2026-02-02
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Region Priority System**: Plugin now respects region configuration from Serverless Framework with intelligent fallback
|
|
12
|
+
- Priority 1: Region from `provider.region` in Serverless Framework configuration
|
|
13
|
+
- Priority 2: Region from `lss.config.json` configuration
|
|
14
|
+
- Priority 3: Default `us-east-1` if no region is specified
|
|
15
|
+
- Detailed logging showing which region source is being used during service registration
|
|
16
|
+
- `region` field to `ServiceMetadata` interface for tracking region per service
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Serverless plugin now only sends region to orchestrator when explicitly defined in `serverless.yml`
|
|
20
|
+
- Orchestrator intelligently applies region priorities when provisioning resources
|
|
21
|
+
- Enhanced console output with region source indicators
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- AWS SDK clients now properly recreate with correct region when provisioning services in different regions
|
|
25
|
+
|
|
26
|
+
## [0.0.3] - 2026-02-01
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- Removed `postinstall` script that caused installation errors in consuming projects
|
|
30
|
+
- The script attempted to access `src/ui` directory which doesn't exist in published package
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- Simplified Lambda proxy code (removed verbose logging)
|
|
34
|
+
- Updated CI workflow to skip Docker-dependent tests in GitHub Actions
|
|
35
|
+
- CI now properly checks version changes for both root and plugin packages independently
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- Development guide (DEVELOPMENT.md)
|
|
39
|
+
- awpaki dependency for future use in JSON parsing and parameter validation
|
|
40
|
+
|
|
41
|
+
## [0.0.2] - 2026-02-01
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
- TypeScript support with tsx for development mode
|
|
45
|
+
- Lint and build check in CI workflow
|
|
46
|
+
- NPM badges in README
|
|
47
|
+
- Plugin documentation reference in main README
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
- Top-level await issue in routes/services.ts (lazy cache initialization)
|
|
51
|
+
- ESLint warnings (unused variables, empty blocks)
|
|
52
|
+
- TypeScript compilation errors
|
|
53
|
+
|
|
8
54
|
## [0.0.1] - 2026-01-23
|
|
9
55
|
|
|
10
56
|
### Added
|
|
@@ -93,6 +139,51 @@ Not applicable (initial release)
|
|
|
93
139
|
|
|
94
140
|
---
|
|
95
141
|
|
|
142
|
+
## [0.0.3] - 2026-02-01
|
|
143
|
+
|
|
144
|
+
### Changed
|
|
145
|
+
|
|
146
|
+
- **Dependency Update**: Upgraded `awpaki` to version 1.3.2 for improved performance and compatibility
|
|
147
|
+
- **Enhanced CI/CD**: Improved version change logging in publish workflow for better release visibility
|
|
148
|
+
- **Workflow Optimization**: Simplified job dependencies in publish workflow for faster pipeline execution
|
|
149
|
+
|
|
150
|
+
### Fixed
|
|
151
|
+
|
|
152
|
+
- Bug fixes and stability improvements
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## [0.0.2] - 2026-02-01
|
|
157
|
+
|
|
158
|
+
### Added
|
|
159
|
+
|
|
160
|
+
- **Lazy Cache Initialization**: Services router now implements lazy cache initialization for better resource management
|
|
161
|
+
- **ESLint Integration**: Added ESLint checks to CI pipeline for code quality assurance
|
|
162
|
+
- **TypeScript Validation**: Enhanced TypeScript type checking in CI/CD workflow
|
|
163
|
+
- **DevContainer Support**: Added .devcontainer configuration for consistent development environment
|
|
164
|
+
- **Dependabot Configuration**: Automated dependency updates and security patch management
|
|
165
|
+
|
|
166
|
+
### Changed
|
|
167
|
+
|
|
168
|
+
- **Build Pipeline**: Updated build script for improved compilation process
|
|
169
|
+
- **TypeScript Configuration**: Adjusted TypeScript settings for stricter type checking
|
|
170
|
+
- **Error Handling**: Simplified error handling in resource provisioner for better debugging
|
|
171
|
+
- **Documentation**: Enhanced README and plugin documentation for clarity
|
|
172
|
+
|
|
173
|
+
### Improved
|
|
174
|
+
|
|
175
|
+
- Project references and documentation clarity
|
|
176
|
+
- Integration test prerequisites documentation
|
|
177
|
+
- Overall code organization and maintainability
|
|
178
|
+
|
|
179
|
+
### Refactored
|
|
180
|
+
|
|
181
|
+
- Removed unused imports throughout the codebase
|
|
182
|
+
- Simplified test setup for better maintainability
|
|
183
|
+
- Updated CI workflow configuration and naming
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
96
187
|
## [Unreleased]
|
|
97
188
|
|
|
98
189
|
### Planned Features
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Local Serverless Stack (LSS)
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/local-serverless-stack)
|
|
4
|
+
|
|
3
5
|
**Local control plane for serverless development with LocalStack orchestration**
|
|
4
6
|
|
|
5
7
|
LSS provides a unified local development environment for serverless microservices, eliminating the need to run separate LocalStack instances for each service.
|
|
@@ -52,6 +54,12 @@ local-serverless-stack/
|
|
|
52
54
|
|
|
53
55
|
### Installation
|
|
54
56
|
|
|
57
|
+
```bash
|
|
58
|
+
npm install -g local-serverless-stack
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Or install locally:
|
|
62
|
+
|
|
55
63
|
```bash
|
|
56
64
|
cd /path/to/local-serverless-stack
|
|
57
65
|
npm install
|
|
@@ -61,6 +69,16 @@ npm link
|
|
|
61
69
|
|
|
62
70
|
The `npm link` command makes the `lss` CLI available globally via `npx`.
|
|
63
71
|
|
|
72
|
+
### Serverless Framework Plugin
|
|
73
|
+
|
|
74
|
+
To automatically register your microservices with LSS, install the Serverless plugin:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
npm install --save-dev lss-serverless-plugin
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
See the [plugin documentation](packages/serverless-plugin/README.md) for configuration details.
|
|
81
|
+
|
|
64
82
|
## CLI Commands
|
|
65
83
|
|
|
66
84
|
LSS provides a simple CLI to manage the orchestrator in background mode:
|
package/bin/cli.js
CHANGED
|
@@ -8,6 +8,43 @@ const os = require('os');
|
|
|
8
8
|
const PID_FILE = path.join(os.tmpdir(), 'lss-orchestrator.pid');
|
|
9
9
|
const LOG_FILE = path.join(os.tmpdir(), 'lss-orchestrator.log');
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Load configuration from lss.config.json or .lssrc
|
|
13
|
+
*/
|
|
14
|
+
function loadConfig() {
|
|
15
|
+
const candidates = [
|
|
16
|
+
path.join(process.cwd(), 'lss.config.json'),
|
|
17
|
+
path.join(process.cwd(), '.lssrc'),
|
|
18
|
+
path.join(process.env.HOME || '~', 'lss.config.json'),
|
|
19
|
+
path.join(process.env.HOME || '~', '.lssrc'),
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
for (const candidate of candidates) {
|
|
23
|
+
if (fs.existsSync(candidate)) {
|
|
24
|
+
try {
|
|
25
|
+
const content = fs.readFileSync(candidate, 'utf-8');
|
|
26
|
+
return JSON.parse(content);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
console.warn(`⚠️ Failed to parse config file ${candidate}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get configuration values with defaults
|
|
38
|
+
*/
|
|
39
|
+
function getConfig(config) {
|
|
40
|
+
return {
|
|
41
|
+
serverPort: config.serverPort || 3100,
|
|
42
|
+
localstackPort: config.localstackPort || 4566,
|
|
43
|
+
enableDynamoProxy: config.enableDynamoProxy || false,
|
|
44
|
+
dynamoProxyPort: config.dynamoProxyPort || 8000,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
11
48
|
// Resolve orchestrator path - works both in development and when installed via npm
|
|
12
49
|
function getOrchestratorPath() {
|
|
13
50
|
// Try to find the orchestrator relative to this script
|
|
@@ -34,9 +71,14 @@ function startOrchestrator() {
|
|
|
34
71
|
const pid = fs.readFileSync(PID_FILE, 'utf8').trim();
|
|
35
72
|
try {
|
|
36
73
|
process.kill(pid, 0);
|
|
74
|
+
const config = loadConfig();
|
|
75
|
+
const cfg = getConfig(config);
|
|
37
76
|
console.log('✅ LSS Orchestrator already running (PID:', pid + ')');
|
|
38
|
-
console.log(
|
|
39
|
-
console.log(
|
|
77
|
+
console.log(`📊 Server: http://localhost:${cfg.serverPort}`);
|
|
78
|
+
console.log(`🔧 LocalStack: http://localhost:${cfg.localstackPort}`);
|
|
79
|
+
if (cfg.enableDynamoProxy) {
|
|
80
|
+
console.log(`🔄 DynamoDB Proxy: http://localhost:${cfg.dynamoProxyPort} (enabled)`);
|
|
81
|
+
}
|
|
40
82
|
return;
|
|
41
83
|
} catch (e) {
|
|
42
84
|
fs.unlinkSync(PID_FILE);
|
|
@@ -57,13 +99,26 @@ function startOrchestrator() {
|
|
|
57
99
|
|
|
58
100
|
const logFd = fs.openSync(LOG_FILE, 'a');
|
|
59
101
|
|
|
102
|
+
// Load config
|
|
103
|
+
const config = loadConfig();
|
|
104
|
+
const cfg = getConfig(config);
|
|
105
|
+
|
|
60
106
|
// Check for flags
|
|
61
|
-
const enableDynamoProxy = process.argv.includes('--enable-dynamo-proxy');
|
|
107
|
+
const enableDynamoProxy = process.argv.includes('--enable-dynamo-proxy') || cfg.enableDynamoProxy;
|
|
62
108
|
|
|
63
|
-
// Build environment variables
|
|
109
|
+
// Build environment variables from config
|
|
64
110
|
const env = { ...process.env };
|
|
111
|
+
if (cfg.serverPort) {
|
|
112
|
+
env.PORT = cfg.serverPort;
|
|
113
|
+
}
|
|
114
|
+
if (cfg.localstackPort) {
|
|
115
|
+
env.LSS_LOCALSTACK_PORT = cfg.localstackPort;
|
|
116
|
+
}
|
|
65
117
|
if (enableDynamoProxy) {
|
|
66
|
-
env.
|
|
118
|
+
env.LSS_ENABLE_DYNAMO_PROXY = 'true';
|
|
119
|
+
}
|
|
120
|
+
if (cfg.dynamoProxyPort) {
|
|
121
|
+
env.LSS_DYNAMO_PROXY_PORT = cfg.dynamoProxyPort;
|
|
67
122
|
}
|
|
68
123
|
|
|
69
124
|
const child = spawn('node', [orchestratorPath], {
|
|
@@ -78,10 +133,10 @@ function startOrchestrator() {
|
|
|
78
133
|
fs.writeFileSync(PID_FILE, child.pid.toString());
|
|
79
134
|
|
|
80
135
|
console.log('🚀 LSS Orchestrator started (PID:', child.pid + ')');
|
|
81
|
-
console.log(
|
|
82
|
-
console.log(
|
|
136
|
+
console.log(`📊 Server: http://localhost:${cfg.serverPort}`);
|
|
137
|
+
console.log(`🔧 LocalStack: http://localhost:${cfg.localstackPort}`);
|
|
83
138
|
if (enableDynamoProxy) {
|
|
84
|
-
console.log(
|
|
139
|
+
console.log(`🔄 DynamoDB Proxy: http://localhost:${cfg.dynamoProxyPort} (enabled)`);
|
|
85
140
|
}
|
|
86
141
|
console.log('📝 Logs:', LOG_FILE);
|
|
87
142
|
|
|
@@ -128,9 +183,14 @@ function showStatus() {
|
|
|
128
183
|
|
|
129
184
|
try {
|
|
130
185
|
process.kill(pid, 0);
|
|
186
|
+
const config = loadConfig();
|
|
187
|
+
const cfg = getConfig(config);
|
|
131
188
|
console.log('🟢 LSS Orchestrator: RUNNING (PID:', pid + ')');
|
|
132
|
-
console.log(
|
|
133
|
-
console.log(
|
|
189
|
+
console.log(`📊 Server: http://localhost:${cfg.serverPort}`);
|
|
190
|
+
console.log(`🔧 LocalStack: http://localhost:${cfg.localstackPort}`);
|
|
191
|
+
if (cfg.enableDynamoProxy) {
|
|
192
|
+
console.log(`🔄 DynamoDB Proxy: http://localhost:${cfg.dynamoProxyPort} (enabled)`);
|
|
193
|
+
}
|
|
134
194
|
console.log('📝 Logs:', LOG_FILE);
|
|
135
195
|
} catch (e) {
|
|
136
196
|
console.log('⚪ LSS Orchestrator: NOT RUNNING (stale PID file)');
|
|
@@ -154,6 +214,27 @@ Commands:
|
|
|
154
214
|
Options:
|
|
155
215
|
--enable-dynamo-proxy Enable DynamoDB proxy on port 8000 (for start command)
|
|
156
216
|
|
|
217
|
+
Configuration:
|
|
218
|
+
Create a lss.config.json or .lssrc file in your project root to customize:
|
|
219
|
+
|
|
220
|
+
Example lss.config.json:
|
|
221
|
+
{
|
|
222
|
+
"serverPort": 3100,
|
|
223
|
+
"localstackPort": 4566,
|
|
224
|
+
"enableDynamoProxy": false,
|
|
225
|
+
"dynamoProxyPort": 8000,
|
|
226
|
+
"region": "us-east-1",
|
|
227
|
+
"services": ["dynamodb", "sqs", "sns", "lambda"],
|
|
228
|
+
"persistence": true,
|
|
229
|
+
"debug": false
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
For the Serverless Plugin, add to serverless.yml:
|
|
233
|
+
custom:
|
|
234
|
+
orchestrator:
|
|
235
|
+
enabled: true
|
|
236
|
+
orchestratorUrl: http://localhost:3100
|
|
237
|
+
|
|
157
238
|
Examples:
|
|
158
239
|
npx lss start # Start the orchestrator
|
|
159
240
|
npx lss start --enable-dynamo-proxy # Start with DynamoDB proxy enabled
|
package/dist/server/index.js
CHANGED
|
@@ -5,11 +5,13 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
import { servicesRouter, processManager } from './routes/services.js';
|
|
6
6
|
import { resourcesRouter } from './routes/resources.js';
|
|
7
7
|
import { LocalStackManager } from './services/localstack-manager.js';
|
|
8
|
+
import { ConfigManager } from './services/config-manager.js';
|
|
8
9
|
import { startDynamoProxy } from './dev/dynamo-proxy.js';
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
11
|
const __dirname = path.dirname(__filename);
|
|
11
12
|
const app = express();
|
|
12
|
-
const
|
|
13
|
+
const configManager = ConfigManager.getInstance();
|
|
14
|
+
const PORT = configManager.getDashboardPort();
|
|
13
15
|
// Middleware
|
|
14
16
|
app.use(cors());
|
|
15
17
|
app.use(express.json());
|
|
@@ -41,13 +43,13 @@ async function start() {
|
|
|
41
43
|
console.log(`✅ Server running on http://localhost:${PORT}`);
|
|
42
44
|
console.log(`✅ LocalStack running on ${localstack.getEndpoint()}`);
|
|
43
45
|
});
|
|
44
|
-
// Optional
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const port = Number(process.env.DYNAMO_PROXY_PORT || 8000);
|
|
49
|
-
startDynamoProxy(localstack.getEndpoint(), port);
|
|
46
|
+
// Optional DynamoDB proxy
|
|
47
|
+
if (configManager.isEnableDynamoProxy()) {
|
|
48
|
+
const proxyPort = configManager.getDynamoProxyPort();
|
|
49
|
+
startDynamoProxy(localstack.getEndpoint(), proxyPort);
|
|
50
50
|
}
|
|
51
|
+
// Print configuration summary
|
|
52
|
+
configManager.printSummary();
|
|
51
53
|
}
|
|
52
54
|
catch (error) {
|
|
53
55
|
console.error('❌ Failed to start server:', error);
|
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,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,
|
|
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":"example.d.ts","sourceRoot":"","sources":["../../../src/server/routes/example.ts"],"names":[],"mappings":"AAWA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAoIxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { extractEventParams, ParameterType, handleApiGatewayError, HttpStatus, NotFound, BadRequest } from 'awpaki';
|
|
3
|
+
const router = Router();
|
|
4
|
+
/**
|
|
5
|
+
* Example endpoint showing awpaki integration
|
|
6
|
+
* POST /api/example/validate
|
|
7
|
+
*
|
|
8
|
+
* Demonstrates:
|
|
9
|
+
* - Parameter extraction and validation using awpaki
|
|
10
|
+
* - Error handling patterns
|
|
11
|
+
*/
|
|
12
|
+
router.post('/validate', async (req, res) => {
|
|
13
|
+
try {
|
|
14
|
+
// Convert Express request to API Gateway-like event for awpaki
|
|
15
|
+
const mockEvent = {
|
|
16
|
+
body: JSON.stringify(req.body),
|
|
17
|
+
headers: req.headers,
|
|
18
|
+
pathParameters: req.params,
|
|
19
|
+
queryStringParameters: req.query,
|
|
20
|
+
};
|
|
21
|
+
// Extract and validate parameters using awpaki
|
|
22
|
+
const params = extractEventParams({
|
|
23
|
+
body: {
|
|
24
|
+
name: {
|
|
25
|
+
label: 'Name',
|
|
26
|
+
required: true,
|
|
27
|
+
expectedType: ParameterType.STRING,
|
|
28
|
+
},
|
|
29
|
+
email: {
|
|
30
|
+
label: 'Email',
|
|
31
|
+
required: true,
|
|
32
|
+
expectedType: ParameterType.STRING,
|
|
33
|
+
decoder: (value) => {
|
|
34
|
+
const email = String(value);
|
|
35
|
+
if (!email.includes('@')) {
|
|
36
|
+
throw new BadRequest('Invalid email format');
|
|
37
|
+
}
|
|
38
|
+
return email.toLowerCase();
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
age: {
|
|
42
|
+
label: 'Age',
|
|
43
|
+
expectedType: ParameterType.NUMBER,
|
|
44
|
+
default: 0,
|
|
45
|
+
},
|
|
46
|
+
tags: {
|
|
47
|
+
label: 'Tags',
|
|
48
|
+
expectedType: ParameterType.ARRAY,
|
|
49
|
+
default: [],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
}, mockEvent);
|
|
53
|
+
// Success response
|
|
54
|
+
return res.status(HttpStatus.OK).json({
|
|
55
|
+
message: 'Validation successful with awpaki',
|
|
56
|
+
data: {
|
|
57
|
+
name: params.name,
|
|
58
|
+
email: params.email,
|
|
59
|
+
age: params.age,
|
|
60
|
+
tags: params.tags,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
// Use awpaki error handler
|
|
66
|
+
const apiGatewayError = handleApiGatewayError(error);
|
|
67
|
+
return res.status(apiGatewayError.statusCode).json({
|
|
68
|
+
error: JSON.parse(apiGatewayError.body),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Simple health check using awpaki patterns
|
|
74
|
+
* GET /api/example/health
|
|
75
|
+
*/
|
|
76
|
+
router.get('/health', (_req, res) => {
|
|
77
|
+
return res.status(HttpStatus.OK).json({
|
|
78
|
+
status: 'healthy',
|
|
79
|
+
service: 'awpaki-integration-example',
|
|
80
|
+
timestamp: new Date().toISOString(),
|
|
81
|
+
awpaki: {
|
|
82
|
+
version: '1.3.1',
|
|
83
|
+
features: ['parameter-extraction', 'validation', 'error-handling'],
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
/**
|
|
88
|
+
* Example with path parameters
|
|
89
|
+
* GET /api/example/users/:userId
|
|
90
|
+
*/
|
|
91
|
+
router.get('/users/:userId', async (req, res) => {
|
|
92
|
+
try {
|
|
93
|
+
const mockEvent = {
|
|
94
|
+
pathParameters: req.params,
|
|
95
|
+
};
|
|
96
|
+
const params = extractEventParams({
|
|
97
|
+
pathParameters: {
|
|
98
|
+
userId: {
|
|
99
|
+
label: 'User ID',
|
|
100
|
+
required: true,
|
|
101
|
+
expectedType: ParameterType.STRING,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
}, mockEvent);
|
|
105
|
+
// Simulate user lookup
|
|
106
|
+
const user = {
|
|
107
|
+
id: params.userId,
|
|
108
|
+
name: 'Test User',
|
|
109
|
+
email: 'test@example.com',
|
|
110
|
+
validated: 'via awpaki',
|
|
111
|
+
};
|
|
112
|
+
if (!user) {
|
|
113
|
+
throw new NotFound(`User ${params.userId} not found`);
|
|
114
|
+
}
|
|
115
|
+
return res.status(HttpStatus.OK).json(user);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const apiGatewayError = handleApiGatewayError(error);
|
|
119
|
+
return res.status(apiGatewayError.statusCode).json({
|
|
120
|
+
error: JSON.parse(apiGatewayError.body),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
export default router;
|
|
125
|
+
//# sourceMappingURL=example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../../src/server/routes/example.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/server/routes/services.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/server/routes/services.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,QAAA,MAAM,MAAM,4CAAW,CAAC;AAIxB,QAAA,MAAM,cAAc,gBAAuB,CAAC;AAyQ5C,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -5,20 +5,43 @@ import { CloudFormationParser } from '../services/cloudformation-parser.js';
|
|
|
5
5
|
import { CacheManager } from '../services/cache-manager.js';
|
|
6
6
|
import { ResourceProvisioner } from '../services/resource-provisioner.js';
|
|
7
7
|
import { ProcessManager } from '../services/process-manager.js';
|
|
8
|
+
import { ConfigManager } from '../services/config-manager.js';
|
|
8
9
|
const router = Router();
|
|
9
10
|
const parser = new CloudFormationParser();
|
|
10
11
|
const cache = new CacheManager();
|
|
11
12
|
const provisioner = new ResourceProvisioner();
|
|
12
13
|
const processManager = new ProcessManager();
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
const configManager = ConfigManager.getInstance();
|
|
15
|
+
// Initialize cache on first request (lazy init)
|
|
16
|
+
let cacheInitialized = false;
|
|
17
|
+
async function ensureCacheInit() {
|
|
18
|
+
if (!cacheInitialized) {
|
|
19
|
+
await cache.init();
|
|
20
|
+
cacheInitialized = true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
15
23
|
// Register a service
|
|
16
24
|
router.post('/register', async (req, res) => {
|
|
17
25
|
try {
|
|
18
|
-
|
|
26
|
+
await ensureCacheInit();
|
|
27
|
+
const { servicePath, invokePort, region } = req.body;
|
|
19
28
|
if (!servicePath) {
|
|
20
29
|
return res.status(400).json({ error: 'servicePath is required' });
|
|
21
30
|
}
|
|
31
|
+
// Region priority: Serverless Framework > lss.config.json > default
|
|
32
|
+
const effectiveRegion = region || configManager.getConfig().region || 'us-east-1';
|
|
33
|
+
console.log(`📝 Registering service from ${servicePath}`);
|
|
34
|
+
console.log(` Invoke port: ${invokePort || 'not specified'}`);
|
|
35
|
+
console.log(` Region: ${effectiveRegion}`);
|
|
36
|
+
if (region) {
|
|
37
|
+
console.log(` Region source: Serverless Framework configuration`);
|
|
38
|
+
}
|
|
39
|
+
else if (configManager.getConfig().region) {
|
|
40
|
+
console.log(` Region source: lss.config.json`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(` Region source: default`);
|
|
44
|
+
}
|
|
22
45
|
// Validate servicePath to prevent path traversal
|
|
23
46
|
const resolvedPath = path.resolve(servicePath);
|
|
24
47
|
if (resolvedPath.includes('..') || !resolvedPath.startsWith('/')) {
|
|
@@ -44,10 +67,12 @@ router.post('/register', async (req, res) => {
|
|
|
44
67
|
lastUpdated: Date.now(),
|
|
45
68
|
status: 'registered',
|
|
46
69
|
invokePort,
|
|
70
|
+
region: effectiveRegion,
|
|
47
71
|
});
|
|
48
72
|
// Provision resources to LocalStack
|
|
49
73
|
await provisioner.provisionResources(serviceName, resources, {
|
|
50
74
|
invokePort,
|
|
75
|
+
region: effectiveRegion,
|
|
51
76
|
});
|
|
52
77
|
return res.json({
|
|
53
78
|
success: true,
|
|
@@ -61,13 +86,14 @@ router.post('/register', async (req, res) => {
|
|
|
61
86
|
}
|
|
62
87
|
catch (error) {
|
|
63
88
|
console.error('Registration error:', error);
|
|
64
|
-
const message = error instanceof Error ?
|
|
89
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
65
90
|
return res.status(500).json({ error: message });
|
|
66
91
|
}
|
|
67
92
|
});
|
|
68
93
|
// List all services
|
|
69
94
|
router.get('/', async (_req, res) => {
|
|
70
95
|
try {
|
|
96
|
+
await ensureCacheInit();
|
|
71
97
|
const services = await cache.listServices();
|
|
72
98
|
return res.json(services);
|
|
73
99
|
}
|
|
@@ -79,6 +105,7 @@ router.get('/', async (_req, res) => {
|
|
|
79
105
|
// Get service details
|
|
80
106
|
router.get('/:name', async (req, res) => {
|
|
81
107
|
try {
|
|
108
|
+
await ensureCacheInit();
|
|
82
109
|
const serviceName = req.params.name;
|
|
83
110
|
if (!serviceName || typeof serviceName !== 'string' || serviceName.includes('/') || serviceName.includes('..')) {
|
|
84
111
|
return res.status(400).json({ error: 'Invalid service name' });
|
|
@@ -106,6 +133,7 @@ router.get('/:name', async (req, res) => {
|
|
|
106
133
|
// Delete service
|
|
107
134
|
router.delete('/:name', async (req, res) => {
|
|
108
135
|
try {
|
|
136
|
+
await ensureCacheInit();
|
|
109
137
|
const serviceName = req.params.name;
|
|
110
138
|
if (!serviceName || typeof serviceName !== 'string' || serviceName.includes('/') || serviceName.includes('..')) {
|
|
111
139
|
return res.status(400).json({ error: 'Invalid service name' });
|
|
@@ -149,6 +177,7 @@ router.patch('/:name/status', async (req, res) => {
|
|
|
149
177
|
// Start a service process (serverless offline / npm start)
|
|
150
178
|
router.post('/:name/start', async (req, res) => {
|
|
151
179
|
try {
|
|
180
|
+
await ensureCacheInit();
|
|
152
181
|
const serviceName = req.params.name;
|
|
153
182
|
if (!serviceName || typeof serviceName !== 'string' || serviceName.includes('/') || serviceName.includes('..')) {
|
|
154
183
|
return res.status(400).json({ error: 'Invalid service name' });
|
|
@@ -181,6 +210,7 @@ router.post('/:name/start', async (req, res) => {
|
|
|
181
210
|
// Stop a service process
|
|
182
211
|
router.post('/:name/stop', async (req, res) => {
|
|
183
212
|
try {
|
|
213
|
+
await ensureCacheInit();
|
|
184
214
|
const serviceName = req.params.name;
|
|
185
215
|
if (!serviceName || typeof serviceName !== 'string' || serviceName.includes('/') || serviceName.includes('..')) {
|
|
186
216
|
return res.status(400).json({ error: 'Invalid service name' });
|
|
@@ -201,6 +231,7 @@ router.post('/:name/stop', async (req, res) => {
|
|
|
201
231
|
// Fetch logs for a running service
|
|
202
232
|
router.get('/:name/logs', async (req, res) => {
|
|
203
233
|
try {
|
|
234
|
+
await ensureCacheInit();
|
|
204
235
|
const serviceName = req.params.name;
|
|
205
236
|
if (!serviceName || typeof serviceName !== 'string' || serviceName.includes('/') || serviceName.includes('..')) {
|
|
206
237
|
return res.status(400).json({ error: 'Invalid service name' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/server/routes/services.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/server/routes/services.ts"],"names":[],"mappings":"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"}
|