@gugananuvem/aws-local-simulator 1.0.12 → 1.0.14

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 (57) hide show
  1. package/README.md +235 -11
  2. package/package.json +12 -2
  3. package/src/config/default-config.js +1 -0
  4. package/src/index.js +18 -2
  5. package/src/server.js +36 -32
  6. package/src/services/apigateway/index.js +5 -0
  7. package/src/services/apigateway/server.js +20 -0
  8. package/src/services/apigateway/simulator.js +13 -3
  9. package/src/services/athena/index.js +75 -0
  10. package/src/services/athena/server.js +101 -0
  11. package/src/services/athena/simulador.js +998 -0
  12. package/src/services/athena/simulator.js +346 -0
  13. package/src/services/cloudformation/index.js +106 -0
  14. package/src/services/cloudformation/server.js +417 -0
  15. package/src/services/cloudformation/simulador.js +1045 -0
  16. package/src/services/cloudtrail/index.js +84 -0
  17. package/src/services/cloudtrail/server.js +235 -0
  18. package/src/services/cloudtrail/simulador.js +719 -0
  19. package/src/services/cloudwatch/index.js +84 -0
  20. package/src/services/cloudwatch/server.js +366 -0
  21. package/src/services/cloudwatch/simulador.js +1173 -0
  22. package/src/services/cognito/index.js +5 -0
  23. package/src/services/cognito/simulator.js +4 -0
  24. package/src/services/config/index.js +96 -0
  25. package/src/services/config/server.js +215 -0
  26. package/src/services/config/simulador.js +1260 -0
  27. package/src/services/dynamodb/index.js +7 -3
  28. package/src/services/dynamodb/server.js +4 -2
  29. package/src/services/dynamodb/simulator.js +39 -29
  30. package/src/services/eventbridge/index.js +55 -51
  31. package/src/services/eventbridge/server.js +209 -0
  32. package/src/services/eventbridge/simulator.js +684 -0
  33. package/src/services/index.js +30 -4
  34. package/src/services/kms/index.js +75 -0
  35. package/src/services/kms/server.js +67 -0
  36. package/src/services/kms/simulator.js +324 -0
  37. package/src/services/lambda/index.js +5 -0
  38. package/src/services/lambda/simulator.js +48 -38
  39. package/src/services/parameter-store/index.js +80 -0
  40. package/src/services/parameter-store/server.js +50 -0
  41. package/src/services/parameter-store/simulator.js +201 -0
  42. package/src/services/s3/index.js +7 -3
  43. package/src/services/s3/server.js +20 -13
  44. package/src/services/s3/simulator.js +163 -407
  45. package/src/services/secret-manager/index.js +80 -0
  46. package/src/services/secret-manager/server.js +50 -0
  47. package/src/services/secret-manager/simulator.js +171 -0
  48. package/src/services/sns/index.js +55 -42
  49. package/src/services/sns/server.js +580 -0
  50. package/src/services/sns/simulator.js +1482 -0
  51. package/src/services/sqs/index.js +2 -4
  52. package/src/services/sqs/server.js +4 -2
  53. package/src/services/xray/index.js +83 -0
  54. package/src/services/xray/server.js +308 -0
  55. package/src/services/xray/simulador.js +994 -0
  56. package/src/utils/cloudtrail-audit.js +129 -0
  57. package/src/utils/local-store.js +18 -2
@@ -0,0 +1,101 @@
1
+ 'use strict';
2
+
3
+ const express = require('express');
4
+ const cors = require('cors');
5
+
6
+ /**
7
+ * Athena Server - protocolo JSON via x-amz-target
8
+ */
9
+ function createAthenaServer(simulator, logger) {
10
+ const app = express();
11
+
12
+ app.use(cors());
13
+ app.use(express.json({ limit: '10mb', type: () => true }));
14
+
15
+ app.use((req, _res, next) => {
16
+ const target = req.headers['x-amz-target'] || '';
17
+ if (target) logger.debug(`[Athena] ${req.method} ${req.path} target=${target}`);
18
+ next();
19
+ });
20
+
21
+ // ── Rota principal ───────────────────────────────────────────────
22
+ app.post('/', async (req, res) => {
23
+ const target = (req.headers['x-amz-target'] || '').replace('AmazonAthena.', '');
24
+ const body = req.body || {};
25
+
26
+ try {
27
+ let result;
28
+
29
+ switch (target) {
30
+ case 'StartQueryExecution':
31
+ result = await simulator.startQueryExecution(body);
32
+ break;
33
+ case 'GetQueryExecution':
34
+ result = simulator.getQueryExecution(body);
35
+ break;
36
+ case 'GetQueryResults':
37
+ result = simulator.getQueryResults(body);
38
+ break;
39
+ case 'StopQueryExecution':
40
+ result = await simulator.stopQueryExecution(body);
41
+ break;
42
+ case 'ListQueryExecutions':
43
+ result = simulator.listQueryExecutions(body);
44
+ break;
45
+ case 'CreateNamedQuery':
46
+ result = await simulator.createNamedQuery(body);
47
+ break;
48
+ case 'GetNamedQuery':
49
+ result = simulator.getNamedQuery(body);
50
+ break;
51
+ case 'ListNamedQueries':
52
+ result = simulator.listNamedQueries(body);
53
+ break;
54
+ case 'DeleteNamedQuery':
55
+ result = await simulator.deleteNamedQuery(body);
56
+ break;
57
+ case 'CreateWorkGroup':
58
+ result = await simulator.createWorkGroup(body);
59
+ break;
60
+ case 'GetWorkGroup':
61
+ result = simulator.getWorkGroup(body);
62
+ break;
63
+ case 'ListWorkGroups':
64
+ result = simulator.listWorkGroups(body);
65
+ break;
66
+ case 'DeleteWorkGroup':
67
+ result = await simulator.deleteWorkGroup(body);
68
+ break;
69
+ default:
70
+ return res.status(400).json({ __type: 'InvalidRequestException', message: `Unknown action: ${target}` });
71
+ }
72
+
73
+ res.json(result || {});
74
+ } catch (err) {
75
+ logger.error(`[Athena] Error in ${target}: ${err.message}`);
76
+ res.status(err.statusCode || 500).json({ __type: err.code || 'InternalServerError', message: err.message });
77
+ }
78
+ });
79
+
80
+ // ── Admin ────────────────────────────────────────────────────────
81
+ app.get('/__admin/health', (_req, res) => {
82
+ res.json({ status: 'healthy', service: 'athena', ...simulator.getStats() });
83
+ });
84
+
85
+ app.get('/__admin/executions', (_req, res) => {
86
+ res.json({ executions: Array.from(simulator.queryExecutions.values()).map(({ _results, ...e }) => e) });
87
+ });
88
+
89
+ app.get('/__admin/workgroups', (_req, res) => {
90
+ res.json({ workGroups: Array.from(simulator.workGroups.values()) });
91
+ });
92
+
93
+ app.post('/__admin/reset', async (_req, res) => {
94
+ await simulator.reset();
95
+ res.json({ message: 'Athena data reset complete' });
96
+ });
97
+
98
+ return app;
99
+ }
100
+
101
+ module.exports = { createAthenaServer };