@bleedingdev/modern-js-server-runtime-extensions 0.0.0-trusted-publisher-bootstrap
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/LICENSE +21 -0
- package/README.md +67 -0
- package/dist/cjs/contractGateAutopilot.js +162 -0
- package/dist/cjs/contractGateSnapshotStore.js +253 -0
- package/dist/cjs/env.js +58 -0
- package/dist/cjs/index.js +162 -0
- package/dist/cjs/mfCache.js +106 -0
- package/dist/cjs/moduleFederationCss.js +285 -0
- package/dist/cjs/runtimeFallbackSignal.js +311 -0
- package/dist/cjs/telemetry.js +373 -0
- package/dist/cjs/telemetryCore.js +819 -0
- package/dist/esm/contractGateAutopilot.mjs +124 -0
- package/dist/esm/contractGateSnapshotStore.mjs +190 -0
- package/dist/esm/env.mjs +17 -0
- package/dist/esm/index.mjs +6 -0
- package/dist/esm/mfCache.mjs +55 -0
- package/dist/esm/moduleFederationCss.mjs +225 -0
- package/dist/esm/runtimeFallbackSignal.mjs +222 -0
- package/dist/esm/telemetry.mjs +275 -0
- package/dist/esm/telemetryCore.mjs +759 -0
- package/dist/esm-node/contractGateAutopilot.mjs +125 -0
- package/dist/esm-node/contractGateSnapshotStore.mjs +192 -0
- package/dist/esm-node/env.mjs +18 -0
- package/dist/esm-node/index.mjs +7 -0
- package/dist/esm-node/mfCache.mjs +56 -0
- package/dist/esm-node/moduleFederationCss.mjs +226 -0
- package/dist/esm-node/runtimeFallbackSignal.mjs +223 -0
- package/dist/esm-node/telemetry.mjs +276 -0
- package/dist/esm-node/telemetryCore.mjs +760 -0
- package/dist/types/contractGateAutopilot.d.ts +35 -0
- package/dist/types/contractGateSnapshotStore.d.ts +57 -0
- package/dist/types/env.d.ts +40 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/mfCache.d.ts +27 -0
- package/dist/types/moduleFederationCss.d.ts +87 -0
- package/dist/types/runtimeFallbackSignal.d.ts +94 -0
- package/dist/types/telemetry.d.ts +12 -0
- package/dist/types/telemetryCore.d.ts +257 -0
- package/package.json +69 -0
- package/rslib.config.mts +4 -0
- package/rstest.config.mts +7 -0
- package/src/contractGateAutopilot.ts +247 -0
- package/src/contractGateSnapshotStore.ts +420 -0
- package/src/env.ts +63 -0
- package/src/index.ts +84 -0
- package/src/mfCache.ts +119 -0
- package/src/moduleFederationCss.ts +473 -0
- package/src/runtimeFallbackSignal.ts +584 -0
- package/src/telemetry.ts +554 -0
- package/src/telemetryCore.ts +1332 -0
- package/tests/contractGateAutopilot.test.ts +203 -0
- package/tests/contractGateSnapshotStore.test.ts +223 -0
- package/tests/env.test.ts +73 -0
- package/tests/helpers.ts +19 -0
- package/tests/mfCache.test.ts +150 -0
- package/tests/moduleFederationCss.test.ts +392 -0
- package/tests/registration.test.ts +112 -0
- package/tests/telemetry.test.ts +360 -0
- package/tests/telemetryAutopilot.test.ts +993 -0
- package/tests/telemetryCanaryOrchestrator.test.ts +140 -0
- package/tests/telemetryLifecycle.test.ts +168 -0
- package/tests/telemetryTraceparent.test.ts +167 -0
- package/tests/tsconfig.json +11 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT: ()=>external_runtimeFallbackSignal_js_namespaceObject.DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT,
|
|
32
|
+
DEFAULT_RUNTIME_STATUS_ENDPOINT: ()=>external_runtimeFallbackSignal_js_namespaceObject.DEFAULT_RUNTIME_STATUS_ENDPOINT,
|
|
33
|
+
TelemetryCanaryOrchestrator: ()=>external_telemetryCore_js_namespaceObject.TelemetryCanaryOrchestrator,
|
|
34
|
+
TelemetryRegistry: ()=>external_telemetryCore_js_namespaceObject.TelemetryRegistry,
|
|
35
|
+
TelemetryStartupHealthError: ()=>external_telemetryCore_js_namespaceObject.TelemetryStartupHealthError,
|
|
36
|
+
createOtlpTelemetryExporter: ()=>external_telemetryCore_js_namespaceObject.createOtlpTelemetryExporter,
|
|
37
|
+
createRuntimeFallbackSignalRuntimeState: ()=>external_runtimeFallbackSignal_js_namespaceObject.createRuntimeFallbackSignalRuntimeState,
|
|
38
|
+
createRuntimeSignalError: ()=>external_runtimeFallbackSignal_js_namespaceObject.createRuntimeSignalError,
|
|
39
|
+
createTelemetryAwareMetrics: ()=>external_telemetryCore_js_namespaceObject.createTelemetryAwareMetrics,
|
|
40
|
+
createVictoriaMetricsTelemetryExporter: ()=>external_telemetryCore_js_namespaceObject.createVictoriaMetricsTelemetryExporter,
|
|
41
|
+
enforceRuntimeFallbackSignalAuthToken: ()=>external_runtimeFallbackSignal_js_namespaceObject.enforceRuntimeFallbackSignalAuthToken,
|
|
42
|
+
enforceRuntimeFallbackSignalTrustPolicy: ()=>external_runtimeFallbackSignal_js_namespaceObject.enforceRuntimeFallbackSignalTrustPolicy,
|
|
43
|
+
getRuntimeSignalErrorStatusCode: ()=>external_runtimeFallbackSignal_js_namespaceObject.getRuntimeSignalErrorStatusCode,
|
|
44
|
+
hasEnabledTelemetryExporters: ()=>hasEnabledTelemetryExporters,
|
|
45
|
+
injectTelemetryPlugin: ()=>injectTelemetryPlugin,
|
|
46
|
+
normalizeRequiredRuntimeFallbackSignalAuthConfig: ()=>external_runtimeFallbackSignal_js_namespaceObject.normalizeRequiredRuntimeFallbackSignalAuthConfig,
|
|
47
|
+
normalizeRuntimeFallbackSignalAuthConfig: ()=>external_runtimeFallbackSignal_js_namespaceObject.normalizeRuntimeFallbackSignalAuthConfig,
|
|
48
|
+
normalizeRuntimeFallbackTrustPolicy: ()=>external_runtimeFallbackSignal_js_namespaceObject.normalizeRuntimeFallbackTrustPolicy,
|
|
49
|
+
parseRuntimeFallbackSignalPayloadFromRawBody: ()=>external_runtimeFallbackSignal_js_namespaceObject.parseRuntimeFallbackSignalPayloadFromRawBody,
|
|
50
|
+
resolveRuntimeFallbackSignalEndpoint: ()=>external_runtimeFallbackSignal_js_namespaceObject.resolveRuntimeFallbackSignalEndpoint,
|
|
51
|
+
resolveTelemetrySloOptions: ()=>resolveTelemetrySloOptions
|
|
52
|
+
});
|
|
53
|
+
const server_namespaceObject = require("@modern-js/create-request/server");
|
|
54
|
+
const utils_namespaceObject = require("@modern-js/utils");
|
|
55
|
+
const external_contractGateAutopilot_js_namespaceObject = require("./contractGateAutopilot.js");
|
|
56
|
+
const external_contractGateSnapshotStore_js_namespaceObject = require("./contractGateSnapshotStore.js");
|
|
57
|
+
const external_env_js_namespaceObject = require("./env.js");
|
|
58
|
+
const external_runtimeFallbackSignal_js_namespaceObject = require("./runtimeFallbackSignal.js");
|
|
59
|
+
const external_telemetryCore_js_namespaceObject = require("./telemetryCore.js");
|
|
60
|
+
function emitCanaryDecisionMetric(registry, decision, action) {
|
|
61
|
+
try {
|
|
62
|
+
registry.enqueueMetric({
|
|
63
|
+
name: `telemetry.canary.${action}`,
|
|
64
|
+
value: 1,
|
|
65
|
+
unit: 'count',
|
|
66
|
+
tags: {
|
|
67
|
+
action,
|
|
68
|
+
state: decision.state,
|
|
69
|
+
failures: String(decision.failures.length)
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
} catch (_error) {}
|
|
73
|
+
}
|
|
74
|
+
const hasEnabledTelemetryExporters = (config)=>Boolean(config?.exporters?.otlp?.enabled || config?.exporters?.victoriaMetrics?.enabled);
|
|
75
|
+
const resolveTelemetrySloOptions = (sloConfig, warnSink = (message)=>utils_namespaceObject.logger.warn(message))=>({
|
|
76
|
+
queueUtilizationWarnThreshold: sloConfig?.queueUtilizationWarnThreshold,
|
|
77
|
+
queueDroppedWarnThreshold: sloConfig?.queueDroppedWarnThreshold,
|
|
78
|
+
alertCooldownMs: sloConfig?.alertCooldownMs,
|
|
79
|
+
onAlert: (alert)=>{
|
|
80
|
+
warnSink(`[telemetry.slo] ${alert.type} threshold=${alert.threshold} value=${alert.value} depth=${alert.queueDepth}/${alert.queueCapacity} dropped=${alert.totalDropped}`);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
const getRequestRemoteAddress = (c)=>{
|
|
84
|
+
const env = c.env;
|
|
85
|
+
const remoteAddress = env?.node?.req?.socket?.remoteAddress;
|
|
86
|
+
return 'string' == typeof remoteAddress && remoteAddress.trim().length > 0 ? remoteAddress.trim() : void 0;
|
|
87
|
+
};
|
|
88
|
+
const activeTelemetryLaneClosers = new Set();
|
|
89
|
+
let telemetryBeforeExitHookInstalled = false;
|
|
90
|
+
const ensureTelemetryBeforeExitHook = ()=>{
|
|
91
|
+
if (telemetryBeforeExitHookInstalled) return;
|
|
92
|
+
telemetryBeforeExitHookInstalled = true;
|
|
93
|
+
process.on('beforeExit', ()=>{
|
|
94
|
+
for (const close of [
|
|
95
|
+
...activeTelemetryLaneClosers
|
|
96
|
+
])close();
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
const injectTelemetryPlugin = ()=>({
|
|
100
|
+
name: '@modern-js/inject-telemetry',
|
|
101
|
+
setup (api) {
|
|
102
|
+
const serverConfig = api.getServerConfig();
|
|
103
|
+
const telemetryConfig = serverConfig?.server?.telemetry;
|
|
104
|
+
if (!telemetryConfig) return;
|
|
105
|
+
if (true !== telemetryConfig.enabled && !hasEnabledTelemetryExporters(telemetryConfig)) return;
|
|
106
|
+
const { middlewares, metaName, appDirectory } = api.getServerContext();
|
|
107
|
+
const serviceName = telemetryConfig.service || metaName || 'modern-js';
|
|
108
|
+
const moduleName = telemetryConfig.module || 'server';
|
|
109
|
+
const environmentName = telemetryConfig.environment || (0, external_env_js_namespaceObject.parseServerRuntimeExtensionsEnv)().environmentName;
|
|
110
|
+
const registry = new external_telemetryCore_js_namespaceObject.TelemetryRegistry({
|
|
111
|
+
service: serviceName,
|
|
112
|
+
module: moduleName,
|
|
113
|
+
environment: environmentName,
|
|
114
|
+
samplingRate: telemetryConfig.samplingRate,
|
|
115
|
+
flushIntervalMs: telemetryConfig.flushIntervalMs,
|
|
116
|
+
maxBatchSize: telemetryConfig.maxBatchSize,
|
|
117
|
+
maxQueueSize: telemetryConfig.maxQueueSize,
|
|
118
|
+
redactionKeys: telemetryConfig.redactionKeys,
|
|
119
|
+
slo: resolveTelemetrySloOptions(telemetryConfig.slo)
|
|
120
|
+
});
|
|
121
|
+
let canaryOrchestrator;
|
|
122
|
+
let contractGateAutopilot;
|
|
123
|
+
let runtimeFallbackSignalConfig;
|
|
124
|
+
let runtimeStatusAuthConfig;
|
|
125
|
+
let gateSnapshotStorePromise;
|
|
126
|
+
const canaryConfig = telemetryConfig.canary;
|
|
127
|
+
if (canaryConfig?.enabled) {
|
|
128
|
+
const contractGates = canaryConfig.contractGates;
|
|
129
|
+
canaryOrchestrator = new external_telemetryCore_js_namespaceObject.TelemetryCanaryOrchestrator({
|
|
130
|
+
registry,
|
|
131
|
+
evaluationIntervalMs: canaryConfig.evaluationIntervalMs,
|
|
132
|
+
minConsecutiveHealthyEvaluations: canaryConfig.minConsecutiveHealthyEvaluations,
|
|
133
|
+
rollbackConsecutiveFailures: canaryConfig.rollbackConsecutiveFailures,
|
|
134
|
+
maxQueueUtilization: canaryConfig.maxQueueUtilization,
|
|
135
|
+
maxTotalDropped: canaryConfig.maxTotalDropped,
|
|
136
|
+
maxUnhealthyExporters: canaryConfig.maxUnhealthyExporters,
|
|
137
|
+
requiredContractGates: Object.keys(contractGates || {}),
|
|
138
|
+
onPromote: (decision)=>{
|
|
139
|
+
emitCanaryDecisionMetric(registry, decision, 'promote');
|
|
140
|
+
},
|
|
141
|
+
onRollback: (decision)=>{
|
|
142
|
+
emitCanaryDecisionMetric(registry, decision, 'rollback');
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
if (contractGates) canaryOrchestrator.setContractGates(contractGates);
|
|
146
|
+
const autopilotEnabled = canaryConfig.autopilot?.enabled ?? true;
|
|
147
|
+
if (autopilotEnabled) {
|
|
148
|
+
const gateSnapshotPath = (0, external_contractGateSnapshotStore_js_namespaceObject.resolveContractGateSnapshotPath)(appDirectory, canaryConfig.autopilot?.gateSnapshotPath);
|
|
149
|
+
gateSnapshotStorePromise = (0, external_contractGateSnapshotStore_js_namespaceObject.resolveContractGateSnapshotStore)({
|
|
150
|
+
appDirectory,
|
|
151
|
+
gateSnapshotPath: gateSnapshotPath || external_contractGateSnapshotStore_js_namespaceObject.DEFAULT_CONTRACT_GATE_SNAPSHOT_PATH,
|
|
152
|
+
stateStore: canaryConfig.autopilot?.stateStore
|
|
153
|
+
});
|
|
154
|
+
const runtimeSignalConfig = canaryConfig.autopilot?.runtimeFallbackSignal;
|
|
155
|
+
const runtimeSignalEnabled = runtimeSignalConfig?.enabled === true;
|
|
156
|
+
if (runtimeSignalEnabled && gateSnapshotStorePromise) runtimeFallbackSignalConfig = {
|
|
157
|
+
endpoint: (0, external_runtimeFallbackSignal_js_namespaceObject.resolveRuntimeFallbackSignalEndpoint)(runtimeSignalConfig?.endpoint),
|
|
158
|
+
gateName: runtimeSignalConfig?.gateName?.trim() || external_runtimeFallbackSignal_js_namespaceObject.DEFAULT_RUNTIME_FALLBACK_GATE_NAME,
|
|
159
|
+
gateSnapshotStore: gateSnapshotStorePromise,
|
|
160
|
+
failureHoldMs: Math.max(1000, runtimeSignalConfig?.failureHoldMs ?? external_runtimeFallbackSignal_js_namespaceObject.DEFAULT_RUNTIME_FALLBACK_FAILURE_HOLD_MS),
|
|
161
|
+
maxBodyBytes: Math.max(512, runtimeSignalConfig?.maxBodyBytes ?? external_runtimeFallbackSignal_js_namespaceObject.DEFAULT_RUNTIME_FALLBACK_MAX_BODY_BYTES),
|
|
162
|
+
auth: (0, external_runtimeFallbackSignal_js_namespaceObject.normalizeRequiredRuntimeFallbackSignalAuthConfig)(runtimeSignalConfig?.auth),
|
|
163
|
+
trustPolicy: (0, external_runtimeFallbackSignal_js_namespaceObject.normalizeRuntimeFallbackTrustPolicy)(runtimeSignalConfig?.trustPolicy),
|
|
164
|
+
runtimeState: (0, external_runtimeFallbackSignal_js_namespaceObject.createRuntimeFallbackSignalRuntimeState)()
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
runtimeStatusAuthConfig = runtimeFallbackSignalConfig?.auth ?? (0, external_runtimeFallbackSignal_js_namespaceObject.normalizeRuntimeFallbackSignalAuthConfig)(canaryConfig.autopilot?.runtimeFallbackSignal?.auth);
|
|
168
|
+
}
|
|
169
|
+
if (runtimeFallbackSignalConfig) {
|
|
170
|
+
const signalConfig = runtimeFallbackSignalConfig;
|
|
171
|
+
middlewares.push({
|
|
172
|
+
name: 'telemetry-runtime-fallback-signal',
|
|
173
|
+
path: signalConfig.endpoint,
|
|
174
|
+
method: 'post',
|
|
175
|
+
order: 'pre',
|
|
176
|
+
handler: async (c)=>{
|
|
177
|
+
try {
|
|
178
|
+
(0, external_runtimeFallbackSignal_js_namespaceObject.enforceRuntimeFallbackSignalAuth)(c, signalConfig);
|
|
179
|
+
const { payload } = await (0, external_runtimeFallbackSignal_js_namespaceObject.parseRuntimeFallbackSignalPayload)(c, signalConfig.maxBodyBytes);
|
|
180
|
+
const trustResult = (0, external_runtimeFallbackSignal_js_namespaceObject.enforceRuntimeFallbackSignalTrustPolicy)(payload, signalConfig, {
|
|
181
|
+
remoteAddress: getRequestRemoteAddress(c)
|
|
182
|
+
});
|
|
183
|
+
if (trustResult.deduped) return c.json({
|
|
184
|
+
ok: true,
|
|
185
|
+
deduped: true
|
|
186
|
+
}, 202);
|
|
187
|
+
await (0, external_runtimeFallbackSignal_js_namespaceObject.persistRuntimeFallbackContractGate)(payload, signalConfig);
|
|
188
|
+
return c.json({
|
|
189
|
+
ok: true
|
|
190
|
+
}, 202);
|
|
191
|
+
} catch (error) {
|
|
192
|
+
const signalError = error;
|
|
193
|
+
const status = (0, external_runtimeFallbackSignal_js_namespaceObject.getRuntimeSignalErrorStatusCode)(signalError);
|
|
194
|
+
return c.json({
|
|
195
|
+
ok: false,
|
|
196
|
+
error: signalError instanceof Error ? signalError.message : String(signalError)
|
|
197
|
+
}, status);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
middlewares.push({
|
|
203
|
+
name: 'telemetry-runtime-status',
|
|
204
|
+
path: external_runtimeFallbackSignal_js_namespaceObject.DEFAULT_RUNTIME_STATUS_ENDPOINT,
|
|
205
|
+
method: 'get',
|
|
206
|
+
order: 'pre',
|
|
207
|
+
handler: async (c)=>{
|
|
208
|
+
try {
|
|
209
|
+
if (!runtimeStatusAuthConfig?.enabled) return c.json({
|
|
210
|
+
ok: true,
|
|
211
|
+
timestamp: Date.now()
|
|
212
|
+
});
|
|
213
|
+
(0, external_runtimeFallbackSignal_js_namespaceObject.enforceRuntimeFallbackSignalAuthToken)(c.req.header(runtimeStatusAuthConfig.headerName), runtimeStatusAuthConfig);
|
|
214
|
+
return c.json({
|
|
215
|
+
ok: true,
|
|
216
|
+
timestamp: Date.now(),
|
|
217
|
+
telemetry: {
|
|
218
|
+
queueStats: registry.getQueueStats(),
|
|
219
|
+
exporterHealth: registry.getExporterHealth()
|
|
220
|
+
},
|
|
221
|
+
canary: canaryOrchestrator ? {
|
|
222
|
+
enabled: true,
|
|
223
|
+
...canaryOrchestrator.getStatusSnapshot()
|
|
224
|
+
} : {
|
|
225
|
+
enabled: false
|
|
226
|
+
},
|
|
227
|
+
runtimeFallbackSignal: runtimeFallbackSignalConfig ? {
|
|
228
|
+
enabled: true,
|
|
229
|
+
endpoint: runtimeFallbackSignalConfig.endpoint,
|
|
230
|
+
gateName: runtimeFallbackSignalConfig.gateName,
|
|
231
|
+
failureHoldMs: runtimeFallbackSignalConfig.failureHoldMs,
|
|
232
|
+
maxBodyBytes: runtimeFallbackSignalConfig.maxBodyBytes,
|
|
233
|
+
auth: {
|
|
234
|
+
enabled: runtimeFallbackSignalConfig.auth.enabled,
|
|
235
|
+
headerName: runtimeFallbackSignalConfig.auth.headerName
|
|
236
|
+
},
|
|
237
|
+
trustPolicy: {
|
|
238
|
+
allowedApps: runtimeFallbackSignalConfig.trustPolicy.allowedApps,
|
|
239
|
+
allowedEntryOrigins: runtimeFallbackSignalConfig.trustPolicy.allowedEntryOrigins,
|
|
240
|
+
enforceRuntimeDigest: runtimeFallbackSignalConfig.trustPolicy.enforceRuntimeDigest,
|
|
241
|
+
expectedRuntimeDigestsCount: Object.keys(runtimeFallbackSignalConfig.trustPolicy.expectedRuntimeDigests).length,
|
|
242
|
+
maxSignalsPerWindow: runtimeFallbackSignalConfig.trustPolicy.maxSignalsPerWindow,
|
|
243
|
+
windowMs: runtimeFallbackSignalConfig.trustPolicy.windowMs,
|
|
244
|
+
dedupeWindowMs: runtimeFallbackSignalConfig.trustPolicy.dedupeWindowMs
|
|
245
|
+
}
|
|
246
|
+
} : {
|
|
247
|
+
enabled: false
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
} catch (error) {
|
|
251
|
+
const signalError = error;
|
|
252
|
+
return c.json({
|
|
253
|
+
ok: false,
|
|
254
|
+
error: signalError instanceof Error ? signalError.message : String(signalError)
|
|
255
|
+
}, (0, external_runtimeFallbackSignal_js_namespaceObject.getRuntimeSignalErrorStatusCode)(signalError));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
middlewares.push({
|
|
260
|
+
name: 'inject-telemetry',
|
|
261
|
+
handler: async (c, next)=>{
|
|
262
|
+
const monitors = c.get('monitors');
|
|
263
|
+
if (monitors) {
|
|
264
|
+
const traceContext = (0, server_namespaceObject.parseTraceparent)(c.req.header('traceparent'));
|
|
265
|
+
const monitor = (event)=>{
|
|
266
|
+
registry.enqueue((0, external_telemetryCore_js_namespaceObject.toTelemetryEnvelope)(event, {
|
|
267
|
+
service: serviceName,
|
|
268
|
+
module: moduleName,
|
|
269
|
+
environment: environmentName,
|
|
270
|
+
traceId: traceContext?.traceId,
|
|
271
|
+
spanId: traceContext?.spanId,
|
|
272
|
+
attributes: {
|
|
273
|
+
requestMethod: c.req.method,
|
|
274
|
+
requestPath: c.req.path
|
|
275
|
+
}
|
|
276
|
+
}));
|
|
277
|
+
};
|
|
278
|
+
monitors.push(monitor);
|
|
279
|
+
}
|
|
280
|
+
await next();
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
let telemetryLaneClosed = false;
|
|
284
|
+
const closeTelemetryLane = async ()=>{
|
|
285
|
+
if (telemetryLaneClosed) return;
|
|
286
|
+
telemetryLaneClosed = true;
|
|
287
|
+
activeTelemetryLaneClosers.delete(closeTelemetryLane);
|
|
288
|
+
contractGateAutopilot?.stop();
|
|
289
|
+
canaryOrchestrator?.stop();
|
|
290
|
+
await registry.shutdown();
|
|
291
|
+
};
|
|
292
|
+
let prepared = false;
|
|
293
|
+
api.onPrepare(async ()=>{
|
|
294
|
+
if (prepared) return;
|
|
295
|
+
prepared = true;
|
|
296
|
+
const { nodeServer } = api.getServerContext();
|
|
297
|
+
if (nodeServer && 'function' == typeof nodeServer.once) nodeServer.once('close', ()=>{
|
|
298
|
+
closeTelemetryLane();
|
|
299
|
+
});
|
|
300
|
+
activeTelemetryLaneClosers.add(closeTelemetryLane);
|
|
301
|
+
ensureTelemetryBeforeExitHook();
|
|
302
|
+
if (telemetryConfig.exporters?.otlp?.enabled) {
|
|
303
|
+
(0, external_telemetryCore_js_namespaceObject.maybeWarnLegacyOtlpEndpoint)(telemetryConfig.exporters.otlp.endpoint);
|
|
304
|
+
await registry.register((0, external_telemetryCore_js_namespaceObject.createOtlpTelemetryExporter)(telemetryConfig.exporters.otlp));
|
|
305
|
+
}
|
|
306
|
+
if (telemetryConfig.exporters?.victoriaMetrics?.enabled) await registry.register((0, external_telemetryCore_js_namespaceObject.createVictoriaMetricsTelemetryExporter)(telemetryConfig.exporters.victoriaMetrics));
|
|
307
|
+
await registry.startupHealthCheck({
|
|
308
|
+
failLoud: telemetryConfig.failLoudStartup ?? true
|
|
309
|
+
});
|
|
310
|
+
if (!canaryOrchestrator) return;
|
|
311
|
+
canaryOrchestrator.start();
|
|
312
|
+
if (gateSnapshotStorePromise) {
|
|
313
|
+
const gateSnapshotStore = await gateSnapshotStorePromise;
|
|
314
|
+
contractGateAutopilot = new external_contractGateAutopilot_js_namespaceObject.ContractGateAutopilot({
|
|
315
|
+
orchestrator: canaryOrchestrator,
|
|
316
|
+
gateSnapshotPath: (0, external_contractGateSnapshotStore_js_namespaceObject.resolveContractGateSnapshotPath)(appDirectory, canaryConfig?.autopilot?.gateSnapshotPath),
|
|
317
|
+
gateSnapshotStore,
|
|
318
|
+
pollIntervalMs: canaryConfig?.autopilot?.pollIntervalMs,
|
|
319
|
+
gateStaleAfterMs: canaryConfig?.autopilot?.gateStaleAfterMs
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
if (contractGateAutopilot) await contractGateAutopilot.start();
|
|
323
|
+
canaryOrchestrator.evaluate();
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
exports.DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT = __webpack_exports__.DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT;
|
|
328
|
+
exports.DEFAULT_RUNTIME_STATUS_ENDPOINT = __webpack_exports__.DEFAULT_RUNTIME_STATUS_ENDPOINT;
|
|
329
|
+
exports.TelemetryCanaryOrchestrator = __webpack_exports__.TelemetryCanaryOrchestrator;
|
|
330
|
+
exports.TelemetryRegistry = __webpack_exports__.TelemetryRegistry;
|
|
331
|
+
exports.TelemetryStartupHealthError = __webpack_exports__.TelemetryStartupHealthError;
|
|
332
|
+
exports.createOtlpTelemetryExporter = __webpack_exports__.createOtlpTelemetryExporter;
|
|
333
|
+
exports.createRuntimeFallbackSignalRuntimeState = __webpack_exports__.createRuntimeFallbackSignalRuntimeState;
|
|
334
|
+
exports.createRuntimeSignalError = __webpack_exports__.createRuntimeSignalError;
|
|
335
|
+
exports.createTelemetryAwareMetrics = __webpack_exports__.createTelemetryAwareMetrics;
|
|
336
|
+
exports.createVictoriaMetricsTelemetryExporter = __webpack_exports__.createVictoriaMetricsTelemetryExporter;
|
|
337
|
+
exports.enforceRuntimeFallbackSignalAuthToken = __webpack_exports__.enforceRuntimeFallbackSignalAuthToken;
|
|
338
|
+
exports.enforceRuntimeFallbackSignalTrustPolicy = __webpack_exports__.enforceRuntimeFallbackSignalTrustPolicy;
|
|
339
|
+
exports.getRuntimeSignalErrorStatusCode = __webpack_exports__.getRuntimeSignalErrorStatusCode;
|
|
340
|
+
exports.hasEnabledTelemetryExporters = __webpack_exports__.hasEnabledTelemetryExporters;
|
|
341
|
+
exports.injectTelemetryPlugin = __webpack_exports__.injectTelemetryPlugin;
|
|
342
|
+
exports.normalizeRequiredRuntimeFallbackSignalAuthConfig = __webpack_exports__.normalizeRequiredRuntimeFallbackSignalAuthConfig;
|
|
343
|
+
exports.normalizeRuntimeFallbackSignalAuthConfig = __webpack_exports__.normalizeRuntimeFallbackSignalAuthConfig;
|
|
344
|
+
exports.normalizeRuntimeFallbackTrustPolicy = __webpack_exports__.normalizeRuntimeFallbackTrustPolicy;
|
|
345
|
+
exports.parseRuntimeFallbackSignalPayloadFromRawBody = __webpack_exports__.parseRuntimeFallbackSignalPayloadFromRawBody;
|
|
346
|
+
exports.resolveRuntimeFallbackSignalEndpoint = __webpack_exports__.resolveRuntimeFallbackSignalEndpoint;
|
|
347
|
+
exports.resolveTelemetrySloOptions = __webpack_exports__.resolveTelemetrySloOptions;
|
|
348
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
349
|
+
"DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT",
|
|
350
|
+
"DEFAULT_RUNTIME_STATUS_ENDPOINT",
|
|
351
|
+
"TelemetryCanaryOrchestrator",
|
|
352
|
+
"TelemetryRegistry",
|
|
353
|
+
"TelemetryStartupHealthError",
|
|
354
|
+
"createOtlpTelemetryExporter",
|
|
355
|
+
"createRuntimeFallbackSignalRuntimeState",
|
|
356
|
+
"createRuntimeSignalError",
|
|
357
|
+
"createTelemetryAwareMetrics",
|
|
358
|
+
"createVictoriaMetricsTelemetryExporter",
|
|
359
|
+
"enforceRuntimeFallbackSignalAuthToken",
|
|
360
|
+
"enforceRuntimeFallbackSignalTrustPolicy",
|
|
361
|
+
"getRuntimeSignalErrorStatusCode",
|
|
362
|
+
"hasEnabledTelemetryExporters",
|
|
363
|
+
"injectTelemetryPlugin",
|
|
364
|
+
"normalizeRequiredRuntimeFallbackSignalAuthConfig",
|
|
365
|
+
"normalizeRuntimeFallbackSignalAuthConfig",
|
|
366
|
+
"normalizeRuntimeFallbackTrustPolicy",
|
|
367
|
+
"parseRuntimeFallbackSignalPayloadFromRawBody",
|
|
368
|
+
"resolveRuntimeFallbackSignalEndpoint",
|
|
369
|
+
"resolveTelemetrySloOptions"
|
|
370
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
371
|
+
Object.defineProperty(exports, '__esModule', {
|
|
372
|
+
value: true
|
|
373
|
+
});
|