apcore-js 0.19.0 → 0.20.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 +110 -9
- package/dist/acl.d.ts +18 -0
- package/dist/acl.d.ts.map +1 -1
- package/dist/acl.js +54 -17
- package/dist/acl.js.map +1 -1
- package/dist/async-task.d.ts +70 -16
- package/dist/async-task.d.ts.map +1 -1
- package/dist/async-task.js +212 -72
- package/dist/async-task.js.map +1 -1
- package/dist/builtin-steps.d.ts +16 -5
- package/dist/builtin-steps.d.ts.map +1 -1
- package/dist/builtin-steps.js +45 -28
- package/dist/builtin-steps.js.map +1 -1
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +163 -33
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +12 -1
- package/dist/context.js.map +1 -1
- package/dist/errors.d.ts +32 -10
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +55 -16
- package/dist/errors.js.map +1 -1
- package/dist/events/circuit-breaker.d.ts +45 -0
- package/dist/events/circuit-breaker.d.ts.map +1 -0
- package/dist/events/circuit-breaker.js +115 -0
- package/dist/events/circuit-breaker.js.map +1 -0
- package/dist/events/emitter.d.ts +22 -1
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +66 -2
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/index.d.ts +4 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +3 -2
- package/dist/events/index.js.map +1 -1
- package/dist/events/subscribers.d.ts +33 -1
- package/dist/events/subscribers.d.ts.map +1 -1
- package/dist/events/subscribers.js +124 -1
- package/dist/events/subscribers.js.map +1 -1
- package/dist/executor.d.ts +10 -2
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +134 -51
- 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 +35 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -17
- package/dist/index.js.map +1 -1
- package/dist/middleware/base.d.ts +25 -3
- package/dist/middleware/base.d.ts.map +1 -1
- package/dist/middleware/base.js +24 -0
- package/dist/middleware/base.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +54 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +168 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- package/dist/middleware/context-namespace.d.ts +30 -0
- package/dist/middleware/context-namespace.d.ts.map +1 -0
- package/dist/middleware/context-namespace.js +38 -0
- package/dist/middleware/context-namespace.js.map +1 -0
- package/dist/middleware/index.d.ts +7 -1
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +4 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/manager.d.ts +11 -4
- package/dist/middleware/manager.d.ts.map +1 -1
- package/dist/middleware/manager.js +25 -9
- package/dist/middleware/manager.js.map +1 -1
- package/dist/middleware/platform-notify.d.ts +8 -4
- package/dist/middleware/platform-notify.d.ts.map +1 -1
- package/dist/middleware/platform-notify.js +11 -7
- package/dist/middleware/platform-notify.js.map +1 -1
- package/dist/middleware/tracing.d.ts +50 -0
- package/dist/middleware/tracing.d.ts.map +1 -0
- package/dist/middleware/tracing.js +89 -0
- package/dist/middleware/tracing.js.map +1 -0
- package/dist/observability/batch-span-processor.d.ts +48 -0
- package/dist/observability/batch-span-processor.d.ts.map +1 -0
- package/dist/observability/batch-span-processor.js +89 -0
- package/dist/observability/batch-span-processor.js.map +1 -0
- package/dist/observability/context-logger.d.ts +54 -1
- package/dist/observability/context-logger.d.ts.map +1 -1
- package/dist/observability/context-logger.js +270 -6
- package/dist/observability/context-logger.js.map +1 -1
- package/dist/observability/error-history.d.ts +36 -7
- package/dist/observability/error-history.d.ts.map +1 -1
- package/dist/observability/error-history.js +169 -50
- package/dist/observability/error-history.js.map +1 -1
- package/dist/observability/index.d.ts +16 -5
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +8 -3
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/metrics.d.ts +14 -1
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +23 -2
- package/dist/observability/metrics.js.map +1 -1
- package/dist/observability/prometheus-exporter.d.ts +37 -0
- package/dist/observability/prometheus-exporter.d.ts.map +1 -0
- package/dist/observability/prometheus-exporter.js +135 -0
- package/dist/observability/prometheus-exporter.js.map +1 -0
- package/dist/observability/storage.d.ts +43 -0
- package/dist/observability/storage.d.ts.map +1 -0
- package/dist/observability/storage.js +58 -0
- package/dist/observability/storage.js.map +1 -0
- package/dist/observability/store.d.ts +29 -0
- package/dist/observability/store.d.ts.map +1 -0
- package/dist/observability/store.js +36 -0
- package/dist/observability/store.js.map +1 -0
- package/dist/observability/usage-exporter.d.ts +58 -0
- package/dist/observability/usage-exporter.d.ts.map +1 -0
- package/dist/observability/usage-exporter.js +86 -0
- package/dist/observability/usage-exporter.js.map +1 -0
- package/dist/observability/usage.d.ts +18 -1
- package/dist/observability/usage.d.ts.map +1 -1
- package/dist/observability/usage.js +25 -3
- package/dist/observability/usage.js.map +1 -1
- package/dist/pipeline-config.d.ts +11 -0
- package/dist/pipeline-config.d.ts.map +1 -1
- package/dist/pipeline-config.js +36 -10
- package/dist/pipeline-config.js.map +1 -1
- package/dist/pipeline.d.ts +123 -2
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +249 -50
- package/dist/pipeline.js.map +1 -1
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -0
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/multi-class.d.ts +57 -0
- package/dist/registry/multi-class.d.ts.map +1 -0
- package/dist/registry/multi-class.js +120 -0
- package/dist/registry/multi-class.js.map +1 -0
- package/dist/registry/registry.d.ts +91 -3
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +181 -11
- package/dist/registry/registry.js.map +1 -1
- package/dist/schema/constants.d.ts +9 -0
- package/dist/schema/constants.d.ts.map +1 -0
- package/dist/schema/constants.js +9 -0
- package/dist/schema/constants.js.map +1 -0
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/loader.d.ts +27 -3
- package/dist/schema/loader.d.ts.map +1 -1
- package/dist/schema/loader.js +137 -32
- package/dist/schema/loader.js.map +1 -1
- package/dist/schema/types.d.ts +4 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js.map +1 -1
- package/dist/schema/validator.d.ts +9 -0
- package/dist/schema/validator.d.ts.map +1 -1
- package/dist/schema/validator.js +153 -4
- package/dist/schema/validator.js.map +1 -1
- package/dist/sys-modules/audit.d.ts +50 -0
- package/dist/sys-modules/audit.d.ts.map +1 -0
- package/dist/sys-modules/audit.js +89 -0
- package/dist/sys-modules/audit.js.map +1 -0
- package/dist/sys-modules/control.d.ts +32 -4
- package/dist/sys-modules/control.d.ts.map +1 -1
- package/dist/sys-modules/control.js +196 -25
- package/dist/sys-modules/control.js.map +1 -1
- package/dist/sys-modules/index.d.ts +7 -2
- package/dist/sys-modules/index.d.ts.map +1 -1
- package/dist/sys-modules/index.js +3 -1
- package/dist/sys-modules/index.js.map +1 -1
- package/dist/sys-modules/overrides.d.ts +58 -0
- package/dist/sys-modules/overrides.d.ts.map +1 -0
- package/dist/sys-modules/overrides.js +106 -0
- package/dist/sys-modules/overrides.js.map +1 -0
- package/dist/sys-modules/registration.d.ts +17 -12
- package/dist/sys-modules/registration.d.ts.map +1 -1
- package/dist/sys-modules/registration.js +115 -23
- package/dist/sys-modules/registration.js.map +1 -1
- package/dist/sys-modules/toggle.d.ts +7 -2
- package/dist/sys-modules/toggle.d.ts.map +1 -1
- package/dist/sys-modules/toggle.js +61 -5
- package/dist/sys-modules/toggle.js.map +1 -1
- package/dist/trace-context.d.ts +47 -9
- package/dist/trace-context.d.ts.map +1 -1
- package/dist/trace-context.js +139 -16
- package/dist/trace-context.js.map +1 -1
- package/package.json +1 -1
package/dist/trace-context.js
CHANGED
|
@@ -1,36 +1,71 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* W3C Trace Context support: TraceParent parsing and TraceContext
|
|
2
|
+
* W3C Trace Context support: TraceParent + tracestate parsing and TraceContext
|
|
3
|
+
* injection/extraction.
|
|
3
4
|
*/
|
|
4
5
|
import { randomHex } from './utils/index.js';
|
|
5
6
|
const TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
|
|
7
|
+
const PARENT_ID_RE = /^[0-9a-f]{16}$/;
|
|
8
|
+
const TRACESTATE_KEY_RE = /^[a-z0-9][a-z0-9_\-*/@]{0,255}$/;
|
|
9
|
+
/** W3C tracestate hard cap (RFC: SHOULD discard beyond 32 entries). */
|
|
10
|
+
const MAX_TRACESTATE_ENTRIES = 32;
|
|
11
|
+
/** Well-known key under `context.data` carrying the inbound TraceParent (if any). */
|
|
12
|
+
const INBOUND_KEY = '_apcore.trace.inbound';
|
|
6
13
|
export class TraceContext {
|
|
7
14
|
/**
|
|
8
|
-
* Build
|
|
15
|
+
* Build outbound trace headers from an apcore Context.
|
|
9
16
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
17
|
+
* Behavior:
|
|
18
|
+
* - Uses `context.traceId` (already 32-hex) as the traceparent trace_id.
|
|
19
|
+
* - When `parentId` is supplied it is used verbatim and MUST match `^[0-9a-f]{16}$`;
|
|
20
|
+
* otherwise the last span on the tracing stack provides the id, falling back
|
|
21
|
+
* to a fresh random 16-hex value.
|
|
22
|
+
* - When the Context carries an inbound TraceParent under
|
|
23
|
+
* `data['_apcore.trace.inbound']`, its `traceFlags` and `tracestate` are
|
|
24
|
+
* propagated; otherwise traceFlags defaults to `"01"` (sampled) for new roots.
|
|
25
|
+
*
|
|
26
|
+
* @param context apcore Context
|
|
27
|
+
* @param parentId optional 16-hex parent id override
|
|
28
|
+
* @throws {Error} if `parentId` is provided but malformed
|
|
13
29
|
*/
|
|
14
|
-
static inject(context) {
|
|
30
|
+
static inject(context, parentId) {
|
|
15
31
|
const traceIdHex = context.traceId; // already 32-hex format
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
32
|
+
let chosenParent;
|
|
33
|
+
if (parentId !== undefined) {
|
|
34
|
+
if (!PARENT_ID_RE.test(parentId)) {
|
|
35
|
+
const err = new Error(`Malformed parentId override: ${JSON.stringify(parentId)}. Expected 16 lowercase hex chars matching /^[0-9a-f]{16}$/.`);
|
|
36
|
+
err.code = 'INVALID_PARENT_ID';
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
chosenParent = parentId;
|
|
20
40
|
}
|
|
21
41
|
else {
|
|
22
|
-
|
|
42
|
+
const spansStack = context.data['_apcore.mw.tracing.spans'];
|
|
43
|
+
if (spansStack && spansStack.length > 0) {
|
|
44
|
+
chosenParent = spansStack[spansStack.length - 1].spanId;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
chosenParent = randomHex(8);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const inbound = context.data[INBOUND_KEY];
|
|
51
|
+
const flags = inbound?.traceFlags ?? '01';
|
|
52
|
+
const headers = {
|
|
53
|
+
traceparent: `00-${traceIdHex}-${chosenParent}-${flags}`,
|
|
54
|
+
};
|
|
55
|
+
const stateEntries = inbound?.tracestate ?? [];
|
|
56
|
+
if (stateEntries.length > 0) {
|
|
57
|
+
headers.tracestate = TraceContext.formatTracestate(stateEntries);
|
|
23
58
|
}
|
|
24
|
-
|
|
25
|
-
return { traceparent };
|
|
59
|
+
return headers;
|
|
26
60
|
}
|
|
27
61
|
/**
|
|
28
|
-
* Parse the `traceparent` header from
|
|
62
|
+
* Parse the `traceparent` (and optional `tracestate`) header from a header
|
|
63
|
+
* container, performing case-insensitive header name lookup.
|
|
29
64
|
*
|
|
30
|
-
* Returns `null` if the header is missing or malformed.
|
|
65
|
+
* Returns `null` if the traceparent header is missing or malformed.
|
|
31
66
|
*/
|
|
32
67
|
static extract(headers) {
|
|
33
|
-
const raw = headers
|
|
68
|
+
const raw = TraceContext.lookupHeaderCi(headers, 'traceparent');
|
|
34
69
|
if (raw === undefined) {
|
|
35
70
|
return null;
|
|
36
71
|
}
|
|
@@ -47,11 +82,16 @@ export class TraceContext {
|
|
|
47
82
|
if (traceId === '0'.repeat(32) || parentId === '0'.repeat(16)) {
|
|
48
83
|
return null;
|
|
49
84
|
}
|
|
85
|
+
const tracestateRaw = TraceContext.lookupHeaderCi(headers, 'tracestate');
|
|
86
|
+
const tracestate = tracestateRaw !== undefined
|
|
87
|
+
? Object.freeze(TraceContext.parseTracestate(tracestateRaw).map((p) => Object.freeze(p)))
|
|
88
|
+
: Object.freeze([]);
|
|
50
89
|
return Object.freeze({
|
|
51
90
|
version,
|
|
52
91
|
traceId,
|
|
53
92
|
parentId,
|
|
54
93
|
traceFlags: match[4],
|
|
94
|
+
tracestate,
|
|
55
95
|
});
|
|
56
96
|
}
|
|
57
97
|
/**
|
|
@@ -79,7 +119,90 @@ export class TraceContext {
|
|
|
79
119
|
traceId,
|
|
80
120
|
parentId,
|
|
81
121
|
traceFlags: match[4],
|
|
122
|
+
tracestate: Object.freeze([]),
|
|
82
123
|
});
|
|
83
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Parse a W3C `tracestate` header value.
|
|
127
|
+
*
|
|
128
|
+
* Splits on commas, trims each member, and accepts only entries shaped as
|
|
129
|
+
* `key=value` (the value may contain `=`). Malformed members are dropped
|
|
130
|
+
* silently. The list is truncated to {@link MAX_TRACESTATE_ENTRIES} (32).
|
|
131
|
+
*/
|
|
132
|
+
static parseTracestate(raw) {
|
|
133
|
+
if (raw.length === 0) {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
const entries = [];
|
|
137
|
+
for (const member of raw.split(',')) {
|
|
138
|
+
const trimmed = member.trim();
|
|
139
|
+
if (trimmed.length === 0) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const eq = trimmed.indexOf('=');
|
|
143
|
+
if (eq <= 0) {
|
|
144
|
+
// Missing key (eq === 0) or no '=' (eq === -1). Drop silently.
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const key = trimmed.slice(0, eq).trim();
|
|
148
|
+
const value = trimmed.slice(eq + 1).trim();
|
|
149
|
+
if (key.length === 0 || value.length === 0) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
// RFC 9: be lenient. Tolerate keys that fail strict regex but at least
|
|
153
|
+
// require non-empty key/value. Strict validation may be opted into by
|
|
154
|
+
// upstream callers if needed.
|
|
155
|
+
if (!TRACESTATE_KEY_RE.test(key)) {
|
|
156
|
+
// Still drop blatantly malformed keys (e.g., contains '=' or whitespace).
|
|
157
|
+
if (/[\s=,]/.test(key)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
entries.push([key, value]);
|
|
162
|
+
if (entries.length >= MAX_TRACESTATE_ENTRIES) {
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return entries;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Format tracestate entries to a comma-separated header value.
|
|
170
|
+
*/
|
|
171
|
+
static formatTracestate(entries) {
|
|
172
|
+
return entries.map(([k, v]) => `${k}=${v}`).join(',');
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Case-insensitive header lookup across plain objects, `Headers`, and `Map`.
|
|
176
|
+
*
|
|
177
|
+
* @returns the header value (or `undefined` if not present).
|
|
178
|
+
*/
|
|
179
|
+
static lookupHeaderCi(headers, name) {
|
|
180
|
+
const target = name.toLowerCase();
|
|
181
|
+
// Headers (fetch API): already case-insensitive.
|
|
182
|
+
if (typeof Headers !== 'undefined' && headers instanceof Headers) {
|
|
183
|
+
const v = headers.get(name);
|
|
184
|
+
return v === null ? undefined : v;
|
|
185
|
+
}
|
|
186
|
+
// Map<string, string>
|
|
187
|
+
if (headers instanceof Map) {
|
|
188
|
+
for (const [k, v] of headers.entries()) {
|
|
189
|
+
if (typeof k === 'string' && k.toLowerCase() === target) {
|
|
190
|
+
return typeof v === 'string' ? v : String(v);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
// Plain object
|
|
196
|
+
for (const [k, v] of Object.entries(headers)) {
|
|
197
|
+
if (k.toLowerCase() === target) {
|
|
198
|
+
if (typeof v === 'string')
|
|
199
|
+
return v;
|
|
200
|
+
if (v === undefined || v === null)
|
|
201
|
+
return undefined;
|
|
202
|
+
return String(v);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
84
207
|
}
|
|
85
208
|
//# sourceMappingURL=trace-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-context.js","sourceRoot":"","sources":["../src/trace-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"trace-context.js","sourceRoot":"","sources":["../src/trace-context.ts"],"names":[],"mappings":"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"}
|