@authup/server-kit 1.0.0-beta.45 → 1.0.0-beta.47
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/cache/adapters/index.d.ts.map +1 -0
- package/dist/cache/adapters/memory.d.ts.map +1 -0
- package/dist/cache/adapters/redis.d.ts.map +1 -0
- package/dist/cache/helper.d.ts.map +1 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/crypto/json-web-token/index.d.ts +1 -1
- package/dist/crypto/json-web-token/index.d.ts.map +1 -1
- package/dist/crypto/json-web-token/sign/types.d.ts +1 -1
- package/dist/crypto/json-web-token/sign/types.d.ts.map +1 -1
- package/dist/crypto/json-web-token/{type.d.ts → types.d.ts} +1 -1
- package/dist/crypto/json-web-token/types.d.ts.map +1 -0
- package/dist/crypto/json-web-token/verify/types.d.ts +1 -1
- package/dist/crypto/json-web-token/verify/types.d.ts.map +1 -1
- package/dist/domain-event/handlers/index.d.ts +3 -0
- package/dist/domain-event/handlers/index.d.ts.map +1 -0
- package/dist/domain-event/handlers/redis/index.d.ts.map +1 -0
- package/dist/domain-event/handlers/redis/module.d.ts +9 -0
- package/dist/domain-event/handlers/redis/module.d.ts.map +1 -0
- package/dist/domain-event/handlers/socket/index.d.ts.map +1 -0
- package/dist/domain-event/handlers/socket/module.d.ts +9 -0
- package/dist/domain-event/handlers/socket/module.d.ts.map +1 -0
- package/dist/domain-event/index.d.ts +2 -3
- package/dist/domain-event/index.d.ts.map +1 -1
- package/dist/domain-event/module.d.ts +11 -4
- package/dist/domain-event/module.d.ts.map +1 -1
- package/dist/domain-event/{type.d.ts → types.d.ts} +6 -1
- package/dist/domain-event/types.d.ts.map +1 -0
- package/dist/domain-event/utils.d.ts +1 -1
- package/dist/domain-event/utils.d.ts.map +1 -1
- package/dist/index.d.mts +109 -100
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +199 -210
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.d.ts +3 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/module.d.ts.map +1 -0
- package/dist/logger/types.d.ts +17 -0
- package/dist/logger/types.d.ts.map +1 -0
- package/dist/redis/check.d.ts.map +1 -0
- package/dist/redis/factory.d.ts.map +1 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/module.d.ts.map +1 -0
- package/package.json +13 -15
- package/dist/crypto/json-web-token/type.d.ts.map +0 -1
- package/dist/domain-event/redis/index.d.ts.map +0 -1
- package/dist/domain-event/redis/module.d.ts +0 -9
- package/dist/domain-event/redis/module.d.ts.map +0 -1
- package/dist/domain-event/socket/index.d.ts.map +0 -1
- package/dist/domain-event/socket/module.d.ts +0 -9
- package/dist/domain-event/socket/module.d.ts.map +0 -1
- package/dist/domain-event/type.d.ts.map +0 -1
- package/dist/services/cache/adapters/index.d.ts.map +0 -1
- package/dist/services/cache/adapters/memory.d.ts.map +0 -1
- package/dist/services/cache/adapters/redis.d.ts.map +0 -1
- package/dist/services/cache/helper.d.ts.map +0 -1
- package/dist/services/cache/index.d.ts.map +0 -1
- package/dist/services/cache/types.d.ts.map +0 -1
- package/dist/services/index.d.ts +0 -5
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/logger/index.d.ts +0 -4
- package/dist/services/logger/index.d.ts.map +0 -1
- package/dist/services/logger/module.d.ts.map +0 -1
- package/dist/services/logger/singleton.d.ts +0 -7
- package/dist/services/logger/singleton.d.ts.map +0 -1
- package/dist/services/logger/types.d.ts +0 -7
- package/dist/services/logger/types.d.ts.map +0 -1
- package/dist/services/redis/check.d.ts.map +0 -1
- package/dist/services/redis/factory.d.ts.map +0 -1
- package/dist/services/redis/index.d.ts.map +0 -1
- package/dist/services/redis/module.d.ts.map +0 -1
- package/dist/services/vault/index.d.ts +0 -3
- package/dist/services/vault/index.d.ts.map +0 -1
- package/dist/services/vault/module.d.ts +0 -3
- package/dist/services/vault/module.d.ts.map +0 -1
- package/dist/services/vault/singleton.d.ts +0 -6
- package/dist/services/vault/singleton.d.ts.map +0 -1
- /package/dist/{services/cache → cache}/adapters/index.d.ts +0 -0
- /package/dist/{services/cache → cache}/adapters/memory.d.ts +0 -0
- /package/dist/{services/cache → cache}/adapters/redis.d.ts +0 -0
- /package/dist/{services/cache → cache}/helper.d.ts +0 -0
- /package/dist/{services/cache → cache}/index.d.ts +0 -0
- /package/dist/{services/cache → cache}/types.d.ts +0 -0
- /package/dist/domain-event/{redis → handlers/redis}/index.d.ts +0 -0
- /package/dist/domain-event/{socket → handlers/socket}/index.d.ts +0 -0
- /package/dist/{services/logger → logger}/module.d.ts +0 -0
- /package/dist/{services/redis → redis}/check.d.ts +0 -0
- /package/dist/{services/redis → redis}/factory.d.ts +0 -0
- /package/dist/{services/redis → redis}/index.d.ts +0 -0
- /package/dist/{services/redis → redis}/module.d.ts +0 -0
package/dist/index.mjs
CHANGED
|
@@ -1,19 +1,133 @@
|
|
|
1
|
+
import { TTLCache } from "@isaacs/ttlcache";
|
|
2
|
+
import { Client as RedisClient, JsonAdapter, JsonAdapter as RedisJsonAdapter, Watcher as RedisWatcher, buildKeyPath as buildRedisKeyPath, createClient, escapeKey as escapeRedisKey, parseKeyPath as parseRedisKeyPath } from "redis-extension";
|
|
3
|
+
import { isObject } from "smob";
|
|
1
4
|
import { REALM_MASTER_NAME } from "@authup/core-kit";
|
|
2
|
-
import { arrayBufferToBase64, base64ToArrayBuffer, isObject } from "@authup/kit";
|
|
5
|
+
import { arrayBufferToBase64, base64ToArrayBuffer, isObject as isObject$1 } from "@authup/kit";
|
|
3
6
|
import { compare as compare$1, hash as hash$1 } from "@node-rs/bcrypt";
|
|
4
7
|
import { JWKType, JWTAlgorithm, JWTError } from "@authup/specs";
|
|
5
8
|
import { subtle } from "uncrypto";
|
|
6
9
|
import { Algorithm, sign, verify } from "@node-rs/jsonwebtoken";
|
|
7
|
-
import { isObject as isObject$1 } from "smob";
|
|
8
|
-
import { TTLCache } from "@isaacs/ttlcache";
|
|
9
|
-
import { Client as RedisClient, JsonAdapter, JsonAdapter as RedisJsonAdapter, Watcher as RedisWatcher, buildKeyPath as buildRedisKeyPath, createClient, escapeKey as escapeRedisKey, parseKeyPath as parseRedisKeyPath } from "redis-extension";
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import process from "node:process";
|
|
12
|
-
import { Logger, createLogger as createLogger$1, format, transports } from "winston";
|
|
13
|
-
import { singa } from "singa";
|
|
14
|
-
import { VaultClient, createClient as createVaultClient } from "@hapic/vault";
|
|
15
10
|
import { buildEventFullName } from "@authup/core-realtime-kit";
|
|
16
11
|
import { Emitter } from "@socket.io/redis-emitter";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import process from "node:process";
|
|
14
|
+
import { createLogger as createLogger$1, format, transports } from "winston";
|
|
15
|
+
//#region src/cache/adapters/memory.ts
|
|
16
|
+
var MemoryCache = class {
|
|
17
|
+
instance;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.instance = new TTLCache({
|
|
20
|
+
checkAgeOnGet: true,
|
|
21
|
+
ttl: Infinity,
|
|
22
|
+
...options || {}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async pop(key) {
|
|
26
|
+
if (this.instance.has(key)) {
|
|
27
|
+
const output = this.instance.get(key);
|
|
28
|
+
this.instance.delete(key);
|
|
29
|
+
return output;
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
async has(key) {
|
|
34
|
+
return this.instance.has(key);
|
|
35
|
+
}
|
|
36
|
+
async get(key) {
|
|
37
|
+
const output = await this.instance.get(key);
|
|
38
|
+
if (output) return output;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
async set(key, value, options) {
|
|
42
|
+
this.instance.set(key, value, { ttl: options.ttl });
|
|
43
|
+
}
|
|
44
|
+
async drop(key) {
|
|
45
|
+
this.instance.delete(key);
|
|
46
|
+
}
|
|
47
|
+
async dropMany(keys) {
|
|
48
|
+
for (const key of keys) this.instance.delete(key);
|
|
49
|
+
}
|
|
50
|
+
async clear(options = {}) {
|
|
51
|
+
if (options.prefix) {
|
|
52
|
+
const keys = this.instance.keys();
|
|
53
|
+
let iterator = keys.next();
|
|
54
|
+
while (!iterator.done) {
|
|
55
|
+
if (typeof iterator.value !== "string") continue;
|
|
56
|
+
if (iterator.value.startsWith(options.prefix)) this.instance.delete(iterator.value);
|
|
57
|
+
iterator = keys.next();
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.instance.clear();
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
65
|
+
//#region src/redis/check.ts
|
|
66
|
+
function isRedisClient(data) {
|
|
67
|
+
return isObject(data) && typeof data.connect === "function" && typeof data.disconnect === "function";
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/redis/factory.ts
|
|
71
|
+
function createRedisClient(input) {
|
|
72
|
+
if (typeof input === "boolean") return createClient({ connectionString: "redis://127.0.0.1" });
|
|
73
|
+
if (typeof input === "string") return createClient({ connectionString: input });
|
|
74
|
+
if (!isRedisClient(input)) return createClient({ options: input });
|
|
75
|
+
return input;
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
//#region src/cache/adapters/redis.ts
|
|
79
|
+
var RedisCache = class {
|
|
80
|
+
client;
|
|
81
|
+
jsonAdapter;
|
|
82
|
+
constructor(input) {
|
|
83
|
+
this.client = createRedisClient(input);
|
|
84
|
+
this.jsonAdapter = new JsonAdapter(this.client);
|
|
85
|
+
}
|
|
86
|
+
async get(key) {
|
|
87
|
+
const output = await this.jsonAdapter.get(key);
|
|
88
|
+
if (output) return output;
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
async pop(key) {
|
|
92
|
+
const raw = await this.client.getdel(key);
|
|
93
|
+
if (!raw) return null;
|
|
94
|
+
try {
|
|
95
|
+
return JSON.parse(raw);
|
|
96
|
+
} catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async has(key) {
|
|
101
|
+
return !!await this.get(key);
|
|
102
|
+
}
|
|
103
|
+
async set(key, value, options) {
|
|
104
|
+
await this.jsonAdapter.set(key, value, { milliseconds: options.ttl });
|
|
105
|
+
}
|
|
106
|
+
async drop(key) {
|
|
107
|
+
await this.jsonAdapter.drop(key);
|
|
108
|
+
}
|
|
109
|
+
async dropMany(keys) {
|
|
110
|
+
const pipeline = this.client.pipeline();
|
|
111
|
+
for (const key of keys) pipeline.del(key);
|
|
112
|
+
await pipeline.exec();
|
|
113
|
+
}
|
|
114
|
+
async clear(options = {}) {
|
|
115
|
+
if (options.prefix) {
|
|
116
|
+
const pipeline = this.client.pipeline();
|
|
117
|
+
const keys = await this.client.keys(`${options.prefix}*`);
|
|
118
|
+
for (const key of keys) pipeline.del(key);
|
|
119
|
+
await pipeline.exec();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
await this.client.flushdb();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
//#endregion
|
|
126
|
+
//#region src/cache/helper.ts
|
|
127
|
+
function buildCacheKey(options) {
|
|
128
|
+
return buildRedisKeyPath(options);
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
17
131
|
//#region src/core/service.ts
|
|
18
132
|
var AbstractEntityService = class {
|
|
19
133
|
isActorMasterRealmMember(actor) {
|
|
@@ -26,7 +140,7 @@ var AbstractEntityService = class {
|
|
|
26
140
|
if (!actor.identity) return;
|
|
27
141
|
const { data } = actor.identity;
|
|
28
142
|
if (data.realm_id) return data.realm_id;
|
|
29
|
-
if (isObject(data.realm) && data.realm.id) return data.realm.id;
|
|
143
|
+
if (isObject$1(data.realm) && data.realm.id) return data.realm.id;
|
|
30
144
|
}
|
|
31
145
|
};
|
|
32
146
|
//#endregion
|
|
@@ -351,7 +465,7 @@ function extractTokenPayload(token) {
|
|
|
351
465
|
//#endregion
|
|
352
466
|
//#region src/crypto/json-web-token/utils.ts
|
|
353
467
|
function createErrorForJWTError(e) {
|
|
354
|
-
if (isObject
|
|
468
|
+
if (isObject(e)) {
|
|
355
469
|
if (typeof e.name === "string") switch (e.name) {
|
|
356
470
|
case "TokenExpiredError": return JWTError.expired();
|
|
357
471
|
case "NotBeforeError":
|
|
@@ -481,204 +595,13 @@ async function verifyToken(token, context) {
|
|
|
481
595
|
return output;
|
|
482
596
|
}
|
|
483
597
|
//#endregion
|
|
484
|
-
//#region src/domain-event/module.ts
|
|
485
|
-
var DomainEventPublisher = class {
|
|
486
|
-
publishers;
|
|
487
|
-
constructor() {
|
|
488
|
-
this.publishers = /* @__PURE__ */ new Set();
|
|
489
|
-
}
|
|
490
|
-
mount(publisher) {
|
|
491
|
-
this.publishers.add(publisher);
|
|
492
|
-
}
|
|
493
|
-
async publish(ctx) {
|
|
494
|
-
const publishers = this.publishers.values();
|
|
495
|
-
while (true) {
|
|
496
|
-
const it = publishers.next();
|
|
497
|
-
if (it.done) return;
|
|
498
|
-
await it.value.publish(ctx);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
};
|
|
502
|
-
//#endregion
|
|
503
|
-
//#region src/services/cache/adapters/memory.ts
|
|
504
|
-
var MemoryCache = class {
|
|
505
|
-
instance;
|
|
506
|
-
constructor(options = {}) {
|
|
507
|
-
this.instance = new TTLCache({
|
|
508
|
-
checkAgeOnGet: true,
|
|
509
|
-
ttl: Infinity,
|
|
510
|
-
...options || {}
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
async pop(key) {
|
|
514
|
-
if (this.instance.has(key)) {
|
|
515
|
-
const output = this.instance.get(key);
|
|
516
|
-
this.instance.delete(key);
|
|
517
|
-
return output;
|
|
518
|
-
}
|
|
519
|
-
return null;
|
|
520
|
-
}
|
|
521
|
-
async has(key) {
|
|
522
|
-
return this.instance.has(key);
|
|
523
|
-
}
|
|
524
|
-
async get(key) {
|
|
525
|
-
const output = await this.instance.get(key);
|
|
526
|
-
if (output) return output;
|
|
527
|
-
return null;
|
|
528
|
-
}
|
|
529
|
-
async set(key, value, options) {
|
|
530
|
-
this.instance.set(key, value, { ttl: options.ttl });
|
|
531
|
-
}
|
|
532
|
-
async drop(key) {
|
|
533
|
-
this.instance.delete(key);
|
|
534
|
-
}
|
|
535
|
-
async dropMany(keys) {
|
|
536
|
-
for (const key of keys) this.instance.delete(key);
|
|
537
|
-
}
|
|
538
|
-
async clear(options = {}) {
|
|
539
|
-
if (options.prefix) {
|
|
540
|
-
const keys = this.instance.keys();
|
|
541
|
-
let iterator = keys.next();
|
|
542
|
-
while (!iterator.done) {
|
|
543
|
-
if (typeof iterator.value !== "string") continue;
|
|
544
|
-
if (iterator.value.startsWith(options.prefix)) this.instance.delete(iterator.value);
|
|
545
|
-
iterator = keys.next();
|
|
546
|
-
}
|
|
547
|
-
return;
|
|
548
|
-
}
|
|
549
|
-
this.instance.clear();
|
|
550
|
-
}
|
|
551
|
-
};
|
|
552
|
-
//#endregion
|
|
553
|
-
//#region src/services/redis/check.ts
|
|
554
|
-
function isRedisClient(data) {
|
|
555
|
-
return isObject$1(data) && typeof data.connect === "function" && typeof data.disconnect === "function";
|
|
556
|
-
}
|
|
557
|
-
//#endregion
|
|
558
|
-
//#region src/services/redis/factory.ts
|
|
559
|
-
function createRedisClient(input) {
|
|
560
|
-
if (typeof input === "boolean") return createClient({ connectionString: "redis://127.0.0.1" });
|
|
561
|
-
if (typeof input === "string") return createClient({ connectionString: input });
|
|
562
|
-
if (!isRedisClient(input)) return createClient({ options: input });
|
|
563
|
-
return input;
|
|
564
|
-
}
|
|
565
|
-
//#endregion
|
|
566
|
-
//#region src/services/cache/adapters/redis.ts
|
|
567
|
-
var RedisCache = class {
|
|
568
|
-
client;
|
|
569
|
-
jsonAdapter;
|
|
570
|
-
constructor(input) {
|
|
571
|
-
this.client = createRedisClient(input);
|
|
572
|
-
this.jsonAdapter = new JsonAdapter(this.client);
|
|
573
|
-
}
|
|
574
|
-
async get(key) {
|
|
575
|
-
const output = await this.jsonAdapter.get(key);
|
|
576
|
-
if (output) return output;
|
|
577
|
-
return null;
|
|
578
|
-
}
|
|
579
|
-
async pop(key) {
|
|
580
|
-
const raw = await this.client.getdel(key);
|
|
581
|
-
if (!raw) return null;
|
|
582
|
-
try {
|
|
583
|
-
return JSON.parse(raw);
|
|
584
|
-
} catch {
|
|
585
|
-
return null;
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
async has(key) {
|
|
589
|
-
return !!await this.get(key);
|
|
590
|
-
}
|
|
591
|
-
async set(key, value, options) {
|
|
592
|
-
await this.jsonAdapter.set(key, value, { milliseconds: options.ttl });
|
|
593
|
-
}
|
|
594
|
-
async drop(key) {
|
|
595
|
-
await this.jsonAdapter.drop(key);
|
|
596
|
-
}
|
|
597
|
-
async dropMany(keys) {
|
|
598
|
-
const pipeline = this.client.pipeline();
|
|
599
|
-
for (const key of keys) pipeline.del(key);
|
|
600
|
-
await pipeline.exec();
|
|
601
|
-
}
|
|
602
|
-
async clear(options = {}) {
|
|
603
|
-
if (options.prefix) {
|
|
604
|
-
const pipeline = this.client.pipeline();
|
|
605
|
-
const keys = await this.client.keys(`${options.prefix}*`);
|
|
606
|
-
for (const key of keys) pipeline.del(key);
|
|
607
|
-
await pipeline.exec();
|
|
608
|
-
return;
|
|
609
|
-
}
|
|
610
|
-
await this.client.flushdb();
|
|
611
|
-
}
|
|
612
|
-
};
|
|
613
|
-
//#endregion
|
|
614
|
-
//#region src/services/cache/helper.ts
|
|
615
|
-
function buildCacheKey(options) {
|
|
616
|
-
return buildRedisKeyPath(options);
|
|
617
|
-
}
|
|
618
|
-
//#endregion
|
|
619
|
-
//#region src/services/logger/module.ts
|
|
620
|
-
function createNoopLogger() {
|
|
621
|
-
return createLogger$1({ silent: true });
|
|
622
|
-
}
|
|
623
|
-
function createLogger(context) {
|
|
624
|
-
let items;
|
|
625
|
-
const cwd = context.directory || process.cwd();
|
|
626
|
-
if (context.env === "production") items = [
|
|
627
|
-
new transports.Console({ level: "info" }),
|
|
628
|
-
new transports.File({
|
|
629
|
-
filename: path.join(cwd, "http.log"),
|
|
630
|
-
level: "http",
|
|
631
|
-
maxsize: 10 * 1024 * 1024,
|
|
632
|
-
maxFiles: 5
|
|
633
|
-
}),
|
|
634
|
-
new transports.File({
|
|
635
|
-
filename: path.join(cwd, "error.log"),
|
|
636
|
-
level: "warn",
|
|
637
|
-
maxsize: 10 * 1024 * 1024,
|
|
638
|
-
maxFiles: 5
|
|
639
|
-
})
|
|
640
|
-
];
|
|
641
|
-
else items = [new transports.Console({ level: "debug" })];
|
|
642
|
-
return createLogger$1({
|
|
643
|
-
format: format.combine(format.errors({ stack: true }), format.timestamp(), format.colorize(), format.simple()),
|
|
644
|
-
transports: items
|
|
645
|
-
});
|
|
646
|
-
}
|
|
647
|
-
//#endregion
|
|
648
|
-
//#region src/services/logger/singleton.ts
|
|
649
|
-
const instance$1 = singa({ name: "logger" });
|
|
650
|
-
function setLoggerFactory(factory) {
|
|
651
|
-
instance$1.setFactory(factory);
|
|
652
|
-
}
|
|
653
|
-
function isLoggerUsable() {
|
|
654
|
-
return instance$1.has() || instance$1.hasFactory();
|
|
655
|
-
}
|
|
656
|
-
function setLogger(input) {
|
|
657
|
-
instance$1.set(input);
|
|
658
|
-
}
|
|
659
|
-
function useLogger() {
|
|
660
|
-
return instance$1.use();
|
|
661
|
-
}
|
|
662
|
-
//#endregion
|
|
663
|
-
//#region src/services/vault/singleton.ts
|
|
664
|
-
const instance = singa({ name: "vault" });
|
|
665
|
-
function setVaultFactory(factory) {
|
|
666
|
-
instance.setFactory(factory);
|
|
667
|
-
}
|
|
668
|
-
function isVaultClientUsable() {
|
|
669
|
-
return instance.has() || instance.hasFactory();
|
|
670
|
-
}
|
|
671
|
-
function useVaultClient() {
|
|
672
|
-
return instance.use();
|
|
673
|
-
}
|
|
674
|
-
//#endregion
|
|
675
598
|
//#region src/domain-event/utils.ts
|
|
676
599
|
function transformDomainEventData(input) {
|
|
677
600
|
const keys = Object.keys(input);
|
|
678
601
|
for (const key_ of keys) {
|
|
679
602
|
const key = key_;
|
|
680
603
|
const value = input[key];
|
|
681
|
-
if (!isObject(value)) continue;
|
|
604
|
+
if (!isObject$1(value)) continue;
|
|
682
605
|
if (value instanceof Date) input[key] = value.toISOString();
|
|
683
606
|
}
|
|
684
607
|
return input;
|
|
@@ -688,13 +611,13 @@ function buildDomainEventChannelName(input, id) {
|
|
|
688
611
|
return input(id);
|
|
689
612
|
}
|
|
690
613
|
//#endregion
|
|
691
|
-
//#region src/domain-event/redis/module.ts
|
|
692
|
-
var
|
|
614
|
+
//#region src/domain-event/handlers/redis/module.ts
|
|
615
|
+
var DomainEventRedisHandler = class {
|
|
693
616
|
driver;
|
|
694
617
|
constructor(input) {
|
|
695
618
|
this.driver = createRedisClient(input);
|
|
696
619
|
}
|
|
697
|
-
async
|
|
620
|
+
async handle(ctx) {
|
|
698
621
|
const data = JSON.stringify(transformDomainEventData(ctx.content));
|
|
699
622
|
const pipeline = this.driver.pipeline();
|
|
700
623
|
for (let i = 0; i < ctx.destinations.length; i++) {
|
|
@@ -711,14 +634,14 @@ var DomainEventRedisPublisher = class {
|
|
|
711
634
|
}
|
|
712
635
|
};
|
|
713
636
|
//#endregion
|
|
714
|
-
//#region src/domain-event/socket/module.ts
|
|
715
|
-
var
|
|
637
|
+
//#region src/domain-event/handlers/socket/module.ts
|
|
638
|
+
var DomainEventSocketHandler = class {
|
|
716
639
|
driver;
|
|
717
640
|
constructor(input) {
|
|
718
641
|
const client = createRedisClient(input);
|
|
719
642
|
this.driver = new Emitter(client);
|
|
720
643
|
}
|
|
721
|
-
async
|
|
644
|
+
async handle(ctx) {
|
|
722
645
|
ctx.content = transformDomainEventData(ctx.content);
|
|
723
646
|
for (let i = 0; i < ctx.destinations.length; i++) {
|
|
724
647
|
const destination = ctx.destinations[i];
|
|
@@ -745,11 +668,77 @@ var DomainEventSocketPublisher = class {
|
|
|
745
668
|
}
|
|
746
669
|
};
|
|
747
670
|
//#endregion
|
|
671
|
+
//#region src/domain-event/module.ts
|
|
672
|
+
var DomainEventPublisher = class {
|
|
673
|
+
handlers;
|
|
674
|
+
logger;
|
|
675
|
+
constructor(ctx = {}) {
|
|
676
|
+
this.handlers = /* @__PURE__ */ new Set();
|
|
677
|
+
this.logger = ctx.logger;
|
|
678
|
+
}
|
|
679
|
+
register(handler) {
|
|
680
|
+
this.handlers.add(handler);
|
|
681
|
+
}
|
|
682
|
+
async dispose() {
|
|
683
|
+
for (const handler of this.handlers) if (handler.dispose) await handler.dispose();
|
|
684
|
+
this.handlers.clear();
|
|
685
|
+
}
|
|
686
|
+
async safePublish(ctx) {
|
|
687
|
+
try {
|
|
688
|
+
await this.publish(ctx);
|
|
689
|
+
} catch (e) {
|
|
690
|
+
if (this.logger) {
|
|
691
|
+
this.logger.error(`Publishing event ${buildEventFullName(ctx.content.type, ctx.content.event)} failed.`);
|
|
692
|
+
this.logger.error(e);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
async publish(ctx) {
|
|
697
|
+
if (this.handlers.size === 0) return;
|
|
698
|
+
if (this.logger) this.logger.debug(`Publishing event ${buildEventFullName(ctx.content.type, ctx.content.event)}...`);
|
|
699
|
+
const handlers = this.handlers.values();
|
|
700
|
+
while (true) {
|
|
701
|
+
const it = handlers.next();
|
|
702
|
+
if (it.done) return;
|
|
703
|
+
await it.value.handle(ctx);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
};
|
|
707
|
+
//#endregion
|
|
708
|
+
//#region src/logger/module.ts
|
|
709
|
+
function createNoopLogger() {
|
|
710
|
+
return createLogger$1({ silent: true });
|
|
711
|
+
}
|
|
712
|
+
function createLogger(context) {
|
|
713
|
+
let items;
|
|
714
|
+
const cwd = context.directory || process.cwd();
|
|
715
|
+
if (context.env === "production") items = [
|
|
716
|
+
new transports.Console({ level: "info" }),
|
|
717
|
+
new transports.File({
|
|
718
|
+
filename: path.join(cwd, "http.log"),
|
|
719
|
+
level: "http",
|
|
720
|
+
maxsize: 10 * 1024 * 1024,
|
|
721
|
+
maxFiles: 5
|
|
722
|
+
}),
|
|
723
|
+
new transports.File({
|
|
724
|
+
filename: path.join(cwd, "error.log"),
|
|
725
|
+
level: "warn",
|
|
726
|
+
maxsize: 10 * 1024 * 1024,
|
|
727
|
+
maxFiles: 5
|
|
728
|
+
})
|
|
729
|
+
];
|
|
730
|
+
else items = [new transports.Console({ level: "debug" })];
|
|
731
|
+
return createLogger$1({
|
|
732
|
+
format: format.combine(format.errors({ stack: true }), format.timestamp(), format.colorize(), format.simple()),
|
|
733
|
+
transports: items
|
|
734
|
+
});
|
|
735
|
+
}
|
|
736
|
+
//#endregion
|
|
748
737
|
//#region src/utils/has-property.ts
|
|
749
738
|
function hasOwnProperty(obj, prop) {
|
|
750
739
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
751
740
|
}
|
|
752
741
|
//#endregion
|
|
753
|
-
export { AbstractEntityService, AsymmetricKey, BaseKey, CryptoAsymmetricAlgorithm, DomainEventPublisher,
|
|
742
|
+
export { AbstractEntityService, AsymmetricKey, BaseKey, CryptoAsymmetricAlgorithm, DomainEventPublisher, DomainEventRedisHandler, DomainEventSocketHandler, MemoryCache, RedisCache, RedisClient, RedisJsonAdapter, RedisWatcher, SymmetricAlgorithm, SymmetricKey, buildCacheKey, buildRedisKeyPath, compare, createAsymmetricKeyPair, createLogger, createNoopLogger, createRedisClient, createSymmetricKey, decodePemToPKCS8, decodePemToSpki, encodePKCS8ToPEM, encodeSPKIToPem, escapeRedisKey, extractTokenHeader, extractTokenPayload, getKeyUsagesForAsymmetricAlgorithm, getKeyUsagesForSymmetricAlgorithm, hasOwnProperty, hash, isAsymmetricAlgorithm, isRedisClient, isSymmetricAlgorithm, normalizeAsymmetricKeyImportOptions, normalizeAsymmetricKeyPairCreateOptions, parseRedisKeyPath, signToken, verifyToken };
|
|
754
743
|
|
|
755
744
|
//# sourceMappingURL=index.mjs.map
|