@anatix/runtime 1.0.0
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 +341 -0
- package/dist/configs/env-validation.d.ts +2 -0
- package/dist/configs/env-validation.d.ts.map +1 -0
- package/dist/configs/env-validation.js +49 -0
- package/dist/configs/env-validation.js.map +1 -0
- package/dist/configs/index.d.ts +3 -0
- package/dist/configs/index.d.ts.map +1 -0
- package/dist/configs/index.js +19 -0
- package/dist/configs/index.js.map +1 -0
- package/dist/configs/service-repo-configs.d.ts +13 -0
- package/dist/configs/service-repo-configs.d.ts.map +1 -0
- package/dist/configs/service-repo-configs.js +3 -0
- package/dist/configs/service-repo-configs.js.map +1 -0
- package/dist/configs/service-runtime.d.ts +19 -0
- package/dist/configs/service-runtime.d.ts.map +1 -0
- package/dist/configs/service-runtime.js +3 -0
- package/dist/configs/service-runtime.js.map +1 -0
- package/dist/decorators/filters/global-exception.filter.d.ts +17 -0
- package/dist/decorators/filters/global-exception.filter.d.ts.map +1 -0
- package/dist/decorators/filters/global-exception.filter.js +79 -0
- package/dist/decorators/filters/global-exception.filter.js.map +1 -0
- package/dist/decorators/filters/index.d.ts +2 -0
- package/dist/decorators/filters/index.d.ts.map +1 -0
- package/dist/decorators/filters/index.js +18 -0
- package/dist/decorators/filters/index.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +18 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/envelope/helpers/envelope.helpers.d.ts +8 -0
- package/dist/envelope/helpers/envelope.helpers.d.ts.map +1 -0
- package/dist/envelope/helpers/envelope.helpers.js +40 -0
- package/dist/envelope/helpers/envelope.helpers.js.map +1 -0
- package/dist/envelope/helpers/index.d.ts +3 -0
- package/dist/envelope/helpers/index.d.ts.map +1 -0
- package/dist/envelope/helpers/index.js +19 -0
- package/dist/envelope/helpers/index.js.map +1 -0
- package/dist/envelope/helpers/with-inbox-outbox.d.ts +12 -0
- package/dist/envelope/helpers/with-inbox-outbox.d.ts.map +1 -0
- package/dist/envelope/helpers/with-inbox-outbox.js +76 -0
- package/dist/envelope/helpers/with-inbox-outbox.js.map +1 -0
- package/dist/envelope/index.d.ts +5 -0
- package/dist/envelope/index.d.ts.map +1 -0
- package/dist/envelope/index.js +21 -0
- package/dist/envelope/index.js.map +1 -0
- package/dist/envelope/repositories/inbox.repository.d.ts +22 -0
- package/dist/envelope/repositories/inbox.repository.d.ts.map +1 -0
- package/dist/envelope/repositories/inbox.repository.js +109 -0
- package/dist/envelope/repositories/inbox.repository.js.map +1 -0
- package/dist/envelope/repositories/index.d.ts +3 -0
- package/dist/envelope/repositories/index.d.ts.map +1 -0
- package/dist/envelope/repositories/index.js +19 -0
- package/dist/envelope/repositories/index.js.map +1 -0
- package/dist/envelope/repositories/outbox.repository.d.ts +24 -0
- package/dist/envelope/repositories/outbox.repository.d.ts.map +1 -0
- package/dist/envelope/repositories/outbox.repository.js +93 -0
- package/dist/envelope/repositories/outbox.repository.js.map +1 -0
- package/dist/envelope/schemas/inbox.schema.d.ts +16 -0
- package/dist/envelope/schemas/inbox.schema.d.ts.map +1 -0
- package/dist/envelope/schemas/inbox.schema.js +69 -0
- package/dist/envelope/schemas/inbox.schema.js.map +1 -0
- package/dist/envelope/schemas/index.d.ts +3 -0
- package/dist/envelope/schemas/index.d.ts.map +1 -0
- package/dist/envelope/schemas/index.js +19 -0
- package/dist/envelope/schemas/index.js.map +1 -0
- package/dist/envelope/schemas/outbox.schema.d.ts +17 -0
- package/dist/envelope/schemas/outbox.schema.d.ts.map +1 -0
- package/dist/envelope/schemas/outbox.schema.js +71 -0
- package/dist/envelope/schemas/outbox.schema.js.map +1 -0
- package/dist/envelope/services/inbox-retry.service.d.ts +13 -0
- package/dist/envelope/services/inbox-retry.service.d.ts.map +1 -0
- package/dist/envelope/services/inbox-retry.service.js +81 -0
- package/dist/envelope/services/inbox-retry.service.js.map +1 -0
- package/dist/envelope/services/index.d.ts +2 -0
- package/dist/envelope/services/index.d.ts.map +1 -0
- package/dist/envelope/services/index.js +18 -0
- package/dist/envelope/services/index.js.map +1 -0
- package/dist/envelope/services/outbox-dispatcher.service.d.ts +15 -0
- package/dist/envelope/services/outbox-dispatcher.service.d.ts.map +1 -0
- package/dist/envelope/services/outbox-dispatcher.service.js +86 -0
- package/dist/envelope/services/outbox-dispatcher.service.js.map +1 -0
- package/dist/envelope/types/event-meta.interface.d.ts +13 -0
- package/dist/envelope/types/event-meta.interface.d.ts.map +1 -0
- package/dist/envelope/types/event-meta.interface.js +3 -0
- package/dist/envelope/types/event-meta.interface.js.map +1 -0
- package/dist/envelope/types/inbox-message.interface.d.ts +17 -0
- package/dist/envelope/types/inbox-message.interface.d.ts.map +1 -0
- package/dist/envelope/types/inbox-message.interface.js +3 -0
- package/dist/envelope/types/inbox-message.interface.js.map +1 -0
- package/dist/envelope/types/index.d.ts +4 -0
- package/dist/envelope/types/index.d.ts.map +1 -0
- package/dist/envelope/types/index.js +20 -0
- package/dist/envelope/types/index.js.map +1 -0
- package/dist/envelope/types/outbox-message.interface.d.ts +17 -0
- package/dist/envelope/types/outbox-message.interface.d.ts.map +1 -0
- package/dist/envelope/types/outbox-message.interface.js +3 -0
- package/dist/envelope/types/outbox-message.interface.js.map +1 -0
- package/dist/event-bus/index.d.ts +4 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +20 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/event-bus/modules/event-bus.module.d.ts +3 -0
- package/dist/event-bus/modules/event-bus.module.d.ts.map +1 -0
- package/dist/event-bus/modules/event-bus.module.js +21 -0
- package/dist/event-bus/modules/event-bus.module.js.map +1 -0
- package/dist/event-bus/modules/index.d.ts +2 -0
- package/dist/event-bus/modules/index.d.ts.map +1 -0
- package/dist/event-bus/modules/index.js +18 -0
- package/dist/event-bus/modules/index.js.map +1 -0
- package/dist/event-bus/services/event-bus.service.d.ts +25 -0
- package/dist/event-bus/services/event-bus.service.d.ts.map +1 -0
- package/dist/event-bus/services/event-bus.service.js +291 -0
- package/dist/event-bus/services/event-bus.service.js.map +1 -0
- package/dist/event-bus/services/index.d.ts +2 -0
- package/dist/event-bus/services/index.d.ts.map +1 -0
- package/dist/event-bus/services/index.js +18 -0
- package/dist/event-bus/services/index.js.map +1 -0
- package/dist/event-bus/types/delivery-context.interface.d.ts +8 -0
- package/dist/event-bus/types/delivery-context.interface.d.ts.map +1 -0
- package/dist/event-bus/types/delivery-context.interface.js +3 -0
- package/dist/event-bus/types/delivery-context.interface.js.map +1 -0
- package/dist/event-bus/types/handler.types.d.ts +17 -0
- package/dist/event-bus/types/handler.types.d.ts.map +1 -0
- package/dist/event-bus/types/handler.types.js +3 -0
- package/dist/event-bus/types/handler.types.js.map +1 -0
- package/dist/event-bus/types/index.d.ts +3 -0
- package/dist/event-bus/types/index.d.ts.map +1 -0
- package/dist/event-bus/types/index.js +19 -0
- package/dist/event-bus/types/index.js.map +1 -0
- package/dist/guards/base/index.d.ts +4 -0
- package/dist/guards/base/index.d.ts.map +1 -0
- package/dist/guards/base/index.js +20 -0
- package/dist/guards/base/index.js.map +1 -0
- package/dist/guards/base/jwt-auth.guard.d.ts +8 -0
- package/dist/guards/base/jwt-auth.guard.d.ts.map +1 -0
- package/dist/guards/base/jwt-auth.guard.js +72 -0
- package/dist/guards/base/jwt-auth.guard.js.map +1 -0
- package/dist/guards/base/permissions.guard.d.ts +10 -0
- package/dist/guards/base/permissions.guard.d.ts.map +1 -0
- package/dist/guards/base/permissions.guard.js +49 -0
- package/dist/guards/base/permissions.guard.js.map +1 -0
- package/dist/guards/base/roles.guard.d.ts +10 -0
- package/dist/guards/base/roles.guard.d.ts.map +1 -0
- package/dist/guards/base/roles.guard.js +58 -0
- package/dist/guards/base/roles.guard.js.map +1 -0
- package/dist/guards/decorators/auth-optional.decorator.d.ts +3 -0
- package/dist/guards/decorators/auth-optional.decorator.d.ts.map +1 -0
- package/dist/guards/decorators/auth-optional.decorator.js +8 -0
- package/dist/guards/decorators/auth-optional.decorator.js.map +1 -0
- package/dist/guards/decorators/index.d.ts +5 -0
- package/dist/guards/decorators/index.d.ts.map +1 -0
- package/dist/guards/decorators/index.js +21 -0
- package/dist/guards/decorators/index.js.map +1 -0
- package/dist/guards/decorators/permissions.decorator.d.ts +3 -0
- package/dist/guards/decorators/permissions.decorator.d.ts.map +1 -0
- package/dist/guards/decorators/permissions.decorator.js +8 -0
- package/dist/guards/decorators/permissions.decorator.js.map +1 -0
- package/dist/guards/decorators/public.decorator.d.ts +3 -0
- package/dist/guards/decorators/public.decorator.d.ts.map +1 -0
- package/dist/guards/decorators/public.decorator.js +8 -0
- package/dist/guards/decorators/public.decorator.js.map +1 -0
- package/dist/guards/decorators/roles.decorator.d.ts +3 -0
- package/dist/guards/decorators/roles.decorator.d.ts.map +1 -0
- package/dist/guards/decorators/roles.decorator.js +8 -0
- package/dist/guards/decorators/roles.decorator.js.map +1 -0
- package/dist/guards/index.d.ts +6 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +22 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/types/index.d.ts +3 -0
- package/dist/guards/types/index.d.ts.map +1 -0
- package/dist/guards/types/index.js +19 -0
- package/dist/guards/types/index.js.map +1 -0
- package/dist/guards/types/jwt-algorithms.type.d.ts +2 -0
- package/dist/guards/types/jwt-algorithms.type.d.ts.map +1 -0
- package/dist/guards/types/jwt-algorithms.type.js +3 -0
- package/dist/guards/types/jwt-algorithms.type.js.map +1 -0
- package/dist/guards/types/rbac-policy.interface.d.ts +5 -0
- package/dist/guards/types/rbac-policy.interface.d.ts.map +1 -0
- package/dist/guards/types/rbac-policy.interface.js +3 -0
- package/dist/guards/types/rbac-policy.interface.js.map +1 -0
- package/dist/guards/utils/index.d.ts +2 -0
- package/dist/guards/utils/index.d.ts.map +1 -0
- package/dist/guards/utils/index.js +18 -0
- package/dist/guards/utils/index.js.map +1 -0
- package/dist/guards/utils/token.util.d.ts +12 -0
- package/dist/guards/utils/token.util.d.ts.map +1 -0
- package/dist/guards/utils/token.util.js +46 -0
- package/dist/guards/utils/token.util.js.map +1 -0
- package/dist/health/health.service.d.ts +30 -0
- package/dist/health/health.service.d.ts.map +1 -0
- package/dist/health/health.service.js +81 -0
- package/dist/health/health.service.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/dtos/create-log.dto.d.ts +11 -0
- package/dist/logger/dtos/create-log.dto.d.ts.map +1 -0
- package/dist/logger/dtos/create-log.dto.js +60 -0
- package/dist/logger/dtos/create-log.dto.js.map +1 -0
- package/dist/logger/dtos/index.d.ts +2 -0
- package/dist/logger/dtos/index.d.ts.map +1 -0
- package/dist/logger/dtos/index.js +18 -0
- package/dist/logger/dtos/index.js.map +1 -0
- package/dist/logger/helpers/index.d.ts +2 -0
- package/dist/logger/helpers/index.d.ts.map +1 -0
- package/dist/logger/helpers/index.js +18 -0
- package/dist/logger/helpers/index.js.map +1 -0
- package/dist/logger/helpers/log-helper.d.ts +12 -0
- package/dist/logger/helpers/log-helper.d.ts.map +1 -0
- package/dist/logger/helpers/log-helper.js +34 -0
- package/dist/logger/helpers/log-helper.js.map +1 -0
- package/dist/logger/index.d.ts +4 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +20 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/types/index.d.ts +3 -0
- package/dist/logger/types/index.d.ts.map +1 -0
- package/dist/logger/types/index.js +19 -0
- package/dist/logger/types/index.js.map +1 -0
- package/dist/logger/types/log-level.enum.d.ts +7 -0
- package/dist/logger/types/log-level.enum.d.ts.map +1 -0
- package/dist/logger/types/log-level.enum.js +11 -0
- package/dist/logger/types/log-level.enum.js.map +1 -0
- package/dist/logger/types/log-port.interface.d.ts +6 -0
- package/dist/logger/types/log-port.interface.d.ts.map +1 -0
- package/dist/logger/types/log-port.interface.js +3 -0
- package/dist/logger/types/log-port.interface.js.map +1 -0
- package/dist/monitoring/prometheus.service.d.ts +19 -0
- package/dist/monitoring/prometheus.service.d.ts.map +1 -0
- package/dist/monitoring/prometheus.service.js +91 -0
- package/dist/monitoring/prometheus.service.js.map +1 -0
- package/dist/naming/anatix-naming.strategy.d.ts +19 -0
- package/dist/naming/anatix-naming.strategy.d.ts.map +1 -0
- package/dist/naming/anatix-naming.strategy.js +86 -0
- package/dist/naming/anatix-naming.strategy.js.map +1 -0
- package/dist/naming/index.d.ts +2 -0
- package/dist/naming/index.d.ts.map +1 -0
- package/dist/naming/index.js +18 -0
- package/dist/naming/index.js.map +1 -0
- package/dist/proxy/config/index.d.ts +2 -0
- package/dist/proxy/config/index.d.ts.map +1 -0
- package/dist/proxy/config/index.js +18 -0
- package/dist/proxy/config/index.js.map +1 -0
- package/dist/proxy/config/proxy.config.d.ts +8 -0
- package/dist/proxy/config/proxy.config.d.ts.map +1 -0
- package/dist/proxy/config/proxy.config.js +6 -0
- package/dist/proxy/config/proxy.config.js.map +1 -0
- package/dist/proxy/index.d.ts +3 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +19 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/methods/index.d.ts +6 -0
- package/dist/proxy/methods/index.d.ts.map +1 -0
- package/dist/proxy/methods/index.js +22 -0
- package/dist/proxy/methods/index.js.map +1 -0
- package/dist/proxy/methods/proxy-delete.d.ts +4 -0
- package/dist/proxy/methods/proxy-delete.d.ts.map +1 -0
- package/dist/proxy/methods/proxy-delete.js +27 -0
- package/dist/proxy/methods/proxy-delete.js.map +1 -0
- package/dist/proxy/methods/proxy-get.d.ts +4 -0
- package/dist/proxy/methods/proxy-get.d.ts.map +1 -0
- package/dist/proxy/methods/proxy-get.js +27 -0
- package/dist/proxy/methods/proxy-get.js.map +1 -0
- package/dist/proxy/methods/proxy-patch.d.ts +4 -0
- package/dist/proxy/methods/proxy-patch.d.ts.map +1 -0
- package/dist/proxy/methods/proxy-patch.js +27 -0
- package/dist/proxy/methods/proxy-patch.js.map +1 -0
- package/dist/proxy/methods/proxy-post.d.ts +4 -0
- package/dist/proxy/methods/proxy-post.d.ts.map +1 -0
- package/dist/proxy/methods/proxy-post.js +27 -0
- package/dist/proxy/methods/proxy-post.js.map +1 -0
- package/dist/proxy/methods/proxy-put.d.ts +4 -0
- package/dist/proxy/methods/proxy-put.d.ts.map +1 -0
- package/dist/proxy/methods/proxy-put.js +27 -0
- package/dist/proxy/methods/proxy-put.js.map +1 -0
- package/dist/security/index.d.ts +3 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +19 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/interfaces/hashing.adapter.d.ts +5 -0
- package/dist/security/interfaces/hashing.adapter.d.ts.map +1 -0
- package/dist/security/interfaces/hashing.adapter.js +3 -0
- package/dist/security/interfaces/hashing.adapter.js.map +1 -0
- package/dist/security/interfaces/index.d.ts +2 -0
- package/dist/security/interfaces/index.d.ts.map +1 -0
- package/dist/security/interfaces/index.js +18 -0
- package/dist/security/interfaces/index.js.map +1 -0
- package/dist/security/tokens/index.d.ts +2 -0
- package/dist/security/tokens/index.d.ts.map +1 -0
- package/dist/security/tokens/index.js +18 -0
- package/dist/security/tokens/index.js.map +1 -0
- package/dist/security/tokens/injection.tokens.d.ts +2 -0
- package/dist/security/tokens/injection.tokens.d.ts.map +1 -0
- package/dist/security/tokens/injection.tokens.js +5 -0
- package/dist/security/tokens/injection.tokens.js.map +1 -0
- package/dist/utils/dates/date-iso-safe.d.ts +2 -0
- package/dist/utils/dates/date-iso-safe.d.ts.map +1 -0
- package/dist/utils/dates/date-iso-safe.js +14 -0
- package/dist/utils/dates/date-iso-safe.js.map +1 -0
- package/dist/utils/dates/date-only-string.d.ts +2 -0
- package/dist/utils/dates/date-only-string.d.ts.map +1 -0
- package/dist/utils/dates/date-only-string.js +21 -0
- package/dist/utils/dates/date-only-string.js.map +1 -0
- package/dist/utils/dates/index.d.ts +3 -0
- package/dist/utils/dates/index.d.ts.map +1 -0
- package/dist/utils/dates/index.js +19 -0
- package/dist/utils/dates/index.js.map +1 -0
- package/dist/utils/filters/filter-fields-defs.d.ts +20 -0
- package/dist/utils/filters/filter-fields-defs.d.ts.map +1 -0
- package/dist/utils/filters/filter-fields-defs.js +3 -0
- package/dist/utils/filters/filter-fields-defs.js.map +1 -0
- package/dist/utils/filters/index.d.ts +3 -0
- package/dist/utils/filters/index.d.ts.map +1 -0
- package/dist/utils/filters/index.js +19 -0
- package/dist/utils/filters/index.js.map +1 -0
- package/dist/utils/filters/parse-filter-fields.d.ts +3 -0
- package/dist/utils/filters/parse-filter-fields.d.ts.map +1 -0
- package/dist/utils/filters/parse-filter-fields.js +123 -0
- package/dist/utils/filters/parse-filter-fields.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +151 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EventMeta, Envelope } from '../types';
|
|
2
|
+
export declare function ensureMeta(meta?: Partial<EventMeta>): EventMeta;
|
|
3
|
+
export declare function unbox<T>(payload: T | Envelope<T>): {
|
|
4
|
+
data: T;
|
|
5
|
+
meta: EventMeta;
|
|
6
|
+
};
|
|
7
|
+
export declare function box<T>(data: T, meta?: Partial<EventMeta>): Envelope<T>;
|
|
8
|
+
//# sourceMappingURL=envelope.helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.helpers.d.ts","sourceRoot":"","sources":["../../../src/envelope/helpers/envelope.helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAwBpD,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAY/D;AA0BD,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAmB/E;AAeD,wBAAgB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAKtE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureMeta = ensureMeta;
|
|
4
|
+
exports.unbox = unbox;
|
|
5
|
+
exports.box = box;
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
function ensureMeta(meta) {
|
|
8
|
+
const now = new Date().toISOString();
|
|
9
|
+
const correlationId = meta?.correlationId ?? (0, crypto_1.randomUUID)();
|
|
10
|
+
return {
|
|
11
|
+
messageId: meta?.messageId ?? (0, crypto_1.randomUUID)(),
|
|
12
|
+
correlationId,
|
|
13
|
+
causationId: meta?.causationId,
|
|
14
|
+
txId: meta?.txId ?? correlationId,
|
|
15
|
+
sentAt: meta?.sentAt ?? now,
|
|
16
|
+
retries: meta?.retries ?? 0,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function unbox(payload) {
|
|
20
|
+
if (typeof payload === 'object' &&
|
|
21
|
+
payload !== null &&
|
|
22
|
+
'data' in payload) {
|
|
23
|
+
const envelope = payload;
|
|
24
|
+
return {
|
|
25
|
+
data: envelope.data,
|
|
26
|
+
meta: ensureMeta(envelope.meta),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
data: payload,
|
|
31
|
+
meta: ensureMeta(),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function box(data, meta) {
|
|
35
|
+
return {
|
|
36
|
+
data,
|
|
37
|
+
meta: ensureMeta(meta),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=envelope.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.helpers.js","sourceRoot":"","sources":["../../../src/envelope/helpers/envelope.helpers.ts"],"names":[],"mappings":";;AAyBA,gCAYC;AA0BD,sBAmBC;AAeD,kBAKC;AAtGD,mCAAoC;AAyBpC,SAAgB,UAAU,CAAC,IAAyB;IAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,IAAA,mBAAU,GAAE,CAAC;IAE1D,OAAO;QACL,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,IAAA,mBAAU,GAAE;QAC1C,aAAa;QACb,WAAW,EAAE,IAAI,EAAE,WAAW;QAC9B,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,aAAa;QACjC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG;QAC3B,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,CAAC;KAC5B,CAAC;AACJ,CAAC;AA0BD,SAAgB,KAAK,CAAI,OAAwB;IAE/C,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,MAAM,IAAI,OAAO,EACjB,CAAC;QACD,MAAM,QAAQ,GAAG,OAAsB,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;IAGD,OAAO;QACL,IAAI,EAAE,OAAY;QAClB,IAAI,EAAE,UAAU,EAAE;KACnB,CAAC;AACJ,CAAC;AAeD,SAAgB,GAAG,CAAI,IAAO,EAAE,IAAyB;IACvD,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/envelope/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./envelope.helpers"), exports);
|
|
18
|
+
__exportStar(require("./with-inbox-outbox"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/envelope/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,sDAAoC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DataSource, EntityManager } from 'typeorm';
|
|
2
|
+
import type { EventMeta } from '../types';
|
|
3
|
+
export type WorkFunction<T = void> = (manager: EntityManager) => Promise<T>;
|
|
4
|
+
export type AfterFunction = (manager: EntityManager) => Promise<void>;
|
|
5
|
+
export declare function withInboxOutbox<T = void>(dataSource: DataSource, topic: string, meta: EventMeta, payload: any, work: WorkFunction<T>, after?: AfterFunction): Promise<T | undefined>;
|
|
6
|
+
export declare function stagePublish(manager: EntityManager, args: {
|
|
7
|
+
topic: string;
|
|
8
|
+
payload: any;
|
|
9
|
+
meta: EventMeta;
|
|
10
|
+
publishAfter?: Date;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=with-inbox-outbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-inbox-outbox.d.ts","sourceRoot":"","sources":["../../../src/envelope/helpers/with-inbox-outbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAQ1C,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAM5E,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AA2DtE,wBAAsB,eAAe,CAAC,CAAC,GAAG,IAAI,EAC5C,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,KAAK,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAwDxB;AAuBD,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB,GACA,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -0,0 +1,76 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.withInboxOutbox = withInboxOutbox;
|
|
37
|
+
exports.stagePublish = stagePublish;
|
|
38
|
+
const repositories_1 = require("../repositories");
|
|
39
|
+
async function withInboxOutbox(dataSource, topic, meta, payload, work, after) {
|
|
40
|
+
const queryRunner = dataSource.createQueryRunner();
|
|
41
|
+
await queryRunner.connect();
|
|
42
|
+
await queryRunner.startTransaction();
|
|
43
|
+
try {
|
|
44
|
+
const manager = queryRunner.manager;
|
|
45
|
+
const alreadyDone = await repositories_1.InboxRepo.alreadyProcessed(manager, meta.messageId);
|
|
46
|
+
if (alreadyDone) {
|
|
47
|
+
await queryRunner.rollbackTransaction();
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
await repositories_1.InboxRepo.start(manager, topic, meta, payload);
|
|
51
|
+
const result = await work(manager);
|
|
52
|
+
if (after) {
|
|
53
|
+
await after(manager);
|
|
54
|
+
}
|
|
55
|
+
await repositories_1.InboxRepo.done(manager, meta.messageId);
|
|
56
|
+
await queryRunner.commitTransaction();
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
try {
|
|
61
|
+
await repositories_1.InboxRepo.fail(queryRunner.manager, meta.messageId, error?.message || String(error));
|
|
62
|
+
}
|
|
63
|
+
catch (failError) {
|
|
64
|
+
}
|
|
65
|
+
await queryRunner.rollbackTransaction();
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
await queryRunner.release();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function stagePublish(manager, args) {
|
|
73
|
+
const { OutboxRepo } = await Promise.resolve().then(() => __importStar(require('../repositories')));
|
|
74
|
+
await OutboxRepo.enqueue(manager, args);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=with-inbox-outbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-inbox-outbox.js","sourceRoot":"","sources":["../../../src/envelope/helpers/with-inbox-outbox.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EA,0CA+DC;AAuBD,oCAWC;AAzKD,kDAA4C;AAwErC,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,KAAa,EACb,IAAe,EACf,OAAY,EACZ,IAAqB,EACrB,KAAqB;IAErB,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;IAEnD,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QAGpC,MAAM,WAAW,GAAG,MAAM,wBAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9E,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;QAGD,MAAM,wBAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAGrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAGnC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAGD,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAG9C,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;QAEtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,wBAAS,CAAC,IAAI,CAClB,WAAW,CAAC,OAAO,EACnB,IAAI,CAAC,SAAS,EACd,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAChC,CAAC;QACJ,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;QAErB,CAAC;QAGD,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;QAGxC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QAET,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAuBM,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,IAKC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAC;IACvD,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/envelope/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,YAAY,CAAC;AAG3B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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("./types"), exports);
|
|
18
|
+
__exportStar(require("./repositories"), exports);
|
|
19
|
+
__exportStar(require("./services"), exports);
|
|
20
|
+
__exportStar(require("./helpers"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/envelope/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,0CAAwB;AAGxB,iDAA+B;AAG/B,6CAA2B;AAG3B,4CAA0B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DataSource, EntityManager } from 'typeorm';
|
|
2
|
+
import type { InboxEntity } from '../schemas';
|
|
3
|
+
import type { EventMeta } from '../types';
|
|
4
|
+
export declare class InboxRepo {
|
|
5
|
+
static alreadyProcessed(manager: EntityManager, messageId: string): Promise<boolean>;
|
|
6
|
+
static start(manager: EntityManager, service: string, meta: EventMeta, payload: any): Promise<void>;
|
|
7
|
+
static done(manager: EntityManager, messageId: string): Promise<void>;
|
|
8
|
+
static fail(manager: EntityManager, messageId: string, error: string): Promise<void>;
|
|
9
|
+
static getFailedMessages(dataSource: DataSource, maxAttempts?: number, limit?: number): Promise<InboxEntity[]>;
|
|
10
|
+
static getStuckMessages(dataSource: DataSource, stuckMinutes?: number, limit?: number): Promise<InboxEntity[]>;
|
|
11
|
+
static retryFailed(dataSource: DataSource, messageId: string): Promise<void>;
|
|
12
|
+
static cleanup(dataSource: DataSource, beforeDate: Date): Promise<number>;
|
|
13
|
+
static getStats(dataSource: DataSource): Promise<{
|
|
14
|
+
pending: number;
|
|
15
|
+
done: number;
|
|
16
|
+
failed: number;
|
|
17
|
+
total: number;
|
|
18
|
+
}>;
|
|
19
|
+
static findByMessageId(dataSource: DataSource, messageId: string): Promise<InboxEntity | null>;
|
|
20
|
+
static findByService(dataSource: DataSource, service: string, limit?: number): Promise<InboxEntity[]>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=inbox.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.repository.d.ts","sourceRoot":"","sources":["../../../src/envelope/repositories/inbox.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAO1C,qBAAa,SAAS;WAQP,gBAAgB,CAC3B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;WAkBN,KAAK,CAChB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,IAAI,CAAC;WAoBH,IAAI,CACf,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;WAqBH,IAAI,CACf,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;WAwBH,iBAAiB,CAC5B,UAAU,EAAE,UAAU,EACtB,WAAW,SAAI,EACf,KAAK,SAAM,GACV,OAAO,CAAC,WAAW,EAAE,CAAC;WAoBZ,gBAAgB,CAC3B,UAAU,EAAE,UAAU,EACtB,YAAY,SAAI,EAChB,KAAK,SAAM,GACV,OAAO,CAAC,WAAW,EAAE,CAAC;WAmBZ,WAAW,CACtB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;WAoBH,OAAO,CAClB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,MAAM,CAAC;WAmBL,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;QACrD,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;WAoBW,eAAe,CAC1B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;WAajB,aAAa,CACxB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,SAAM,GACV,OAAO,CAAC,WAAW,EAAE,CAAC;CAS1B"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InboxRepo = void 0;
|
|
4
|
+
const schemas_1 = require("../schemas");
|
|
5
|
+
class InboxRepo {
|
|
6
|
+
static async alreadyProcessed(manager, messageId) {
|
|
7
|
+
const repo = manager.getRepository(schemas_1.InboxSchema);
|
|
8
|
+
const count = await repo.count({
|
|
9
|
+
where: { messageId, status: 'done' },
|
|
10
|
+
});
|
|
11
|
+
return count > 0;
|
|
12
|
+
}
|
|
13
|
+
static async start(manager, service, meta, payload) {
|
|
14
|
+
const repo = manager.getRepository(schemas_1.InboxSchema);
|
|
15
|
+
await repo.save({
|
|
16
|
+
messageId: meta.messageId,
|
|
17
|
+
service,
|
|
18
|
+
payload: JSON.stringify(payload),
|
|
19
|
+
meta: JSON.stringify(meta),
|
|
20
|
+
status: 'pending',
|
|
21
|
+
consumedAt: new Date(),
|
|
22
|
+
attempts: 0,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
static async done(manager, messageId) {
|
|
26
|
+
const repo = manager.getRepository(schemas_1.InboxSchema);
|
|
27
|
+
await repo.update({ messageId }, {
|
|
28
|
+
status: 'done',
|
|
29
|
+
processedAt: new Date(),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static async fail(manager, messageId, error) {
|
|
33
|
+
const repo = manager.getRepository(schemas_1.InboxSchema);
|
|
34
|
+
await repo
|
|
35
|
+
.createQueryBuilder()
|
|
36
|
+
.update()
|
|
37
|
+
.set({
|
|
38
|
+
status: 'failed',
|
|
39
|
+
attempts: () => 'attempts + 1',
|
|
40
|
+
error: error.substring(0, 5000),
|
|
41
|
+
processedAt: new Date(),
|
|
42
|
+
})
|
|
43
|
+
.where('messageId = :messageId', { messageId })
|
|
44
|
+
.execute();
|
|
45
|
+
}
|
|
46
|
+
static async getFailedMessages(dataSource, maxAttempts = 3, limit = 100) {
|
|
47
|
+
const repo = dataSource.getRepository(schemas_1.InboxSchema);
|
|
48
|
+
return repo
|
|
49
|
+
.createQueryBuilder('inbox')
|
|
50
|
+
.where('inbox.status = :status', { status: 'failed' })
|
|
51
|
+
.andWhere('inbox.attempts < :maxAttempts', { maxAttempts })
|
|
52
|
+
.orderBy('inbox.consumedAt', 'ASC')
|
|
53
|
+
.take(limit)
|
|
54
|
+
.getMany();
|
|
55
|
+
}
|
|
56
|
+
static async getStuckMessages(dataSource, stuckMinutes = 5, limit = 100) {
|
|
57
|
+
const repo = dataSource.getRepository(schemas_1.InboxSchema);
|
|
58
|
+
const stuckDate = new Date(Date.now() - stuckMinutes * 60 * 1000);
|
|
59
|
+
return repo
|
|
60
|
+
.createQueryBuilder('inbox')
|
|
61
|
+
.where('inbox.status = :status', { status: 'pending' })
|
|
62
|
+
.andWhere('inbox.consumedAt < :stuckDate', { stuckDate })
|
|
63
|
+
.orderBy('inbox.consumedAt', 'ASC')
|
|
64
|
+
.take(limit)
|
|
65
|
+
.getMany();
|
|
66
|
+
}
|
|
67
|
+
static async retryFailed(dataSource, messageId) {
|
|
68
|
+
const repo = dataSource.getRepository(schemas_1.InboxSchema);
|
|
69
|
+
await repo.update({ messageId }, {
|
|
70
|
+
status: 'pending',
|
|
71
|
+
error: null,
|
|
72
|
+
processedAt: null,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
static async cleanup(dataSource, beforeDate) {
|
|
76
|
+
const repo = dataSource.getRepository(schemas_1.InboxSchema);
|
|
77
|
+
const result = await repo
|
|
78
|
+
.createQueryBuilder()
|
|
79
|
+
.delete()
|
|
80
|
+
.where('status = :status', { status: 'done' })
|
|
81
|
+
.andWhere('processedAt < :beforeDate', { beforeDate })
|
|
82
|
+
.execute();
|
|
83
|
+
return result.affected || 0;
|
|
84
|
+
}
|
|
85
|
+
static async getStats(dataSource) {
|
|
86
|
+
const repo = dataSource.getRepository(schemas_1.InboxSchema);
|
|
87
|
+
const [pending, done, failed, total] = await Promise.all([
|
|
88
|
+
repo.count({ where: { status: 'pending' } }),
|
|
89
|
+
repo.count({ where: { status: 'done' } }),
|
|
90
|
+
repo.count({ where: { status: 'failed' } }),
|
|
91
|
+
repo.count(),
|
|
92
|
+
]);
|
|
93
|
+
return { pending, done, failed, total };
|
|
94
|
+
}
|
|
95
|
+
static async findByMessageId(dataSource, messageId) {
|
|
96
|
+
const repo = dataSource.getRepository(schemas_1.InboxSchema);
|
|
97
|
+
return repo.findOne({ where: { messageId } });
|
|
98
|
+
}
|
|
99
|
+
static async findByService(dataSource, service, limit = 100) {
|
|
100
|
+
const repo = dataSource.getRepository(schemas_1.InboxSchema);
|
|
101
|
+
return repo.find({
|
|
102
|
+
where: { service },
|
|
103
|
+
order: { consumedAt: 'DESC' },
|
|
104
|
+
take: limit,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.InboxRepo = InboxRepo;
|
|
109
|
+
//# sourceMappingURL=inbox.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.repository.js","sourceRoot":"","sources":["../../../src/envelope/repositories/inbox.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/envelope/repositories/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./inbox.repository"), exports);
|
|
18
|
+
__exportStar(require("./outbox.repository"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/envelope/repositories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,sDAAoC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DataSource, EntityManager } from 'typeorm';
|
|
2
|
+
import type { OutboxEntity } from '../schemas';
|
|
3
|
+
import type { EventMeta } from '../types';
|
|
4
|
+
export declare class OutboxRepo {
|
|
5
|
+
static enqueue(manager: EntityManager, params: {
|
|
6
|
+
topic: string;
|
|
7
|
+
payload: any;
|
|
8
|
+
meta?: Partial<EventMeta>;
|
|
9
|
+
publishAfter?: Date;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
static getPending(dataSource: DataSource, maxAttempts?: number, limit?: number): Promise<OutboxEntity[]>;
|
|
12
|
+
static markPublished(dataSource: DataSource, id: string): Promise<void>;
|
|
13
|
+
static markFailed(dataSource: DataSource, id: string, error: string): Promise<void>;
|
|
14
|
+
static retryFailed(dataSource: DataSource, id: string): Promise<void>;
|
|
15
|
+
static getStuckMessages(dataSource: DataSource, olderThanMinutes?: number, limit?: number): Promise<OutboxEntity[]>;
|
|
16
|
+
static cleanup(dataSource: DataSource, beforeDate: Date): Promise<number>;
|
|
17
|
+
static getStats(dataSource: DataSource): Promise<{
|
|
18
|
+
pending: number;
|
|
19
|
+
published: number;
|
|
20
|
+
failed: number;
|
|
21
|
+
total: number;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=outbox.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox.repository.d.ts","sourceRoot":"","sources":["../../../src/envelope/repositories/outbox.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAQ1C,qBAAa,UAAU;WAIR,OAAO,CAClB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,GAAG,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1B,YAAY,CAAC,EAAE,IAAI,CAAC;KACrB,GACA,OAAO,CAAC,IAAI,CAAC;WAoBH,UAAU,CACrB,UAAU,EAAE,UAAU,EACtB,WAAW,SAAI,EACf,KAAK,SAAM,GACV,OAAO,CAAC,YAAY,EAAE,CAAC;WAoBb,aAAa,CACxB,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC;WAaH,UAAU,CACrB,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;WAmBH,WAAW,CACtB,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC;WAYH,gBAAgB,CAC3B,UAAU,EAAE,UAAU,EACtB,gBAAgB,SAAK,EACrB,KAAK,SAAM,GACV,OAAO,CAAC,YAAY,EAAE,CAAC;WAmBb,OAAO,CAClB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,MAAM,CAAC;WAgBL,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;QACrD,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CAYH"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OutboxRepo = void 0;
|
|
4
|
+
const schemas_1 = require("../schemas");
|
|
5
|
+
const helpers_1 = require("../helpers");
|
|
6
|
+
class OutboxRepo {
|
|
7
|
+
static async enqueue(manager, params) {
|
|
8
|
+
const repo = manager.getRepository(schemas_1.OutboxSchema);
|
|
9
|
+
const eventMeta = (0, helpers_1.ensureMeta)(params.meta);
|
|
10
|
+
await repo.save({
|
|
11
|
+
topic: params.topic,
|
|
12
|
+
payload: JSON.stringify(params.payload),
|
|
13
|
+
meta: JSON.stringify(eventMeta),
|
|
14
|
+
status: 'pending',
|
|
15
|
+
attempts: 0,
|
|
16
|
+
publishAfter: params.publishAfter,
|
|
17
|
+
createdAt: new Date(),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
static async getPending(dataSource, maxAttempts = 5, limit = 100) {
|
|
21
|
+
const repo = dataSource.getRepository(schemas_1.OutboxSchema);
|
|
22
|
+
const now = new Date();
|
|
23
|
+
return repo
|
|
24
|
+
.createQueryBuilder('outbox')
|
|
25
|
+
.where('outbox.status = :status', { status: 'pending' })
|
|
26
|
+
.andWhere('outbox.attempts < :maxAttempts', { maxAttempts })
|
|
27
|
+
.andWhere('(outbox.publishAfter IS NULL OR outbox.publishAfter <= :now)', { now })
|
|
28
|
+
.orderBy('outbox.createdAt', 'ASC')
|
|
29
|
+
.take(limit)
|
|
30
|
+
.getMany();
|
|
31
|
+
}
|
|
32
|
+
static async markPublished(dataSource, id) {
|
|
33
|
+
const repo = dataSource.getRepository(schemas_1.OutboxSchema);
|
|
34
|
+
await repo.update(id, {
|
|
35
|
+
status: 'published',
|
|
36
|
+
publishedAt: new Date(),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
static async markFailed(dataSource, id, error) {
|
|
40
|
+
const repo = dataSource.getRepository(schemas_1.OutboxSchema);
|
|
41
|
+
await repo
|
|
42
|
+
.createQueryBuilder()
|
|
43
|
+
.update()
|
|
44
|
+
.set({
|
|
45
|
+
status: 'failed',
|
|
46
|
+
attempts: () => 'attempts + 1',
|
|
47
|
+
lastError: error.substring(0, 5000),
|
|
48
|
+
lastAttemptAt: new Date(),
|
|
49
|
+
})
|
|
50
|
+
.where('id = :id', { id })
|
|
51
|
+
.execute();
|
|
52
|
+
}
|
|
53
|
+
static async retryFailed(dataSource, id) {
|
|
54
|
+
const repo = dataSource.getRepository(schemas_1.OutboxSchema);
|
|
55
|
+
await repo.update(id, {
|
|
56
|
+
status: 'pending',
|
|
57
|
+
lastError: null,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
static async getStuckMessages(dataSource, olderThanMinutes = 10, limit = 100) {
|
|
61
|
+
const repo = dataSource.getRepository(schemas_1.OutboxSchema);
|
|
62
|
+
const olderThan = new Date(Date.now() - olderThanMinutes * 60 * 1000);
|
|
63
|
+
return repo
|
|
64
|
+
.createQueryBuilder('outbox')
|
|
65
|
+
.where('outbox.status = :status', { status: 'pending' })
|
|
66
|
+
.andWhere('(outbox.lastAttemptAt IS NOT NULL AND outbox.lastAttemptAt < :olderThan)', { olderThan })
|
|
67
|
+
.orderBy('outbox.createdAt', 'ASC')
|
|
68
|
+
.take(limit)
|
|
69
|
+
.getMany();
|
|
70
|
+
}
|
|
71
|
+
static async cleanup(dataSource, beforeDate) {
|
|
72
|
+
const repo = dataSource.getRepository(schemas_1.OutboxSchema);
|
|
73
|
+
const result = await repo
|
|
74
|
+
.createQueryBuilder()
|
|
75
|
+
.delete()
|
|
76
|
+
.where('status = :status', { status: 'published' })
|
|
77
|
+
.andWhere('publishedAt < :beforeDate', { beforeDate })
|
|
78
|
+
.execute();
|
|
79
|
+
return result.affected || 0;
|
|
80
|
+
}
|
|
81
|
+
static async getStats(dataSource) {
|
|
82
|
+
const repo = dataSource.getRepository(schemas_1.OutboxSchema);
|
|
83
|
+
const [pending, published, failed, total] = await Promise.all([
|
|
84
|
+
repo.count({ where: { status: 'pending' } }),
|
|
85
|
+
repo.count({ where: { status: 'published' } }),
|
|
86
|
+
repo.count({ where: { status: 'failed' } }),
|
|
87
|
+
repo.count(),
|
|
88
|
+
]);
|
|
89
|
+
return { pending, published, failed, total };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.OutboxRepo = OutboxRepo;
|
|
93
|
+
//# sourceMappingURL=outbox.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox.repository.js","sourceRoot":"","sources":["../../../src/envelope/repositories/outbox.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EntitySchema } from 'typeorm';
|
|
2
|
+
export type InboxStatus = 'pending' | 'done' | 'failed';
|
|
3
|
+
export interface InboxEntity {
|
|
4
|
+
id: string;
|
|
5
|
+
messageId: string;
|
|
6
|
+
service: string;
|
|
7
|
+
payload: string;
|
|
8
|
+
meta: string;
|
|
9
|
+
status: InboxStatus;
|
|
10
|
+
consumedAt: Date;
|
|
11
|
+
processedAt?: Date | null;
|
|
12
|
+
error?: string | null;
|
|
13
|
+
attempts: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const InboxSchema: EntitySchema<InboxEntity>;
|
|
16
|
+
//# sourceMappingURL=inbox.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.schema.d.ts","sourceRoot":"","sources":["../../../src/envelope/schemas/inbox.schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKvC,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAOxD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,eAAO,MAAM,WAAW,2BA+DtB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InboxSchema = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
exports.InboxSchema = new typeorm_1.EntitySchema({
|
|
6
|
+
name: 'Inbox',
|
|
7
|
+
tableName: 'inbox',
|
|
8
|
+
columns: {
|
|
9
|
+
id: {
|
|
10
|
+
type: 'uuid',
|
|
11
|
+
primary: true,
|
|
12
|
+
generated: 'uuid',
|
|
13
|
+
},
|
|
14
|
+
messageId: {
|
|
15
|
+
type: 'varchar',
|
|
16
|
+
length: 255,
|
|
17
|
+
nullable: false,
|
|
18
|
+
},
|
|
19
|
+
service: {
|
|
20
|
+
type: 'varchar',
|
|
21
|
+
length: 100,
|
|
22
|
+
nullable: false,
|
|
23
|
+
},
|
|
24
|
+
payload: {
|
|
25
|
+
type: 'text',
|
|
26
|
+
nullable: false,
|
|
27
|
+
},
|
|
28
|
+
meta: {
|
|
29
|
+
type: 'text',
|
|
30
|
+
nullable: false,
|
|
31
|
+
},
|
|
32
|
+
status: {
|
|
33
|
+
type: 'varchar',
|
|
34
|
+
length: 20,
|
|
35
|
+
default: 'pending',
|
|
36
|
+
nullable: false,
|
|
37
|
+
},
|
|
38
|
+
consumedAt: {
|
|
39
|
+
type: 'timestamp',
|
|
40
|
+
default: () => 'CURRENT_TIMESTAMP',
|
|
41
|
+
nullable: false,
|
|
42
|
+
},
|
|
43
|
+
processedAt: {
|
|
44
|
+
type: 'timestamp',
|
|
45
|
+
nullable: true,
|
|
46
|
+
},
|
|
47
|
+
error: {
|
|
48
|
+
type: 'text',
|
|
49
|
+
nullable: true,
|
|
50
|
+
},
|
|
51
|
+
attempts: {
|
|
52
|
+
type: 'int',
|
|
53
|
+
default: 0,
|
|
54
|
+
nullable: false,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
indices: [
|
|
58
|
+
{
|
|
59
|
+
name: 'idx_inbox_message_id',
|
|
60
|
+
columns: ['messageId'],
|
|
61
|
+
unique: true,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'idx_inbox_status_consumed_at',
|
|
65
|
+
columns: ['status', 'consumedAt'],
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=inbox.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.schema.js","sourceRoot":"","sources":["../../../src/envelope/schemas/inbox.schema.ts"],"names":[],"mappings":";;;AAEA,qCAAuC;AA4B1B,QAAA,WAAW,GAAG,IAAI,sBAAY,CAAc;IACvD,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE;QACP,EAAE,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,MAAM;SAClB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,KAAK;SAChB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,KAAK;SAChB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,KAAK;SAChB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,KAAK;SAChB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,KAAK;SAChB;QACD,UAAU,EAAE;YACV,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;YAClC,QAAQ,EAAE,KAAK;SAChB;QACD,WAAW,EAAE;YACX,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;SACf;QACD,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;SACf;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE;QACP;YACE,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,CAAC,WAAW,CAAC;YACtB,MAAM,EAAE,IAAI;SACb;QACD;YACE,IAAI,EAAE,8BAA8B;YACpC,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;SAClC;KACF;CACF,CAAC,CAAC"}
|