apcore-js 0.21.0 → 0.22.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 +33 -3
- package/dist/acl-file.d.ts +12 -0
- package/dist/acl-file.d.ts.map +1 -0
- package/dist/acl-file.js +46 -0
- package/dist/acl-file.js.map +1 -0
- package/dist/acl-handlers.d.ts.map +1 -1
- package/dist/acl-handlers.js +5 -0
- package/dist/acl-handlers.js.map +1 -1
- package/dist/acl.d.ts.map +1 -1
- package/dist/acl.js +20 -37
- package/dist/acl.js.map +1 -1
- package/dist/async-task.d.ts +49 -14
- package/dist/async-task.d.ts.map +1 -1
- package/dist/async-task.js +134 -39
- package/dist/async-task.js.map +1 -1
- package/dist/bindings.d.ts +1 -1
- package/dist/bindings.d.ts.map +1 -1
- package/dist/bindings.js +10 -26
- package/dist/bindings.js.map +1 -1
- package/dist/browser/index.d.ts +77 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +78 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/builtin-steps.d.ts +14 -12
- package/dist/builtin-steps.d.ts.map +1 -1
- package/dist/builtin-steps.js +83 -30
- package/dist/builtin-steps.js.map +1 -1
- package/dist/cancel.d.ts +23 -2
- package/dist/cancel.d.ts.map +1 -1
- package/dist/cancel.js +31 -6
- package/dist/cancel.js.map +1 -1
- package/dist/client.d.ts +4 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +19 -7
- package/dist/client.js.map +1 -1
- package/dist/config-defaults.d.ts +30 -0
- package/dist/config-defaults.d.ts.map +1 -0
- package/dist/config-defaults.js +83 -0
- package/dist/config-defaults.js.map +1 -0
- package/dist/config.d.ts +39 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +60 -126
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +36 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +94 -11
- package/dist/context.js.map +1 -1
- package/dist/errors.d.ts +64 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +101 -7
- package/dist/errors.js.map +1 -1
- package/dist/events/emitter.d.ts +46 -12
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +146 -56
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/events/retry.d.ts +35 -0
- package/dist/events/retry.d.ts.map +1 -0
- package/dist/events/retry.js +52 -0
- package/dist/events/retry.js.map +1 -0
- package/dist/events/subscribers.d.ts +52 -9
- package/dist/events/subscribers.d.ts.map +1 -1
- package/dist/events/subscribers.js +96 -63
- package/dist/events/subscribers.js.map +1 -1
- package/dist/executor.d.ts +4 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +143 -16
- package/dist/executor.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -4
- package/dist/index.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +2 -2
- package/dist/middleware/circuit-breaker.d.ts.map +1 -1
- package/dist/middleware/circuit-breaker.js +19 -19
- package/dist/middleware/circuit-breaker.js.map +1 -1
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/manager.d.ts +6 -2
- package/dist/middleware/manager.d.ts.map +1 -1
- package/dist/middleware/manager.js +36 -1
- package/dist/middleware/manager.js.map +1 -1
- package/dist/middleware/platform-notify.d.ts +2 -3
- package/dist/middleware/platform-notify.d.ts.map +1 -1
- package/dist/middleware/platform-notify.js +5 -6
- package/dist/middleware/platform-notify.js.map +1 -1
- package/dist/middleware/tracing-otel-default.d.ts +16 -0
- package/dist/middleware/tracing-otel-default.d.ts.map +1 -0
- package/dist/middleware/tracing-otel-default.js +25 -0
- package/dist/middleware/tracing-otel-default.js.map +1 -0
- package/dist/middleware/tracing.d.ts.map +1 -1
- package/dist/middleware/tracing.js +9 -10
- package/dist/middleware/tracing.js.map +1 -1
- package/dist/pipeline.d.ts +1 -1
- package/dist/pipeline.js +11 -11
- package/dist/pipeline.js.map +1 -1
- package/dist/registry/metadata-pure.d.ts +13 -0
- package/dist/registry/metadata-pure.d.ts.map +1 -0
- package/dist/registry/metadata-pure.js +67 -0
- package/dist/registry/metadata-pure.js.map +1 -0
- package/dist/registry/metadata.d.ts +8 -4
- package/dist/registry/metadata.d.ts.map +1 -1
- package/dist/registry/metadata.js +9 -70
- package/dist/registry/metadata.js.map +1 -1
- package/dist/registry/multi-class.d.ts +0 -31
- package/dist/registry/multi-class.d.ts.map +1 -1
- package/dist/registry/registry.d.ts +46 -10
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +273 -33
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/scanner.d.ts.map +1 -1
- package/dist/registry/scanner.js +3 -15
- package/dist/registry/scanner.js.map +1 -1
- package/dist/schema/loader-pure.d.ts +24 -0
- package/dist/schema/loader-pure.d.ts.map +1 -0
- package/dist/schema/loader-pure.js +153 -0
- package/dist/schema/loader-pure.js.map +1 -0
- package/dist/schema/loader.d.ts +14 -30
- package/dist/schema/loader.d.ts.map +1 -1
- package/dist/schema/loader.js +20 -201
- package/dist/schema/loader.js.map +1 -1
- package/dist/schema/ref-resolver.d.ts.map +1 -1
- package/dist/schema/ref-resolver.js +7 -21
- package/dist/schema/ref-resolver.js.map +1 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +1 -1
- package/dist/schema/types.js.map +1 -1
- package/dist/schema/validator.d.ts.map +1 -1
- package/dist/schema/validator.js +11 -20
- package/dist/schema/validator.js.map +1 -1
- package/dist/streaming.d.ts +21 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +32 -0
- package/dist/streaming.js.map +1 -0
- package/dist/sys-modules/control.d.ts +0 -78
- package/dist/sys-modules/control.d.ts.map +1 -1
- package/dist/sys-modules/health.d.ts +0 -138
- package/dist/sys-modules/health.d.ts.map +1 -1
- package/dist/sys-modules/install.d.ts +12 -0
- package/dist/sys-modules/install.d.ts.map +1 -0
- package/dist/sys-modules/install.js +14 -0
- package/dist/sys-modules/install.js.map +1 -0
- package/dist/sys-modules/manifest.d.ts +1 -141
- package/dist/sys-modules/manifest.d.ts.map +1 -1
- package/dist/sys-modules/overrides-file.d.ts +14 -0
- package/dist/sys-modules/overrides-file.d.ts.map +1 -0
- package/dist/sys-modules/overrides-file.js +31 -0
- package/dist/sys-modules/overrides-file.js.map +1 -0
- package/dist/sys-modules/registration.d.ts.map +1 -1
- package/dist/sys-modules/registration.js +40 -20
- package/dist/sys-modules/registration.js.map +1 -1
- package/dist/sys-modules/toggle.d.ts +0 -70
- package/dist/sys-modules/toggle.d.ts.map +1 -1
- package/dist/sys-modules/usage.d.ts +1 -132
- package/dist/sys-modules/usage.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -11
- package/dist/utils/index.js.map +1 -1
- package/package.json +22 -7
- package/dist/registry/index.d.ts +0 -15
- package/dist/registry/index.d.ts.map +0 -1
- package/dist/registry/index.js +0 -11
- package/dist/registry/index.js.map +0 -1
- package/dist/schema/index.d.ts +0 -11
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -9
- package/dist/schema/index.js.map +0 -1
|
@@ -11,12 +11,12 @@ import { CircuitBreakerOpenError } from '../errors.js';
|
|
|
11
11
|
import { createEvent } from '../events/emitter.js';
|
|
12
12
|
import { Middleware } from './base.js';
|
|
13
13
|
export const CTX_CIRCUIT_STATE = '_apcore.mw.circuit.state';
|
|
14
|
-
export var
|
|
15
|
-
(function (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
})(
|
|
14
|
+
export var CircuitBreakerState;
|
|
15
|
+
(function (CircuitBreakerState) {
|
|
16
|
+
CircuitBreakerState["CLOSED"] = "CLOSED";
|
|
17
|
+
CircuitBreakerState["OPEN"] = "OPEN";
|
|
18
|
+
CircuitBreakerState["HALF_OPEN"] = "HALF_OPEN";
|
|
19
|
+
})(CircuitBreakerState || (CircuitBreakerState = {}));
|
|
20
20
|
class RollingWindow {
|
|
21
21
|
_cap;
|
|
22
22
|
_buf;
|
|
@@ -68,7 +68,7 @@ export class CircuitBreakerMiddleware extends Middleware {
|
|
|
68
68
|
const key = this._key(moduleId, callerId);
|
|
69
69
|
if (!this._circuits.has(key)) {
|
|
70
70
|
this._circuits.set(key, {
|
|
71
|
-
state:
|
|
71
|
+
state: CircuitBreakerState.CLOSED,
|
|
72
72
|
window: new RollingWindow(this._windowSize),
|
|
73
73
|
openedAt: null,
|
|
74
74
|
probeInFlight: false,
|
|
@@ -77,22 +77,22 @@ export class CircuitBreakerMiddleware extends Middleware {
|
|
|
77
77
|
return this._circuits.get(key);
|
|
78
78
|
}
|
|
79
79
|
_maybeHalfOpen(record) {
|
|
80
|
-
if (record.state ===
|
|
80
|
+
if (record.state === CircuitBreakerState.OPEN && record.openedAt !== null) {
|
|
81
81
|
if (Date.now() - record.openedAt >= this._recoveryWindowMs) {
|
|
82
|
-
record.state =
|
|
82
|
+
record.state = CircuitBreakerState.HALF_OPEN;
|
|
83
83
|
record.probeInFlight = false;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
_openCircuit(moduleId, callerId, record) {
|
|
88
|
-
record.state =
|
|
88
|
+
record.state = CircuitBreakerState.OPEN;
|
|
89
89
|
record.openedAt = Date.now();
|
|
90
90
|
record.probeInFlight = false;
|
|
91
91
|
console.warn(`[apcore:middleware] Circuit OPEN for module '${moduleId}' (caller: ${callerId ?? 'unknown'})`);
|
|
92
92
|
this._emit('apcore.circuit.opened', moduleId, callerId, 'warn');
|
|
93
93
|
}
|
|
94
94
|
_closeCircuit(moduleId, callerId, record) {
|
|
95
|
-
record.state =
|
|
95
|
+
record.state = CircuitBreakerState.CLOSED;
|
|
96
96
|
record.openedAt = null;
|
|
97
97
|
record.probeInFlight = false;
|
|
98
98
|
console.warn(`[apcore:middleware] Circuit CLOSED for module '${moduleId}' (caller: ${callerId ?? 'unknown'})`);
|
|
@@ -113,10 +113,10 @@ export class CircuitBreakerMiddleware extends Middleware {
|
|
|
113
113
|
const record = this._getRecord(moduleId, callerId);
|
|
114
114
|
this._maybeHalfOpen(record);
|
|
115
115
|
context.data[CTX_CIRCUIT_STATE] = record.state;
|
|
116
|
-
if (record.state ===
|
|
116
|
+
if (record.state === CircuitBreakerState.OPEN) {
|
|
117
117
|
throw new CircuitBreakerOpenError(moduleId, callerId);
|
|
118
118
|
}
|
|
119
|
-
if (record.state ===
|
|
119
|
+
if (record.state === CircuitBreakerState.HALF_OPEN) {
|
|
120
120
|
if (record.probeInFlight) {
|
|
121
121
|
throw new CircuitBreakerOpenError(moduleId, callerId);
|
|
122
122
|
}
|
|
@@ -128,9 +128,9 @@ export class CircuitBreakerMiddleware extends Middleware {
|
|
|
128
128
|
const callerId = context.callerId;
|
|
129
129
|
const record = this._getRecord(moduleId, callerId);
|
|
130
130
|
record.window.record(false);
|
|
131
|
-
if (record.state ===
|
|
131
|
+
if (record.state === CircuitBreakerState.HALF_OPEN) {
|
|
132
132
|
this._closeCircuit(moduleId, callerId, record);
|
|
133
|
-
context.data[CTX_CIRCUIT_STATE] =
|
|
133
|
+
context.data[CTX_CIRCUIT_STATE] = CircuitBreakerState.CLOSED;
|
|
134
134
|
}
|
|
135
135
|
return null;
|
|
136
136
|
}
|
|
@@ -141,15 +141,15 @@ export class CircuitBreakerMiddleware extends Middleware {
|
|
|
141
141
|
const callerId = context.callerId;
|
|
142
142
|
const record = this._getRecord(moduleId, callerId);
|
|
143
143
|
record.window.record(true);
|
|
144
|
-
if (record.state ===
|
|
144
|
+
if (record.state === CircuitBreakerState.HALF_OPEN) {
|
|
145
145
|
this._openCircuit(moduleId, callerId, record);
|
|
146
|
-
context.data[CTX_CIRCUIT_STATE] =
|
|
146
|
+
context.data[CTX_CIRCUIT_STATE] = CircuitBreakerState.OPEN;
|
|
147
147
|
}
|
|
148
|
-
else if (record.state ===
|
|
148
|
+
else if (record.state === CircuitBreakerState.CLOSED) {
|
|
149
149
|
if (record.window.length >= this._windowSize &&
|
|
150
150
|
record.window.errorRate >= this._openThreshold) {
|
|
151
151
|
this._openCircuit(moduleId, callerId, record);
|
|
152
|
-
context.data[CTX_CIRCUIT_STATE] =
|
|
152
|
+
context.data[CTX_CIRCUIT_STATE] = CircuitBreakerState.OPEN;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/middleware/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE5D,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/middleware/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export { RetryHintMiddleware, RetryMiddleware, CTX_RETRY_COUNT_PREFIX, CTX_RETRY
|
|
|
8
8
|
export type { RetryConfig } from './retry.js';
|
|
9
9
|
export { ErrorHistoryMiddleware } from './error-history.js';
|
|
10
10
|
export { PlatformNotifyMiddleware } from './platform-notify.js';
|
|
11
|
-
export { CircuitBreakerMiddleware,
|
|
11
|
+
export { CircuitBreakerMiddleware, CircuitBreakerState, CTX_CIRCUIT_STATE, } from './circuit-breaker.js';
|
|
12
12
|
export type { CircuitBreakerOptions } from './circuit-breaker.js';
|
|
13
13
|
export { TracingMiddleware, CTX_TRACING_SPAN_ID } from './tracing.js';
|
|
14
14
|
export type { OtelTracer, OtelSpan, TracingMiddlewareOptions } from './tracing.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAClH,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAClH,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/middleware/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { LoggingMiddleware } from './logging.js';
|
|
|
5
5
|
export { RetryHintMiddleware, RetryMiddleware, CTX_RETRY_COUNT_PREFIX, CTX_RETRY_DELAY_PREFIX } from './retry.js';
|
|
6
6
|
export { ErrorHistoryMiddleware } from './error-history.js';
|
|
7
7
|
export { PlatformNotifyMiddleware } from './platform-notify.js';
|
|
8
|
-
export { CircuitBreakerMiddleware,
|
|
8
|
+
export { CircuitBreakerMiddleware, CircuitBreakerState, CTX_CIRCUIT_STATE, } from './circuit-breaker.js';
|
|
9
9
|
export { TracingMiddleware, CTX_TRACING_SPAN_ID } from './tracing.js';
|
|
10
10
|
export { validateContextKey, isAsyncHandler } from './context-namespace.js';
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAElH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAElH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { Context } from '../context.js';
|
|
5
5
|
import { ModuleError } from '../errors.js';
|
|
6
|
-
import { Middleware, RetrySignal } from './base.js';
|
|
6
|
+
import { type Middleware, RetrySignal } from './base.js';
|
|
7
7
|
export declare class MiddlewareChainError extends ModuleError {
|
|
8
8
|
static readonly DEFAULT_RETRYABLE: boolean | null;
|
|
9
9
|
readonly original: Error;
|
|
@@ -12,7 +12,11 @@ export declare class MiddlewareChainError extends ModuleError {
|
|
|
12
12
|
}
|
|
13
13
|
export declare class MiddlewareManager {
|
|
14
14
|
private _middlewares;
|
|
15
|
-
|
|
15
|
+
private _registrations;
|
|
16
|
+
add(middleware: Middleware, opts?: {
|
|
17
|
+
allowDuplicate?: boolean;
|
|
18
|
+
identityKey?: string;
|
|
19
|
+
}): void;
|
|
16
20
|
remove(middleware: Middleware): boolean;
|
|
17
21
|
snapshot(): Middleware[];
|
|
18
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/middleware/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/middleware/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEzD,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,gBAAyB,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAS;IAEnE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,UAAU,EAAE,CAAC;gBAE/B,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE;CAM/D;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,cAAc,CAAqE;IAE3F,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiD5F,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAiBvC,QAAQ,IAAI,UAAU,EAAE;IAIxB;;;;;;OAMG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAoB7C,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAe7B,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,mBAAmB,EAAE,UAAU,EAAE,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;CAwBzD"}
|
|
@@ -16,7 +16,35 @@ export class MiddlewareChainError extends ModuleError {
|
|
|
16
16
|
}
|
|
17
17
|
export class MiddlewareManager {
|
|
18
18
|
_middlewares = [];
|
|
19
|
-
|
|
19
|
+
_registrations = new Map();
|
|
20
|
+
add(middleware, opts) {
|
|
21
|
+
// A-D-017: reject priority > 1000 at the manager level (Python/Rust parity).
|
|
22
|
+
// The Middleware base class also guards this at construction, but a plain
|
|
23
|
+
// object or a subclass bypassing super() could carry an out-of-range value.
|
|
24
|
+
if (middleware.priority > 1000) {
|
|
25
|
+
throw new RangeError(`Middleware '${middleware.constructor.name}' has priority ${middleware.priority} ` +
|
|
26
|
+
`which exceeds the maximum allowed value of 1000`);
|
|
27
|
+
}
|
|
28
|
+
// A-D-018(a) DEFERRED: default identity stays constructor.name. A robust
|
|
29
|
+
// module/package-qualified identity (Python uses module.qualname) is not
|
|
30
|
+
// reliably available for a JS class at runtime, so we keep the bare name.
|
|
31
|
+
const identity = opts?.identityKey ?? middleware.constructor.name;
|
|
32
|
+
const prior = this._registrations.get(identity);
|
|
33
|
+
if (!opts?.allowDuplicate && prior !== undefined) {
|
|
34
|
+
console.warn(`[apcore:middleware] Duplicate middleware registration detected for identity '${identity}' ` +
|
|
35
|
+
`(class: ${middleware.constructor.name}). ` +
|
|
36
|
+
`If intentional, pass allowDuplicate: true or use a unique identityKey. ` +
|
|
37
|
+
`Note: identity defaults to constructor.name, which may collide across packages. ` +
|
|
38
|
+
`Prior registration site:\n${prior.stack}\nCurrent registration site:\n${new Error().stack ?? '(unavailable)'}`);
|
|
39
|
+
}
|
|
40
|
+
// A-D-019(b) first-registration-wins: only record the identity when it is
|
|
41
|
+
// absent. A duplicate must NOT overwrite the original registration site.
|
|
42
|
+
// A-D-021/022(d): identity is recorded even when allowDuplicate is true —
|
|
43
|
+
// only the warning above is suppressed by allowDuplicate, not the recording.
|
|
44
|
+
if (prior === undefined) {
|
|
45
|
+
const stack = new Error().stack ?? '(unavailable)';
|
|
46
|
+
this._registrations.set(identity, { middleware, stack });
|
|
47
|
+
}
|
|
20
48
|
// Stable insertion: find the first middleware with a strictly lower priority
|
|
21
49
|
// and insert before it. This keeps higher-priority middlewares first and
|
|
22
50
|
// preserves registration order among equal priorities.
|
|
@@ -33,6 +61,13 @@ export class MiddlewareManager {
|
|
|
33
61
|
for (let i = 0; i < this._middlewares.length; i++) {
|
|
34
62
|
if (this._middlewares[i] === middleware) {
|
|
35
63
|
this._middlewares.splice(i, 1);
|
|
64
|
+
// Remove from identity registry so the same class can be re-added cleanly
|
|
65
|
+
for (const [key, reg] of this._registrations.entries()) {
|
|
66
|
+
if (reg.middleware === middleware) {
|
|
67
|
+
this._registrations.delete(key);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
36
71
|
return true;
|
|
37
72
|
}
|
|
38
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/middleware/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/middleware/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAmB,WAAW,EAAE,MAAM,WAAW,CAAC;AAEzD,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD,MAAM,CAAmB,iBAAiB,GAAmB,KAAK,CAAC;IAE1D,QAAQ,CAAQ;IAChB,mBAAmB,CAAe;IAE3C,YAAY,QAAe,EAAE,mBAAiC;QAC5D,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACjD,CAAC;;AAGH,MAAM,OAAO,iBAAiB;IACpB,YAAY,GAAiB,EAAE,CAAC;IAChC,cAAc,GAA2D,IAAI,GAAG,EAAE,CAAC;IAE3F,GAAG,CAAC,UAAsB,EAAE,IAAyD;QACnF,6EAA6E;QAC7E,0EAA0E;QAC1E,4EAA4E;QAC5E,IAAI,UAAU,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,UAAU,CAClB,eAAe,UAAU,CAAC,WAAW,CAAC,IAAI,kBAAkB,UAAU,CAAC,QAAQ,GAAG;gBAChF,iDAAiD,CACpD,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,QAAQ,GAAG,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;QAElE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,cAAc,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CACV,gFAAgF,QAAQ,IAAI;gBAC5F,WAAW,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK;gBAC3C,yEAAyE;gBACzE,kFAAkF;gBAClF,6BAA6B,KAAK,CAAC,KAAK,iCAAiC,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,eAAe,EAAE,CAChH,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,yEAAyE;QACzE,0EAA0E;QAC1E,6EAA6E;QAC7E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,eAAe,CAAC;YACnD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,6EAA6E;QAC7E,yEAAyE;QACzE,uDAAuD;QACvD,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxD,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,UAAsB;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,0EAA0E;gBAC1E,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;oBACvD,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;wBAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChC,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CACjB,QAAgB,EAChB,MAA+B,EAC/B,OAAgB;QAEhB,IAAI,aAAa,GAAG,MAAM,CAAC;QAC3B,MAAM,mBAAmB,GAAiB,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;gBACjE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC5C,aAAa,GAAG,MAAiC,CAAC;gBACpD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,oBAAoB,CAAC,CAAU,EAAE,mBAAmB,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAAgB,EAChB,MAA+B,EAC/B,MAA+B,EAC/B,OAAgB;QAEhB,IAAI,aAAa,GAAG,MAAM,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,oFAAoF;QACpF,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YACpF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5C,aAAa,GAAG,MAAiC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,MAA+B,EAC/B,KAAY,EACZ,OAAgB,EAChB,mBAAiC;QAEjC,KAAK,IAAI,CAAC,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACtF,qDAAqD;gBACrD,8DAA8D;gBAC9D,uFAAuF;gBACvF,IACE,MAAM,KAAK,IAAI;uBACZ,MAAM,KAAK,SAAS;uBACpB,CAAC,MAAM,YAAY,WAAW,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,EAClE,CAAC;oBACD,iEAAiE;oBACjE,2DAA2D;oBAC3D,mEAAmE;oBACnE,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,2DAA2D,EAAE,CAAC,CAAC,CAAC;gBAC7E,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -7,9 +7,8 @@
|
|
|
7
7
|
* when p99 latency exceeds the limit, and apcore.health.recovered when a
|
|
8
8
|
* previously alerted module recovers below threshold * 0.5.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* `
|
|
12
|
-
* with `deprecated: true` in the payload (Issue #36).
|
|
10
|
+
* Issue #36 removed legacy aliases in v0.22.0 — only the canonical
|
|
11
|
+
* `apcore.health.*` event names are emitted.
|
|
13
12
|
*/
|
|
14
13
|
import type { Context } from '../context.js';
|
|
15
14
|
import type { EventEmitter } from '../events/emitter.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-notify.d.ts","sourceRoot":"","sources":["../../src/middleware/platform-notify.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"platform-notify.d.ts","sourceRoot":"","sources":["../../src/middleware/platform-notify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,wBAAyB,SAAQ,UAAU;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAC5D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;gBAG9D,YAAY,EAAE,YAAY,EAC1B,gBAAgB,GAAE,gBAAgB,GAAG,IAAW,EAChD,kBAAkB,GAAE,MAAY,EAChC,qBAAqB,GAAE,MAAa;IAS7B,KAAK,CACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,OAAO,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMxB,OAAO,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,OAAO,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IASjC,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;CAe5B"}
|
|
@@ -7,11 +7,10 @@
|
|
|
7
7
|
* when p99 latency exceeds the limit, and apcore.health.recovered when a
|
|
8
8
|
* previously alerted module recovers below threshold * 0.5.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* `
|
|
12
|
-
* with `deprecated: true` in the payload (Issue #36).
|
|
10
|
+
* Issue #36 removed legacy aliases in v0.22.0 — only the canonical
|
|
11
|
+
* `apcore.health.*` event names are emitted.
|
|
13
12
|
*/
|
|
14
|
-
import { createEvent
|
|
13
|
+
import { createEvent } from '../events/emitter.js';
|
|
15
14
|
import { computeModuleErrorRate, estimateP99FromHistogram } from '../observability/metrics-utils.js';
|
|
16
15
|
import { Middleware } from './base.js';
|
|
17
16
|
export class PlatformNotifyMiddleware extends Middleware {
|
|
@@ -57,7 +56,7 @@ export class PlatformNotifyMiddleware extends Middleware {
|
|
|
57
56
|
const errorRate = this._computeErrorRate(moduleId);
|
|
58
57
|
const alerted = this._getAlerted(moduleId);
|
|
59
58
|
if (errorRate >= this._errorRateThreshold && !alerted.has('error_rate')) {
|
|
60
|
-
|
|
59
|
+
this._emitter.emit(createEvent('apcore.health.error_threshold_exceeded', moduleId, 'error', { error_rate: errorRate, threshold: this._errorRateThreshold }));
|
|
61
60
|
alerted.add('error_rate');
|
|
62
61
|
}
|
|
63
62
|
}
|
|
@@ -69,7 +68,7 @@ export class PlatformNotifyMiddleware extends Middleware {
|
|
|
69
68
|
return;
|
|
70
69
|
const p99Ms = this._estimateP99Ms(moduleId);
|
|
71
70
|
if (p99Ms >= this._latencyP99ThresholdMs) {
|
|
72
|
-
|
|
71
|
+
this._emitter.emit(createEvent('apcore.health.latency_threshold_exceeded', moduleId, 'warn', { p99_latency_ms: p99Ms, threshold: this._latencyP99ThresholdMs }));
|
|
73
72
|
alerted.add('latency');
|
|
74
73
|
}
|
|
75
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-notify.js","sourceRoot":"","sources":["../../src/middleware/platform-notify.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"platform-notify.js","sourceRoot":"","sources":["../../src/middleware/platform-notify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-effect module: best-effort synchronous load of `@opentelemetry/api`
|
|
3
|
+
* via `createRequire`, installed as the default tracer factory on
|
|
4
|
+
* `TracingMiddleware`.
|
|
5
|
+
*
|
|
6
|
+
* Imported by the package's Node entry (`src/index.ts`). The browser
|
|
7
|
+
* entry never imports this file, which keeps the static `node:module`
|
|
8
|
+
* import (and the `createRequire` / `import.meta.url` resolution) out
|
|
9
|
+
* of the browser closure.
|
|
10
|
+
*
|
|
11
|
+
* If `@opentelemetry/api` is not installed at runtime, the loader
|
|
12
|
+
* silently falls back to `null` and `TracingMiddleware` becomes a no-op
|
|
13
|
+
* unless a tracer is explicitly injected via constructor options.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=tracing-otel-default.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing-otel-default.d.ts","sourceRoot":"","sources":["../../src/middleware/tracing-otel-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-effect module: best-effort synchronous load of `@opentelemetry/api`
|
|
3
|
+
* via `createRequire`, installed as the default tracer factory on
|
|
4
|
+
* `TracingMiddleware`.
|
|
5
|
+
*
|
|
6
|
+
* Imported by the package's Node entry (`src/index.ts`). The browser
|
|
7
|
+
* entry never imports this file, which keeps the static `node:module`
|
|
8
|
+
* import (and the `createRequire` / `import.meta.url` resolution) out
|
|
9
|
+
* of the browser closure.
|
|
10
|
+
*
|
|
11
|
+
* If `@opentelemetry/api` is not installed at runtime, the loader
|
|
12
|
+
* silently falls back to `null` and `TracingMiddleware` becomes a no-op
|
|
13
|
+
* unless a tracer is explicitly injected via constructor options.
|
|
14
|
+
*/
|
|
15
|
+
import { createRequire } from 'node:module';
|
|
16
|
+
import { _setDefaultTrace } from './tracing.js';
|
|
17
|
+
const _nodeRequire = createRequire(import.meta.url);
|
|
18
|
+
try {
|
|
19
|
+
const otel = _nodeRequire('@opentelemetry/api');
|
|
20
|
+
_setDefaultTrace(otel.trace);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
_setDefaultTrace(null);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=tracing-otel-default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing-otel-default.js","sourceRoot":"","sources":["../../src/middleware/tracing-otel-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpD,IAAI,CAAC;IACH,MAAM,IAAI,GAAG,YAAY,CAAC,oBAAoB,CAE7C,CAAC;IACF,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAAC,MAAM,CAAC;IACP,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/middleware/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/middleware/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAUhE,MAAM,WAAW,QAAQ;IACvB,WAAW,IAAI;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,SAAS,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,GAAG,IAAI,IAAI,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;CACtE;AAeD,MAAM,WAAW,wBAAwB;IACvC,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;gBAEhC,OAAO,GAAE,wBAA6B;IAWlD,iEAAiE;IACjE,OAAO,CAAC,WAAW;IAUV,MAAM,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkBxB,KAAK,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IASxB,OAAO,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAQlC"}
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* - If @opentelemetry/api is not installed (and no tracer is injected), all methods
|
|
10
10
|
* are silent no-ops.
|
|
11
11
|
*/
|
|
12
|
-
import { createRequire } from 'node:module';
|
|
13
12
|
import { Middleware } from './base.js';
|
|
14
13
|
export const CTX_TRACING_SPAN_ID = '_apcore.mw.tracing.span_id';
|
|
15
14
|
// Internal key — stores the live Span object for retrieval in after()/onError().
|
|
@@ -19,16 +18,16 @@ const CTX_TRACING_SPAN = '_apcore.mw.tracing._active_span';
|
|
|
19
18
|
// UNSET = 0, OK = 1, ERROR = 2
|
|
20
19
|
const SPAN_STATUS_OK = 1;
|
|
21
20
|
const SPAN_STATUS_ERROR = 2;
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
|
|
21
|
+
// Default tracer slot. Wired up by the Node-only side-effect module
|
|
22
|
+
// `./tracing-otel-default.ts` which uses `createRequire` to attempt a
|
|
23
|
+
// synchronous load of `@opentelemetry/api`. The browser entry never
|
|
24
|
+
// imports that side-effect file, so `_defaultTrace` stays `null` and
|
|
25
|
+
// `TracingMiddleware` becomes a no-op there unless a tracer is
|
|
26
|
+
// explicitly injected via constructor options.
|
|
26
27
|
let _defaultTrace = null;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
catch {
|
|
31
|
-
_defaultTrace = null;
|
|
28
|
+
/** @internal — used by `./tracing-otel-default.ts` to install the default tracer. */
|
|
29
|
+
export function _setDefaultTrace(t) {
|
|
30
|
+
_defaultTrace = t;
|
|
32
31
|
}
|
|
33
32
|
export class TracingMiddleware extends Middleware {
|
|
34
33
|
_tracer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/middleware/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/middleware/tracing.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline.d.ts
CHANGED
package/dist/pipeline.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Execution pipeline types for configurable step-based module invocation.
|
|
3
3
|
*/
|
|
4
4
|
import { ModuleError } from './errors.js';
|
|
5
5
|
import { matchPattern } from './utils/pattern.js';
|
|
@@ -315,7 +315,7 @@ export class PipelineEngine {
|
|
|
315
315
|
const stepIgnoreErrors = step.ignoreErrors ?? false;
|
|
316
316
|
const stepPure = step.pure ?? false;
|
|
317
317
|
const stepTimeoutMs = step.timeoutMs ?? 0;
|
|
318
|
-
//
|
|
318
|
+
// 1 match_modules filter
|
|
319
319
|
if (stepMatchModules !== null) {
|
|
320
320
|
const matched = stepMatchModules.some((pattern) => matchPattern(pattern, ctx.moduleId));
|
|
321
321
|
if (!matched) {
|
|
@@ -331,7 +331,7 @@ export class PipelineEngine {
|
|
|
331
331
|
continue;
|
|
332
332
|
}
|
|
333
333
|
}
|
|
334
|
-
//
|
|
334
|
+
// 2 dry_run filter: skip steps with side effects
|
|
335
335
|
if (ctx.dryRun && !stepPure) {
|
|
336
336
|
trace.steps.push({
|
|
337
337
|
name: step.name,
|
|
@@ -344,14 +344,14 @@ export class PipelineEngine {
|
|
|
344
344
|
idx += 1;
|
|
345
345
|
continue;
|
|
346
346
|
}
|
|
347
|
-
//
|
|
347
|
+
// 3 Execute with per-step timeout, wrapped in StepMiddleware hooks (§2.2)
|
|
348
348
|
const stepStart = performance.now();
|
|
349
349
|
const stepState = {
|
|
350
350
|
stepName: step.name,
|
|
351
351
|
outputs: stepOutputs,
|
|
352
352
|
context: ctx,
|
|
353
353
|
};
|
|
354
|
-
//
|
|
354
|
+
// 4 a beforeStep hooks (registration order)
|
|
355
355
|
for (const mw of this._stepMiddlewares) {
|
|
356
356
|
if (mw.beforeStep) {
|
|
357
357
|
await _maybeAwait(mw.beforeStep(step.name, stepState));
|
|
@@ -377,7 +377,7 @@ export class PipelineEngine {
|
|
|
377
377
|
catch (exc) {
|
|
378
378
|
const durationMs = performance.now() - stepStart;
|
|
379
379
|
const cause = exc instanceof Error ? exc : new Error(String(exc));
|
|
380
|
-
//
|
|
380
|
+
// 3 b onStepError hooks: first non-null recovery wins (§2.2)
|
|
381
381
|
let recovery = null;
|
|
382
382
|
for (const mw of this._stepMiddlewares) {
|
|
383
383
|
if (!mw.onStepError)
|
|
@@ -416,7 +416,7 @@ export class PipelineEngine {
|
|
|
416
416
|
idx += 1;
|
|
417
417
|
continue;
|
|
418
418
|
}
|
|
419
|
-
//
|
|
419
|
+
// 4 ignore_errors: log and continue
|
|
420
420
|
if (stepIgnoreErrors) {
|
|
421
421
|
console.warn(`[apcore:pipeline] Step '${step.name}' failed (ignored):`, cause.message);
|
|
422
422
|
trace.steps.push({
|
|
@@ -448,13 +448,13 @@ export class PipelineEngine {
|
|
|
448
448
|
throw new PipelineStepError(step.name, cause, trace);
|
|
449
449
|
}
|
|
450
450
|
const durationMs = performance.now() - stepStart;
|
|
451
|
-
//
|
|
451
|
+
// 3 c afterStep hooks (registration order, success path)
|
|
452
452
|
for (const mw of this._stepMiddlewares) {
|
|
453
453
|
if (mw.afterStep) {
|
|
454
454
|
await _maybeAwait(mw.afterStep(step.name, stepState, result));
|
|
455
455
|
}
|
|
456
456
|
}
|
|
457
|
-
//
|
|
457
|
+
// 5 Record trace
|
|
458
458
|
trace.steps.push({
|
|
459
459
|
name: step.name,
|
|
460
460
|
durationMs,
|
|
@@ -462,11 +462,11 @@ export class PipelineEngine {
|
|
|
462
462
|
skipped: false,
|
|
463
463
|
decisionPoint: result.confidence != null,
|
|
464
464
|
});
|
|
465
|
-
//
|
|
465
|
+
// 6 Handle abort / skip_to / continue
|
|
466
466
|
if (result.action === 'continue') {
|
|
467
467
|
// Snapshot output for run_until predicates (§1.4)
|
|
468
468
|
stepOutputs[step.name] = ctx.output != null ? { ...ctx.output } : null;
|
|
469
|
-
//
|
|
469
|
+
// 7 run_until: evaluate predicate after each successful continue (§1.4)
|
|
470
470
|
if (ctx.runUntil != null) {
|
|
471
471
|
const state = {
|
|
472
472
|
stepName: step.name,
|