heimdall-api-platform 1.0.34 → 1.0.35
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/dist/lib/clients/http-client.js +1 -1
- package/dist/lib/commons-cache.js +1 -1
- package/dist/lib/commons-const.js +1 -1
- package/dist/lib/commons-elasticsearch.js +1 -1
- package/dist/lib/commons-errors.js +1 -1
- package/dist/lib/commons-opensearch.js +1 -1
- package/dist/lib/commons-splunk.js +1 -1
- package/dist/lib/commons-util.js +1 -1
- package/dist/lib/default-routes-docs.js +1 -1
- package/dist/lib/default-routes-pos.js +1 -1
- package/dist/lib/default-routes-pre.js +1 -1
- package/dist/lib/environment.js +1 -1
- package/dist/lib/factory/api-gateway.js +1 -1
- package/dist/lib/factory/client-factory.js +1 -1
- package/dist/lib/factory/function-factory.js +1 -1
- package/dist/lib/factory/operation-flow-factory.js +1 -1
- package/dist/lib/factory/server-factory.js +1 -1
- package/dist/lib/factory/transformation-function-factory.js +1 -1
- package/dist/lib/handle-route.js +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/lib/jwt-util.js +1 -1
- package/dist/lib/license/license-service.js +1 -1
- package/dist/lib/models/base-context.js +1 -1
- package/dist/lib/models/elastic-index-data.js +1 -1
- package/dist/lib/models/flow-context.js +1 -1
- package/dist/lib/models/flow-indexed.js +1 -1
- package/dist/lib/models/operation-function-indexed.js +1 -1
- package/dist/lib/models/operation-function-transformation-indexed.js +1 -1
- package/dist/lib/models/operation-http-indexed.js +1 -1
- package/dist/lib/models/operation-mock-indexed.js +1 -1
- package/dist/lib/models/route-context.js +1 -1
- package/dist/lib/models/security-route.js +1 -1
- package/dist/lib/models/service-context.js +1 -1
- package/dist/lib/models/service-group.js +1 -1
- package/dist/lib/models/service-route.js +1 -1
- package/dist/lib/models/splunk-data.js +1 -1
- package/dist/lib/operations/abstract-operation.js +1 -1
- package/dist/lib/operations/function.js +1 -1
- package/dist/lib/operations/http.js +1 -1
- package/dist/lib/operations/mock.js +1 -1
- package/dist/lib/operations/monitor-check.js +1 -1
- package/dist/lib/orchestration-flow.js +1 -1
- package/dist/lib/router.js +1 -1
- package/dist/lib/security-validation.js +1 -1
- package/dist/lib/services/server.js +1 -1
- package/dist/lib/services/template-monitorcheck-route.js +1 -1
- package/package.json +1 -1
- package/dist/LICENSE +0 -21
- package/dist/README.md +0 -336
- package/dist/package.json +0 -73
package/package.json
CHANGED
package/dist/LICENSE
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
The MIT License (MIT)
|
2
|
-
|
3
|
-
Copyright (c) 2018 Márcio Rosa
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
13
|
-
all copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
THE SOFTWARE.
|
package/dist/README.md
DELETED
@@ -1,336 +0,0 @@
|
|
1
|
-
# Heimdall API Platform
|
2
|
-
|
3
|
-
**Um microgateway de alta performance para APIs, com orquestração inteligente e roteamento dinâmico.**
|
4
|
-
|
5
|
-
---
|
6
|
-
|
7
|
-
## 🚀 O que é o Heimdall API Platform?
|
8
|
-
|
9
|
-
O Heimdall API Platform é um microgateway projetado para lidar com orquestração de APIs, roteamento dinâmico e integração entre microsserviços de forma flexível e performática.
|
10
|
-
|
11
|
-
Ideal para arquiteturas modernas, legadas ou híbridas, ele permite centralizar e controlar fluxos de requisições com segurança, cache, validação de licença e observabilidade.
|
12
|
-
|
13
|
-
---
|
14
|
-
|
15
|
-
## ✅ Problemas que ele resolve
|
16
|
-
|
17
|
-
* Roteamento inteligente entre múltiplas APIs
|
18
|
-
* Orquestração de serviços e fluxos condicionais
|
19
|
-
* Aplicação de padrões de segurança e autenticação
|
20
|
-
* Cache de respostas via Redis
|
21
|
-
* Observabilidade com OpenSearch
|
22
|
-
* Proteção contra ataques DDoS e throttling de requisições
|
23
|
-
* Transformações dinâmicas de dados de request em tempo de execução
|
24
|
-
* Facilidade de integração com ambientes heterogêneos (legado + novo)
|
25
|
-
* Padronização de erros e tratamento uniforme
|
26
|
-
* Geração de correlation id para rastreamento de requisições
|
27
|
-
|
28
|
-
---
|
29
|
-
|
30
|
-
## 🧩 Funcionalidades Principais
|
31
|
-
|
32
|
-
* ✅ Gateway de APIs leve e flexível
|
33
|
-
* 🔁 Roteamento dinâmico baseado em configurações
|
34
|
-
* ⚙️ Orquestração de múltiplos fluxos por rota
|
35
|
-
* 🔗 Agregação de vários serviços em uma única requisição utilizando fluxos
|
36
|
-
* 🔐 Validação de licença (produção exige chave válida)
|
37
|
-
* 📦 Cache com Redis (opcional, mas recomendado)
|
38
|
-
* 🔍 Observabilidade com OpenSearch
|
39
|
-
* 📄 Documentação automática com Swagger e Redocly
|
40
|
-
* 🎭 Suporte a mocks estáticos e dinâmicos
|
41
|
-
* ▶️ Execução de functions customizadas, integração com clientes de API e mocks internos
|
42
|
-
* 🛠️ Padronização de erros e respostas de falha
|
43
|
-
* 🔖 Geração automática de correlation id para rastreamento
|
44
|
-
* ☁️ Totalmente compatível com AWS Lambda e Google Cloud Functions
|
45
|
-
|
46
|
-
---
|
47
|
-
|
48
|
-
## 📦 Pré-requisitos
|
49
|
-
|
50
|
-
* **Node.js** v18 ou superior
|
51
|
-
|
52
|
-
---
|
53
|
-
|
54
|
-
## 📥 Instalação via NPM
|
55
|
-
|
56
|
-
```bash
|
57
|
-
npm install heimdall-api-platform
|
58
|
-
```
|
59
|
-
|
60
|
-
---
|
61
|
-
|
62
|
-
## 🔧 Exemplos de Configuração de Rotas
|
63
|
-
|
64
|
-
### 1. execute-function
|
65
|
-
|
66
|
-
```js
|
67
|
-
module.exports = {
|
68
|
-
name: 'executeFunction',
|
69
|
-
description: 'Execute Function',
|
70
|
-
method: 'POST',
|
71
|
-
route: '/execute_function',
|
72
|
-
indexedResult: false,
|
73
|
-
responseHeaders: {
|
74
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
75
|
-
},
|
76
|
-
flow: [
|
77
|
-
{
|
78
|
-
resultVariable: '.',
|
79
|
-
skipErrors: false,
|
80
|
-
cacheEnable: true,
|
81
|
-
cacheTtl: 10, // TTL em segundos
|
82
|
-
operation: {
|
83
|
-
functionName: 'return-body-result',
|
84
|
-
type: 'function'
|
85
|
-
}
|
86
|
-
}
|
87
|
-
]
|
88
|
-
};
|
89
|
-
```
|
90
|
-
|
91
|
-
| **Atributo** | **Descrição** |
|
92
|
-
| ----------------- | ----------------------------------------------- |
|
93
|
-
| `name` | Identificador único da rota/configuração. |
|
94
|
-
| `description` | Descrição para documentação. |
|
95
|
-
| `method` | Método HTTP (GET, POST, etc.). |
|
96
|
-
| `route` | Caminho exposto no gateway. |
|
97
|
-
| `indexedResult` | Se deve indexar o resultado para uso posterior. |
|
98
|
-
| `responseHeaders` | Headers fixos retornados na resposta. |
|
99
|
-
|
100
|
-
**Detalhes do `flow`**
|
101
|
-
|
102
|
-
| **Campo** | **Descrição** |
|
103
|
-
| ---------------- | -------------------------------------------- |
|
104
|
-
| `resultVariable` | Variável onde armazenar o saída da operação. |
|
105
|
-
| `skipErrors` | Se `true`, ignora erros e continua o fluxo. |
|
106
|
-
| `cacheEnable` | Se `true`, ativa cache para esta operação. |
|
107
|
-
| `cacheTtl` | Tempo de vida (segundos) do cache. |
|
108
|
-
| `operation` | Configuração da operação (`function`). |
|
109
|
-
|
110
|
-
**Configuração `operation`**
|
111
|
-
|
112
|
-
| **Campo** | **Descrição** |
|
113
|
-
| -------------- | --------------------------------------- |
|
114
|
-
| `functionName` | Nome da função registrada no framework. |
|
115
|
-
| `type` | Tipo de operação (`function`). |
|
116
|
-
|
117
|
-
---
|
118
|
-
|
119
|
-
### 2. execute-mock
|
120
|
-
|
121
|
-
```js
|
122
|
-
module.exports = {
|
123
|
-
name: 'executeMock',
|
124
|
-
description: 'Execute Mock',
|
125
|
-
method: 'GET',
|
126
|
-
route: '/execute_mock',
|
127
|
-
indexedResult: false,
|
128
|
-
responseHeaders: {
|
129
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
130
|
-
},
|
131
|
-
flow: [
|
132
|
-
{
|
133
|
-
resultVariable: '.',
|
134
|
-
skipErrors: false,
|
135
|
-
operation: {
|
136
|
-
file: 'demo-mock.json',
|
137
|
-
type: 'mock'
|
138
|
-
}
|
139
|
-
}
|
140
|
-
]
|
141
|
-
};
|
142
|
-
```
|
143
|
-
|
144
|
-
| **Atributo** | **Descrição** |
|
145
|
-
| ----------------- | ------------------------------------ |
|
146
|
-
| `name` | Identificador único da rota de mock. |
|
147
|
-
| `description` | Descrição para documentação. |
|
148
|
-
| `method` | Método HTTP. |
|
149
|
-
| `route` | Caminho exposto no mock. |
|
150
|
-
| `indexedResult` | Se deve indexar o mock. |
|
151
|
-
| `responseHeaders` | Headers fixos para resposta do mock. |
|
152
|
-
|
153
|
-
**Detalhes do `flow`**
|
154
|
-
|
155
|
-
| **Campo** | **Descrição** |
|
156
|
-
| ---------------- | ----------------------------------------- |
|
157
|
-
| `resultVariable` | Variável que receberá o conteúdo do mock. |
|
158
|
-
| `skipErrors` | Se `true`, ignora erros. |
|
159
|
-
| `operation` | Configuração da operação (`mock`). |
|
160
|
-
|
161
|
-
**Configuração `operation`**
|
162
|
-
|
163
|
-
| **Campo** | **Descrição** |
|
164
|
-
| --------- | ---------------------------------- |
|
165
|
-
| `file` | Caminho para arquivo JSON de mock. |
|
166
|
-
| `type` | Tipo de operação (`mock`). |
|
167
|
-
|
168
|
-
---
|
169
|
-
|
170
|
-
### 3. execute-api-rest (usando client)
|
171
|
-
|
172
|
-
```js
|
173
|
-
module.exports = {
|
174
|
-
name: 'addressByZipcodeService',
|
175
|
-
description: 'Get Address By Zipcode',
|
176
|
-
method: 'GET',
|
177
|
-
route: '/:zipcode/by_client_api',
|
178
|
-
indexedResult: false,
|
179
|
-
responseHeaders: {
|
180
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
181
|
-
},
|
182
|
-
flow: [
|
183
|
-
{
|
184
|
-
resultVariable: '.',
|
185
|
-
skipErrors: false,
|
186
|
-
cacheEnable: false,
|
187
|
-
cacheTtl: 24 * 60 * 60 * 30, // 30 dias em segundos
|
188
|
-
cacheKey: '{{params.zipcode}}',
|
189
|
-
operation: {
|
190
|
-
clientName: 'viaCEP',
|
191
|
-
mergedHeaders: false,
|
192
|
-
headersTransformation: 'transformation-header-get-cep',
|
193
|
-
requestTransformation: 'transformation-request-get-cep',
|
194
|
-
responseTransformation: 'transformation-response-get-cep',
|
195
|
-
onError: 'on-error-get-cep',
|
196
|
-
onSuccess: 'on-success-get-cep',
|
197
|
-
headers: {
|
198
|
-
'Content-Type': 'application/json;charset=UTF-8',
|
199
|
-
'X-HEADER-CEP': '{{params.zipcode}}'
|
200
|
-
},
|
201
|
-
type: 'http',
|
202
|
-
method: 'GET',
|
203
|
-
path: '/{{params.zipcode}}/json'
|
204
|
-
}
|
205
|
-
}
|
206
|
-
]
|
207
|
-
};
|
208
|
-
```
|
209
|
-
|
210
|
-
| **Atributo** | **Descrição** |
|
211
|
-
| ----------------- | ----------------------------------------------- |
|
212
|
-
| `name` | Identificador único do serviço. |
|
213
|
-
| `description` | Descrição para documentação. |
|
214
|
-
| `method` | Método HTTP da chamada externa. |
|
215
|
-
| `route` | Rota no gateway para chamada externa. |
|
216
|
-
| `indexedResult` | Se deve indexar o resultado. |
|
217
|
-
| `responseHeaders` | Headers fixos da resposta. |
|
218
|
-
| `flow` | Lista de etapas de orquestração para esta rota. |
|
219
|
-
|
220
|
-
**Detalhes do `flow`**
|
221
|
-
|
222
|
-
| **Campo** | **Descrição** |
|
223
|
-
| ---------------- | ----------------------------------------------------- |
|
224
|
-
| `resultVariable` | Variável que armazena o resultado da chamada externa. |
|
225
|
-
| `skipErrors` | Se `true`, continua o fluxo mesmo com erros. |
|
226
|
-
| `cacheEnable` | Se `true`, habilita cache para esta operação. |
|
227
|
-
| `cacheTtl` | TTL do cache em segundos. |
|
228
|
-
| `cacheKey` | Chave de cache baseada em parâmetros da rota. |
|
229
|
-
| `operation` | Configuração da operação HTTP. |
|
230
|
-
|
231
|
-
**Configuração `operation`**
|
232
|
-
|
233
|
-
| **Campo** | **Descrição** |
|
234
|
-
| ------------------------ | --------------------------------------------------------- |
|
235
|
-
| `clientName` | Nome do cliente HTTP em `mappingClients`. |
|
236
|
-
| `mergedHeaders` | Se `true`, mescla todos os cabeçalhos de entrada. |
|
237
|
-
| `headersTransformation` | Função para transformar cabeçalhos. |
|
238
|
-
| `requestTransformation` | Função para transformar payload de request. |
|
239
|
-
| `responseTransformation` | Função para transformar a resposta recebida. |
|
240
|
-
| `onError` | Função acionada em caso de erro. |
|
241
|
-
| `onSuccess` | Função acionada em caso de sucesso. |
|
242
|
-
| `headers` | Headers estáticos extras para requisição. |
|
243
|
-
| `type` | Tipo da operação (`http`). |
|
244
|
-
| `method` | Método HTTP da chamada externa. |
|
245
|
-
| `path` | Path da rota externa, suportando templates de parâmetros. |
|
246
|
-
|
247
|
-
---
|
248
|
-
|
249
|
-
## 🏗️ Estrutura Esperada de Configuração
|
250
|
-
|
251
|
-
### `environment.js`
|
252
|
-
|
253
|
-
```js
|
254
|
-
module.exports = {
|
255
|
-
appName: process.env.appName || 'demo-api-gateway',
|
256
|
-
requestTimeout: process.env.requestTimeout || 20000,
|
257
|
-
requestPerSecond: process.env.requestPerSecond || 40,
|
258
|
-
memoryCheckInterval: process.env.memoryCheckInterval || 20000,
|
259
|
-
serverPort: process.env.serverPort || 9010,
|
260
|
-
logger: {
|
261
|
-
Console: {
|
262
|
-
level: process.env.loggerLevel || 'info'
|
263
|
-
}
|
264
|
-
},
|
265
|
-
enableRedis: true,
|
266
|
-
redisCache: {
|
267
|
-
reader: { host: 'localhost', port: 6379, connectTimeout: 5000 },
|
268
|
-
writer: { host: 'localhost', port: 6379, connectTimeout: 5000 }
|
269
|
-
},
|
270
|
-
enableElasticSearch: process.env.elasticEnable,
|
271
|
-
elasticSearch: {
|
272
|
-
indexName: process.env.elasticIndexName,
|
273
|
-
client: process.env.elasticClient,
|
274
|
-
credentials: { accessKeyId: process.env.elasticAccessKeyId, secretAccessKey: process.env.elasticSecretAccessKey },
|
275
|
-
host: process.env.elasticHost,
|
276
|
-
port: process.env.elasticPort
|
277
|
-
}
|
278
|
-
};
|
279
|
-
```
|
280
|
-
|
281
|
-
| **Atributo** | **Descrição** |
|
282
|
-
| ----------------------------- | -------------------------------------------------------- |
|
283
|
-
| `appName` | Nome da aplicação exibido nos logs e métricas. |
|
284
|
-
| `requestTimeout` | Tempo (ms) para timeout de chamadas a serviços upstream. |
|
285
|
-
| `requestPerSecond` | Limite de requisições por segundo do gateway. |
|
286
|
-
| `memoryCheckInterval` | Intervalo (ms) para verificar uso de memória. |
|
287
|
-
| `serverPort` | Porta na qual o servidor HTTP irá escutar. |
|
288
|
-
| `logger.Console.level` | Nível de log para console (`info`, `warn`, `error`). |
|
289
|
-
| `enableRedis` | Ativa cache e throttling com Redis. |
|
290
|
-
| `redisCache.reader.*` | Configurações de conexão de leitura no Redis. |
|
291
|
-
| `redisCache.writer.*` | Configurações de conexão de escrita no Redis. |
|
292
|
-
| `enableElasticSearch` | Ativa integração com OpenSearch/ElasticSearch. |
|
293
|
-
| `elasticSearch.indexName` | Nome do índice para armazenamento de logs. |
|
294
|
-
| `elasticSearch.client` | Driver utilizado para conexão com OpenSearch. |
|
295
|
-
| `elasticSearch.credentials.*` | Credenciais de acesso ao OpenSearch. |
|
296
|
-
| `elasticSearch.host` | Host/URL do serviço OpenSearch. |
|
297
|
-
| `elasticSearch.port` | Porta do serviço OpenSearch. |
|
298
|
-
|
299
|
-
---
|
300
|
-
|
301
|
-
## ▶️ Comandos Úteis
|
302
|
-
|
303
|
-
```bash
|
304
|
-
npm run build
|
305
|
-
npm run test
|
306
|
-
npm start
|
307
|
-
```
|
308
|
-
|
309
|
-
---
|
310
|
-
|
311
|
-
## 🔑 Validação de Licença
|
312
|
-
|
313
|
-
Para uso em produção é obrigatória uma licença válida. Em ambientes de desenvolvimento e testes, a licença pode ser omitida.
|
314
|
-
|
315
|
-
A variável `APP_KEY` deve estar presente no ambiente:
|
316
|
-
|
317
|
-
```bash
|
318
|
-
export APP_KEY=minha-chave-da-licenca
|
319
|
-
```
|
320
|
-
|
321
|
-
---
|
322
|
-
|
323
|
-
## 📜 Política de Licença
|
324
|
-
|
325
|
-
* Produção: exige licença.
|
326
|
-
* Dev/local: sem restrição.
|
327
|
-
* MIT.
|
328
|
-
|
329
|
-
---
|
330
|
-
|
331
|
-
## 📫 Suporte e Contato
|
332
|
-
|
333
|
-
* 🏢 **Empresa**: [P4F](https://www.protonss4fun.com.br/)
|
334
|
-
* 📧 **E-mail**: [contato@p4f.dev](mailto:contato@p4f.dev)
|
335
|
-
|
336
|
-
© 2025 P4F - Todos os direitos reservados.
|
package/dist/package.json
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "heimdall-api-platform",
|
3
|
-
"version": "1.0.34",
|
4
|
-
"description": "",
|
5
|
-
"main": "dist/lib/index.js",
|
6
|
-
"license": "MIT",
|
7
|
-
"files": [
|
8
|
-
"dist"
|
9
|
-
],
|
10
|
-
"scripts": {
|
11
|
-
"prestart": "npm install",
|
12
|
-
"test": "mocha --timeout 5000 'test/**/*.test.js'",
|
13
|
-
"test:watch": "nodemon --exec 'npm test'",
|
14
|
-
"clean": "rimraf dist",
|
15
|
-
"start": "node server.js",
|
16
|
-
"build": "npm run clean && node obfuscate-and-prepare.js",
|
17
|
-
"prepublishOnly": "npm run build"
|
18
|
-
},
|
19
|
-
"repository": {
|
20
|
-
"type": "git",
|
21
|
-
"url": "git+ssh://git@github.com:protonss4fun/heimdall-api-platform.git"
|
22
|
-
},
|
23
|
-
"keywords": [
|
24
|
-
"api",
|
25
|
-
"gateway",
|
26
|
-
"core",
|
27
|
-
"restful",
|
28
|
-
"json"
|
29
|
-
],
|
30
|
-
"author": "Márcio Rosa <marcio.rosa@p4f.io>",
|
31
|
-
"bugs": {
|
32
|
-
"url": "https://github.com/protonss4fun/heimdall-api-platform/issues"
|
33
|
-
},
|
34
|
-
"homepage": "https://github.com/protonss4fun/heimdall-api-platform",
|
35
|
-
"dependencies": {
|
36
|
-
"@opensearch-project/opensearch": "^2.4.0",
|
37
|
-
"async": "^3.2.5",
|
38
|
-
"axios": "^1.8.2",
|
39
|
-
"body-parser": "^1.20.2",
|
40
|
-
"compression": "^1.7.4",
|
41
|
-
"cookie-parser": "^1.4.6",
|
42
|
-
"cors": "^2.8.5",
|
43
|
-
"dotenv": "^17.2.0",
|
44
|
-
"express": "^4.18.2",
|
45
|
-
"express-basic-auth": "^1.2.1",
|
46
|
-
"express-throttle": "^2.0.0",
|
47
|
-
"form-data": "^4.0.2",
|
48
|
-
"helmet": "^7.0.0",
|
49
|
-
"http-errors": "^2.0.0",
|
50
|
-
"jsonwebtoken": "^9.0.1",
|
51
|
-
"morgan": "^1.10.0",
|
52
|
-
"multer": "^1.4.5-lts.1",
|
53
|
-
"node-cache": "^5.1.2",
|
54
|
-
"object-hash": "^1.1.8",
|
55
|
-
"pseudomap": "^1.0.2",
|
56
|
-
"redis": "^3.1.2",
|
57
|
-
"redis-rate-limiter": "^1.2.0",
|
58
|
-
"step": "^1.0.0",
|
59
|
-
"underscore": "^1.9.1",
|
60
|
-
"uuid": "^9.0.0",
|
61
|
-
"winston": "^3.2.1",
|
62
|
-
"winston-transport": "4.3.0",
|
63
|
-
"yallist": "^3.0.2",
|
64
|
-
"yaml": "^2.8.0"
|
65
|
-
},
|
66
|
-
"devDependencies": {
|
67
|
-
"@vercel/ncc": "^0.38.3",
|
68
|
-
"javascript-obfuscator": "^4.1.1",
|
69
|
-
"mocha": "^11.1.0",
|
70
|
-
"nodemon": "^3.1.9",
|
71
|
-
"rimraf": "^6.0.1"
|
72
|
-
}
|
73
|
-
}
|