@sustaina/iam-middleware 1.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 +61 -0
- package/dist/auth/AuthMiddleware.d.ts +51 -0
- package/dist/auth/AuthMiddleware.d.ts.map +1 -0
- package/dist/auth/AuthMiddleware.js +312 -0
- package/dist/auth/AuthMiddleware.js.map +1 -0
- package/dist/auth/ImplementModeMiddleware.d.ts +26 -0
- package/dist/auth/ImplementModeMiddleware.d.ts.map +1 -0
- package/dist/auth/ImplementModeMiddleware.js +77 -0
- package/dist/auth/ImplementModeMiddleware.js.map +1 -0
- package/dist/base/BaseMiddleware.d.ts +15 -0
- package/dist/base/BaseMiddleware.d.ts.map +1 -0
- package/dist/base/BaseMiddleware.js +50 -0
- package/dist/base/BaseMiddleware.js.map +1 -0
- package/dist/domain/entities/AggregateRoot.d.ts +17 -0
- package/dist/domain/entities/AggregateRoot.d.ts.map +1 -0
- package/dist/domain/entities/AggregateRoot.js +79 -0
- package/dist/domain/entities/AggregateRoot.js.map +1 -0
- package/dist/domain/entities/Currency.d.ts +26 -0
- package/dist/domain/entities/Currency.d.ts.map +1 -0
- package/dist/domain/entities/Currency.js +51 -0
- package/dist/domain/entities/Currency.js.map +1 -0
- package/dist/domain/entities/OutboxEvent.d.ts +17 -0
- package/dist/domain/entities/OutboxEvent.d.ts.map +1 -0
- package/dist/domain/entities/OutboxEvent.js +24 -0
- package/dist/domain/entities/OutboxEvent.js.map +1 -0
- package/dist/domain/event/DomainEvent.d.ts +38 -0
- package/dist/domain/event/DomainEvent.d.ts.map +1 -0
- package/dist/domain/event/DomainEvent.js +20 -0
- package/dist/domain/event/DomainEvent.js.map +1 -0
- package/dist/domain/repositories/OutboxRepository.d.ts +7 -0
- package/dist/domain/repositories/OutboxRepository.d.ts.map +1 -0
- package/dist/domain/repositories/OutboxRepository.js +3 -0
- package/dist/domain/repositories/OutboxRepository.js.map +1 -0
- package/dist/errors/index.d.ts +71 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +150 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/RedisClient.d.ts +14 -0
- package/dist/infrastructure/RedisClient.d.ts.map +1 -0
- package/dist/infrastructure/RedisClient.js +69 -0
- package/dist/infrastructure/RedisClient.js.map +1 -0
- package/dist/logging/EventLogMiddleware.d.ts +4 -0
- package/dist/logging/EventLogMiddleware.d.ts.map +1 -0
- package/dist/logging/EventLogMiddleware.js +49 -0
- package/dist/logging/EventLogMiddleware.js.map +1 -0
- package/dist/shared/config.d.ts +2 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +5 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/test.d.ts +4 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +80 -0
- package/dist/test.js.map +1 -0
- package/dist/types/AuthTypes.d.ts +43 -0
- package/dist/types/AuthTypes.d.ts.map +1 -0
- package/dist/types/AuthTypes.js +3 -0
- package/dist/types/AuthTypes.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AggregateRoot.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/AggregateRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,8BAAsB,aAAa;aAKf,EAAE,EAAE,MAAM;aACV,SAAS,EAAE,IAAI;IACxB,SAAS,EAAE,IAAI;IANxB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAa;gBAGX,EAAE,EAAE,MAAM,EACV,SAAS,GAAE,IAAiB,EACrC,SAAS,GAAE,IAAiB;IAGrC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,YAAY,IAAI,aAAa,CAAC,WAAW,CAAC,CAE7C;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAM3C,iBAAiB,IAAI,IAAI;IAIhC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;WAMhC,YAAY,CAAC,CAAC,SAAS,aAAa,EAChD,cAAc,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACzC,MAAM,EAAE,WAAW,EAAE,GACpB,CAAC;IAyDJ,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;CAClD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AggregateRoot = void 0;
|
|
4
|
+
class AggregateRoot {
|
|
5
|
+
constructor(id, createdAt = new Date(), updatedAt = new Date()) {
|
|
6
|
+
this.id = id;
|
|
7
|
+
this.createdAt = createdAt;
|
|
8
|
+
this.updatedAt = updatedAt;
|
|
9
|
+
this._domainEvents = [];
|
|
10
|
+
this._version = 0;
|
|
11
|
+
}
|
|
12
|
+
get version() {
|
|
13
|
+
return this._version;
|
|
14
|
+
}
|
|
15
|
+
get domainEvents() {
|
|
16
|
+
return this._domainEvents;
|
|
17
|
+
}
|
|
18
|
+
addDomainEvent(event) {
|
|
19
|
+
this._domainEvents.push(event);
|
|
20
|
+
this._version++;
|
|
21
|
+
this.updatedAt = new Date();
|
|
22
|
+
}
|
|
23
|
+
clearDomainEvents() {
|
|
24
|
+
this._domainEvents = [];
|
|
25
|
+
}
|
|
26
|
+
applyEvent(event) {
|
|
27
|
+
this._version++;
|
|
28
|
+
this.updatedAt = event.occurredAt;
|
|
29
|
+
}
|
|
30
|
+
// Replay events to rebuild aggregate state
|
|
31
|
+
static replayEvents(aggregateClass, events) {
|
|
32
|
+
if (events.length === 0) {
|
|
33
|
+
throw new Error("Cannot replay empty event stream");
|
|
34
|
+
}
|
|
35
|
+
// Create initial aggregate from first event
|
|
36
|
+
const firstEvent = events[0];
|
|
37
|
+
// Try to create aggregate using the creation event data
|
|
38
|
+
let aggregate;
|
|
39
|
+
// Check if the aggregate class has a static factory method for creation events
|
|
40
|
+
if (typeof aggregateClass.fromCreationEvent === "function") {
|
|
41
|
+
aggregate = aggregateClass.fromCreationEvent(firstEvent);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Fallback - try to create with basic constructor parameters
|
|
45
|
+
try {
|
|
46
|
+
// For entities that need specific constructor parameters, try with event data
|
|
47
|
+
if (firstEvent.eventData && Object.keys(firstEvent.eventData).length > 0) {
|
|
48
|
+
const eventData = firstEvent.eventData;
|
|
49
|
+
// Try different constructor patterns based on available data
|
|
50
|
+
aggregate = new aggregateClass(firstEvent.aggregateId, eventData.email || eventData.identifier || "default", eventData.name || eventData.title || "Default Name", firstEvent.occurredAt, firstEvent.occurredAt);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Minimal constructor with just ID and timestamp
|
|
54
|
+
aggregate = new aggregateClass(firstEvent.aggregateId, firstEvent.occurredAt);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Last resort - create with minimal data and let when() handlers build the state
|
|
59
|
+
aggregate = new aggregateClass(firstEvent.aggregateId);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Apply all events to rebuild state
|
|
63
|
+
events.forEach((event, index) => {
|
|
64
|
+
// If we used fromCreationEvent, skip the first event as it was already handled
|
|
65
|
+
if (typeof aggregateClass.fromCreationEvent === "function" && index === 0) {
|
|
66
|
+
aggregate.applyEvent(event);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Apply event through when() handler and update version
|
|
70
|
+
if (typeof aggregate.when === "function") {
|
|
71
|
+
aggregate.when(event);
|
|
72
|
+
}
|
|
73
|
+
aggregate.applyEvent(event);
|
|
74
|
+
});
|
|
75
|
+
return aggregate;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.AggregateRoot = AggregateRoot;
|
|
79
|
+
//# sourceMappingURL=AggregateRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AggregateRoot.js","sourceRoot":"","sources":["../../../src/domain/entities/AggregateRoot.ts"],"names":[],"mappings":";;;AAEA,MAAsB,aAAa;IAIjC,YACkB,EAAU,EACV,YAAkB,IAAI,IAAI,EAAE,EACrC,YAAkB,IAAI,IAAI,EAAE;QAFnB,OAAE,GAAF,EAAE,CAAQ;QACV,cAAS,GAAT,SAAS,CAAmB;QACrC,cAAS,GAAT,SAAS,CAAmB;QAN7B,kBAAa,GAAkB,EAAE,CAAC;QAClC,aAAQ,GAAW,CAAC,CAAC;IAM1B,CAAC;IAEJ,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAES,cAAc,CAAC,KAAkB;QACzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;IAEM,iBAAiB;QACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAES,UAAU,CAAC,KAAkB;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,2CAA2C;IACpC,MAAM,CAAC,YAAY,CACxB,cAAyC,EACzC,MAAqB;QAErB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAE7B,wDAAwD;QACxD,IAAI,SAAY,CAAC;QAEjB,+EAA+E;QAC/E,IAAI,OAAQ,cAAsB,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;YACpE,SAAS,GAAI,cAAsB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,6DAA6D;YAC7D,IAAI,CAAC;gBACH,8EAA8E;gBAC9E,IAAI,UAAU,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzE,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;oBACvC,6DAA6D;oBAC7D,SAAS,GAAG,IAAI,cAAc,CAC5B,UAAU,CAAC,WAAW,EACtB,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,EACpD,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,IAAI,cAAc,EACnD,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,UAAU,CACtB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,iDAAiD;oBACjD,SAAS,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iFAAiF;gBACjF,SAAS,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,+EAA+E;YAC/E,IAAI,OAAQ,cAAsB,CAAC,iBAAiB,KAAK,UAAU,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACnF,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,wDAAwD;YACxD,IAAI,OAAQ,SAAiB,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACjD,SAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;CAIF;AA/FD,sCA+FC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DomainEvent } from "../event/DomainEvent";
|
|
2
|
+
import { AggregateRoot } from "./AggregateRoot";
|
|
3
|
+
export declare enum CurrencySymbolPos {
|
|
4
|
+
BEFORE = "before",
|
|
5
|
+
AFTER = "after"
|
|
6
|
+
}
|
|
7
|
+
export declare class Currency extends AggregateRoot {
|
|
8
|
+
private _code;
|
|
9
|
+
private _name;
|
|
10
|
+
private _description?;
|
|
11
|
+
private _symbol;
|
|
12
|
+
private _symbolPosition;
|
|
13
|
+
private _isDefault;
|
|
14
|
+
private _enabled;
|
|
15
|
+
constructor(id: string, code: string, name: string, symbol: string, symbolPosition?: CurrencySymbolPos, isDefault?: boolean, enabled?: boolean, description?: string, createdAt?: Date, updatedAt?: Date);
|
|
16
|
+
get code(): string;
|
|
17
|
+
get name(): string;
|
|
18
|
+
get description(): string | undefined;
|
|
19
|
+
get symbol(): string;
|
|
20
|
+
get symbolPosition(): CurrencySymbolPos;
|
|
21
|
+
get isDefault(): boolean;
|
|
22
|
+
get enabled(): boolean;
|
|
23
|
+
equals(other: Currency): boolean;
|
|
24
|
+
protected when(_: DomainEvent): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Currency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Currency.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Currency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,qBAAa,QAAS,SAAQ,aAAa;IACzC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAU;gBAGxB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,iBAA4C,EAC5D,SAAS,GAAE,OAAe,EAC1B,OAAO,GAAE,OAAc,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,GAAE,IAAiB,EAC5B,SAAS,GAAE,IAAiB;IAY9B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,cAAc,IAAI,iBAAiB,CAEtC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAKhC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;CAGrC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Currency = exports.CurrencySymbolPos = void 0;
|
|
4
|
+
const AggregateRoot_1 = require("./AggregateRoot");
|
|
5
|
+
var CurrencySymbolPos;
|
|
6
|
+
(function (CurrencySymbolPos) {
|
|
7
|
+
CurrencySymbolPos["BEFORE"] = "before";
|
|
8
|
+
CurrencySymbolPos["AFTER"] = "after";
|
|
9
|
+
})(CurrencySymbolPos || (exports.CurrencySymbolPos = CurrencySymbolPos = {}));
|
|
10
|
+
class Currency extends AggregateRoot_1.AggregateRoot {
|
|
11
|
+
constructor(id, code, name, symbol, symbolPosition = CurrencySymbolPos.BEFORE, isDefault = false, enabled = true, description, createdAt = new Date(), updatedAt = new Date()) {
|
|
12
|
+
super(id, createdAt, updatedAt);
|
|
13
|
+
this._code = code;
|
|
14
|
+
this._name = name;
|
|
15
|
+
this._symbol = symbol;
|
|
16
|
+
this._symbolPosition = symbolPosition;
|
|
17
|
+
this._isDefault = isDefault;
|
|
18
|
+
this._enabled = enabled;
|
|
19
|
+
this._description = description ?? undefined;
|
|
20
|
+
}
|
|
21
|
+
get code() {
|
|
22
|
+
return this._code;
|
|
23
|
+
}
|
|
24
|
+
get name() {
|
|
25
|
+
return this._name;
|
|
26
|
+
}
|
|
27
|
+
get description() {
|
|
28
|
+
return this._description;
|
|
29
|
+
}
|
|
30
|
+
get symbol() {
|
|
31
|
+
return this._symbol;
|
|
32
|
+
}
|
|
33
|
+
get symbolPosition() {
|
|
34
|
+
return this._symbolPosition;
|
|
35
|
+
}
|
|
36
|
+
get isDefault() {
|
|
37
|
+
return this._isDefault;
|
|
38
|
+
}
|
|
39
|
+
get enabled() {
|
|
40
|
+
return this._enabled;
|
|
41
|
+
}
|
|
42
|
+
equals(other) {
|
|
43
|
+
return this._code === other.code;
|
|
44
|
+
}
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
46
|
+
when(_) {
|
|
47
|
+
// Method intentionally left blank
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Currency = Currency;
|
|
51
|
+
//# sourceMappingURL=Currency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Currency.js","sourceRoot":"","sources":["../../../src/domain/entities/Currency.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAEhD,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,sCAAiB,CAAA;IACjB,oCAAe,CAAA;AACjB,CAAC,EAHW,iBAAiB,iCAAjB,iBAAiB,QAG5B;AAED,MAAa,QAAS,SAAQ,6BAAa;IASzC,YACE,EAAU,EACV,IAAY,EACZ,IAAY,EACZ,MAAc,EACd,iBAAoC,iBAAiB,CAAC,MAAM,EAC5D,YAAqB,KAAK,EAC1B,UAAmB,IAAI,EACvB,WAAoB,EACpB,YAAkB,IAAI,IAAI,EAAE,EAC5B,YAAkB,IAAI,IAAI,EAAE;QAE5B,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,SAAS,CAAC;IAC/C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAe;QACpB,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,6DAA6D;IACnD,IAAI,CAAC,CAAc;QAC3B,kCAAkC;IACpC,CAAC;CACF;AAnED,4BAmEC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface TraceMetadata {
|
|
2
|
+
traceId: string;
|
|
3
|
+
spanId: string;
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
}
|
|
6
|
+
export declare class OutboxEvent {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly eventType: string;
|
|
9
|
+
readonly eventData: any;
|
|
10
|
+
readonly metadata?: TraceMetadata | undefined;
|
|
11
|
+
readonly processed: boolean;
|
|
12
|
+
readonly processedAt?: Date | undefined;
|
|
13
|
+
readonly createdAt: Date;
|
|
14
|
+
constructor(id: string, eventType: string, eventData: any, metadata?: TraceMetadata | undefined, processed?: boolean, processedAt?: Date | undefined, createdAt?: Date);
|
|
15
|
+
static create(eventType: string, eventData: any, metadata?: TraceMetadata): OutboxEvent;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=OutboxEvent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutboxEvent.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/OutboxEvent.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,WAAW;aAEJ,EAAE,EAAE,MAAM;aACV,SAAS,EAAE,MAAM;aACjB,SAAS,EAAE,GAAG;aACd,QAAQ,CAAC,EAAE,aAAa;aACxB,SAAS,EAAE,OAAO;aAClB,WAAW,CAAC,EAAE,IAAI;aAClB,SAAS,EAAE,IAAI;gBANf,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,EACd,QAAQ,CAAC,EAAE,aAAa,YAAA,EACxB,SAAS,GAAE,OAAe,EAC1B,WAAW,CAAC,EAAE,IAAI,YAAA,EAClB,SAAS,GAAE,IAAiB;IAG9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,WAAW;CAIxF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OutboxEvent = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
class OutboxEvent {
|
|
9
|
+
constructor(id, eventType, eventData, metadata, processed = false, processedAt, createdAt = new Date()) {
|
|
10
|
+
this.id = id;
|
|
11
|
+
this.eventType = eventType;
|
|
12
|
+
this.eventData = eventData;
|
|
13
|
+
this.metadata = metadata;
|
|
14
|
+
this.processed = processed;
|
|
15
|
+
this.processedAt = processedAt;
|
|
16
|
+
this.createdAt = createdAt;
|
|
17
|
+
}
|
|
18
|
+
static create(eventType, eventData, metadata) {
|
|
19
|
+
const id = crypto_1.default.randomUUID();
|
|
20
|
+
return new OutboxEvent(id, eventType, eventData, metadata);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.OutboxEvent = OutboxEvent;
|
|
24
|
+
//# sourceMappingURL=OutboxEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutboxEvent.js","sourceRoot":"","sources":["../../../src/domain/entities/OutboxEvent.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAQ5B,MAAa,WAAW;IACtB,YACkB,EAAU,EACV,SAAiB,EACjB,SAAc,EACd,QAAwB,EACxB,YAAqB,KAAK,EAC1B,WAAkB,EAClB,YAAkB,IAAI,IAAI,EAAE;QAN5B,OAAE,GAAF,EAAE,CAAQ;QACV,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAK;QACd,aAAQ,GAAR,QAAQ,CAAgB;QACxB,cAAS,GAAT,SAAS,CAAiB;QAC1B,gBAAW,GAAX,WAAW,CAAO;QAClB,cAAS,GAAT,SAAS,CAAmB;IAC3C,CAAC;IAEJ,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,SAAc,EAAE,QAAwB;QACvE,MAAM,EAAE,GAAG,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAI,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACF;AAfD,kCAeC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface DomainEvent {
|
|
2
|
+
id: string;
|
|
3
|
+
aggregateId: string;
|
|
4
|
+
eventType: string;
|
|
5
|
+
eventVersion: number;
|
|
6
|
+
occurredAt: Date;
|
|
7
|
+
eventData: any;
|
|
8
|
+
metadata?: {
|
|
9
|
+
userId?: string;
|
|
10
|
+
correlationId?: string;
|
|
11
|
+
causationId?: string;
|
|
12
|
+
traceId?: string;
|
|
13
|
+
spanId?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare abstract class BaseDomainEvent implements DomainEvent {
|
|
17
|
+
readonly aggregateId: string;
|
|
18
|
+
readonly eventType: string;
|
|
19
|
+
readonly eventData: any;
|
|
20
|
+
readonly metadata?: {
|
|
21
|
+
userId?: string;
|
|
22
|
+
correlationId?: string;
|
|
23
|
+
causationId?: string;
|
|
24
|
+
traceId?: string;
|
|
25
|
+
spanId?: string;
|
|
26
|
+
} | undefined;
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly occurredAt: Date;
|
|
29
|
+
readonly eventVersion: number;
|
|
30
|
+
constructor(aggregateId: string, eventType: string, eventData: any, metadata?: {
|
|
31
|
+
userId?: string;
|
|
32
|
+
correlationId?: string;
|
|
33
|
+
causationId?: string;
|
|
34
|
+
traceId?: string;
|
|
35
|
+
spanId?: string;
|
|
36
|
+
} | undefined);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=DomainEvent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainEvent.d.ts","sourceRoot":"","sources":["../../../src/domain/event/DomainEvent.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,IAAI,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,8BAAsB,eAAgB,YAAW,WAAW;aAMxC,WAAW,EAAE,MAAM;aACnB,SAAS,EAAE,MAAM;aACjB,SAAS,EAAE,GAAG;aACd,QAAQ,CAAC,EAAE;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAdH,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,UAAU,EAAE,IAAI,CAAC;IACjC,SAAgB,YAAY,EAAE,MAAM,CAAK;gBAGvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,EACd,QAAQ,CAAC,EAAE;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,YAAA;CAKJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BaseDomainEvent = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
class BaseDomainEvent {
|
|
9
|
+
constructor(aggregateId, eventType, eventData, metadata) {
|
|
10
|
+
this.aggregateId = aggregateId;
|
|
11
|
+
this.eventType = eventType;
|
|
12
|
+
this.eventData = eventData;
|
|
13
|
+
this.metadata = metadata;
|
|
14
|
+
this.eventVersion = 1;
|
|
15
|
+
this.id = crypto_1.default.randomUUID();
|
|
16
|
+
this.occurredAt = new Date();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.BaseDomainEvent = BaseDomainEvent;
|
|
20
|
+
//# sourceMappingURL=DomainEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainEvent.js","sourceRoot":"","sources":["../../../src/domain/event/DomainEvent.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAkB5B,MAAsB,eAAe;IAKnC,YACkB,WAAmB,EACnB,SAAiB,EACjB,SAAc,EACd,QAMf;QATe,gBAAW,GAAX,WAAW,CAAQ;QACnB,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAK;QACd,aAAQ,GAAR,QAAQ,CAMvB;QAZa,iBAAY,GAAW,CAAC,CAAC;QAcvC,IAAI,CAAC,EAAE,GAAG,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;CACF;AApBD,0CAoBC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { OutboxEvent } from "../entities/OutboxEvent";
|
|
2
|
+
export interface OutboxRepository {
|
|
3
|
+
save(event: OutboxEvent): Promise<OutboxEvent>;
|
|
4
|
+
findUnprocessed(): Promise<OutboxEvent[]>;
|
|
5
|
+
markAsProcessed(eventId: string): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=OutboxRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutboxRepository.d.ts","sourceRoot":"","sources":["../../../src/domain/repositories/OutboxRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutboxRepository.js","sourceRoot":"","sources":["../../../src/domain/repositories/OutboxRepository.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Span } from "@opentelemetry/api";
|
|
2
|
+
import { FastifyReply } from "fastify";
|
|
3
|
+
import pino from "pino";
|
|
4
|
+
export declare class DomainError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class ValidationError extends DomainError {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class NotFoundError extends DomainError {
|
|
11
|
+
constructor(message: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class ConflictError extends DomainError {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class CustomError extends DomainError {
|
|
17
|
+
/** HTTP status code to return (default: 500) */
|
|
18
|
+
statusCode: number;
|
|
19
|
+
/** Error type identifier for tracing, monitoring, and metrics */
|
|
20
|
+
errorType: string;
|
|
21
|
+
/** Optional user-friendly message or i18n key to return to client */
|
|
22
|
+
returnMessage?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a new CustomError instance with full control over error properties
|
|
25
|
+
*
|
|
26
|
+
* @param message - Detailed internal error message for logging and debugging
|
|
27
|
+
* @param statusCode - HTTP status code (default: 500)
|
|
28
|
+
* @param errorName - Custom error name for identification and handling (default: "CustomError")
|
|
29
|
+
* @param errorType - Error type for tracing and monitoring (default: "custom_error")
|
|
30
|
+
* @param returnMessage - Optional message to return to client
|
|
31
|
+
*
|
|
32
|
+
* @example Basic Usage Examples
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // 1. Simple error (uses defaults)
|
|
35
|
+
* throw new CustomError("Something went wrong");
|
|
36
|
+
*
|
|
37
|
+
* // 2. Custom Not Found Error
|
|
38
|
+
* throw new CustomError(
|
|
39
|
+
* "User with email 'john@example.com' not found in tenant 'abc123'",
|
|
40
|
+
* 404,
|
|
41
|
+
* "UserNotFoundError",
|
|
42
|
+
* "user_not_found",
|
|
43
|
+
* "user.not_found"
|
|
44
|
+
* );
|
|
45
|
+
*
|
|
46
|
+
*/
|
|
47
|
+
constructor(message: string, statusCode?: number, errorName?: string, errorType?: string, returnMessage?: string);
|
|
48
|
+
}
|
|
49
|
+
export declare class InfrastructureError extends Error {
|
|
50
|
+
constructor(message: string);
|
|
51
|
+
}
|
|
52
|
+
export type ControllerValidationErrorObj = {
|
|
53
|
+
[key: string]: string;
|
|
54
|
+
};
|
|
55
|
+
interface HandleErrorOptions {
|
|
56
|
+
validationError?: ErrorReturnConfig;
|
|
57
|
+
notFoundError?: ErrorReturnConfig;
|
|
58
|
+
conflictError?: ErrorReturnConfig;
|
|
59
|
+
internalError?: Omit<ErrorReturnConfig, "returnMessage">;
|
|
60
|
+
applicationError?: {
|
|
61
|
+
onError?: () => void;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
interface ErrorReturnConfig {
|
|
65
|
+
logMessage?: string;
|
|
66
|
+
returnMessage?: string | Error;
|
|
67
|
+
onError?: () => void;
|
|
68
|
+
}
|
|
69
|
+
export declare function ErrorResponse(error: Error | unknown, reply: FastifyReply, span: Span, logger: pino.Logger, options?: HandleErrorOptions): FastifyReply<import("fastify").RouteGenericInterface, import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, unknown, import("fastify").FastifySchema, import("fastify").FastifyTypeProviderDefault, unknown>;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,WAAW;IAC1C,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;gBACS,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;CAOjH;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,4BAA4B,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAErE,UAAU,kBAAkB;IAC1B,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,aAAa,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IACzD,gBAAgB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CAC7C;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,GAAG,OAAO,EACtB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,6RAoF7B"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InfrastructureError = exports.CustomError = exports.ConflictError = exports.NotFoundError = exports.ValidationError = exports.DomainError = void 0;
|
|
4
|
+
exports.ErrorResponse = ErrorResponse;
|
|
5
|
+
class DomainError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "DomainError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.DomainError = DomainError;
|
|
12
|
+
class ValidationError extends DomainError {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "ValidationError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ValidationError = ValidationError;
|
|
19
|
+
class NotFoundError extends DomainError {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = "NotFoundError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.NotFoundError = NotFoundError;
|
|
26
|
+
class ConflictError extends DomainError {
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "ConflictError";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.ConflictError = ConflictError;
|
|
33
|
+
class CustomError extends DomainError {
|
|
34
|
+
/**
|
|
35
|
+
* Creates a new CustomError instance with full control over error properties
|
|
36
|
+
*
|
|
37
|
+
* @param message - Detailed internal error message for logging and debugging
|
|
38
|
+
* @param statusCode - HTTP status code (default: 500)
|
|
39
|
+
* @param errorName - Custom error name for identification and handling (default: "CustomError")
|
|
40
|
+
* @param errorType - Error type for tracing and monitoring (default: "custom_error")
|
|
41
|
+
* @param returnMessage - Optional message to return to client
|
|
42
|
+
*
|
|
43
|
+
* @example Basic Usage Examples
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // 1. Simple error (uses defaults)
|
|
46
|
+
* throw new CustomError("Something went wrong");
|
|
47
|
+
*
|
|
48
|
+
* // 2. Custom Not Found Error
|
|
49
|
+
* throw new CustomError(
|
|
50
|
+
* "User with email 'john@example.com' not found in tenant 'abc123'",
|
|
51
|
+
* 404,
|
|
52
|
+
* "UserNotFoundError",
|
|
53
|
+
* "user_not_found",
|
|
54
|
+
* "user.not_found"
|
|
55
|
+
* );
|
|
56
|
+
*
|
|
57
|
+
*/
|
|
58
|
+
constructor(message, statusCode, errorName, errorType, returnMessage) {
|
|
59
|
+
super(message);
|
|
60
|
+
this.name = errorName || "CustomError";
|
|
61
|
+
this.errorType = errorType || "custom_error";
|
|
62
|
+
this.statusCode = statusCode || 500;
|
|
63
|
+
this.returnMessage = returnMessage;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.CustomError = CustomError;
|
|
67
|
+
class InfrastructureError extends Error {
|
|
68
|
+
constructor(message) {
|
|
69
|
+
super(message);
|
|
70
|
+
this.name = "InfrastructureError";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.InfrastructureError = InfrastructureError;
|
|
74
|
+
function ErrorResponse(error, reply, span, logger, options) {
|
|
75
|
+
span.recordException(error);
|
|
76
|
+
span.setAttributes({
|
|
77
|
+
"error.message": error.message,
|
|
78
|
+
"operation.success": false,
|
|
79
|
+
});
|
|
80
|
+
if (error instanceof ValidationError) {
|
|
81
|
+
span.setAttributes({
|
|
82
|
+
"error.type": "validation_error",
|
|
83
|
+
"http.status_code": 400,
|
|
84
|
+
});
|
|
85
|
+
logger.warn({ error: error?.message || error }, "Validation Error");
|
|
86
|
+
if (options?.validationError?.onError) {
|
|
87
|
+
options.validationError.onError();
|
|
88
|
+
}
|
|
89
|
+
return reply.status(400).send({
|
|
90
|
+
message: options?.validationError?.returnMessage ||
|
|
91
|
+
options?.validationError?.returnMessage?.message ||
|
|
92
|
+
"common.invalid_request",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (error instanceof NotFoundError) {
|
|
96
|
+
span.setAttributes({
|
|
97
|
+
"error.type": "not_found_error",
|
|
98
|
+
"http.status_code": 404,
|
|
99
|
+
});
|
|
100
|
+
logger.warn({ error: error?.message || error }, "Not Found Error");
|
|
101
|
+
if (options?.notFoundError?.onError) {
|
|
102
|
+
options.notFoundError.onError();
|
|
103
|
+
}
|
|
104
|
+
return reply.status(404).send({
|
|
105
|
+
message: options?.notFoundError?.returnMessage ||
|
|
106
|
+
options?.notFoundError?.returnMessage?.message ||
|
|
107
|
+
"common.not_found_error",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (error instanceof ConflictError) {
|
|
111
|
+
span.setAttributes({
|
|
112
|
+
"error.type": "conflict_error",
|
|
113
|
+
"http.status_code": 409,
|
|
114
|
+
});
|
|
115
|
+
logger.warn({ error: error?.message || error }, "Conflict Error");
|
|
116
|
+
if (options?.conflictError?.onError) {
|
|
117
|
+
options.conflictError.onError();
|
|
118
|
+
}
|
|
119
|
+
return reply.status(409).send({
|
|
120
|
+
message: options?.conflictError?.returnMessage ||
|
|
121
|
+
options?.conflictError?.returnMessage?.message ||
|
|
122
|
+
"common.conflict_error",
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (error instanceof CustomError) {
|
|
126
|
+
span.setAttributes({
|
|
127
|
+
"error.type": error.errorType,
|
|
128
|
+
"http.status_code": error.statusCode,
|
|
129
|
+
});
|
|
130
|
+
logger.warn({ error: error?.message || error }, error.name);
|
|
131
|
+
if (options?.applicationError?.onError) {
|
|
132
|
+
options.applicationError.onError();
|
|
133
|
+
}
|
|
134
|
+
return reply.status(error.statusCode).send({
|
|
135
|
+
message: error.returnMessage || "common.internal_server_error",
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
span.setAttributes({
|
|
139
|
+
"error.type": "internal_error",
|
|
140
|
+
"http.status_code": 500,
|
|
141
|
+
});
|
|
142
|
+
logger.error({ error: error?.message || error }, "Internal Server Error");
|
|
143
|
+
if (options?.internalError?.onError) {
|
|
144
|
+
options.internalError.onError?.();
|
|
145
|
+
}
|
|
146
|
+
return reply
|
|
147
|
+
.status(500)
|
|
148
|
+
.send({ message: "common.internal_server_error", detail: "Something went wrong. Please try again later." });
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./auth/AuthMiddleware";
|
|
2
|
+
export * from "./logging/EventLogMiddleware";
|
|
3
|
+
export * from "./auth/ImplementModeMiddleware";
|
|
4
|
+
export * from "./types/AuthTypes";
|
|
5
|
+
export * from "./domain/entities/OutboxEvent";
|
|
6
|
+
export * from "./domain/repositories/OutboxRepository";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
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("./auth/AuthMiddleware"), exports);
|
|
18
|
+
__exportStar(require("./logging/EventLogMiddleware"), exports);
|
|
19
|
+
__exportStar(require("./auth/ImplementModeMiddleware"), exports);
|
|
20
|
+
__exportStar(require("./types/AuthTypes"), exports);
|
|
21
|
+
__exportStar(require("./domain/entities/OutboxEvent"), exports);
|
|
22
|
+
__exportStar(require("./domain/repositories/OutboxRepository"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,+DAA6C;AAC7C,iEAA+C;AAC/C,oDAAkC;AAClC,gEAA8C;AAC9C,yEAAuD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RedisClientType } from "redis";
|
|
2
|
+
export declare class RedisClient {
|
|
3
|
+
private static instance;
|
|
4
|
+
private static logger;
|
|
5
|
+
static getInstance(): Promise<RedisClientType>;
|
|
6
|
+
static duplicate(): Promise<RedisClientType>;
|
|
7
|
+
private static createInstance;
|
|
8
|
+
static disconnect(): Promise<void>;
|
|
9
|
+
static set(key: string, value: string, ttlSeconds?: number): Promise<void>;
|
|
10
|
+
static get(key: string): Promise<string | null>;
|
|
11
|
+
static del(key: string): Promise<void>;
|
|
12
|
+
static generateKey(prefix: string, ...parts: string[]): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=RedisClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisClient.d.ts","sourceRoot":"","sources":["../../src/infrastructure/RedisClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAE,MAAM,OAAO,CAAC;AAGtD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAgD;WAExD,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;WAOvC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;mBAS7B,cAAc;WAuBtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;WAM3B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WASnE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;WAKxC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;CAG/D"}
|