equipped 5.0.0 → 5.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/CHANGELOG.md +2 -0
- package/lib/cache/base.js +1 -5
- package/lib/cache/base.js.map +1 -1
- package/lib/cache/index.js +3 -19
- package/lib/cache/index.js.map +1 -1
- package/lib/cache/pipes.js +8 -11
- package/lib/cache/pipes.js.map +1 -1
- package/lib/cache/types/redis.js +17 -20
- package/lib/cache/types/redis.js.map +1 -1
- package/lib/dbs/base/_instance.js +18 -37
- package/lib/dbs/base/_instance.js.map +1 -1
- package/lib/dbs/base/core.js +1 -2
- package/lib/dbs/base/types.js +1 -2
- package/lib/dbs/index.js +6 -22
- package/lib/dbs/index.js.map +1 -1
- package/lib/dbs/mongo/api.js +10 -13
- package/lib/dbs/mongo/api.js.map +1 -1
- package/lib/dbs/mongo/changes.js +17 -34
- package/lib/dbs/mongo/changes.js.map +1 -1
- package/lib/dbs/mongo/index.js +23 -39
- package/lib/dbs/mongo/index.js.map +1 -1
- package/lib/dbs/mongo/query.js +4 -8
- package/lib/dbs/mongo/query.js.map +1 -1
- package/lib/dbs/pipes.js +42 -48
- package/lib/dbs/pipes.js.map +1 -1
- package/lib/errors/equippedError.js +4 -5
- package/lib/errors/equippedError.js.map +1 -1
- package/lib/errors/index.js +9 -25
- package/lib/errors/index.js.map +1 -1
- package/lib/errors/requestError.js +4 -6
- package/lib/errors/requestError.js.map +1 -1
- package/lib/errors/types/authorizationExpired.js +4 -8
- package/lib/errors/types/authorizationExpired.js.map +1 -1
- package/lib/errors/types/badRequestError.js +4 -8
- package/lib/errors/types/badRequestError.js.map +1 -1
- package/lib/errors/types/notAuthenticatedError.js +4 -8
- package/lib/errors/types/notAuthenticatedError.js.map +1 -1
- package/lib/errors/types/notAuthorizedError.js +4 -8
- package/lib/errors/types/notAuthorizedError.js.map +1 -1
- package/lib/errors/types/notFoundError.js +4 -8
- package/lib/errors/types/notFoundError.js.map +1 -1
- package/lib/errors/types/refreshTokenMisusedError.js +4 -8
- package/lib/errors/types/refreshTokenMisusedError.js.map +1 -1
- package/lib/errors/types/validationError.js +4 -8
- package/lib/errors/types/validationError.js.map +1 -1
- package/lib/events/base.js +2 -6
- package/lib/events/base.js.map +1 -1
- package/lib/events/index.js +4 -20
- package/lib/events/index.js.map +1 -1
- package/lib/events/pipes.js +13 -16
- package/lib/events/pipes.js.map +1 -1
- package/lib/events/types/kafka.js +41 -59
- package/lib/events/types/kafka.js.map +1 -1
- package/lib/events/types/rabbitmq.js +21 -38
- package/lib/events/types/rabbitmq.js.map +1 -1
- package/lib/index.js +1 -17
- package/lib/index.js.map +1 -1
- package/lib/instance/hooks.js +1 -4
- package/lib/instance/hooks.js.map +1 -1
- package/lib/instance/index.js +40 -54
- package/lib/instance/index.js.map +1 -1
- package/lib/instance/settings.js +66 -74
- package/lib/instance/settings.js.map +1 -1
- package/lib/jobs/index.js +2 -18
- package/lib/jobs/index.js.map +1 -1
- package/lib/jobs/pipes.js +5 -8
- package/lib/jobs/pipes.js.map +1 -1
- package/lib/jobs/types/redis.js +43 -61
- package/lib/jobs/types/redis.js.map +1 -1
- package/lib/server/impls/base.js +136 -152
- package/lib/server/impls/base.js.map +1 -1
- package/lib/server/impls/express.js +35 -55
- package/lib/server/impls/express.js.map +1 -1
- package/lib/server/impls/fastify.js +29 -36
- package/lib/server/impls/fastify.js.map +1 -1
- package/lib/server/index.js +9 -25
- package/lib/server/index.js.map +1 -1
- package/lib/server/middlewares/index.js +1 -17
- package/lib/server/middlewares/index.js.map +1 -1
- package/lib/server/middlewares/parseAuthUser.js +6 -9
- package/lib/server/middlewares/parseAuthUser.js.map +1 -1
- package/lib/server/middlewares/requireAuthUser.js +13 -16
- package/lib/server/middlewares/requireAuthUser.js.map +1 -1
- package/lib/server/openapi.js +118 -130
- package/lib/server/openapi.js.map +1 -1
- package/lib/server/pipes.js +27 -30
- package/lib/server/pipes.js.map +1 -1
- package/lib/server/requests-auth/apiKeys.js +1 -5
- package/lib/server/requests-auth/apiKeys.js.map +1 -1
- package/lib/server/requests-auth/index.js +2 -18
- package/lib/server/requests-auth/index.js.map +1 -1
- package/lib/server/requests-auth/tokens.js +31 -51
- package/lib/server/requests-auth/tokens.js.map +1 -1
- package/lib/server/requests.js +25 -15
- package/lib/server/requests.js.map +1 -1
- package/lib/server/routes.js +24 -41
- package/lib/server/routes.js.map +1 -1
- package/lib/server/sockets.js +96 -111
- package/lib/server/sockets.js.map +1 -1
- package/lib/server/types.js +4 -9
- package/lib/server/types.js.map +1 -1
- package/lib/types/index.js +2 -18
- package/lib/types/index.js.map +1 -1
- package/lib/types/overrides.js +1 -2
- package/lib/utilities/authProviders.js +19 -28
- package/lib/utilities/authProviders.js.map +1 -1
- package/lib/utilities/hash.js +5 -43
- package/lib/utilities/hash.js.map +1 -1
- package/lib/utilities/index.js +6 -45
- package/lib/utilities/index.js.map +1 -1
- package/lib/utilities/json.js +3 -8
- package/lib/utilities/json.js.map +1 -1
- package/lib/utilities/media.js +3 -7
- package/lib/utilities/media.js.map +1 -1
- package/lib/utilities/random.js +5 -12
- package/lib/utilities/random.js.map +1 -1
- package/lib/utilities/retry.js +6 -11
- package/lib/utilities/retry.js.map +1 -1
- package/lib/validations/index.js +6 -47
- package/lib/validations/index.js.map +1 -1
- package/lib/validations/valleyed.js +18 -39
- package/lib/validations/valleyed.js.map +1 -1
- package/package.json +6 -5
package/lib/instance/settings.js
CHANGED
|
@@ -1,94 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const events_1 = require("../events");
|
|
13
|
-
const jobs_1 = require("../jobs");
|
|
14
|
-
const server_1 = require("../server");
|
|
15
|
-
const instanceSettingsPipe = () => valleyed_1.v.object({
|
|
16
|
-
app: valleyed_1.v.object({
|
|
17
|
-
id: valleyed_1.v.string(),
|
|
18
|
-
name: valleyed_1.v.string(),
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
import { v } from 'valleyed';
|
|
3
|
+
import { RedisCache, redisConfigPipe } from '../cache';
|
|
4
|
+
import { MongoDb, mongoDbConfigPipe } from '../dbs';
|
|
5
|
+
import { KafkaEventBus, RabbitMQEventBus, kafkaConfigPipe, rabbitmqConfigPipe } from '../events';
|
|
6
|
+
import { RedisJob, redisJobsConfigPipe } from '../jobs';
|
|
7
|
+
import { BaseApiKeysUtility, BaseTokensUtility, ExpressServer, FastifyServer } from '../server';
|
|
8
|
+
export const instanceSettingsPipe = () => v.object({
|
|
9
|
+
app: v.object({
|
|
10
|
+
id: v.string(),
|
|
11
|
+
name: v.string(),
|
|
19
12
|
}),
|
|
20
|
-
log:
|
|
21
|
-
level:
|
|
13
|
+
log: v.defaults(v.object({
|
|
14
|
+
level: v.defaults(v.in(['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent']), 'info'),
|
|
22
15
|
}), {}),
|
|
23
|
-
dbs:
|
|
24
|
-
types:
|
|
25
|
-
mongo:
|
|
16
|
+
dbs: v.optional(v.object({
|
|
17
|
+
types: v.record(v.string(), v.discriminate((e) => e?.type, {
|
|
18
|
+
mongo: v.merge(mongoDbConfigPipe, v.object({ type: v.is('mongo') })),
|
|
26
19
|
})),
|
|
27
|
-
changes:
|
|
28
|
-
debeziumUrl:
|
|
29
|
-
kafkaConfig:
|
|
20
|
+
changes: v.optional(v.object({
|
|
21
|
+
debeziumUrl: v.string(),
|
|
22
|
+
kafkaConfig: kafkaConfigPipe,
|
|
30
23
|
})),
|
|
31
24
|
})),
|
|
32
|
-
eventBus:
|
|
33
|
-
kafka:
|
|
34
|
-
rabbitmq:
|
|
25
|
+
eventBus: v.optional(v.discriminate((e) => e?.type, {
|
|
26
|
+
kafka: v.merge(kafkaConfigPipe, v.object({ type: v.is('kafka') })),
|
|
27
|
+
rabbitmq: v.merge(rabbitmqConfigPipe, v.object({ type: v.is('rabbitmq') })),
|
|
35
28
|
})),
|
|
36
|
-
cache:
|
|
37
|
-
redis:
|
|
29
|
+
cache: v.discriminate((e) => e?.type, {
|
|
30
|
+
redis: v.merge(redisConfigPipe, v.object({ type: v.is('redis') })),
|
|
38
31
|
}),
|
|
39
|
-
jobs:
|
|
40
|
-
server:
|
|
41
|
-
type:
|
|
42
|
-
port:
|
|
43
|
-
publicPath:
|
|
44
|
-
healthPath:
|
|
45
|
-
openapi:
|
|
46
|
-
docsVersion:
|
|
47
|
-
docsBaseUrl:
|
|
48
|
-
docsPath:
|
|
32
|
+
jobs: v.optional(v.merge(redisJobsConfigPipe, v.object({ type: v.is('redis') }))),
|
|
33
|
+
server: v.optional(v.object({
|
|
34
|
+
type: v.in(['fastify', 'express']),
|
|
35
|
+
port: v.number(),
|
|
36
|
+
publicPath: v.optional(v.string()),
|
|
37
|
+
healthPath: v.optional(v.string()),
|
|
38
|
+
openapi: v.defaults(v.object({
|
|
39
|
+
docsVersion: v.defaults(v.string(), '1.0.0'),
|
|
40
|
+
docsBaseUrl: v.defaults(v.array(v.string()), ['/']),
|
|
41
|
+
docsPath: v.defaults(v.string(), '/__docs'),
|
|
49
42
|
}), {}),
|
|
50
|
-
requests:
|
|
51
|
-
log:
|
|
52
|
-
paginationDefaultLimit:
|
|
53
|
-
maxFileUploadSizeInMb:
|
|
54
|
-
rateLimit:
|
|
55
|
-
enabled:
|
|
56
|
-
periodInMs:
|
|
57
|
-
limit:
|
|
43
|
+
requests: v.defaults(v.object({
|
|
44
|
+
log: v.defaults(v.boolean(), true),
|
|
45
|
+
paginationDefaultLimit: v.defaults(v.number(), 100),
|
|
46
|
+
maxFileUploadSizeInMb: v.defaults(v.number(), 500),
|
|
47
|
+
rateLimit: v.defaults(v.object({
|
|
48
|
+
enabled: v.defaults(v.boolean(), false),
|
|
49
|
+
periodInMs: v.defaults(v.number(), 60 * 60 * 1000),
|
|
50
|
+
limit: v.defaults(v.number(), 5000),
|
|
58
51
|
}), {}),
|
|
59
|
-
slowdown:
|
|
60
|
-
enabled:
|
|
61
|
-
periodInMs:
|
|
62
|
-
delayAfter:
|
|
63
|
-
delayInMs:
|
|
52
|
+
slowdown: v.defaults(v.object({
|
|
53
|
+
enabled: v.defaults(v.boolean(), false),
|
|
54
|
+
periodInMs: v.defaults(v.number(), 10 * 60 * 1000),
|
|
55
|
+
delayAfter: v.defaults(v.number(), 2000),
|
|
56
|
+
delayInMs: v.defaults(v.number(), 500),
|
|
64
57
|
}), {}),
|
|
65
58
|
}), {}),
|
|
66
|
-
requestsAuth:
|
|
67
|
-
tokens:
|
|
68
|
-
apiKey:
|
|
59
|
+
requestsAuth: v.defaults(v.object({
|
|
60
|
+
tokens: v.optional(v.instanceOf(BaseTokensUtility)),
|
|
61
|
+
apiKey: v.optional(v.instanceOf(BaseApiKeysUtility)),
|
|
69
62
|
}), {}),
|
|
70
63
|
})),
|
|
71
|
-
utils:
|
|
72
|
-
hashSaltRounds:
|
|
64
|
+
utils: v.defaults(v.object({
|
|
65
|
+
hashSaltRounds: v.defaults(v.number(), 10),
|
|
73
66
|
}), {}),
|
|
74
67
|
});
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const log = (0, pino_1.default)({
|
|
68
|
+
export function mapSettingsToInstance(settings) {
|
|
69
|
+
const log = pino({
|
|
78
70
|
level: settings.log.level,
|
|
79
71
|
serializers: {
|
|
80
|
-
err:
|
|
81
|
-
error:
|
|
82
|
-
req:
|
|
83
|
-
res:
|
|
72
|
+
err: pino.stdSerializers.err,
|
|
73
|
+
error: pino.stdSerializers.err,
|
|
74
|
+
req: pino.stdSerializers.req,
|
|
75
|
+
res: pino.stdSerializers.res,
|
|
84
76
|
},
|
|
85
77
|
});
|
|
86
|
-
const cache = new
|
|
87
|
-
const jobs = settings.jobs ? new
|
|
78
|
+
const cache = new RedisCache(settings.cache);
|
|
79
|
+
const jobs = settings.jobs ? new RedisJob(settings.jobs) : undefined;
|
|
88
80
|
const eventBus = settings.eventBus?.type === 'kafka'
|
|
89
|
-
? new
|
|
81
|
+
? new KafkaEventBus(deleteKeys(settings.eventBus, ['type']))
|
|
90
82
|
: settings.eventBus?.type === 'rabbitmq'
|
|
91
|
-
? new
|
|
83
|
+
? new RabbitMQEventBus(deleteKeys(settings.eventBus, ['type']))
|
|
92
84
|
: undefined;
|
|
93
85
|
const serverConfig = {
|
|
94
86
|
app: settings.app,
|
|
@@ -96,19 +88,19 @@ function mapSettingsToInstance(settings) {
|
|
|
96
88
|
eventBus,
|
|
97
89
|
};
|
|
98
90
|
const server = settings.server?.type === 'express'
|
|
99
|
-
? new
|
|
91
|
+
? new ExpressServer({ ...serverConfig, config: settings.server })
|
|
100
92
|
: settings.server?.type === 'fastify'
|
|
101
|
-
? new
|
|
93
|
+
? new FastifyServer({ ...serverConfig, config: settings.server })
|
|
102
94
|
: undefined;
|
|
103
95
|
const changesConfig = settings.dbs?.changes
|
|
104
96
|
? {
|
|
105
97
|
debeziumUrl: settings.dbs.changes.debeziumUrl,
|
|
106
|
-
eventBus: new
|
|
98
|
+
eventBus: new KafkaEventBus(settings.dbs.changes.kafkaConfig),
|
|
107
99
|
}
|
|
108
100
|
: undefined;
|
|
109
101
|
const dbs = Object.fromEntries(Object.entries(settings.dbs?.types ?? {}).map(([key, config]) => [
|
|
110
102
|
key,
|
|
111
|
-
config.type === 'mongo' ? new
|
|
103
|
+
config.type === 'mongo' ? new MongoDb(config, { changes: changesConfig }) : undefined,
|
|
112
104
|
]));
|
|
113
105
|
return {
|
|
114
106
|
app: settings.app,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/instance/settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/instance/settings.ts"],"names":[],"mappings":"AAAA,OAAO,IAAgB,MAAM,MAAM,CAAA;AACnC,OAAO,EAA8D,CAAC,EAAE,MAAM,UAAU,CAAA;AAExF,OAAO,EAAS,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AACnD,OAAO,EAAY,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC1G,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAU,MAAM,WAAW,CAAA;AAEvG,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CACxC,CAAC,CAAC,MAAM,CAAC;IACR,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KAChB,CAAC;IACF,GAAG,EAAE,CAAC,CAAC,QAAQ,CACd,CAAC,CAAC,MAAM,CAAC;QACR,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC,EAAE,MAAM,CAAC;KACxG,CAAC,EACF,EAAE,CACF;IACD,GAAG,EAAE,CAAC,CAAC,QAAQ,CACd,CAAC,CAAC,MAAM,CAAC;QACR,KAAK,EAAE,CAAC,CAAC,MAAM,CACd,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE;YAC9B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,OAAgB,CAAC,EAAE,CAAC,CAAC;SAC7E,CAAC,CACF;QACD,OAAO,EAAE,CAAC,CAAC,QAAQ,CAClB,CAAC,CAAC,MAAM,CAAC;YACR,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACvB,WAAW,EAAE,eAAe;SAC5B,CAAC,CACF;KACD,CAAC,CACF;IACD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CACnB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE;QACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,OAAgB,CAAC,EAAE,CAAC,CAAC;QAC3E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,UAAmB,CAAC,EAAE,CAAC,CAAC;KACpF,CAAC,CACF;IACD,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE;QAC1C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,OAAgB,CAAC,EAAE,CAAC,CAAC;KAC3E,CAAC;IACF,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,OAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAC,QAAQ,CACjB,CAAC,CAAC,MAAM,CAAC;QACR,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAU,CAAC;QAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAClB,CAAC,CAAC,MAAM,CAAC;YACR,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC;YAC5C,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACnD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;SAC3C,CAAC,EACF,EAAE,CACF;QACD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CACnB,CAAC,CAAC,MAAM,CAAC;YACR,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC;YAClC,sBAAsB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;YACnD,qBAAqB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;YAClD,SAAS,EAAE,CAAC,CAAC,QAAQ,CACpB,CAAC,CAAC,MAAM,CAAC;gBACR,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;gBACvC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAClD,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;aACnC,CAAC,EACF,EAAE,CACF;YACD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CACnB,CAAC,CAAC,MAAM,CAAC;gBACR,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;gBACvC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAClD,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;gBACxC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;aACtC,CAAC,EACF,EAAE,CACF;SACD,CAAC,EACF,EAAE,CACF;QACD,YAAY,EAAE,CAAC,CAAC,QAAQ,CACvB,CAAC,CAAC,MAAM,CAAC;YACR,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;SACpD,CAAC,EACF,EAAE,CACF;KACD,CAAC,CACF;IACD,KAAK,EAAE,CAAC,CAAC,QAAQ,CAChB,CAAC,CAAC,MAAM,CAAC;QACR,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;KAC1C,CAAC,EACF,EAAE,CACF;CACD,CAAC,CAAA;AA2BH,MAAM,UAAU,qBAAqB,CAAqB,QAAW;IACpE,MAAM,GAAG,GAAG,IAAI,CAAM;QACrB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK;QACzB,WAAW,EAAE;YACZ,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG;YAC5B,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG;YAC9B,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG;YAC5B,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG;SAC5B;KACD,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,MAAM,QAAQ,GACb,QAAQ,CAAC,QAAQ,EAAE,IAAI,KAAK,OAAO;QAClC,CAAC,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU;YACvC,CAAC,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,SAAS,CAAA;IAEd,MAAM,YAAY,GAAG;QACpB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,GAAG;QACH,QAAQ;KACR,CAAA;IACD,MAAM,MAAM,GACX,QAAQ,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS;QAClC,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjE,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS;YACpC,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjE,CAAC,CAAC,SAAS,CAAA;IAEd,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO;QAC1C,CAAC,CAAC;YACA,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW;YAC7C,QAAQ,EAAE,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;SAC7D;QACF,CAAC,CAAC,SAAS,CAAA;IAEZ,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAC7B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAChE,GAAG;QACH,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACrF,CAAC,CACF,CAAA;IAED,OAAO;QACN,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,GAAG;QACH,QAAQ,EAAE,QAAe;QACzB,KAAK,EAAE,KAAY;QACnB,IAAI,EAAE,IAAW;QACjB,MAAM,EAAE,MAAa;QACrB,GAAG,EAAE,GAAU;KACf,CAAA;AACF,CAAC;AAED,SAAS,UAAU,CAAsC,IAAO,EAAE,IAAS;IAC1E,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;IACxC,OAAO,IAAI,CAAA;AACZ,CAAC"}
|
package/lib/jobs/index.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./pipes"), exports);
|
|
18
|
-
__exportStar(require("./types/redis"), exports);
|
|
1
|
+
export * from './pipes';
|
|
2
|
+
export * from './types/redis';
|
|
19
3
|
//# sourceMappingURL=index.js.map
|
package/lib/jobs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA"}
|
package/lib/jobs/pipes.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const valleyed_1 = require("valleyed");
|
|
5
|
-
const cache_1 = require("../cache");
|
|
6
|
-
exports.redisJobsConfigPipe = valleyed_1.v
|
|
1
|
+
import { v } from 'valleyed';
|
|
2
|
+
import { redisConfigPipe } from '../cache';
|
|
3
|
+
export const redisJobsConfigPipe = v
|
|
7
4
|
.object({
|
|
8
|
-
redisConfig:
|
|
9
|
-
queueName:
|
|
5
|
+
redisConfig: redisConfigPipe,
|
|
6
|
+
queueName: v.string(),
|
|
10
7
|
})
|
|
11
8
|
.meta({ title: 'Redis Jobs Config', $refId: 'RedisJobsConfig' });
|
|
12
9
|
//# sourceMappingURL=pipes.js.map
|
package/lib/jobs/pipes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipes.js","sourceRoot":"","sources":["../../src/jobs/pipes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipes.js","sourceRoot":"","sources":["../../src/jobs/pipes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,CAAC,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KAClC,MAAM,CAAC;IACP,WAAW,EAAE,eAAe;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC;KACD,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA"}
|
package/lib/jobs/types/redis.js
CHANGED
|
@@ -1,61 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
-
};
|
|
8
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
-
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
|
-
var _RedisJob_instances, _a, _RedisJob_queue, _RedisJob_callbacks, _RedisJob_crons, _RedisJob_getNewId, _RedisJob_addCron, _RedisJob_cleanup;
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.RedisJob = void 0;
|
|
19
|
-
const bull_1 = __importDefault(require("bull"));
|
|
20
|
-
const redis_1 = require("../../cache/types/redis");
|
|
21
|
-
const instance_1 = require("../../instance");
|
|
22
|
-
const utilities_1 = require("../../utilities");
|
|
1
|
+
import Bull from 'bull';
|
|
2
|
+
import { RedisCache } from '../../cache/types/redis';
|
|
3
|
+
import { Instance } from '../../instance';
|
|
4
|
+
import { Random } from '../../utilities';
|
|
23
5
|
var JobNames;
|
|
24
6
|
(function (JobNames) {
|
|
25
7
|
JobNames["CronJob"] = "CronJob";
|
|
26
8
|
JobNames["RepeatableJob"] = "RepeatableJob";
|
|
27
9
|
JobNames["DelayedJob"] = "DelayedJob";
|
|
28
10
|
})(JobNames || (JobNames = {}));
|
|
29
|
-
class RedisJob {
|
|
11
|
+
export class RedisJob {
|
|
12
|
+
#queue;
|
|
13
|
+
#callbacks = {};
|
|
14
|
+
#crons = [];
|
|
30
15
|
constructor(config) {
|
|
31
|
-
|
|
32
|
-
_RedisJob_queue.set(this, void 0);
|
|
33
|
-
_RedisJob_callbacks.set(this, {});
|
|
34
|
-
_RedisJob_crons.set(this, []);
|
|
35
|
-
const redisCache = new redis_1.RedisCache(config.redisConfig, {
|
|
16
|
+
const redisCache = new RedisCache(config.redisConfig, {
|
|
36
17
|
maxRetriesPerRequest: null,
|
|
37
18
|
enableReadyCheck: false,
|
|
38
19
|
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
await
|
|
42
|
-
await Promise.all(
|
|
20
|
+
this.#queue = new Bull(config.queueName, { createClient: () => redisCache.client });
|
|
21
|
+
Instance.on('start', async () => {
|
|
22
|
+
await this.#cleanup();
|
|
23
|
+
await Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)));
|
|
43
24
|
Promise.all([
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
this.#queue.process(JobNames.DelayedJob, async (job) => await this.#callbacks.onDelayed?.(job.data)),
|
|
26
|
+
this.#queue.process(JobNames.CronJob, async (job) => await this.#callbacks.onCron?.(job.data.type)),
|
|
27
|
+
this.#queue.process(JobNames.RepeatableJob, async (job) => await this.#callbacks.onRepeatable?.(job.data)),
|
|
47
28
|
]);
|
|
48
29
|
}, 10);
|
|
49
30
|
}
|
|
50
31
|
set callbacks(callbacks) {
|
|
51
|
-
|
|
32
|
+
this.#callbacks = callbacks;
|
|
52
33
|
}
|
|
53
34
|
set crons(crons) {
|
|
54
|
-
|
|
35
|
+
this.#crons = crons;
|
|
36
|
+
}
|
|
37
|
+
static #getNewId() {
|
|
38
|
+
return [Date.now(), Random.string()].join(':');
|
|
55
39
|
}
|
|
56
40
|
async addDelayed(data, delayInMs) {
|
|
57
|
-
const job = await
|
|
58
|
-
jobId:
|
|
41
|
+
const job = await this.#queue.add(JobNames.DelayedJob, data, {
|
|
42
|
+
jobId: RedisJob.#getNewId(),
|
|
59
43
|
delay: delayInMs,
|
|
60
44
|
removeOnComplete: true,
|
|
61
45
|
backoff: 1000,
|
|
@@ -64,8 +48,8 @@ class RedisJob {
|
|
|
64
48
|
return job.id.toString();
|
|
65
49
|
}
|
|
66
50
|
async addRepeatable(data, cron, tz) {
|
|
67
|
-
const job = await
|
|
68
|
-
jobId:
|
|
51
|
+
const job = await this.#queue.add(JobNames.RepeatableJob, data, {
|
|
52
|
+
jobId: RedisJob.#getNewId(),
|
|
69
53
|
repeat: { cron, ...(tz ? { tz } : {}) },
|
|
70
54
|
removeOnComplete: true,
|
|
71
55
|
backoff: 1000,
|
|
@@ -74,33 +58,31 @@ class RedisJob {
|
|
|
74
58
|
return job.opts?.repeat?.key ?? '';
|
|
75
59
|
}
|
|
76
60
|
async removeDelayed(jobId) {
|
|
77
|
-
const job = await
|
|
61
|
+
const job = await this.#queue.getJob(jobId);
|
|
78
62
|
if (job)
|
|
79
63
|
await job.discard();
|
|
80
64
|
}
|
|
81
65
|
async removeRepeatable(jobKey) {
|
|
82
|
-
await
|
|
66
|
+
await this.#queue.removeRepeatableByKey(jobKey);
|
|
83
67
|
}
|
|
84
68
|
async retryAllFailedJobs() {
|
|
85
|
-
const failedJobs = await
|
|
69
|
+
const failedJobs = await this.#queue.getFailed();
|
|
86
70
|
await Promise.all(failedJobs.map((job) => job.retry()));
|
|
87
71
|
}
|
|
72
|
+
async #addCron(type, cron) {
|
|
73
|
+
const job = await this.#queue.add(JobNames.CronJob, { type }, {
|
|
74
|
+
jobId: RedisJob.#getNewId(),
|
|
75
|
+
repeat: { cron },
|
|
76
|
+
removeOnComplete: true,
|
|
77
|
+
backoff: 1000,
|
|
78
|
+
attempts: 3,
|
|
79
|
+
});
|
|
80
|
+
return job.id.toString();
|
|
81
|
+
}
|
|
82
|
+
async #cleanup() {
|
|
83
|
+
await this.retryAllFailedJobs();
|
|
84
|
+
const repeatableJobs = await this.#queue.getRepeatableJobs();
|
|
85
|
+
await Promise.all(repeatableJobs.filter((job) => job.name === JobNames.CronJob).map((job) => this.#queue.removeRepeatableByKey(job.key)));
|
|
86
|
+
}
|
|
88
87
|
}
|
|
89
|
-
exports.RedisJob = RedisJob;
|
|
90
|
-
_a = RedisJob, _RedisJob_queue = new WeakMap(), _RedisJob_callbacks = new WeakMap(), _RedisJob_crons = new WeakMap(), _RedisJob_instances = new WeakSet(), _RedisJob_getNewId = function _RedisJob_getNewId() {
|
|
91
|
-
return [Date.now(), utilities_1.Random.string()].join(':');
|
|
92
|
-
}, _RedisJob_addCron = async function _RedisJob_addCron(type, cron) {
|
|
93
|
-
const job = await __classPrivateFieldGet(this, _RedisJob_queue, "f").add(JobNames.CronJob, { type }, {
|
|
94
|
-
jobId: __classPrivateFieldGet(_a, _a, "m", _RedisJob_getNewId).call(_a),
|
|
95
|
-
repeat: { cron },
|
|
96
|
-
removeOnComplete: true,
|
|
97
|
-
backoff: 1000,
|
|
98
|
-
attempts: 3,
|
|
99
|
-
});
|
|
100
|
-
return job.id.toString();
|
|
101
|
-
}, _RedisJob_cleanup = async function _RedisJob_cleanup() {
|
|
102
|
-
await this.retryAllFailedJobs();
|
|
103
|
-
const repeatableJobs = await __classPrivateFieldGet(this, _RedisJob_queue, "f").getRepeatableJobs();
|
|
104
|
-
await Promise.all(repeatableJobs.filter((job) => job.name === JobNames.CronJob).map((job) => __classPrivateFieldGet(this, _RedisJob_queue, "f").removeRepeatableByKey(job.key)));
|
|
105
|
-
};
|
|
106
88
|
//# sourceMappingURL=redis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/jobs/types/redis.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/jobs/types/redis.ts"],"names":[],"mappings":"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"}
|