org-core-js 0.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.
- package/README.md +446 -0
- package/babel.config.json +13 -0
- package/cjs/core/driverCore.js +37 -0
- package/cjs/core/drivers/bull.js +56 -0
- package/cjs/core/drivers/fogu.js +14 -0
- package/cjs/core/drivers/mq.js +50 -0
- package/cjs/core/drivers/nats.js +161 -0
- package/cjs/core/drivers/osone.js +14 -0
- package/cjs/core/drivers/rabbitmq.js +68 -0
- package/cjs/core/drivers/redis.js +68 -0
- package/cjs/core/drivers/socket.js +36 -0
- package/cjs/core/entityCore.js +22 -0
- package/cjs/core/eventCore.js +26 -0
- package/cjs/core/index.js +477 -0
- package/cjs/core/libCore.js +22 -0
- package/cjs/core/repositoryCore.js +30 -0
- package/cjs/core/serverCore.js +142 -0
- package/cjs/core/serviceCore.js +26 -0
- package/cjs/core/utilCore.js +22 -0
- package/cjs/core/workerCore.js +27 -0
- package/cjs/fileCore.js +27 -0
- package/cjs/forawait.js +55 -0
- package/cjs/index.js +117 -0
- package/cjs/package.json +3 -0
- package/esm/core/driverCore.js +33 -0
- package/esm/core/drivers/bull.js +49 -0
- package/esm/core/drivers/fogu.js +12 -0
- package/esm/core/drivers/nats.js +160 -0
- package/esm/core/drivers/rabbitmq.js +64 -0
- package/esm/core/drivers/redis.js +71 -0
- package/esm/core/drivers/socket.js +28 -0
- package/esm/core/entityCore.js +12 -0
- package/esm/core/eventCore.js +17 -0
- package/esm/core/index.js +440 -0
- package/esm/core/libCore.js +13 -0
- package/esm/core/repositoryCore.js +25 -0
- package/esm/core/serverCore.js +155 -0
- package/esm/core/serviceCore.js +17 -0
- package/esm/core/utilCore.js +12 -0
- package/esm/core/workerCore.js +20 -0
- package/esm/fileCore.js +19 -0
- package/esm/forawait.js +48 -0
- package/esm/index.js +128 -0
- package/esm/package.json +3 -0
- package/lib/index.html +1021 -0
- package/package.json +73 -0
- package/src/app/events/test/app.js +13 -0
- package/src/app/events/test/ws.js +14 -0
- package/src/app/services/test/app.js +14 -0
- package/src/app/services/test/app1.js +11 -0
- package/src/core/entities/user.js +14 -0
- package/src/core/libs/hash.js +10 -0
- package/src/core/utils/auth.js +19 -0
- package/src/index.js +11 -0
- package/src/infra/db/index.js +7 -0
- package/src/infra/repositories/test/app.js +6 -0
- package/src/infra/web/http.js +15 -0
- package/src/infra/web/routers/auth.js +30 -0
- package/src/infra/web/routers/test.js +26 -0
- package/src/infra/web/ws/test.js +35 -0
- package/src/infra/workers/test/test.md +14 -0
- package/src/start.js +39 -0
- package/test/core.test.js +46 -0
package/README.md
ADDED
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
# 🧩 create-org-app
|
|
2
|
+
|
|
3
|
+
**`create-org-app`** é um *framework modular e orientado a eventos* para construção de aplicações escaláveis, distribuídas e multi-driver.
|
|
4
|
+
|
|
5
|
+
Suporta **HTTP**, **WebSocket**, **NATS**, **Redis**, **BullMQ**, **gRPC** e muito mais — oferecendo um ecossistema completo para desenvolvimento de **microserviços**, **SaaS**, **sistemas reativos** e **plataformas de automação**.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🚀 Visão Geral
|
|
10
|
+
|
|
11
|
+
A biblioteca fornece uma estrutura unificada para organizar e executar:
|
|
12
|
+
|
|
13
|
+
* **Serviços** (`app/services`)
|
|
14
|
+
* **Eventos** (`app/events`)
|
|
15
|
+
* **Entidades e DTOs** (`core/entities`)
|
|
16
|
+
* **Bibliotecas internas** (`core/libs`)
|
|
17
|
+
* **Utilitários globais** (`core/utils`)
|
|
18
|
+
* **Infraestrutura (DB, Web, Workers, etc.)** (`infra/*`)
|
|
19
|
+
* **Fluxo de inicialização e encerramento controlado** (`index.js` e `start.js`)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 📦 Instalação
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install create-org-app
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 📁 Estrutura Geral
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
src/
|
|
35
|
+
├── app/
|
|
36
|
+
│ ├── services/
|
|
37
|
+
│ │ └── test/app.js
|
|
38
|
+
│ └── events/
|
|
39
|
+
│ └── test/app.js
|
|
40
|
+
│
|
|
41
|
+
├── core/
|
|
42
|
+
│ ├── entities/
|
|
43
|
+
│ │ └── user.js
|
|
44
|
+
│ ├── libs/
|
|
45
|
+
│ │ └── password.js
|
|
46
|
+
│ └── utils/
|
|
47
|
+
│ └── auth.js
|
|
48
|
+
│
|
|
49
|
+
├── infra/
|
|
50
|
+
│ ├── db/
|
|
51
|
+
│ │ └── index.js
|
|
52
|
+
│ ├── repositories/
|
|
53
|
+
│ │ └── test/app.js
|
|
54
|
+
│ ├── web/
|
|
55
|
+
│ │ ├── http.js
|
|
56
|
+
│ │ ├── routers/
|
|
57
|
+
│ │ │ └── test.js
|
|
58
|
+
│ │ └── ws/
|
|
59
|
+
│ │ └── test.js
|
|
60
|
+
│ └── workers/
|
|
61
|
+
│ └── worker.js
|
|
62
|
+
│
|
|
63
|
+
├── start.js
|
|
64
|
+
└── index.js
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## ⚙️ Ciclo de Vida da Aplicação
|
|
70
|
+
|
|
71
|
+
### `index.js`
|
|
72
|
+
|
|
73
|
+
```js
|
|
74
|
+
export default {
|
|
75
|
+
async bootstrap({ core }) {
|
|
76
|
+
core.service("test.app").execute({});
|
|
77
|
+
/*
|
|
78
|
+
core.driver("nats").command("test.app1", { name: "ssssss" }, {
|
|
79
|
+
apiKey: "sssss"
|
|
80
|
+
});
|
|
81
|
+
*/
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
async distroy(core) {
|
|
85
|
+
console.log("close", e);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
| Método | Momento | Descrição |
|
|
91
|
+
| --------------------- | -------- | -------------------------------------------------------------------------------------- |
|
|
92
|
+
| `bootstrap({ core })` | Startup | Executado na inicialização. Ideal para pré-carregar serviços, listeners e integrações. |
|
|
93
|
+
| `distroy(core)` | Shutdown | Executado no encerramento da aplicação, para limpar conexões e recursos. |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 🚀 start.js
|
|
98
|
+
|
|
99
|
+
```js
|
|
100
|
+
import { app } from "../esm/index.js";
|
|
101
|
+
// import { app } from "create-org-app";
|
|
102
|
+
|
|
103
|
+
await app.run({
|
|
104
|
+
drivers: [
|
|
105
|
+
/* { type: "nats", name: "nats", config: { servers: process.env.NATS_URL } }, */
|
|
106
|
+
],
|
|
107
|
+
servers: [
|
|
108
|
+
{ type: "http", rootPath: "" },
|
|
109
|
+
/* { type: "nats", driver: "nats", services: ["test.*"] } */
|
|
110
|
+
]
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 🧩 Estrutura Avançada — Exemplo Completo
|
|
117
|
+
|
|
118
|
+
A seguir, um exemplo de integração entre todos os módulos principais, com suporte a **eventos, serviços, entidades, DB, Web, WS e Workers**.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### 🧠 Eventos (`app/events/test/app.js`)
|
|
123
|
+
|
|
124
|
+
```js
|
|
125
|
+
// Evento interno (Node)
|
|
126
|
+
export default () => ({
|
|
127
|
+
event: {
|
|
128
|
+
method: "node"
|
|
129
|
+
},
|
|
130
|
+
execute: (data) => {
|
|
131
|
+
console.log(data, "event");
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```js
|
|
137
|
+
// Evento WebSocket
|
|
138
|
+
export default () => ({
|
|
139
|
+
event: {
|
|
140
|
+
method: "ws",
|
|
141
|
+
route: "/test",
|
|
142
|
+
topic: "test.app"
|
|
143
|
+
},
|
|
144
|
+
execute: (data) => {
|
|
145
|
+
console.log(data, "event");
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### ⚙️ Serviço (`app/services/test/app.js`)
|
|
153
|
+
|
|
154
|
+
```js
|
|
155
|
+
export default ({ entity, repository }) => ({
|
|
156
|
+
driver: {
|
|
157
|
+
node: true
|
|
158
|
+
},
|
|
159
|
+
async execute(data) {
|
|
160
|
+
console.log(data);
|
|
161
|
+
const app = await entity("user").entity(data);
|
|
162
|
+
const res = await repository("test.app").execute(app.id || "ddddddddddd");
|
|
163
|
+
return { data: res };
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### 🧱 Entidades (`core/entities/user.js`)
|
|
171
|
+
|
|
172
|
+
```js
|
|
173
|
+
import { z } from "zod";
|
|
174
|
+
|
|
175
|
+
export default () => ({
|
|
176
|
+
entity(data) {
|
|
177
|
+
const schema = z.object({
|
|
178
|
+
id: z.string().optional(),
|
|
179
|
+
name: z.string().min(2)
|
|
180
|
+
});
|
|
181
|
+
return schema.parse(data);
|
|
182
|
+
},
|
|
183
|
+
dto() {
|
|
184
|
+
return { name: "sss" };
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
### 🔐 Libs (`core/libs/password.js`)
|
|
192
|
+
|
|
193
|
+
```js
|
|
194
|
+
export default () => ({
|
|
195
|
+
password(text) {
|
|
196
|
+
return text;
|
|
197
|
+
},
|
|
198
|
+
compare(password, hash) {
|
|
199
|
+
return password === hash;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### 🧩 Utils (`core/utils/auth.js`)
|
|
207
|
+
|
|
208
|
+
```js
|
|
209
|
+
export default () => ({
|
|
210
|
+
apiKey(headers) {
|
|
211
|
+
console.log(headers);
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### 🧭 DB (`infra/db/index.js`)
|
|
220
|
+
|
|
221
|
+
```js
|
|
222
|
+
export default () => ({
|
|
223
|
+
app: {
|
|
224
|
+
findUnique(id) {
|
|
225
|
+
return id;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
### 💾 Repositório (`infra/repositories/test/app.js`)
|
|
234
|
+
|
|
235
|
+
```js
|
|
236
|
+
export default ({ db }) => ({
|
|
237
|
+
async execute(id) {
|
|
238
|
+
return await db.app.findUnique(id);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### 🌐 HTTP — Routers (`infra/web/routers/test.js`)
|
|
246
|
+
|
|
247
|
+
```js
|
|
248
|
+
export default ({ util }) => ([
|
|
249
|
+
{
|
|
250
|
+
url: "/api/test",
|
|
251
|
+
method: "get",
|
|
252
|
+
middlewares: [util("auth").apiKey([])],
|
|
253
|
+
async handler(request, reply) {
|
|
254
|
+
const { user } = request;
|
|
255
|
+
try {
|
|
256
|
+
reply.send({ data: user });
|
|
257
|
+
} catch (error) {
|
|
258
|
+
reply.status(500).send({ error: error.message });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
]);
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
### 🔌 WebSocket (`infra/web/ws/test.js`)
|
|
268
|
+
|
|
269
|
+
```js
|
|
270
|
+
import forawait from "../../../../esm/forawait.js";
|
|
271
|
+
|
|
272
|
+
export default ({ events }) => ({
|
|
273
|
+
route: "/test",
|
|
274
|
+
|
|
275
|
+
async auth(socket, next) {
|
|
276
|
+
try {
|
|
277
|
+
next();
|
|
278
|
+
} catch (error) {
|
|
279
|
+
next(error);
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
async connection(socket) {
|
|
284
|
+
console.info("Socket connected!", socket.id);
|
|
285
|
+
socket.join("test");
|
|
286
|
+
|
|
287
|
+
forawait.generate(events, (io) => {
|
|
288
|
+
socket.on(io.event.topic, (input, cb) => {
|
|
289
|
+
io.execute({ input, cb }, { socket, io: this });
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
socket.on("disconnect", async () => {
|
|
294
|
+
console.log("disconnect:" + socket.id);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### 🧰 Servidor HTTP Base (`infra/web/http.js`)
|
|
303
|
+
|
|
304
|
+
```js
|
|
305
|
+
export default ({ routers = [], ws = [] }) => ({
|
|
306
|
+
io: null,
|
|
307
|
+
|
|
308
|
+
async start() {
|
|
309
|
+
console.log(routers, ws);
|
|
310
|
+
},
|
|
311
|
+
|
|
312
|
+
async stop() {}
|
|
313
|
+
});
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
### ⚙️ Worker (`infra/workers/worker.js`)
|
|
319
|
+
|
|
320
|
+
```js
|
|
321
|
+
export default ({ service }) => ({
|
|
322
|
+
job: {
|
|
323
|
+
name: "test.app",
|
|
324
|
+
method: "node"
|
|
325
|
+
},
|
|
326
|
+
async execute({ data }) {
|
|
327
|
+
await service("test.app").execute(data);
|
|
328
|
+
return {};
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 🧪 Testes Automatizados (`vitest`)
|
|
336
|
+
|
|
337
|
+
```js
|
|
338
|
+
import { expect, describe, beforeAll, afterEach, test } from "vitest";
|
|
339
|
+
import { testApp } from "../esm/index.js";
|
|
340
|
+
|
|
341
|
+
let core = {};
|
|
342
|
+
|
|
343
|
+
beforeAll(async () => {
|
|
344
|
+
const { core: Core } = await testApp.run({
|
|
345
|
+
db: {
|
|
346
|
+
app: {
|
|
347
|
+
async findUnique(id) {
|
|
348
|
+
return { id, name: "dddd", desc: "ddddddd" };
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
core = Core;
|
|
355
|
+
|
|
356
|
+
Core.event("node").sub({ topic: "service::test.app" }, ({ data }) => {
|
|
357
|
+
console.log(data);
|
|
358
|
+
Core.event("node").pub({ topic: "test.app" }, { id: data.id });
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
describe("core", () => {
|
|
363
|
+
test("executa serviço principal", async () => {
|
|
364
|
+
const res = await core.service("test.app").execute({ name: "ddd" }, "node");
|
|
365
|
+
|
|
366
|
+
expect(res.data).toBeDefined();
|
|
367
|
+
expect(res.error).toBeUndefined();
|
|
368
|
+
expect(res.data.id).toBeDefined();
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 🧩 Configuração Avançada — Multi-Drivers e Servidores
|
|
376
|
+
|
|
377
|
+
```js
|
|
378
|
+
await app.run({
|
|
379
|
+
drivers: [
|
|
380
|
+
{
|
|
381
|
+
type: "nats",
|
|
382
|
+
name: "nats",
|
|
383
|
+
config: { servers: "nats://localhost:4222" }
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
type: "redis",
|
|
387
|
+
name: "redis",
|
|
388
|
+
config: { url: "redis://localhost:6379" }
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
type: "bull",
|
|
392
|
+
name: "bull",
|
|
393
|
+
config: { url: "redis://localhost:6379" }
|
|
394
|
+
}
|
|
395
|
+
],
|
|
396
|
+
servers: [
|
|
397
|
+
{
|
|
398
|
+
type: "http",
|
|
399
|
+
rootPath: "/api"
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
type: "ws",
|
|
403
|
+
route: "/ws",
|
|
404
|
+
driver: "nats"
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
type: "nats",
|
|
408
|
+
driver: "nats",
|
|
409
|
+
services: [
|
|
410
|
+
"test.app",
|
|
411
|
+
{ name: "test.app1", auth: "util:auth.apiKey" }
|
|
412
|
+
]
|
|
413
|
+
}
|
|
414
|
+
]
|
|
415
|
+
});
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## 🧠 Fluxo de Inicialização
|
|
421
|
+
|
|
422
|
+
```
|
|
423
|
+
start.js
|
|
424
|
+
↓
|
|
425
|
+
app.run(config)
|
|
426
|
+
↓
|
|
427
|
+
index.js → bootstrap({ core })
|
|
428
|
+
↓
|
|
429
|
+
core.service("test.app").execute({})
|
|
430
|
+
↓
|
|
431
|
+
Serviço → Entidade → Repositório → DB
|
|
432
|
+
↓
|
|
433
|
+
Eventos → Workers → Web → WS
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## ✅ Conclusão
|
|
439
|
+
|
|
440
|
+
A integração de `create-org-app` com `index.js` e `start.js` fornece:
|
|
441
|
+
|
|
442
|
+
✔️ **Arquitetura limpa e modular**
|
|
443
|
+
✔️ **Ciclo de vida controlado (bootstrap/destroy)**
|
|
444
|
+
✔️ **Suporte nativo a múltiplos drivers e servidores**
|
|
445
|
+
✔️ **Eventos reativos, workers e WebSockets**
|
|
446
|
+
✔️ **Perfeita para microserviços e SaaS distribuídos**
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = ({
|
|
8
|
+
core
|
|
9
|
+
}) => {
|
|
10
|
+
return {
|
|
11
|
+
async "nats"(driver) {
|
|
12
|
+
const file = core.fileCore.bin + '/core/drivers/nats.js';
|
|
13
|
+
await core.addMethodCore(driver, file);
|
|
14
|
+
},
|
|
15
|
+
async "redis"(driver) {
|
|
16
|
+
const file = core.fileCore.bin + '/core/drivers/redis.js';
|
|
17
|
+
await core.addMethodCore(driver, file);
|
|
18
|
+
},
|
|
19
|
+
async "bull"(driver) {
|
|
20
|
+
const file = core.fileCore.bin + '/core/drivers/bull.js';
|
|
21
|
+
await core.addMethodCore(driver, file);
|
|
22
|
+
},
|
|
23
|
+
async "socket"(driver) {
|
|
24
|
+
const file = core.fileCore.bin + '/core/drivers/socket.js';
|
|
25
|
+
await core.addMethodCore(driver, file);
|
|
26
|
+
},
|
|
27
|
+
async "rabbitmq"(driver) {
|
|
28
|
+
const file = core.fileCore.bin + '/core/drivers/rabbitmq.js';
|
|
29
|
+
await core.addMethodCore(driver, file);
|
|
30
|
+
},
|
|
31
|
+
async "fogu"(driver) {
|
|
32
|
+
const file = core.fileCore.bin + '/core/drivers/fogu.js';
|
|
33
|
+
await core.addMethodCore(driver, file);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.default = _default;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _bullmq = require("bullmq");
|
|
8
|
+
let url;
|
|
9
|
+
const jobs = {};
|
|
10
|
+
var _default = async ({
|
|
11
|
+
connection = {
|
|
12
|
+
host: process.env.REDIS_HOST,
|
|
13
|
+
port: process.env.REDIS_PORT,
|
|
14
|
+
password: process.env.REDIS_PASSWORD
|
|
15
|
+
}
|
|
16
|
+
}) => {
|
|
17
|
+
return {
|
|
18
|
+
async close() {},
|
|
19
|
+
async connect({
|
|
20
|
+
url: url3
|
|
21
|
+
}) {
|
|
22
|
+
url = url3;
|
|
23
|
+
},
|
|
24
|
+
job(name_job) {
|
|
25
|
+
return {
|
|
26
|
+
async cmd(name, data, config) {
|
|
27
|
+
await jobs[name_job].add(name, data);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
addJob: ({
|
|
32
|
+
name
|
|
33
|
+
}) => {
|
|
34
|
+
jobs[name] = new _bullmq.Queue(name, {
|
|
35
|
+
connection
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
worker: ({
|
|
39
|
+
name,
|
|
40
|
+
fn,
|
|
41
|
+
completed = job => {
|
|
42
|
+
console.log(`${job.id} has completed!`);
|
|
43
|
+
},
|
|
44
|
+
failed = (job, err) => {
|
|
45
|
+
console.log(`${job.id} has failed with ${err.message}`);
|
|
46
|
+
}
|
|
47
|
+
}) => {
|
|
48
|
+
const myWorker = new _bullmq.Worker(name, fn, {
|
|
49
|
+
connection
|
|
50
|
+
});
|
|
51
|
+
myWorker.on('completed', completed);
|
|
52
|
+
myWorker.on('failed', failed);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
exports.default = _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _fmpJs = require("fmp-js");
|
|
8
|
+
var _default = async config => {
|
|
9
|
+
// Or create a new instance explicitly:
|
|
10
|
+
const client = new _fmpJs.Fogu();
|
|
11
|
+
await client.connect(config.url);
|
|
12
|
+
return client;
|
|
13
|
+
};
|
|
14
|
+
exports.default = _default;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _mqClient = require("mq-client.js");
|
|
8
|
+
var _default = async config => {
|
|
9
|
+
const MQ = (0, _mqClient.createMQ)();
|
|
10
|
+
await MQ.connect(config.url);
|
|
11
|
+
return {
|
|
12
|
+
async connect() {
|
|
13
|
+
await MQ.connect(config.url);
|
|
14
|
+
},
|
|
15
|
+
service(name, fn) {
|
|
16
|
+
MQ.service(name, async (data, reply) => {
|
|
17
|
+
try {
|
|
18
|
+
const res = await fn(data);
|
|
19
|
+
reply(null, res);
|
|
20
|
+
} catch (err) {
|
|
21
|
+
reply(err.message || "internal error", "");
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
async request(name, data, timeout = 5 * 1000) {
|
|
26
|
+
const res = await MQ.request(name, data, timeout);
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(res);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
subscribe({
|
|
34
|
+
topic: name
|
|
35
|
+
}, fn) {
|
|
36
|
+
MQ.subscribe(name, async (topic, data) => {
|
|
37
|
+
await fn({
|
|
38
|
+
topic,
|
|
39
|
+
data
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
publish({
|
|
44
|
+
topic: name
|
|
45
|
+
}, data) {
|
|
46
|
+
MQ.publish(name, data);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
exports.default = _default;
|