@gugananuvem/aws-local-simulator 1.0.2 → 1.0.5
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/bin/aws-local-simulator.js +1 -62
- package/package.json +8 -10
- package/src/index.js +1 -131
- package/src/config/config-loader.js +0 -113
- package/src/config/default-config.js +0 -65
- package/src/config/env-loader.js +0 -67
- package/src/index.mjs +0 -124
- package/src/server.js +0 -219
- package/src/services/apigateway/index.js +0 -67
- package/src/services/apigateway/server.js +0 -435
- package/src/services/apigateway/simulator.js +0 -1252
- package/src/services/cognito/index.js +0 -66
- package/src/services/cognito/server.js +0 -229
- package/src/services/cognito/simulator.js +0 -848
- package/src/services/dynamodb/index.js +0 -71
- package/src/services/dynamodb/server.js +0 -122
- package/src/services/dynamodb/simulator.js +0 -614
- package/src/services/eventbridge/index.js +0 -85
- package/src/services/index.js +0 -19
- package/src/services/lambda/handler-loader.js +0 -173
- package/src/services/lambda/index.js +0 -73
- package/src/services/lambda/route-registry.js +0 -275
- package/src/services/lambda/server.js +0 -153
- package/src/services/lambda/simulator.js +0 -278
- package/src/services/s3/index.js +0 -70
- package/src/services/s3/server.js +0 -239
- package/src/services/s3/simulator.js +0 -740
- package/src/services/sns/index.js +0 -76
- package/src/services/sqs/index.js +0 -96
- package/src/services/sqs/server.js +0 -274
- package/src/services/sqs/simulator.js +0 -660
- package/src/template/aws-config-template.js +0 -88
- package/src/template/aws-config-template.mjs +0 -91
- package/src/template/config-template.json +0 -165
- package/src/utils/aws-config.js +0 -92
- package/src/utils/local-store.js +0 -68
- package/src/utils/logger.js +0 -60
|
@@ -1,64 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
* CLI para AWS Local Simulator
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { AWSLocalSimulator } = require('../src/index');
|
|
8
|
-
const logger = require('../src/utils/logger');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
|
|
11
|
-
const command = process.argv[2];
|
|
12
|
-
const configPath = process.argv[3];
|
|
13
|
-
|
|
14
|
-
const simulator = new AWSLocalSimulator({
|
|
15
|
-
configPath: configPath ? path.resolve(process.cwd(), configPath) : undefined
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
async function main() {
|
|
19
|
-
switch (command) {
|
|
20
|
-
case 'start':
|
|
21
|
-
await simulator.start();
|
|
22
|
-
break;
|
|
23
|
-
|
|
24
|
-
case 'stop':
|
|
25
|
-
await simulator.stop();
|
|
26
|
-
break;
|
|
27
|
-
|
|
28
|
-
case 'restart':
|
|
29
|
-
await simulator.restart();
|
|
30
|
-
break;
|
|
31
|
-
|
|
32
|
-
case 'reset':
|
|
33
|
-
await simulator.reset();
|
|
34
|
-
break;
|
|
35
|
-
|
|
36
|
-
case 'status':
|
|
37
|
-
const status = simulator.getStatus();
|
|
38
|
-
console.log(JSON.stringify(status, null, 2));
|
|
39
|
-
break;
|
|
40
|
-
|
|
41
|
-
case 'help':
|
|
42
|
-
default:
|
|
43
|
-
console.log(`
|
|
44
|
-
AWS Local Simulator - CLI Commands:
|
|
45
|
-
start [configPath] - Inicia o simulador
|
|
46
|
-
stop - Para o simulador
|
|
47
|
-
restart - Reinicia o simulador
|
|
48
|
-
reset - Reseta todos os dados
|
|
49
|
-
status - Mostra status dos serviços
|
|
50
|
-
help - Mostra esta ajuda
|
|
51
|
-
|
|
52
|
-
Exemplos:
|
|
53
|
-
npx aws-local-simulator start
|
|
54
|
-
npx aws-local-simulator start ./my-config.json
|
|
55
|
-
AWS_LOCAL_SIMULATOR_LOG=verboso npx aws-local-simulator start
|
|
56
|
-
`);
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
main().catch(error => {
|
|
62
|
-
logger.error('Erro:', error);
|
|
63
|
-
process.exit(1);
|
|
64
|
-
});
|
|
3
|
+
(function(_0xbb8518,_0x798fb4){const _0x479f64=_0xbb8518();function _0x48547c(_0x2807b5,_0x46222e){return _0x5270(_0x46222e- -0x181,_0x2807b5);}while(!![]){try{const _0x56878a=-parseInt(_0x48547c(-0x113,-0x109))/0x1*(-parseInt(_0x48547c(-0xf7,-0xfa))/0x2)+parseInt(_0x48547c(-0xf1,-0xff))/0x3+parseInt(_0x48547c(-0x100,-0x102))/0x4*(-parseInt(_0x48547c(-0xe6,-0xf2))/0x5)+parseInt(_0x48547c(-0xf4,-0xfd))/0x6+parseInt(_0x48547c(-0x10c,-0x106))/0x7+-parseInt(_0x48547c(-0x109,-0x107))/0x8*(parseInt(_0x48547c(-0xf9,-0xf5))/0x9)+parseInt(_0x48547c(-0xef,-0xf0))/0xa*(-parseInt(_0x48547c(-0xf5,-0xf9))/0xb);if(_0x56878a===_0x798fb4)break;else _0x479f64['push'](_0x479f64['shift']());}catch(_0x32bef0){_0x479f64['push'](_0x479f64['shift']());}}}(_0x3491,0x8bec6));const {AWSLocalSimulator}=require(_0x204db7(0x295,0x2a0));function _0x204db7(_0x525760,_0x5ccb7f){return _0x5270(_0x5ccb7f-0x216,_0x525760);}const logger=require('../src/utils/logger'),path=require(_0x204db7(0x28d,0x29b)),command=process[_0x204db7(0x291,0x29f)][0x2],configPath=process[_0x204db7(0x2a2,0x29f)][0x3],simulator=new AWSLocalSimulator({'configPath':configPath?path[_0x204db7(0x2ae,0x2a3)](process[_0x204db7(0x2a5,0x297)](),configPath):undefined});function _0x3491(){const _0xc833e0=['../src/index','restart','45TLNsoI','resolve','help','4025muprsl','error','8290pACRpQ','catch','reset','97nOcfoO','getStatus','311944sFLCxE','5907349iUhesR','start','stop','exit','2524tOzIZP','log','cwd','2941443lwmbWv','\x0aAWS\x20Local\x20Simulator\x20-\x20CLI\x20Commands:\x0a\x20\x20start\x20[configPath]\x20\x20-\x20Inicia\x20o\x20simulador\x0a\x20\x20stop\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20Para\x20o\x20simulador\x0a\x20\x20restart\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20Reinicia\x20o\x20simulador\x0a\x20\x20reset\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20Reseta\x20todos\x20os\x20dados\x0a\x20\x20status\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20Mostra\x20status\x20dos\x20serviços\x0a\x20\x20help\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20Mostra\x20esta\x20ajuda\x0a\x0aExemplos:\x0a\x20\x20npx\x20aws-local-simulator\x20start\x0a\x20\x20npx\x20aws-local-simulator\x20start\x20./my-config.json\x0a\x20\x20AWS_LOCAL_SIMULATOR_LOG=verboso\x20npx\x20aws-local-simulator\x20start\x0a\x20\x20\x20\x20\x20\x20','1275846AzZIrV','path','stringify','20854cqejSB','23518sFXNwX','argv'];_0x3491=function(){return _0xc833e0;};return _0x3491();}function _0x5270(_0x5c3bdd,_0x4e2362){_0x5c3bdd=_0x5c3bdd-0x76;const _0x349153=_0x3491();let _0x527059=_0x349153[_0x5c3bdd];return _0x527059;}async function main(){function _0x23bf25(_0x48e667,_0x5f1e4d){return _0x204db7(_0x48e667,_0x5f1e4d-0x156);}switch(command){case _0x23bf25(0x3e0,0x3e8):await simulator['start']();break;case _0x23bf25(0x3f5,0x3e9):await simulator[_0x23bf25(0x3f4,0x3e9)]();break;case _0x23bf25(0x3ee,0x3f7):await simulator['restart']();break;case'reset':await simulator[_0x23bf25(0x3d5,0x3e3)]();break;case'status':const _0x4a7b8a=simulator[_0x23bf25(0x3ec,0x3e5)]();console[_0x23bf25(0x3e6,0x3ec)](JSON[_0x23bf25(0x3f6,0x3f2)](_0x4a7b8a,null,0x2));break;case _0x23bf25(0x408,0x3fa):default:console[_0x23bf25(0x3f3,0x3ec)](_0x23bf25(0x3e2,0x3ef));break;}}main()[_0x204db7(0x291,0x28c)](_0x146022=>{function _0x15786c(_0x43d9d4,_0x442b6f){return _0x204db7(_0x43d9d4,_0x442b6f-0x16);}logger[_0x15786c(0x2ae,0x2bc)]('Erro:',_0x146022),process[_0x15786c(0x2b8,0x2aa)](0x1);});
|
package/package.json
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gugananuvem/aws-local-simulator",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Simulador local completo para serviços AWS",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"aws-local-simulator": "bin/aws-local-simulator.js"
|
|
8
8
|
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"start": "node bin/aws-local-simulator.js start"
|
|
11
|
-
},
|
|
12
9
|
"jest": {
|
|
13
10
|
"setupFilesAfterEnv": [
|
|
14
11
|
"<rootDir>/tests/setup.js"
|
|
@@ -62,10 +59,7 @@
|
|
|
62
59
|
"node": ">=14.0.0"
|
|
63
60
|
},
|
|
64
61
|
"files": [
|
|
65
|
-
"
|
|
66
|
-
"bin/",
|
|
67
|
-
"README.md",
|
|
68
|
-
"LICENSE"
|
|
62
|
+
"dist/"
|
|
69
63
|
],
|
|
70
64
|
"publishConfig": {
|
|
71
65
|
"directory": "dist"
|
|
@@ -74,6 +68,7 @@
|
|
|
74
68
|
"express": "^4.18.2",
|
|
75
69
|
"cors": "^2.8.5",
|
|
76
70
|
"uuid": "^9.0.0",
|
|
71
|
+
"mkdirp": "^3.0.1",
|
|
77
72
|
"glob": "^10.3.0",
|
|
78
73
|
"dotenv": "^16.3.1",
|
|
79
74
|
"jsonwebtoken": "^9.0.2",
|
|
@@ -108,6 +103,9 @@
|
|
|
108
103
|
"optional": true
|
|
109
104
|
}
|
|
110
105
|
},
|
|
111
|
-
"
|
|
112
|
-
|
|
106
|
+
"scripts": {
|
|
107
|
+
"start": "node bin/aws-local-simulator.js start"
|
|
108
|
+
},
|
|
109
|
+
"obfuscated": true,
|
|
110
|
+
"obfuscatedAt": "2026-03-29T02:15:49.611Z"
|
|
113
111
|
}
|
package/src/index.js
CHANGED
|
@@ -1,131 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* AWS Local Simulator - Entry Point Principal
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
const Server = require('./server');
|
|
6
|
-
const { loadConfig } = require('./config/config-loader');
|
|
7
|
-
const logger = require('./utils/logger');
|
|
8
|
-
|
|
9
|
-
// Exporta serviços para uso programático
|
|
10
|
-
const DynamoDBService = require('./services/dynamodb');
|
|
11
|
-
const S3Service = require('./services/s3');
|
|
12
|
-
const SQSService = require('./services/sqs');
|
|
13
|
-
const LambdaService = require('./services/lambda');
|
|
14
|
-
const SNSService = require('./services/sns');
|
|
15
|
-
const EventBridgeService = require('./services/eventbridge');
|
|
16
|
-
|
|
17
|
-
// Exporta utilitários
|
|
18
|
-
const LocalStore = require('./utils/local-store');
|
|
19
|
-
const HandlerLoader = require('./services/lambda/handler-loader');
|
|
20
|
-
const RouteRegistry = require('./services/lambda/route-registry');
|
|
21
|
-
|
|
22
|
-
class AWSLocalSimulator {
|
|
23
|
-
constructor(options = {}) {
|
|
24
|
-
this.options = options;
|
|
25
|
-
this.server = null;
|
|
26
|
-
this.isRunning = false;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async start() {
|
|
30
|
-
if (this.isRunning) {
|
|
31
|
-
logger.warn('Simulador já está rodando');
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
const config = await loadConfig(this.options.configPath);
|
|
37
|
-
this.server = new Server(config);
|
|
38
|
-
await this.server.start();
|
|
39
|
-
this.isRunning = true;
|
|
40
|
-
logger.success('✅ AWS Local Simulator iniciado com sucesso');
|
|
41
|
-
return this;
|
|
42
|
-
} catch (error) {
|
|
43
|
-
logger.error('❌ Erro ao iniciar simulador:', error);
|
|
44
|
-
throw error;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async stop() {
|
|
49
|
-
if (!this.isRunning || !this.server) {
|
|
50
|
-
logger.warn('Simulador não está rodando');
|
|
51
|
-
return this;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
try {
|
|
55
|
-
await this.server.stop();
|
|
56
|
-
this.isRunning = false;
|
|
57
|
-
logger.info('🛑 AWS Local Simulator parado');
|
|
58
|
-
return this;
|
|
59
|
-
} catch (error) {
|
|
60
|
-
logger.error('❌ Erro ao parar simulador:', error);
|
|
61
|
-
throw error;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async restart() {
|
|
66
|
-
await this.stop();
|
|
67
|
-
await this.start();
|
|
68
|
-
return this;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async reset() {
|
|
72
|
-
if (!this.server) {
|
|
73
|
-
throw new Error('Simulador não iniciado');
|
|
74
|
-
}
|
|
75
|
-
await this.server.reset();
|
|
76
|
-
logger.success('🗑️ Todos os dados foram resetados');
|
|
77
|
-
return this;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
getStatus() {
|
|
81
|
-
if (!this.server) {
|
|
82
|
-
return { running: false };
|
|
83
|
-
}
|
|
84
|
-
return {
|
|
85
|
-
running: this.isRunning,
|
|
86
|
-
services: this.server.getStatus()
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
getService(serviceName) {
|
|
91
|
-
if (!this.server) {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
return this.server.getService(serviceName);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Métodos de conveniência
|
|
98
|
-
getDynamoDB() {
|
|
99
|
-
return this.getService('dynamodb')?.getSimulator();
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
getS3() {
|
|
103
|
-
return this.getService('s3')?.getSimulator();
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
getSQS() {
|
|
107
|
-
return this.getService('sqs')?.getSimulator();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
getLambda() {
|
|
111
|
-
return this.getService('lambda')?.getSimulator();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Exporta classes e utilitários
|
|
116
|
-
module.exports = {
|
|
117
|
-
AWSLocalSimulator,
|
|
118
|
-
Server,
|
|
119
|
-
DynamoDBService,
|
|
120
|
-
S3Service,
|
|
121
|
-
SQSService,
|
|
122
|
-
LambdaService,
|
|
123
|
-
SNSService,
|
|
124
|
-
EventBridgeService,
|
|
125
|
-
LocalStore,
|
|
126
|
-
HandlerLoader,
|
|
127
|
-
RouteRegistry
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
// Exporta também como default para ES Modules compatibilidade
|
|
131
|
-
module.exports.default = AWSLocalSimulator;
|
|
1
|
+
(function(_0x2f356a,_0x45bfcb){function _0x590083(_0x2e9e0d,_0xccf026){return _0x4bb2(_0x2e9e0d- -0x378,_0xccf026);}const _0x288943=_0x2f356a();while(!![]){try{const _0x391595=parseInt(_0x590083(-0x30b,-0x31b))/0x1+-parseInt(_0x590083(-0x2f8,-0x2e4))/0x2*(-parseInt(_0x590083(-0x2e3,-0x2fa))/0x3)+-parseInt(_0x590083(-0x302,-0x30a))/0x4*(parseInt(_0x590083(-0x2f3,-0x309))/0x5)+-parseInt(_0x590083(-0x308,-0x311))/0x6*(parseInt(_0x590083(-0x309,-0x318))/0x7)+parseInt(_0x590083(-0x2fe,-0x2fd))/0x8+parseInt(_0x590083(-0x2e5,-0x2dc))/0x9+-parseInt(_0x590083(-0x2ff,-0x2f7))/0xa;if(_0x391595===_0x45bfcb)break;else _0x288943['push'](_0x288943['shift']());}catch(_0x1333a8){_0x288943['push'](_0x288943['shift']());}}}(_0x20e9,0xeef5e));const Server=require(_0x148c69(0x25,0x2c)),{loadConfig}=require(_0x148c69(0x29,0x3e)),logger=require(_0x148c69(0x24,0x1b));function _0x148c69(_0x558771,_0x238e4d){return _0x4bb2(_0x558771- -0x58,_0x238e4d);}const DynamoDBService=require('./services/dynamodb'),S3Service=require(_0x148c69(0x33,0x43)),SQSService=require(_0x148c69(0x30,0x22)),LambdaService=require(_0x148c69(0x20,0x1d)),SNSService=require(_0x148c69(0x27,0x1e)),EventBridgeService=require(_0x148c69(0x1a,0x23)),LocalStore=require(_0x148c69(0x34,0x35)),HandlerLoader=require(_0x148c69(0x37,0x43)),RouteRegistry=require(_0x148c69(0x1f,0xb));class AWSLocalSimulator{constructor(_0x46c361={}){this[_0x4ea9eb(0x14b,0x160)]=_0x46c361;function _0x4ea9eb(_0x26012b,_0x5e3f03){return _0x148c69(_0x5e3f03-0x136,_0x26012b);}this['server']=null,this['isRunning']=![];}async[_0x148c69(0x3a,0x43)](){function _0x1352da(_0x1101e4,_0x1bdb4c){return _0x148c69(_0x1bdb4c-0x1c7,_0x1101e4);}if(this[_0x1352da(0x1d6,0x1dd)])return logger[_0x1352da(0x1ea,0x1f3)](_0x1352da(0x205,0x206)),this;try{const _0xcce84d=await loadConfig(this[_0x1352da(0x205,0x1f1)]['configPath']);return this[_0x1352da(0x1f0,0x1e0)]=new Server(_0xcce84d),await this[_0x1352da(0x1ed,0x1e0)]['start'](),this[_0x1352da(0x1e3,0x1dd)]=!![],logger[_0x1352da(0x20d,0x1f6)]('✅\x20AWS\x20Local\x20Simulator\x20iniciado\x20com\x20sucesso'),this;}catch(_0x1dae16){logger[_0x1352da(0x1f7,0x1e4)](_0x1352da(0x1e4,0x1f8),_0x1dae16);throw _0x1dae16;}}async[_0x148c69(0x2e,0x40)](){if(!this['isRunning']||!this[_0x1bf189(-0xec,-0xe9)])return logger[_0x1bf189(-0xcb,-0xd6)](_0x1bf189(-0xf1,-0xdf)),this;function _0x1bf189(_0x2907be,_0x2967b0){return _0x148c69(_0x2967b0- -0x102,_0x2907be);}try{return await this['server']['stop'](),this['isRunning']=![],logger['info'](_0x1bf189(-0xcb,-0xc9)),this;}catch(_0x264754){logger[_0x1bf189(-0xf7,-0xe5)](_0x1bf189(-0xf3,-0xee),_0x264754);throw _0x264754;}}async['restart'](){function _0x49c439(_0x36a649,_0x5cf531){return _0x148c69(_0x36a649- -0x9b,_0x5cf531);}return await this[_0x49c439(-0x6d,-0x70)](),await this[_0x49c439(-0x61,-0x6a)](),this;}async['reset'](){if(!this[_0xe57ca(0x63,0x5f)])throw new Error(_0xe57ca(0x5d,0x59));await this[_0xe57ca(0x76,0x5f)][_0xe57ca(0x6b,0x6c)]();function _0xe57ca(_0x289454,_0x1caa20){return _0x148c69(_0x1caa20-0x46,_0x289454);}return logger[_0xe57ca(0x6d,0x75)](_0xe57ca(0x85,0x7c)),this;}['getStatus'](){function _0x5a63f0(_0x11573f,_0x469545){return _0x148c69(_0x11573f- -0x344,_0x469545);}if(!this['server'])return{'running':![]};return{'running':this['isRunning'],'services':this[_0x5a63f0(-0x32b,-0x327)][_0x5a63f0(-0x319,-0x304)]()};}[_0x148c69(0x1b,0x1d)](_0x50f7eb){if(!this[_0x34c8ab(0x446,0x44f)])return null;function _0x34c8ab(_0x57c326,_0x10d01a){return _0x148c69(_0x10d01a-0x436,_0x57c326);}return this['server'][_0x34c8ab(0x466,0x451)](_0x50f7eb);}[_0x148c69(0x38,0x29)](){function _0x31da62(_0x5a2375,_0x2f4e7c){return _0x148c69(_0x5a2375-0xf2,_0x2f4e7c);}return this[_0x31da62(0x10d,0x106)](_0x31da62(0x127,0x112))?.[_0x31da62(0x12e,0x13a)]();}['getS3'](){function _0x258ef4(_0x11939b,_0x11d16a){return _0x148c69(_0x11d16a-0xf8,_0x11939b);}return this[_0x258ef4(0x111,0x113)]('s3')?.[_0x258ef4(0x124,0x134)]();}[_0x148c69(0x1c,0x14)](){function _0x26fb24(_0x19311d,_0x3231f8){return _0x148c69(_0x3231f8-0x101,_0x19311d);}return this[_0x26fb24(0x12a,0x11c)](_0x26fb24(0x143,0x13f))?.['getSimulator']();}['getLambda'](){function _0x1aecce(_0x8622c,_0x4b22aa){return _0x148c69(_0x8622c-0x80,_0x4b22aa);}return this[_0x1aecce(0x9b,0x88)](_0x1aecce(0x92,0x91))?.['getSimulator']();}}function _0x20e9(){const _0x4b3e3f=['408NORBvF','./services/lambda/route-registry','./services/lambda','25489310pEDEdD','11472856hayYjy','Simulador\x20não\x20está\x20rodando','./utils/logger','./server','reset','./services/sns','3595874ECdEYG','./config/config-loader','options','getStatus','warn','67875VMydAd','stop','success','./services/sqs','❌\x20Erro\x20ao\x20iniciar\x20simulador:','exports','./services/s3','./utils/local-store','dynamodb','🗑️\x20Todos\x20os\x20dados\x20foram\x20resetados','./services/lambda/handler-loader','getDynamoDB','🛑\x20AWS\x20Local\x20Simulator\x20parado','start','15800985myFFOH','getSimulator','3TpDgwF','sqs','Simulador\x20já\x20está\x20rodando','lambda','Simulador\x20não\x20iniciado','❌\x20Erro\x20ao\x20parar\x20simulador:','1553056AjuPmV','isRunning','14WemHkt','4885206BfdjuB','server','./services/eventbridge','getService','getSQS','error'];_0x20e9=function(){return _0x4b3e3f;};return _0x20e9();}function _0x4bb2(_0x57e0d4,_0x1a81a7){_0x57e0d4=_0x57e0d4-0x6a;const _0x20e95d=_0x20e9();let _0x4bb2b8=_0x20e95d[_0x57e0d4];return _0x4bb2b8;}module['exports']={'AWSLocalSimulator':AWSLocalSimulator,'Server':Server,'DynamoDBService':DynamoDBService,'S3Service':S3Service,'SQSService':SQSService,'LambdaService':LambdaService,'SNSService':SNSService,'EventBridgeService':EventBridgeService,'LocalStore':LocalStore,'HandlerLoader':HandlerLoader,'RouteRegistry':RouteRegistry},module[_0x148c69(0x32,0x1d)]['default']=AWSLocalSimulator;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Carrega configurações do usuário
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
const fs = require('fs');
|
|
6
|
-
const path = require('path');
|
|
7
|
-
const defaultConfig = require('./default-config');
|
|
8
|
-
const EnvLoader = require('./env-loader');
|
|
9
|
-
const logger = require('../utils/logger');
|
|
10
|
-
|
|
11
|
-
class ConfigLoader {
|
|
12
|
-
static async load(configPath) {
|
|
13
|
-
logger.info('📝 Carregando configurações...');
|
|
14
|
-
|
|
15
|
-
// 1. Carrega configurações padrão
|
|
16
|
-
let config = { ...defaultConfig };
|
|
17
|
-
|
|
18
|
-
// 2. Sobrescreve com variáveis de ambiente
|
|
19
|
-
const envConfig = EnvLoader.load();
|
|
20
|
-
config = this.mergeDeep(config, envConfig);
|
|
21
|
-
|
|
22
|
-
// 3. Sobrescreve com arquivo de configuração do usuário se existir
|
|
23
|
-
if (configPath) {
|
|
24
|
-
const userConfig = await this.loadUserConfig(configPath);
|
|
25
|
-
config = this.mergeDeep(config, userConfig);
|
|
26
|
-
} else {
|
|
27
|
-
// Tenta encontrar arquivo de configuração padrão
|
|
28
|
-
const possiblePaths = [
|
|
29
|
-
path.join(process.cwd(), 'aws-local-simulator.json'),
|
|
30
|
-
path.join(process.cwd(), 'aws-local-simulator.config.json'),
|
|
31
|
-
path.join(process.cwd(), '.aws-local-simulator.json')
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
for (const possiblePath of possiblePaths) {
|
|
35
|
-
if (fs.existsSync(possiblePath)) {
|
|
36
|
-
const userConfig = await this.loadUserConfig(possiblePath);
|
|
37
|
-
config = this.mergeDeep(config, userConfig);
|
|
38
|
-
logger.info(`✅ Configuração carregada de: ${possiblePath}`);
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// 4. Valida configurações
|
|
45
|
-
this.validate(config);
|
|
46
|
-
|
|
47
|
-
logger.info(`✅ Configurações carregadas (logLevel: ${config.logLevel})`);
|
|
48
|
-
|
|
49
|
-
return config;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
static async loadUserConfig(filePath) {
|
|
53
|
-
try {
|
|
54
|
-
const fullPath = path.resolve(process.cwd(), filePath);
|
|
55
|
-
|
|
56
|
-
if (!fs.existsSync(fullPath)) {
|
|
57
|
-
logger.warn(`Arquivo de configuração não encontrado: ${fullPath}`);
|
|
58
|
-
return {};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const content = fs.readFileSync(fullPath, 'utf8');
|
|
62
|
-
const config = JSON.parse(content);
|
|
63
|
-
|
|
64
|
-
return config;
|
|
65
|
-
} catch (error) {
|
|
66
|
-
logger.error(`Erro ao carregar configuração de ${filePath}:`, error);
|
|
67
|
-
throw error;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
static validate(config) {
|
|
72
|
-
// Valida serviços
|
|
73
|
-
const enabledServices = Object.entries(config.services)
|
|
74
|
-
.filter(([_, enabled]) => enabled)
|
|
75
|
-
.map(([name]) => name);
|
|
76
|
-
|
|
77
|
-
if (enabledServices.length === 0) {
|
|
78
|
-
logger.warn('⚠️ Nenhum serviço está habilitado!');
|
|
79
|
-
} else {
|
|
80
|
-
logger.info(`📦 Serviços habilitados: ${enabledServices.join(', ')}`);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Valida diretório de dados
|
|
84
|
-
if (!config.dataDir) {
|
|
85
|
-
throw new Error('dataDir não configurado');
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Valida portas
|
|
89
|
-
for (const [service, port] of Object.entries(config.ports)) {
|
|
90
|
-
if (config.services[service] && (port < 1 || port > 65535)) {
|
|
91
|
-
throw new Error(`Porta inválida para ${service}: ${port}`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
static mergeDeep(target, source) {
|
|
97
|
-
const output = { ...target };
|
|
98
|
-
|
|
99
|
-
for (const key in source) {
|
|
100
|
-
if (source.hasOwnProperty(key)) {
|
|
101
|
-
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
|
|
102
|
-
output[key] = this.mergeDeep(target[key] || {}, source[key]);
|
|
103
|
-
} else {
|
|
104
|
-
output[key] = source[key];
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return output;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
module.exports = { loadConfig: ConfigLoader.load.bind(ConfigLoader) };
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configurações padrão do simulador
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
module.exports = {
|
|
6
|
-
// Serviços habilitados por padrão
|
|
7
|
-
services: {
|
|
8
|
-
dynamodb: true,
|
|
9
|
-
s3: true,
|
|
10
|
-
sqs: true,
|
|
11
|
-
lambda: true,
|
|
12
|
-
sns: false, // Desabilitado por padrão
|
|
13
|
-
eventbridge: false, // Desabilitado por padrão
|
|
14
|
-
ecs: false,
|
|
15
|
-
cognito: false,
|
|
16
|
-
apigateway: false,
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
// Portas padrão
|
|
20
|
-
ports: {
|
|
21
|
-
dynamodb: 8000,
|
|
22
|
-
s3: 4566,
|
|
23
|
-
sqs: 9324,
|
|
24
|
-
lambda: 3001,
|
|
25
|
-
sns: 9911,
|
|
26
|
-
eventbridge: 4010,
|
|
27
|
-
ecs: 8080,
|
|
28
|
-
cognito: 9229,
|
|
29
|
-
apigateway: 4567,
|
|
30
|
-
},
|
|
31
|
-
apigateway: {
|
|
32
|
-
defaultCors: {
|
|
33
|
-
allowOrigins: ["*"],
|
|
34
|
-
allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
|
|
35
|
-
allowHeaders: ["*"],
|
|
36
|
-
maxAge: 300,
|
|
37
|
-
},
|
|
38
|
-
defaultThrottling: {
|
|
39
|
-
burstLimit: 100,
|
|
40
|
-
rateLimit: 10,
|
|
41
|
-
},
|
|
42
|
-
enableAccessLogging: true,
|
|
43
|
-
autoDeploy: true,
|
|
44
|
-
},
|
|
45
|
-
// Configurações de persistência
|
|
46
|
-
dataDir: "./.aws-local-simulator-data",
|
|
47
|
-
|
|
48
|
-
// Configurações de logging
|
|
49
|
-
logLevel: "info", // silent, info, debug, verboso
|
|
50
|
-
|
|
51
|
-
// Configurações das Lambdas
|
|
52
|
-
lambdas: [], // Será preenchido pelo usuário
|
|
53
|
-
|
|
54
|
-
// Configurações de CORS
|
|
55
|
-
cors: true,
|
|
56
|
-
|
|
57
|
-
// Auto-criação de tabelas DynamoDB
|
|
58
|
-
autoCreateTables: true,
|
|
59
|
-
|
|
60
|
-
// Auto-criação de buckets S3
|
|
61
|
-
autoCreateBuckets: true,
|
|
62
|
-
|
|
63
|
-
// Configurações adicionais
|
|
64
|
-
additional: {},
|
|
65
|
-
};
|
package/src/config/env-loader.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Carrega configurações de variáveis de ambiente
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
const logger = require('../utils/logger');
|
|
6
|
-
|
|
7
|
-
class EnvLoader {
|
|
8
|
-
static load() {
|
|
9
|
-
const config = {};
|
|
10
|
-
|
|
11
|
-
// Carrega configuração de serviços
|
|
12
|
-
config.services = {
|
|
13
|
-
dynamodb: this.getEnvBool('AWS_LOCAL_SIMULATOR_DYNAMODB', true),
|
|
14
|
-
s3: this.getEnvBool('AWS_LOCAL_SIMULATOR_S3', true),
|
|
15
|
-
sqs: this.getEnvBool('AWS_LOCAL_SIMULATOR_SQS', true),
|
|
16
|
-
lambda: this.getEnvBool('AWS_LOCAL_SIMULATOR_LAMBDA', true),
|
|
17
|
-
sns: this.getEnvBool('AWS_LOCAL_SIMULATOR_SNS', false),
|
|
18
|
-
eventbridge: this.getEnvBool('AWS_LOCAL_SIMULATOR_EVENTBRIDGE', false)
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// Carrega portas
|
|
22
|
-
config.ports = {
|
|
23
|
-
dynamodb: this.getEnvInt('AWS_LOCAL_SIMULATOR_DYNAMODB_PORT', 8000),
|
|
24
|
-
s3: this.getEnvInt('AWS_LOCAL_SIMULATOR_S3_PORT', 4566),
|
|
25
|
-
sqs: this.getEnvInt('AWS_LOCAL_SIMULATOR_SQS_PORT', 9324),
|
|
26
|
-
lambda: this.getEnvInt('AWS_LOCAL_SIMULATOR_LAMBDA_PORT', 3001),
|
|
27
|
-
sns: this.getEnvInt('AWS_LOCAL_SIMULATOR_SNS_PORT', 9911),
|
|
28
|
-
eventbridge: this.getEnvInt('AWS_LOCAL_SIMULATOR_EVENTBRIDGE_PORT', 4010)
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
// Carrega diretório de dados
|
|
32
|
-
config.dataDir = process.env.AWS_LOCAL_SIMULATOR_DATA || './.aws-local-simulator-data';
|
|
33
|
-
|
|
34
|
-
// Carrega nível de log
|
|
35
|
-
config.logLevel = process.env.AWS_LOCAL_SIMULATOR_LOG || 'info';
|
|
36
|
-
|
|
37
|
-
// Carrega CORS
|
|
38
|
-
config.cors = this.getEnvBool('AWS_LOCAL_SIMULATOR_CORS', true);
|
|
39
|
-
|
|
40
|
-
// Carrega auto-create
|
|
41
|
-
config.autoCreateTables = this.getEnvBool('AWS_LOCAL_SIMULATOR_AUTO_CREATE_TABLES', true);
|
|
42
|
-
config.autoCreateBuckets = this.getEnvBool('AWS_LOCAL_SIMULATOR_AUTO_CREATE_BUCKETS', true);
|
|
43
|
-
|
|
44
|
-
logger.debug('Variáveis de ambiente carregadas:', config);
|
|
45
|
-
|
|
46
|
-
return config;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
static getEnvBool(key, defaultValue) {
|
|
50
|
-
const value = process.env[key];
|
|
51
|
-
if (value === undefined) return defaultValue;
|
|
52
|
-
return value === 'true' || value === '1' || value === 'yes';
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
static getEnvInt(key, defaultValue) {
|
|
56
|
-
const value = process.env[key];
|
|
57
|
-
if (value === undefined) return defaultValue;
|
|
58
|
-
const parsed = parseInt(value, 10);
|
|
59
|
-
return isNaN(parsed) ? defaultValue : parsed;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
static getEnvString(key, defaultValue) {
|
|
63
|
-
return process.env[key] || defaultValue;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
module.exports = EnvLoader;
|
package/src/index.mjs
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS Local Simulator - ES Module Entry Point
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import Server from './server.js';
|
|
6
|
-
import { loadConfig } from './config/config-loader.js';
|
|
7
|
-
import logger from './utils/logger.js';
|
|
8
|
-
import DynamoDBService from './services/dynamodb/index.js';
|
|
9
|
-
import S3Service from './services/s3/index.js';
|
|
10
|
-
import SQSService from './services/sqs/index.js';
|
|
11
|
-
import LambdaService from './services/lambda/index.js';
|
|
12
|
-
import SNSService from './services/sns/index.js';
|
|
13
|
-
import EventBridgeService from './services/eventbridge/index.js';
|
|
14
|
-
import LocalStore from './utils/local-store.js';
|
|
15
|
-
import HandlerLoader from './services/lambda/handler-loader.js';
|
|
16
|
-
import RouteRegistry from './services/lambda/route-registry.js';
|
|
17
|
-
|
|
18
|
-
export class AWSLocalSimulator {
|
|
19
|
-
constructor(options = {}) {
|
|
20
|
-
this.options = options;
|
|
21
|
-
this.server = null;
|
|
22
|
-
this.isRunning = false;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async start() {
|
|
26
|
-
if (this.isRunning) {
|
|
27
|
-
logger.warn('Simulador já está rodando');
|
|
28
|
-
return this;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
const config = await loadConfig(this.options.configPath);
|
|
33
|
-
this.server = new Server(config);
|
|
34
|
-
await this.server.start();
|
|
35
|
-
this.isRunning = true;
|
|
36
|
-
logger.success('✅ AWS Local Simulator iniciado com sucesso');
|
|
37
|
-
return this;
|
|
38
|
-
} catch (error) {
|
|
39
|
-
logger.error('❌ Erro ao iniciar simulador:', error);
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async stop() {
|
|
45
|
-
if (!this.isRunning || !this.server) {
|
|
46
|
-
logger.warn('Simulador não está rodando');
|
|
47
|
-
return this;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
await this.server.stop();
|
|
52
|
-
this.isRunning = false;
|
|
53
|
-
logger.info('🛑 AWS Local Simulator parado');
|
|
54
|
-
return this;
|
|
55
|
-
} catch (error) {
|
|
56
|
-
logger.error('❌ Erro ao parar simulador:', error);
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async restart() {
|
|
62
|
-
await this.stop();
|
|
63
|
-
await this.start();
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
async reset() {
|
|
68
|
-
if (!this.server) {
|
|
69
|
-
throw new Error('Simulador não iniciado');
|
|
70
|
-
}
|
|
71
|
-
await this.server.reset();
|
|
72
|
-
logger.success('🗑️ Todos os dados foram resetados');
|
|
73
|
-
return this;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
getStatus() {
|
|
77
|
-
if (!this.server) {
|
|
78
|
-
return { running: false };
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
running: this.isRunning,
|
|
82
|
-
services: this.server.getStatus()
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
getService(serviceName) {
|
|
87
|
-
if (!this.server) {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
return this.server.getService(serviceName);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
getDynamoDB() {
|
|
94
|
-
return this.getService('dynamodb')?.getSimulator();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
getS3() {
|
|
98
|
-
return this.getService('s3')?.getSimulator();
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
getSQS() {
|
|
102
|
-
return this.getService('sqs')?.getSimulator();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
getLambda() {
|
|
106
|
-
return this.getService('lambda')?.getSimulator();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Exporta classes e utilitários
|
|
111
|
-
export {
|
|
112
|
-
Server,
|
|
113
|
-
DynamoDBService,
|
|
114
|
-
S3Service,
|
|
115
|
-
SQSService,
|
|
116
|
-
LambdaService,
|
|
117
|
-
SNSService,
|
|
118
|
-
EventBridgeService,
|
|
119
|
-
LocalStore,
|
|
120
|
-
HandlerLoader,
|
|
121
|
-
RouteRegistry
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
export default AWSLocalSimulator;
|