@venizia/ignis-kernel 0.2.0-5 → 0.2.0-7
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/cjs/base/auth/authorize/builders/policy.builder.d.ts +28 -33
- package/dist/cjs/base/auth/authorize/builders/policy.builder.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/builders/policy.builder.js.map +1 -1
- package/dist/cjs/base/auth/authorize/common/constants.d.ts +25 -1
- package/dist/cjs/base/auth/authorize/common/constants.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/common/constants.js +12 -18
- package/dist/cjs/base/auth/authorize/common/constants.js.map +1 -1
- package/dist/cjs/base/auth/authorize/common/errors.d.ts +9 -0
- package/dist/cjs/base/auth/authorize/common/errors.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/common/errors.js +9 -0
- package/dist/cjs/base/auth/authorize/common/errors.js.map +1 -1
- package/dist/cjs/base/auth/authorize/common/types.d.ts +1 -1
- package/dist/cjs/base/auth/authorize/common/types.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.d.ts +7 -0
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.js +11 -0
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.js.map +1 -1
- package/dist/cjs/base/auth/authorize/providers/authorization.provider.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/providers/authorization.provider.js +9 -2
- package/dist/cjs/base/auth/authorize/providers/authorization.provider.js.map +1 -1
- package/dist/cjs/base/events/common/constants.d.ts +5 -0
- package/dist/cjs/base/events/common/constants.d.ts.map +1 -0
- package/dist/cjs/base/events/common/constants.js +9 -0
- package/dist/cjs/base/events/common/constants.js.map +1 -0
- package/dist/cjs/base/events/common/index.d.ts +3 -0
- package/dist/cjs/base/events/common/index.d.ts.map +1 -0
- package/dist/cjs/base/events/common/index.js +19 -0
- package/dist/cjs/base/events/common/index.js.map +1 -0
- package/dist/cjs/base/events/common/types.d.ts +26 -0
- package/dist/cjs/base/events/common/types.d.ts.map +1 -0
- package/dist/cjs/base/events/common/types.js +3 -0
- package/dist/cjs/base/events/common/types.js.map +1 -0
- package/dist/cjs/base/events/event-bus.d.ts +41 -0
- package/dist/cjs/base/events/event-bus.d.ts.map +1 -0
- package/dist/cjs/base/events/event-bus.js +100 -0
- package/dist/cjs/base/events/event-bus.js.map +1 -0
- package/dist/cjs/base/events/index.d.ts +3 -0
- package/dist/cjs/base/events/index.d.ts.map +1 -0
- package/dist/cjs/base/events/index.js +19 -0
- package/dist/cjs/base/events/index.js.map +1 -0
- package/dist/cjs/base/index.d.ts +1 -0
- package/dist/cjs/base/index.d.ts.map +1 -1
- package/dist/cjs/base/index.js +1 -5
- package/dist/cjs/base/index.js.map +1 -1
- package/dist/esm/base/auth/authorize/builders/policy.builder.d.ts +28 -33
- package/dist/esm/base/auth/authorize/builders/policy.builder.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/builders/policy.builder.js.map +1 -1
- package/dist/esm/base/auth/authorize/common/constants.d.ts +25 -1
- package/dist/esm/base/auth/authorize/common/constants.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/common/constants.js +12 -18
- package/dist/esm/base/auth/authorize/common/constants.js.map +1 -1
- package/dist/esm/base/auth/authorize/common/errors.d.ts +9 -0
- package/dist/esm/base/auth/authorize/common/errors.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/common/errors.js +9 -0
- package/dist/esm/base/auth/authorize/common/errors.js.map +1 -1
- package/dist/esm/base/auth/authorize/common/types.d.ts +1 -1
- package/dist/esm/base/auth/authorize/common/types.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.d.ts +7 -0
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.js +11 -0
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.js.map +1 -1
- package/dist/esm/base/auth/authorize/providers/authorization.provider.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/providers/authorization.provider.js +9 -2
- package/dist/esm/base/auth/authorize/providers/authorization.provider.js.map +1 -1
- package/dist/esm/base/events/common/constants.d.ts +5 -0
- package/dist/esm/base/events/common/constants.d.ts.map +1 -0
- package/dist/esm/base/events/common/constants.js +5 -0
- package/dist/esm/base/events/common/constants.js.map +1 -0
- package/dist/esm/base/events/common/index.d.ts +3 -0
- package/dist/esm/base/events/common/index.d.ts.map +1 -0
- package/dist/esm/base/events/common/index.js +3 -0
- package/dist/esm/base/events/common/index.js.map +1 -0
- package/dist/esm/base/events/common/types.d.ts +26 -0
- package/dist/esm/base/events/common/types.d.ts.map +1 -0
- package/dist/esm/base/events/common/types.js +2 -0
- package/dist/esm/base/events/common/types.js.map +1 -0
- package/dist/esm/base/events/event-bus.d.ts +41 -0
- package/dist/esm/base/events/event-bus.d.ts.map +1 -0
- package/dist/esm/base/events/event-bus.js +93 -0
- package/dist/esm/base/events/event-bus.js.map +1 -0
- package/dist/esm/base/events/index.d.ts +3 -0
- package/dist/esm/base/events/index.d.ts.map +1 -0
- package/dist/esm/base/events/index.js +3 -0
- package/dist/esm/base/events/index.js.map +1 -0
- package/dist/esm/base/index.d.ts +1 -0
- package/dist/esm/base/index.d.ts.map +1 -1
- package/dist/esm/base/index.js +1 -5
- package/dist/esm/base/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -6,6 +6,9 @@ export class AuthorizationEnforcerRegistry extends AbstractAuthRegistry {
|
|
|
6
6
|
static { this.SINGLETON_REAL_KEY = 'authorization-enforcer-registry'; }
|
|
7
7
|
constructor() {
|
|
8
8
|
super({ scope: AuthorizationEnforcerRegistry.name });
|
|
9
|
+
/** Set by AuthorizeComponent from the application container. Held here because the descriptor scan
|
|
10
|
+
* below sees only registered enforcers, and `defaultDecision` has to be readable when there are none. */
|
|
11
|
+
this.applicationOptions = null;
|
|
9
12
|
this.configuredEnforcers = new Set();
|
|
10
13
|
this.pendingConfigurations = new Map();
|
|
11
14
|
}
|
|
@@ -19,6 +22,7 @@ export class AuthorizationEnforcerRegistry extends AbstractAuthRegistry {
|
|
|
19
22
|
super.reset();
|
|
20
23
|
this.configuredEnforcers.clear();
|
|
21
24
|
this.pendingConfigurations.clear();
|
|
25
|
+
this.applicationOptions = null;
|
|
22
26
|
}
|
|
23
27
|
getBindingPrefix() {
|
|
24
28
|
return Authorization.ENFORCER;
|
|
@@ -105,7 +109,14 @@ export class AuthorizationEnforcerRegistry extends AbstractAuthRegistry {
|
|
|
105
109
|
}
|
|
106
110
|
return enforcer.rebuildUserCache({ user: opts.user });
|
|
107
111
|
}
|
|
112
|
+
/** Options bound on the application, independent of any enforcer. */
|
|
113
|
+
setOptions(opts) {
|
|
114
|
+
this.applicationOptions = opts.options;
|
|
115
|
+
}
|
|
108
116
|
resolveOptions() {
|
|
117
|
+
if (this.applicationOptions) {
|
|
118
|
+
return this.applicationOptions;
|
|
119
|
+
}
|
|
109
120
|
for (const [, metadata] of this.descriptors) {
|
|
110
121
|
const { container } = metadata;
|
|
111
122
|
const options = container.get({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enforcer-registry.js","sourceRoot":"","sources":["../../../../../../src/base/auth/authorize/enforcers/enforcer-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAQlD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,OAAO,6BAA8B,SAAQ,oBAA4C;aAC7E,uBAAkB,GAAG,iCAAiC,
|
|
1
|
+
{"version":3,"file":"enforcer-registry.js","sourceRoot":"","sources":["../../../../../../src/base/auth/authorize/enforcers/enforcer-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.provider.d.ts","sourceRoot":"","sources":["../../../../../../src/base/auth/authorize/providers/authorization.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,WAAW,CAAC;AAKlE,qBAAa,qBAAsB,SAAQ,UAAW,YAAW,SAAS,CAAC,YAAY,CAAC;;IAKtF,KAAK,IAAI,YAAY;IAMrB,OAAO,CAAC,yBAAyB;
|
|
1
|
+
{"version":3,"file":"authorization.provider.d.ts","sourceRoot":"","sources":["../../../../../../src/base/auth/authorize/providers/authorization.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,WAAW,CAAC;AAKlE,qBAAa,qBAAsB,SAAQ,UAAW,YAAW,SAAS,CAAC,YAAY,CAAC;;IAKtF,KAAK,IAAI,YAAY;IAMrB,OAAO,CAAC,yBAAyB;IAiKjC,OAAO,CAAC,gBAAgB;CAezB"}
|
|
@@ -67,8 +67,15 @@ export class AuthorizationProvider extends BaseHelper {
|
|
|
67
67
|
// ABSTAIN → continue to enforcer
|
|
68
68
|
}
|
|
69
69
|
if (!registry.hasEnforcers()) {
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
const noEnforcerDecision = options?.defaultDecision ?? AuthorizationDecisions.DENY;
|
|
71
|
+
if (noEnforcerDecision === AuthorizationDecisions.ALLOW) {
|
|
72
|
+
logger.warn('ALLOW checking authorization | No enforcers registered | path: %s', context.req.path);
|
|
73
|
+
return next();
|
|
74
|
+
}
|
|
75
|
+
throw getError({
|
|
76
|
+
error: AuthorizationErrors.ENFORCER_NOT_REGISTERED,
|
|
77
|
+
message: `Authorization failed: authorize() was declared for this route but no enforcer is registered | path: ${context.req.path}`,
|
|
78
|
+
});
|
|
72
79
|
}
|
|
73
80
|
const resolvedName = enforcerName ?? registry.getDefaultEnforcerName();
|
|
74
81
|
const enforcer = await registry.resolveEnforcer({ name: resolvedName });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.provider.js","sourceRoot":"","sources":["../../../../../../src/base/auth/authorize/providers/authorization.provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"authorization.provider.js","sourceRoot":"","sources":["../../../../../../src/base/auth/authorize/providers/authorization.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/base/events/common/constants.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,YAAY,KAAK;IACjC,MAAM,CAAC,QAAQ,CAAC,aAAa,OAAO;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/base/events/common/constants.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;aACb,iBAAY,GAAG,CAAC,CAAC;aACjB,kBAAa,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/base/events/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/base/events/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** One occurrence of a named domain event, decoupled from whatever publishes or handles it. */
|
|
2
|
+
export interface IDomainEvent<TPayload = unknown> {
|
|
3
|
+
name: string;
|
|
4
|
+
payload: TPayload;
|
|
5
|
+
occurredAt: string;
|
|
6
|
+
traceId?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Handles one `IDomainEvent`.
|
|
10
|
+
*
|
|
11
|
+
* MUST be idempotent. The bus retries a failed handler, so delivery is at-least-once: one that
|
|
12
|
+
* half-succeeds then throws runs again from the top, re-applying whatever already landed. Three
|
|
13
|
+
* shapes break, and only the first looks dangerous: a cumulative write (`count = count + 1`, or a
|
|
14
|
+
* rolling average, which drifts toward the resampled value); several writes batched under one
|
|
15
|
+
* `Promise.all`, where any failure re-runs the ones that succeeded; and a bare INSERT of a log or
|
|
16
|
+
* audit row, which simply gains a duplicate - corrupting the record used to diagnose the retry.
|
|
17
|
+
*
|
|
18
|
+
* Resolved from the container by binding key at dispatch time, never captured as a direct reference,
|
|
19
|
+
* so rebinding the key takes effect on the next attempt - including one already in flight.
|
|
20
|
+
*/
|
|
21
|
+
export interface IEventHandler<TEvent extends IDomainEvent = IDomainEvent> {
|
|
22
|
+
handle(opts: {
|
|
23
|
+
event: TEvent;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/base/events/common/types.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,OAAO;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY;IACvE,MAAM,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/base/events/common/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Container } from '../../helpers/inversion/container.js';
|
|
2
|
+
import { BaseHelper } from '@venizia/ignis-helpers/core';
|
|
3
|
+
/** In-process, fire-and-forget domain event bus. `TPayloadMap` keys the event names, so a wrong name
|
|
4
|
+
* or payload shape is a compile error. Delivery is always async and retry is fixed - there is no
|
|
5
|
+
* knob for either, so "published" guarantees the same thing at every call site. Retry makes delivery
|
|
6
|
+
* at-least-once: handlers must be idempotent, see `IEventHandler`. */
|
|
7
|
+
export declare class EventBus<TPayloadMap extends object> extends BaseHelper {
|
|
8
|
+
private readonly container;
|
|
9
|
+
/** `register` appends, never replaces - two handlers may share an event name, and replacing would
|
|
10
|
+
* drop the first with no way for the caller to notice. */
|
|
11
|
+
private readonly handlerBindingKeysByName;
|
|
12
|
+
constructor(opts: {
|
|
13
|
+
scope?: string;
|
|
14
|
+
container: Container;
|
|
15
|
+
});
|
|
16
|
+
register<K extends keyof TPayloadMap & string>(opts: {
|
|
17
|
+
name: K;
|
|
18
|
+
handlerBindingKey: string;
|
|
19
|
+
}): void;
|
|
20
|
+
/**
|
|
21
|
+
* Never blocks and never throws back to the caller: dispatch runs outside this call's flow via
|
|
22
|
+
* `queueMicrotask`, and a handler failure is caught and logged where it happens (`dispatch`),
|
|
23
|
+
* never here.
|
|
24
|
+
*/
|
|
25
|
+
publish<K extends keyof TPayloadMap & string>(opts: {
|
|
26
|
+
name: K;
|
|
27
|
+
payload: TPayloadMap[K];
|
|
28
|
+
traceId?: string;
|
|
29
|
+
}): void;
|
|
30
|
+
/**
|
|
31
|
+
* Fixed 3 attempts / ~100ms exponential backoff, no jitter - see `EventDispatchRetry`. The
|
|
32
|
+
* handler is resolved fresh from the container on every attempt rather than once up front, so a
|
|
33
|
+
* rebind takes effect on the very next attempt of a dispatch already in flight.
|
|
34
|
+
*
|
|
35
|
+
* `executeWithRetry` is used without its own `logger` - its internal per-attempt/exhaustion
|
|
36
|
+
* logging knows nothing about the event name or `traceId`, so it cannot be the trace anyone
|
|
37
|
+
* relies on. The one line below, logged only on final failure, is.
|
|
38
|
+
*/
|
|
39
|
+
private dispatch;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=event-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../../src/base/events/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,UAAU,EAKX,MAAM,6BAA6B,CAAC;AAKrC;;;sEAGsE;AACtE,qBAAa,QAAQ,CAAC,WAAW,SAAS,MAAM,CAAE,SAAQ,UAAU;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC;8DAC0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAwB;gBAErD,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE;IAM1D,QAAQ,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE;QACnD,IAAI,EAAE,CAAC,CAAC;QACR,iBAAiB,EAAE,MAAM,CAAC;KAC3B,GAAG,IAAI;IAkBR;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE;QAClD,IAAI,EAAE,CAAC,CAAC;QACR,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAiCR;;;;;;;;OAQG;YACW,QAAQ;CAmCvB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { BaseHelper, executeWithRetry, getError, RetryBackoffStrategies, RetryJitterModes, } from '@venizia/ignis-helpers/core';
|
|
2
|
+
import isEmpty from 'lodash/isEmpty';
|
|
3
|
+
import { EventDispatchRetry } from './common/constants.js';
|
|
4
|
+
/** In-process, fire-and-forget domain event bus. `TPayloadMap` keys the event names, so a wrong name
|
|
5
|
+
* or payload shape is a compile error. Delivery is always async and retry is fixed - there is no
|
|
6
|
+
* knob for either, so "published" guarantees the same thing at every call site. Retry makes delivery
|
|
7
|
+
* at-least-once: handlers must be idempotent, see `IEventHandler`. */
|
|
8
|
+
export class EventBus extends BaseHelper {
|
|
9
|
+
constructor(opts) {
|
|
10
|
+
super({ scope: opts.scope ?? EventBus.name });
|
|
11
|
+
this.container = opts.container;
|
|
12
|
+
this.handlerBindingKeysByName = new Map();
|
|
13
|
+
}
|
|
14
|
+
register(opts) {
|
|
15
|
+
const { name, handlerBindingKey } = opts;
|
|
16
|
+
if (isEmpty(name) || isEmpty(handlerBindingKey)) {
|
|
17
|
+
throw getError({
|
|
18
|
+
message: `[EventBus][register] Invalid registration | name: ${String(name)} | handlerBindingKey: ${handlerBindingKey}`,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const existing = this.handlerBindingKeysByName.get(name);
|
|
22
|
+
if (existing) {
|
|
23
|
+
existing.push(handlerBindingKey);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.handlerBindingKeysByName.set(name, [handlerBindingKey]);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Never blocks and never throws back to the caller: dispatch runs outside this call's flow via
|
|
30
|
+
* `queueMicrotask`, and a handler failure is caught and logged where it happens (`dispatch`),
|
|
31
|
+
* never here.
|
|
32
|
+
*/
|
|
33
|
+
publish(opts) {
|
|
34
|
+
const { name, payload, traceId } = opts;
|
|
35
|
+
const event = {
|
|
36
|
+
name,
|
|
37
|
+
payload,
|
|
38
|
+
occurredAt: new Date().toISOString(),
|
|
39
|
+
traceId,
|
|
40
|
+
};
|
|
41
|
+
const handlerBindingKeys = this.handlerBindingKeysByName.get(name);
|
|
42
|
+
if (!handlerBindingKeys?.length) {
|
|
43
|
+
// A typo is already a compile error, so at runtime this only means nobody is listening yet -
|
|
44
|
+
// a legitimate state on a fire-and-forget bus, not an incident.
|
|
45
|
+
this.logger.debug('[publish] No handler registered | name: %s | traceId: %s', name, traceId);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
for (const handlerBindingKey of handlerBindingKeys) {
|
|
49
|
+
queueMicrotask(() => {
|
|
50
|
+
// `dispatch` catches every failure path itself and never rejects - this `.catch` is an
|
|
51
|
+
// unreachable backstop, kept (and logged) rather than left floating, for the day it isn't.
|
|
52
|
+
this.dispatch({ event, handlerBindingKey }).catch((error) => {
|
|
53
|
+
this.logger.error('[publish] Unexpected dispatch failure | name: %s | Error: %s', event.name, error);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Fixed 3 attempts / ~100ms exponential backoff, no jitter - see `EventDispatchRetry`. The
|
|
60
|
+
* handler is resolved fresh from the container on every attempt rather than once up front, so a
|
|
61
|
+
* rebind takes effect on the very next attempt of a dispatch already in flight.
|
|
62
|
+
*
|
|
63
|
+
* `executeWithRetry` is used without its own `logger` - its internal per-attempt/exhaustion
|
|
64
|
+
* logging knows nothing about the event name or `traceId`, so it cannot be the trace anyone
|
|
65
|
+
* relies on. The one line below, logged only on final failure, is.
|
|
66
|
+
*/
|
|
67
|
+
async dispatch(opts) {
|
|
68
|
+
const { event, handlerBindingKey } = opts;
|
|
69
|
+
let lastAttempt = 0;
|
|
70
|
+
try {
|
|
71
|
+
await executeWithRetry({
|
|
72
|
+
operation: `EventBus.dispatch:${event.name}`,
|
|
73
|
+
maxAttempts: EventDispatchRetry.MAX_ATTEMPTS,
|
|
74
|
+
backoff: {
|
|
75
|
+
strategy: RetryBackoffStrategies.EXPONENTIAL,
|
|
76
|
+
initialDelayMs: EventDispatchRetry.BASE_DELAY_MS,
|
|
77
|
+
jitter: RetryJitterModes.NONE,
|
|
78
|
+
},
|
|
79
|
+
execution: async ({ attempt }) => {
|
|
80
|
+
lastAttempt = attempt;
|
|
81
|
+
const handler = this.container.get({ key: handlerBindingKey });
|
|
82
|
+
await handler.handle({ event });
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
// The only trace this failure leaves: it is caught here and never reaches the publisher, so
|
|
88
|
+
// the event name, traceId and attempt count all have to be on this one line.
|
|
89
|
+
this.logger.error('[dispatch] Handler exhausted retries | name: %s | traceId: %s | attempts: %d | handlerBindingKey: %s | Error: %s', event.name, event.traceId, lastAttempt, handlerBindingKey, error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=event-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../../src/base/events/event-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/base/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/base/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
package/dist/esm/base/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './auth/index.js';
|
|
|
3
3
|
export * from './components/index.js';
|
|
4
4
|
export * from './controllers/index.js';
|
|
5
5
|
export * from './datasources/index.js';
|
|
6
|
+
export * from './events/index.js';
|
|
6
7
|
export * from './metadata/index.js';
|
|
7
8
|
export * from './middlewares/index.js';
|
|
8
9
|
export * from './mixins/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
package/dist/esm/base/index.js
CHANGED
|
@@ -3,12 +3,8 @@ export * from './auth/index.js';
|
|
|
3
3
|
export * from './components/index.js';
|
|
4
4
|
export * from './controllers/index.js';
|
|
5
5
|
export * from './datasources/index.js';
|
|
6
|
+
export * from './events/index.js';
|
|
6
7
|
export * from './metadata/index.js';
|
|
7
|
-
// Deliberately public, not an accidental leak: core's own `base/applications/base.ts` (registers
|
|
8
|
-
// `emojiFavicon`/`notFoundHandler`) and `base/middlewares/request-spy/request-spy.middleware.ts`
|
|
9
|
-
// (reads `REQUEST_ID_KEY`, registers `RequestErrors`) both need these across the package boundary
|
|
10
|
-
// the split introduced - core did not export this barrel before the move, but two of its own files
|
|
11
|
-
// now depend on symbols that only live here.
|
|
12
8
|
export * from './middlewares/index.js';
|
|
13
9
|
export * from './mixins/index.js';
|
|
14
10
|
export * from './models/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-kernel",
|
|
3
|
-
"version": "0.2.0-
|
|
3
|
+
"version": "0.2.0-7",
|
|
4
4
|
"description": "Browser-pure kernel of the IGNIS framework: dependency injection, lifecycle, REST controllers, repository and datasource abstractions, and the authentication and authorization seams. No node builtin and no server-only peer, so the same kernel serves a Bun server and a browser Worker.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
"prepublishOnly": "bun run rebuild"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"@venizia/ignis-filter": "^0.2.0-
|
|
83
|
-
"@venizia/ignis-helpers": "^0.2.0-
|
|
84
|
-
"@venizia/ignis-inversion": "^0.2.0-
|
|
82
|
+
"@venizia/ignis-filter": "^0.2.0-3",
|
|
83
|
+
"@venizia/ignis-helpers": "^0.2.0-6",
|
|
84
|
+
"@venizia/ignis-inversion": "^0.2.0-2",
|
|
85
85
|
"lodash": "^4.18.1",
|
|
86
86
|
"reflect-metadata": "^0.2.2",
|
|
87
87
|
"zod": "^4.4.3"
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"devDependencies": {
|
|
108
108
|
"@types/bun": "^1.3.14",
|
|
109
109
|
"@types/lodash": "^4.17.23",
|
|
110
|
-
"@venizia/dev-configs": "^0.2.0-
|
|
110
|
+
"@venizia/dev-configs": "^0.2.0-2",
|
|
111
111
|
"casbin": "^5.51.1",
|
|
112
112
|
"eslint": "^10.7.0",
|
|
113
113
|
"prettier": "^3.9.5",
|