@gugananuvem/aws-local-simulator 1.0.0 → 1.0.1

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 (38) hide show
  1. package/README.md +192 -192
  2. package/bin/aws-local-simulator.js +62 -62
  3. package/package.json +8 -5
  4. package/src/config/config-loader.js +113 -0
  5. package/src/config/default-config.js +65 -0
  6. package/src/config/env-loader.js +67 -0
  7. package/src/index.js +130 -130
  8. package/src/index.mjs +124 -0
  9. package/src/server.js +219 -0
  10. package/src/services/apigateway/index.js +67 -0
  11. package/src/services/apigateway/server.js +435 -0
  12. package/src/services/apigateway/simulator.js +1252 -0
  13. package/src/services/cognito/index.js +66 -0
  14. package/src/services/cognito/server.js +229 -0
  15. package/src/services/cognito/simulator.js +848 -0
  16. package/src/services/dynamodb/index.js +71 -0
  17. package/src/services/dynamodb/server.js +122 -0
  18. package/src/services/dynamodb/simulator.js +614 -0
  19. package/src/services/eventbridge/index.js +85 -0
  20. package/src/services/index.js +19 -0
  21. package/src/services/lambda/handler-loader.js +173 -0
  22. package/src/services/lambda/index.js +73 -0
  23. package/src/services/lambda/route-registry.js +275 -0
  24. package/src/services/lambda/server.js +153 -0
  25. package/src/services/lambda/simulator.js +278 -0
  26. package/src/services/s3/index.js +70 -0
  27. package/src/services/s3/server.js +239 -0
  28. package/src/services/s3/simulator.js +740 -0
  29. package/src/services/sns/index.js +76 -0
  30. package/src/services/sqs/index.js +96 -0
  31. package/src/services/sqs/server.js +274 -0
  32. package/src/services/sqs/simulator.js +660 -0
  33. package/src/template/aws-config-template.js +88 -0
  34. package/src/template/aws-config-template.mjs +91 -0
  35. package/src/template/config-template.json +165 -0
  36. package/src/utils/aws-config.js +92 -0
  37. package/src/utils/local-store.js +68 -0
  38. package/src/utils/logger.js +60 -0
@@ -0,0 +1,65 @@
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
+ };
@@ -0,0 +1,67 @@
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.js CHANGED
@@ -1,131 +1,131 @@
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
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
131
  module.exports.default = AWSLocalSimulator;
package/src/index.mjs ADDED
@@ -0,0 +1,124 @@
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;