@gugananuvem/aws-local-simulator 1.0.4 → 1.0.7

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.
Files changed (37) hide show
  1. package/bin/aws-local-simulator.js +1 -62
  2. package/package.json +7 -10
  3. package/src/index.js +1 -131
  4. package/src/config/config-loader.js +0 -113
  5. package/src/config/default-config.js +0 -65
  6. package/src/config/env-loader.js +0 -67
  7. package/src/index.mjs +0 -124
  8. package/src/server.js +0 -219
  9. package/src/services/apigateway/index.js +0 -67
  10. package/src/services/apigateway/server.js +0 -435
  11. package/src/services/apigateway/simulator.js +0 -1252
  12. package/src/services/cognito/index.js +0 -66
  13. package/src/services/cognito/server.js +0 -229
  14. package/src/services/cognito/simulator.js +0 -848
  15. package/src/services/dynamodb/index.js +0 -71
  16. package/src/services/dynamodb/server.js +0 -122
  17. package/src/services/dynamodb/simulator.js +0 -614
  18. package/src/services/eventbridge/index.js +0 -85
  19. package/src/services/index.js +0 -19
  20. package/src/services/lambda/handler-loader.js +0 -173
  21. package/src/services/lambda/index.js +0 -73
  22. package/src/services/lambda/route-registry.js +0 -275
  23. package/src/services/lambda/server.js +0 -153
  24. package/src/services/lambda/simulator.js +0 -278
  25. package/src/services/s3/index.js +0 -70
  26. package/src/services/s3/server.js +0 -239
  27. package/src/services/s3/simulator.js +0 -740
  28. package/src/services/sns/index.js +0 -76
  29. package/src/services/sqs/index.js +0 -96
  30. package/src/services/sqs/server.js +0 -274
  31. package/src/services/sqs/simulator.js +0 -660
  32. package/src/template/aws-config-template.js +0 -88
  33. package/src/template/aws-config-template.mjs +0 -91
  34. package/src/template/config-template.json +0 -165
  35. package/src/utils/aws-config.js +0 -92
  36. package/src/utils/local-store.js +0 -68
  37. 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(_0x4fd666,_0xaa7f9c){const _0x5eeb72=_0x4fd666();function _0x2c9194(_0x4ba1ac,_0x57f240){return _0x4bd1(_0x4ba1ac- -0x9c,_0x57f240);}while(!![]){try{const _0x43d2dd=parseInt(_0x2c9194(0x1b,0xe))/0x1*(-parseInt(_0x2c9194(0x1e,0x2a))/0x2)+-parseInt(_0x2c9194(0x25,0x1d))/0x3+parseInt(_0x2c9194(0x16,0x21))/0x4*(-parseInt(_0x2c9194(0x21,0x26))/0x5)+parseInt(_0x2c9194(0x1c,0x1f))/0x6+-parseInt(_0x2c9194(0x28,0x27))/0x7+parseInt(_0x2c9194(0x12,0xf))/0x8*(-parseInt(_0x2c9194(0x13,0x1a))/0x9)+-parseInt(_0x2c9194(0x1d,0x1b))/0xa*(-parseInt(_0x2c9194(0x27,0x23))/0xb);if(_0x43d2dd===_0xaa7f9c)break;else _0x5eeb72['push'](_0x5eeb72['shift']());}catch(_0x261701){_0x5eeb72['push'](_0x5eeb72['shift']());}}}(_0x515d,0x64de2));const {AWSLocalSimulator}=require(_0x50e2ed(-0x2a1,-0x296));function _0x50e2ed(_0x3714b6,_0x9c09d3){return _0x4bd1(_0x9c09d3- -0x34b,_0x3714b6);}function _0x4bd1(_0x2ec010,_0xf15ab8){_0x2ec010=_0x2ec010-0xad;const _0x515d5b=_0x515d();let _0x4bd126=_0x515d5b[_0x2ec010];return _0x4bd126;}const logger=require('../src/utils/logger'),path=require(_0x50e2ed(-0x287,-0x286)),command=process['argv'][0x2],configPath=process['argv'][0x3],simulator=new AWSLocalSimulator({'configPath':configPath?path['resolve'](process[_0x50e2ed(-0x292,-0x295)](),configPath):undefined});async function main(){function _0x16f605(_0x448ddd,_0x119725){return _0x50e2ed(_0x119725,_0x448ddd- -0x5d);}switch(command){case'start':await simulator[_0x16f605(-0x2ea,-0x2f4)]();break;case _0x16f605(-0x2fb,-0x300):await simulator[_0x16f605(-0x2fb,-0x2f9)]();break;case _0x16f605(-0x2f5,-0x2fe):await simulator[_0x16f605(-0x2f5,-0x301)]();break;case _0x16f605(-0x2e6,-0x2de):await simulator[_0x16f605(-0x2e6,-0x2df)]();break;case'status':const _0x33a381=simulator['getStatus']();console['log'](JSON[_0x16f605(-0x2f4,-0x2fb)](_0x33a381,null,0x2));break;case _0x16f605(-0x2ec,-0x2f2):default:console[_0x16f605(-0x2ed,-0x2f2)](_0x16f605(-0x2e8,-0x2e5));break;}}main()[_0x50e2ed(-0x291,-0x285)](_0xa1d446=>{logger[_0x3bc8ca(0x1f9,0x1fd)](_0x3bc8ca(0x1fa,0x1f5),_0xa1d446);function _0x3bc8ca(_0x4c6fbf,_0x237718){return _0x50e2ed(_0x237718,_0x4c6fbf-0x494);}process[_0x3bc8ca(0x208,0x215)](0x1);});function _0x515d(){const _0x427f43=['stop','209952GIgIpb','270OqRGrp','error','Erro:','4wPryJU','restart','stringify','../src/index','cwd','34158jTceBc','3087138AMaSJu','7917820dJQcJu','10AuGNuw','log','help','3414715cgTRJQ','start','exit','\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','1469478vSTwYZ','reset','33fDYySA','2420852CkjLcR','path','catch'];_0x515d=function(){return _0x427f43;};return _0x515d();}
package/package.json CHANGED
@@ -1,14 +1,11 @@
1
1
  {
2
2
  "name": "@gugananuvem/aws-local-simulator",
3
- "version": "1.0.4",
3
+ "version": "1.0.7",
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
- "src/",
66
- "bin/",
67
- "README.md",
68
- "LICENSE"
62
+ "dist/"
69
63
  ],
70
64
  "publishConfig": {
71
65
  "directory": "dist"
@@ -109,6 +103,9 @@
109
103
  "optional": true
110
104
  }
111
105
  },
112
- "buildDate": "2026-03-29T01:58:10.890Z",
113
- "published": true
106
+ "scripts": {
107
+ "start": "node bin/aws-local-simulator.js start"
108
+ },
109
+ "obfuscated": true,
110
+ "obfuscatedAt": "2026-03-29T02:30:15.982Z"
114
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 _0x1193(){const _0x20168e=['2219152QcPPRb','Simulador\x20não\x20está\x20rodando','default','7253334pBbkyr','❌\x20Erro\x20ao\x20iniciar\x20simulador:','6411678KrpmyL','getService','3961260ezUIDh','./services/sqs','3579829StFGQU','lambda','./services/sns','error','🗑️\x20Todos\x20os\x20dados\x20foram\x20resetados','./services/dynamodb','getDynamoDB','options','10BjxRCq','./services/lambda','getS3','./server','./services/lambda/handler-loader','start','getStatus','getLambda','🛑\x20AWS\x20Local\x20Simulator\x20parado','isRunning','info','sqs','❌\x20Erro\x20ao\x20parar\x20simulador:','603492kUBFqv','3632065TTFDbo','stop','4DwScGk','Simulador\x20já\x20está\x20rodando','./services/lambda/route-registry','36qEZRjH','server','success','1guropP','warn','getSimulator','exports','reset'];_0x1193=function(){return _0x20168e;};return _0x1193();}(function(_0x272ae9,_0x280b1c){const _0x1fed10=_0x272ae9();function _0x5c9f99(_0x35fad8,_0x2e67b7){return _0x4912(_0x2e67b7-0x137,_0x35fad8);}while(!![]){try{const _0x240945=-parseInt(_0x5c9f99(0x1b6,0x1be))/0x1*(parseInt(_0x5c9f99(0x1a0,0x1b5))/0x2)+parseInt(_0x5c9f99(0x1c4,0x1ca))/0x3+parseInt(_0x5c9f99(0x1aa,0x1b8))/0x4*(parseInt(_0x5c9f99(0x1ab,0x1b6))/0x5)+-parseInt(_0x5c9f99(0x1d7,0x1c6))/0x6+parseInt(_0x5c9f99(0x1cf,0x1c8))/0x7+parseInt(_0x5c9f99(0x1d9,0x1c3))/0x8*(-parseInt(_0x5c9f99(0x1b8,0x1bb))/0x9)+-parseInt(_0x5c9f99(0x1e5,0x1d4))/0xa*(-parseInt(_0x5c9f99(0x1ce,0x1cc))/0xb);if(_0x240945===_0x280b1c)break;else _0x1fed10['push'](_0x1fed10['shift']());}catch(_0x16f05b){_0x1fed10['push'](_0x1fed10['shift']());}}}(_0x1193,0xa316f));const Server=require(_0x2e5924(-0x248,-0x253)),{loadConfig}=require('./config/config-loader'),logger=require('./utils/logger'),DynamoDBService=require(_0x2e5924(-0x24e,-0x259)),S3Service=require('./services/s3'),SQSService=require(_0x2e5924(-0x266,-0x25f)),LambdaService=require(_0x2e5924(-0x258,-0x255)),SNSService=require(_0x2e5924(-0x255,-0x25c)),EventBridgeService=require('./services/eventbridge'),LocalStore=require('./utils/local-store'),HandlerLoader=require(_0x2e5924(-0x266,-0x252)),RouteRegistry=require(_0x2e5924(-0x261,-0x270));class AWSLocalSimulator{constructor(_0x2df883={}){function _0x42747e(_0x5be709,_0x228570){return _0x2e5924(_0x5be709,_0x228570-0x2b0);}this[_0x42747e(0x61,0x59)]=_0x2df883,this[_0x42747e(0x34,0x42)]=null,this[_0x42747e(0x6e,0x63)]=![];}async[_0x2e5924(-0x25e,-0x251)](){function _0x4d134b(_0x1d700a,_0x3cb8f7){return _0x2e5924(_0x1d700a,_0x3cb8f7-0x5ee);}if(this[_0x4d134b(0x3a0,0x3a1)])return logger[_0x4d134b(0x37e,0x383)](_0x4d134b(0x388,0x37d)),this;try{const _0x589fe5=await loadConfig(this[_0x4d134b(0x399,0x397)]['configPath']);return this['server']=new Server(_0x589fe5),await this[_0x4d134b(0x386,0x380)][_0x4d134b(0x39b,0x39d)](),this[_0x4d134b(0x399,0x3a1)]=!![],logger[_0x4d134b(0x393,0x381)]('✅\x20AWS\x20Local\x20Simulator\x20iniciado\x20com\x20sucesso'),this;}catch(_0x1be4e6){logger['error'](_0x4d134b(0x38a,0x38b),_0x1be4e6);throw _0x1be4e6;}}async['stop'](){function _0x8e8b28(_0x339d35,_0xf7f09){return _0x2e5924(_0x339d35,_0xf7f09-0x32c);}if(!this[_0x8e8b28(0xcf,0xdf)]||!this[_0x8e8b28(0xb9,0xbe)])return logger[_0x8e8b28(0xcf,0xc1)](_0x8e8b28(0xdc,0xc6)),this;try{return await this[_0x8e8b28(0xae,0xbe)][_0x8e8b28(0xc4,0xb9)](),this['isRunning']=![],logger[_0x8e8b28(0xf0,0xe0)](_0x8e8b28(0xf4,0xde)),this;}catch(_0x4fcb43){logger[_0x8e8b28(0xdc,0xd1)](_0x8e8b28(0xe3,0xe2),_0x4fcb43);throw _0x4fcb43;}}async['restart'](){await this[_0x2c0b71(0x1ea,0x1d7)](),await this[_0x2c0b71(0x20c,0x207)]();function _0x2c0b71(_0x3b25a2,_0x48b056){return _0x2e5924(_0x48b056,_0x3b25a2-0x45d);}return this;}async[_0x2e5924(-0x274,-0x268)](){function _0x19d357(_0x3c6468,_0xb92841){return _0x2e5924(_0xb92841,_0x3c6468- -0x68);}if(!this[_0x19d357(-0x2d6,-0x2df)])throw new Error('Simulador\x20não\x20iniciado');return await this[_0x19d357(-0x2d6,-0x2d4)][_0x19d357(-0x2d0,-0x2d5)](),logger[_0x19d357(-0x2d5,-0x2d2)](_0x19d357(-0x2c2,-0x2b4)),this;}['getStatus'](){if(!this['server'])return{'running':![]};function _0x4a0922(_0x510b0d,_0x27c665){return _0x2e5924(_0x27c665,_0x510b0d-0x409);}return{'running':this[_0x4a0922(0x1bc,0x1b9)],'services':this['server'][_0x4a0922(0x1b9,0x1b0)]()};}[_0x2e5924(-0x272,-0x261)](_0x40714e){function _0x238ffe(_0x194027,_0x396a71){return _0x2e5924(_0x194027,_0x396a71-0x61a);}if(!this[_0x238ffe(0x3ac,0x3ac)])return null;return this[_0x238ffe(0x3a1,0x3ac)][_0x238ffe(0x3c8,0x3b9)](_0x40714e);}[_0x2e5924(-0x262,-0x258)](){function _0x188c42(_0x2a27c8,_0x4746ed){return _0x2e5924(_0x4746ed,_0x2a27c8-0x4b6);}return this[_0x188c42(0x255,0x258)]('dynamodb')?.[_0x188c42(0x24c,0x23e)]();}[_0x2e5924(-0x248,-0x254)](){function _0x4cdec5(_0x39080f,_0x519e6f){return _0x2e5924(_0x39080f,_0x519e6f-0x1df);}return this[_0x4cdec5(-0x90,-0x82)]('s3')?.[_0x4cdec5(-0x8d,-0x8b)]();}['getSQS'](){function _0x375cfb(_0x46b8df,_0x2a52e3){return _0x2e5924(_0x2a52e3,_0x46b8df- -0xbc);}return this[_0x375cfb(-0x31d,-0x31a)](_0x375cfb(-0x307,-0x308))?.['getSimulator']();}[_0x2e5924(-0x244,-0x24f)](){function _0x49ce2f(_0x2267c8,_0x3807c5){return _0x2e5924(_0x3807c5,_0x2267c8-0x333);}return this['getService'](_0x49ce2f(0xd6,0xe8))?.[_0x49ce2f(0xc9,0xda)]();}}function _0x4912(_0x128771,_0x5a497c){_0x128771=_0x128771-0x7e;const _0x11930c=_0x1193();let _0x4912da=_0x11930c[_0x128771];return _0x4912da;}function _0x2e5924(_0x34f134,_0x15ac9a){return _0x4912(_0x15ac9a- -0x2f3,_0x34f134);}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[_0x2e5924(-0x27c,-0x269)][_0x2e5924(-0x277,-0x265)]=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
- };
@@ -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;