@pipeline-builder/api-server 3.4.108 → 3.4.110

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.
@@ -1,18 +1,3 @@
1
- /**
2
- * Initialize OpenTelemetry tracing with OTLP HTTP exporter.
3
- * Idempotent — safe to call multiple times. Called automatically by
4
- * `createApp()` so every service gets tracing when `OTEL_TRACING_ENABLED=true`.
5
- *
6
- * Env vars:
7
- * OTEL_TRACING_ENABLED=true|false — master switch
8
- * OTEL_EXPORTER_OTLP_ENDPOINT=URL — collector endpoint (default http://localhost:4318/v1/traces)
9
- * OTEL_SERVICE_NAME=my-service — overrides the service label
10
- *
11
- * When enabled, Node SDK registers W3C trace-context propagation by default.
12
- * Outbound HTTP (fetch/axios/undici) carries `traceparent` automatically;
13
- * inbound HTTP extracts + re-uses it so traces span services end-to-end.
14
- */
15
- export declare function initTracing(serviceName: string): void;
16
1
  /**
17
2
  * Shutdown the OpenTelemetry SDK gracefully.
18
3
  */
@@ -1,65 +1,14 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { trace } from '@opentelemetry/api';
4
- import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
5
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
6
- import { resourceFromAttributes } from '@opentelemetry/resources';
7
4
  import { NodeSDK } from '@opentelemetry/sdk-node';
8
5
  import { createLogger } from '@pipeline-builder/api-core';
9
- import { Config } from '@pipeline-builder/pipeline-core';
10
6
  const logger = createLogger('tracing');
7
+ // Module-local SDK handle. Production services start tracing through the
8
+ // `otel-bootstrap.js` `--import` preload, which registers its own SDK on the
9
+ // global provider — so this stays null and `shutdownTracing()` is a no-op.
10
+ // It is retained because `server.ts` calls `shutdownTracing()` on shutdown.
11
11
  let sdk = null;
12
- /**
13
- * Initialize OpenTelemetry tracing with OTLP HTTP exporter.
14
- * Idempotent — safe to call multiple times. Called automatically by
15
- * `createApp()` so every service gets tracing when `OTEL_TRACING_ENABLED=true`.
16
- *
17
- * Env vars:
18
- * OTEL_TRACING_ENABLED=true|false — master switch
19
- * OTEL_EXPORTER_OTLP_ENDPOINT=URL — collector endpoint (default http://localhost:4318/v1/traces)
20
- * OTEL_SERVICE_NAME=my-service — overrides the service label
21
- *
22
- * When enabled, Node SDK registers W3C trace-context propagation by default.
23
- * Outbound HTTP (fetch/axios/undici) carries `traceparent` automatically;
24
- * inbound HTTP extracts + re-uses it so traces span services end-to-end.
25
- */
26
- export function initTracing(serviceName) {
27
- const { tracing } = Config.getAny('observability');
28
- if (!tracing.enabled) {
29
- logger.debug('OpenTelemetry tracing disabled (set OTEL_TRACING_ENABLED=true to enable)');
30
- return;
31
- }
32
- if (sdk) {
33
- logger.debug('OpenTelemetry already initialized');
34
- return;
35
- }
36
- const effectiveName = process.env.OTEL_SERVICE_NAME || serviceName;
37
- sdk = new NodeSDK({
38
- resource: resourceFromAttributes({
39
- 'service.name': effectiveName,
40
- 'service.namespace': 'pipeline-builder',
41
- 'deployment.environment': process.env.NODE_ENV ?? 'development',
42
- }),
43
- traceExporter: new OTLPTraceExporter({ url: tracing.endpoint }),
44
- // Auto-instrument incoming/outgoing HTTP (and express) so every request
45
- // gets a server span — that span's trace id is what `currentTraceId()`
46
- // returns for enriching audit events + structured logs. `fs` is disabled
47
- // because file-IO spans are pure noise for request-level correlation.
48
- instrumentations: [
49
- getNodeAutoInstrumentations({
50
- '@opentelemetry/instrumentation-fs': { enabled: false },
51
- }),
52
- ],
53
- });
54
- sdk.start();
55
- logger.info(`OpenTelemetry tracing initialized for ${effectiveName}`, { endpoint: tracing.endpoint });
56
- // Graceful shutdown on common signals so buffered spans flush before exit.
57
- const shutdown = () => {
58
- void shutdownTracing().catch(err => logger.warn('Tracing shutdown error', { error: String(err) }));
59
- };
60
- process.once('SIGTERM', shutdown);
61
- process.once('SIGINT', shutdown);
62
- }
63
12
  /**
64
13
  * Shutdown the OpenTelemetry SDK gracefully.
65
14
  */
@@ -76,11 +25,10 @@ export async function shutdownTracing() {
76
25
  * operator can correlate a request across services via its trace ID.
77
26
  */
78
27
  export function currentTraceId() {
79
- // Read the globally-registered tracer provider's active span works whether
80
- // the SDK was started by `initTracing()` (createApp services) or by a `-r`
81
- // preload bootstrap (platform), since both register the same global provider
82
- // via @opentelemetry/api. Returns undefined when tracing is disabled / there
83
- // is no active span.
28
+ // Read the globally-registered tracer provider's active span. The SDK is
29
+ // started by the `otel-bootstrap.js` `--import` preload, which registers the
30
+ // global provider via @opentelemetry/api. Returns undefined when tracing is
31
+ // disabled / there is no active span.
84
32
  return trace.getActiveSpan()?.spanContext()?.traceId;
85
33
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdHJhY2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFdkMsSUFBSSxHQUFHLEdBQW1CLElBQUksQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxXQUFtQjtJQUM3QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQXdELENBQUM7SUFFMUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFDekYsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLENBQUM7SUFFbkUsR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ2hCLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQztZQUMvQixjQUFjLEVBQUUsYUFBYTtZQUM3QixtQkFBbUIsRUFBRSxrQkFBa0I7WUFDdkMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksYUFBYTtTQUNoRSxDQUFDO1FBQ0YsYUFBYSxFQUFFLElBQUksaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9ELHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSxnQkFBZ0IsRUFBRTtZQUNoQiwyQkFBMkIsQ0FBQztnQkFDMUIsbUNBQW1DLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO2FBQ3hELENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLGFBQWEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRXRHLDJFQUEyRTtJQUMzRSxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIsS0FBSyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRyxDQUFDLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWU7SUFDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWM7SUFDNUIsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHFCQUFxQjtJQUNyQixPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB0cmFjZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBnZXROb2RlQXV0b0luc3RydW1lbnRhdGlvbnMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hdXRvLWluc3RydW1lbnRhdGlvbnMtbm9kZSc7XG5pbXBvcnQgeyBPVExQVHJhY2VFeHBvcnRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cCc7XG5pbXBvcnQgeyByZXNvdXJjZUZyb21BdHRyaWJ1dGVzIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzJztcbmltcG9ydCB7IE5vZGVTREsgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstbm9kZSc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0cmFjaW5nJyk7XG5cbmxldCBzZGs6IE5vZGVTREsgfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBJbml0aWFsaXplIE9wZW5UZWxlbWV0cnkgdHJhY2luZyB3aXRoIE9UTFAgSFRUUCBleHBvcnRlci5cbiAqIElkZW1wb3RlbnQg4oCUIHNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcy4gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnlcbiAqIGBjcmVhdGVBcHAoKWAgc28gZXZlcnkgc2VydmljZSBnZXRzIHRyYWNpbmcgd2hlbiBgT1RFTF9UUkFDSU5HX0VOQUJMRUQ9dHJ1ZWAuXG4gKlxuICogRW52IHZhcnM6XG4gKiAgIE9URUxfVFJBQ0lOR19FTkFCTEVEPXRydWV8ZmFsc2UgICAgIOKAlCBtYXN0ZXIgc3dpdGNoXG4gKiAgIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVD1VUkwgICAgICDigJQgY29sbGVjdG9yIGVuZHBvaW50IChkZWZhdWx0IGh0dHA6Ly9sb2NhbGhvc3Q6NDMxOC92MS90cmFjZXMpXG4gKiAgIE9URUxfU0VSVklDRV9OQU1FPW15LXNlcnZpY2UgICAgICAgICDigJQgb3ZlcnJpZGVzIHRoZSBzZXJ2aWNlIGxhYmVsXG4gKlxuICogV2hlbiBlbmFibGVkLCBOb2RlIFNESyByZWdpc3RlcnMgVzNDIHRyYWNlLWNvbnRleHQgcHJvcGFnYXRpb24gYnkgZGVmYXVsdC5cbiAqIE91dGJvdW5kIEhUVFAgKGZldGNoL2F4aW9zL3VuZGljaSkgY2FycmllcyBgdHJhY2VwYXJlbnRgIGF1dG9tYXRpY2FsbHk7XG4gKiBpbmJvdW5kIEhUVFAgZXh0cmFjdHMgKyByZS11c2VzIGl0IHNvIHRyYWNlcyBzcGFuIHNlcnZpY2VzIGVuZC10by1lbmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0VHJhY2luZyhzZXJ2aWNlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHsgdHJhY2luZyB9ID0gQ29uZmlnLmdldEFueSgnb2JzZXJ2YWJpbGl0eScpIGFzIHsgdHJhY2luZzogeyBlbmFibGVkOiBib29sZWFuOyBlbmRwb2ludDogc3RyaW5nIH0gfTtcblxuICBpZiAoIXRyYWNpbmcuZW5hYmxlZCkge1xuICAgIGxvZ2dlci5kZWJ1ZygnT3BlblRlbGVtZXRyeSB0cmFjaW5nIGRpc2FibGVkIChzZXQgT1RFTF9UUkFDSU5HX0VOQUJMRUQ9dHJ1ZSB0byBlbmFibGUpJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNkaykge1xuICAgIGxvZ2dlci5kZWJ1ZygnT3BlblRlbGVtZXRyeSBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0aXZlTmFtZSA9IHByb2Nlc3MuZW52Lk9URUxfU0VSVklDRV9OQU1FIHx8IHNlcnZpY2VOYW1lO1xuXG4gIHNkayA9IG5ldyBOb2RlU0RLKHtcbiAgICByZXNvdXJjZTogcmVzb3VyY2VGcm9tQXR0cmlidXRlcyh7XG4gICAgICAnc2VydmljZS5uYW1lJzogZWZmZWN0aXZlTmFtZSxcbiAgICAgICdzZXJ2aWNlLm5hbWVzcGFjZSc6ICdwaXBlbGluZS1idWlsZGVyJyxcbiAgICAgICdkZXBsb3ltZW50LmVudmlyb25tZW50JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gJ2RldmVsb3BtZW50JyxcbiAgICB9KSxcbiAgICB0cmFjZUV4cG9ydGVyOiBuZXcgT1RMUFRyYWNlRXhwb3J0ZXIoeyB1cmw6IHRyYWNpbmcuZW5kcG9pbnQgfSksXG4gICAgLy8gQXV0by1pbnN0cnVtZW50IGluY29taW5nL291dGdvaW5nIEhUVFAgKGFuZCBleHByZXNzKSBzbyBldmVyeSByZXF1ZXN0XG4gICAgLy8gZ2V0cyBhIHNlcnZlciBzcGFuIOKAlCB0aGF0IHNwYW4ncyB0cmFjZSBpZCBpcyB3aGF0IGBjdXJyZW50VHJhY2VJZCgpYFxuICAgIC8vIHJldHVybnMgZm9yIGVucmljaGluZyBhdWRpdCBldmVudHMgKyBzdHJ1Y3R1cmVkIGxvZ3MuIGBmc2AgaXMgZGlzYWJsZWRcbiAgICAvLyBiZWNhdXNlIGZpbGUtSU8gc3BhbnMgYXJlIHB1cmUgbm9pc2UgZm9yIHJlcXVlc3QtbGV2ZWwgY29ycmVsYXRpb24uXG4gICAgaW5zdHJ1bWVudGF0aW9uczogW1xuICAgICAgZ2V0Tm9kZUF1dG9JbnN0cnVtZW50YXRpb25zKHtcbiAgICAgICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcyc6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xuXG4gIHNkay5zdGFydCgpO1xuICBsb2dnZXIuaW5mbyhgT3BlblRlbGVtZXRyeSB0cmFjaW5nIGluaXRpYWxpemVkIGZvciAke2VmZmVjdGl2ZU5hbWV9YCwgeyBlbmRwb2ludDogdHJhY2luZy5lbmRwb2ludCB9KTtcblxuICAvLyBHcmFjZWZ1bCBzaHV0ZG93biBvbiBjb21tb24gc2lnbmFscyBzbyBidWZmZXJlZCBzcGFucyBmbHVzaCBiZWZvcmUgZXhpdC5cbiAgY29uc3Qgc2h1dGRvd24gPSAoKSA9PiB7XG4gICAgdm9pZCBzaHV0ZG93blRyYWNpbmcoKS5jYXRjaChlcnIgPT4gbG9nZ2VyLndhcm4oJ1RyYWNpbmcgc2h1dGRvd24gZXJyb3InLCB7IGVycm9yOiBTdHJpbmcoZXJyKSB9KSk7XG4gIH07XG4gIHByb2Nlc3Mub25jZSgnU0lHVEVSTScsIHNodXRkb3duKTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdJTlQnLCBzaHV0ZG93bik7XG59XG5cbi8qKlxuICogU2h1dGRvd24gdGhlIE9wZW5UZWxlbWV0cnkgU0RLIGdyYWNlZnVsbHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaHV0ZG93blRyYWNpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzZGspIHtcbiAgICBhd2FpdCBzZGsuc2h1dGRvd24oKTtcbiAgICBzZGsgPSBudWxsO1xuICAgIGxvZ2dlci5pbmZvKCdPcGVuVGVsZW1ldHJ5IHRyYWNpbmcgc2h1dCBkb3duJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0cmFjZSBJRCwgb3IgdW5kZWZpbmVkIHdoZW4gdHJhY2luZyBpc1xuICogZGlzYWJsZWQgLyBubyBhY3RpdmUgc3Bhbi4gVXNlZnVsIGZvciBlbnJpY2hpbmcgc3RydWN0dXJlZCBsb2dzIHNvIGFuXG4gKiBvcGVyYXRvciBjYW4gY29ycmVsYXRlIGEgcmVxdWVzdCBhY3Jvc3Mgc2VydmljZXMgdmlhIGl0cyB0cmFjZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRUcmFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vIFJlYWQgdGhlIGdsb2JhbGx5LXJlZ2lzdGVyZWQgdHJhY2VyIHByb3ZpZGVyJ3MgYWN0aXZlIHNwYW4g4oCUIHdvcmtzIHdoZXRoZXJcbiAgLy8gdGhlIFNESyB3YXMgc3RhcnRlZCBieSBgaW5pdFRyYWNpbmcoKWAgKGNyZWF0ZUFwcCBzZXJ2aWNlcykgb3IgYnkgYSBgLXJgXG4gIC8vIHByZWxvYWQgYm9vdHN0cmFwIChwbGF0Zm9ybSksIHNpbmNlIGJvdGggcmVnaXN0ZXIgdGhlIHNhbWUgZ2xvYmFsIHByb3ZpZGVyXG4gIC8vIHZpYSBAb3BlbnRlbGVtZXRyeS9hcGkuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdHJhY2luZyBpcyBkaXNhYmxlZCAvIHRoZXJlXG4gIC8vIGlzIG5vIGFjdGl2ZSBzcGFuLlxuICByZXR1cm4gdHJhY2UuZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpPy50cmFjZUlkO1xufVxuIl19
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdHJhY2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV2Qyx5RUFBeUU7QUFDekUsNkVBQTZFO0FBQzdFLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsSUFBSSxHQUFHLEdBQW1CLElBQUksQ0FBQztBQUUvQjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZTtJQUNuQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1Qix5RUFBeUU7SUFDekUsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSxzQ0FBc0M7SUFDdEMsT0FBTyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgdHJhY2UgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgTm9kZVNESyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay1ub2RlJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0cmFjaW5nJyk7XG5cbi8vIE1vZHVsZS1sb2NhbCBTREsgaGFuZGxlLiBQcm9kdWN0aW9uIHNlcnZpY2VzIHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGVcbi8vIGBvdGVsLWJvb3RzdHJhcC5qc2AgYC0taW1wb3J0YCBwcmVsb2FkLCB3aGljaCByZWdpc3RlcnMgaXRzIG93biBTREsgb24gdGhlXG4vLyBnbG9iYWwgcHJvdmlkZXIg4oCUIHNvIHRoaXMgc3RheXMgbnVsbCBhbmQgYHNodXRkb3duVHJhY2luZygpYCBpcyBhIG5vLW9wLlxuLy8gSXQgaXMgcmV0YWluZWQgYmVjYXVzZSBgc2VydmVyLnRzYCBjYWxscyBgc2h1dGRvd25UcmFjaW5nKClgIG9uIHNodXRkb3duLlxubGV0IHNkazogTm9kZVNESyB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIFNodXRkb3duIHRoZSBPcGVuVGVsZW1ldHJ5IFNESyBncmFjZWZ1bGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2h1dGRvd25UcmFjaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoc2RrKSB7XG4gICAgYXdhaXQgc2RrLnNodXRkb3duKCk7XG4gICAgc2RrID0gbnVsbDtcbiAgICBsb2dnZXIuaW5mbygnT3BlblRlbGVtZXRyeSB0cmFjaW5nIHNodXQgZG93bicpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdHJhY2UgSUQsIG9yIHVuZGVmaW5lZCB3aGVuIHRyYWNpbmcgaXNcbiAqIGRpc2FibGVkIC8gbm8gYWN0aXZlIHNwYW4uIFVzZWZ1bCBmb3IgZW5yaWNoaW5nIHN0cnVjdHVyZWQgbG9ncyBzbyBhblxuICogb3BlcmF0b3IgY2FuIGNvcnJlbGF0ZSBhIHJlcXVlc3QgYWNyb3NzIHNlcnZpY2VzIHZpYSBpdHMgdHJhY2UgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50VHJhY2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBSZWFkIHRoZSBnbG9iYWxseS1yZWdpc3RlcmVkIHRyYWNlciBwcm92aWRlcidzIGFjdGl2ZSBzcGFuLiBUaGUgU0RLIGlzXG4gIC8vIHN0YXJ0ZWQgYnkgdGhlIGBvdGVsLWJvb3RzdHJhcC5qc2AgYC0taW1wb3J0YCBwcmVsb2FkLCB3aGljaCByZWdpc3RlcnMgdGhlXG4gIC8vIGdsb2JhbCBwcm92aWRlciB2aWEgQG9wZW50ZWxlbWV0cnkvYXBpLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRyYWNpbmcgaXNcbiAgLy8gZGlzYWJsZWQgLyB0aGVyZSBpcyBubyBhY3RpdmUgc3Bhbi5cbiAgcmV0dXJuIHRyYWNlLmdldEFjdGl2ZVNwYW4oKT8uc3BhbkNvbnRleHQoKT8udHJhY2VJZDtcbn1cbiJdfQ==
package/lib/index.d.ts CHANGED
@@ -10,10 +10,10 @@
10
10
  * **Middleware**
11
11
  * - attachRequestContext / createRequestContext — attaches identity + logging to each request
12
12
  * - requireOrgId — validates organization ID is present on the request
13
+ * - withTenantContext — opens the RLS tenant scope for the request
13
14
  * - checkQuota — quota enforcement middleware
14
- * - etagMiddleware — ETag-based conditional response support
15
15
  * - idempotencyMiddleware — idempotent request handling
16
- * - middlewareFactory — composable middleware builder
16
+ * - createProtectedRoute / createAuthenticatedWithOrgRoute — composable middleware chains
17
17
  *
18
18
  * **Route Helpers**
19
19
  * - withRoute — wraps async route handlers with context extraction, orgId validation, and error handling
package/lib/index.js CHANGED
@@ -12,10 +12,10 @@
12
12
  * **Middleware**
13
13
  * - attachRequestContext / createRequestContext — attaches identity + logging to each request
14
14
  * - requireOrgId — validates organization ID is present on the request
15
+ * - withTenantContext — opens the RLS tenant scope for the request
15
16
  * - checkQuota — quota enforcement middleware
16
- * - etagMiddleware — ETag-based conditional response support
17
17
  * - idempotencyMiddleware — idempotent request handling
18
- * - middlewareFactory — composable middleware builder
18
+ * - createProtectedRoute / createAuthenticatedWithOrgRoute — composable middleware chains
19
19
  *
20
20
  * **Route Helpers**
21
21
  * - withRoute — wraps async route handlers with context extraction, orgId validation, and error handling
@@ -32,4 +32,4 @@
32
32
  export * from './api/index.js';
33
33
  // HTTP Utilities
34
34
  export * from './http/index.js';
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgscUJBQXFCO0FBQ3JCLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsaUJBQWlCO0FBQ2pCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBAbW9kdWxlIEBwaXBlbGluZS1idWlsZGVyL2FwaS1zZXJ2ZXJcbiAqXG4gKiBFeHByZXNzIHNlcnZlciBpbmZyYXN0cnVjdHVyZSBhbmQgcmVxdWVzdCBsaWZlY3ljbGUgdXRpbGl0aWVzLlxuICpcbiAqICoqQXBwIEZhY3RvcnkqKlxuICogLSBjcmVhdGVBcHAg4oCUIGNyZWF0ZXMgYSBjb25maWd1cmVkIEV4cHJlc3MgYXBwIHdpdGggQ09SUywgSGVsbWV0LCByYXRlIGxpbWl0aW5nXG4gKiAtIHJ1blNlcnZlciwgc3RhcnRTZXJ2ZXIg4oCUIHNlcnZlciBsaWZlY3ljbGUgd2l0aCBncmFjZWZ1bCBzaHV0ZG93blxuICpcbiAqICoqTWlkZGxld2FyZSoqXG4gKiAtIGF0dGFjaFJlcXVlc3RDb250ZXh0IC8gY3JlYXRlUmVxdWVzdENvbnRleHQg4oCUIGF0dGFjaGVzIGlkZW50aXR5ICsgbG9nZ2luZyB0byBlYWNoIHJlcXVlc3RcbiAqIC0gcmVxdWlyZU9yZ0lkIOKAlCB2YWxpZGF0ZXMgb3JnYW5pemF0aW9uIElEIGlzIHByZXNlbnQgb24gdGhlIHJlcXVlc3RcbiAqIC0gY2hlY2tRdW90YSDigJQgcXVvdGEgZW5mb3JjZW1lbnQgbWlkZGxld2FyZVxuICogLSBldGFnTWlkZGxld2FyZSDigJQgRVRhZy1iYXNlZCBjb25kaXRpb25hbCByZXNwb25zZSBzdXBwb3J0XG4gKiAtIGlkZW1wb3RlbmN5TWlkZGxld2FyZSDigJQgaWRlbXBvdGVudCByZXF1ZXN0IGhhbmRsaW5nXG4gKiAtIG1pZGRsZXdhcmVGYWN0b3J5IOKAlCBjb21wb3NhYmxlIG1pZGRsZXdhcmUgYnVpbGRlclxuICpcbiAqICoqUm91dGUgSGVscGVycyoqXG4gKiAtIHdpdGhSb3V0ZSDigJQgd3JhcHMgYXN5bmMgcm91dGUgaGFuZGxlcnMgd2l0aCBjb250ZXh0IGV4dHJhY3Rpb24sIG9yZ0lkIHZhbGlkYXRpb24sIGFuZCBlcnJvciBoYW5kbGluZ1xuICogLSBnZXRDb250ZXh0IOKAlCByZXRyaWV2ZXMgUmVxdWVzdENvbnRleHQgZnJvbSB0aGUgRXhwcmVzcyByZXF1ZXN0XG4gKiAtIFJvdXRlQ29udGV4dCwgUmVxdWVzdENvbnRleHQg4oCUIHJvdXRlIGFuZCByZXF1ZXN0IGNvbnRleHQgdHlwZXNcbiAqXG4gKiAqKlNTRSoqXG4gKiAtIFNTRU1hbmFnZXIg4oCUIFNlcnZlci1TZW50IEV2ZW50cyBjb25uZWN0aW9uIG1hbmFnZXJcbiAqXG4gKiAqKk9ic2VydmFiaWxpdHkqKlxuICogLSBUcmFjaW5nIGFuZCBtZXRyaWNzIGNvbGxlY3Rpb24gdXRpbGl0aWVzXG4gKi9cblxuLy8gQVBJIEluZnJhc3RydWN0dXJlXG5leHBvcnQgKiBmcm9tICcuL2FwaS9pbmRleC5qcyc7XG5cbi8vIEhUVFAgVXRpbGl0aWVzXG5leHBvcnQgKiBmcm9tICcuL2h0dHAvaW5kZXguanMnOyJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgscUJBQXFCO0FBQ3JCLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsaUJBQWlCO0FBQ2pCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBAbW9kdWxlIEBwaXBlbGluZS1idWlsZGVyL2FwaS1zZXJ2ZXJcbiAqXG4gKiBFeHByZXNzIHNlcnZlciBpbmZyYXN0cnVjdHVyZSBhbmQgcmVxdWVzdCBsaWZlY3ljbGUgdXRpbGl0aWVzLlxuICpcbiAqICoqQXBwIEZhY3RvcnkqKlxuICogLSBjcmVhdGVBcHAg4oCUIGNyZWF0ZXMgYSBjb25maWd1cmVkIEV4cHJlc3MgYXBwIHdpdGggQ09SUywgSGVsbWV0LCByYXRlIGxpbWl0aW5nXG4gKiAtIHJ1blNlcnZlciwgc3RhcnRTZXJ2ZXIg4oCUIHNlcnZlciBsaWZlY3ljbGUgd2l0aCBncmFjZWZ1bCBzaHV0ZG93blxuICpcbiAqICoqTWlkZGxld2FyZSoqXG4gKiAtIGF0dGFjaFJlcXVlc3RDb250ZXh0IC8gY3JlYXRlUmVxdWVzdENvbnRleHQg4oCUIGF0dGFjaGVzIGlkZW50aXR5ICsgbG9nZ2luZyB0byBlYWNoIHJlcXVlc3RcbiAqIC0gcmVxdWlyZU9yZ0lkIOKAlCB2YWxpZGF0ZXMgb3JnYW5pemF0aW9uIElEIGlzIHByZXNlbnQgb24gdGhlIHJlcXVlc3RcbiAqIC0gd2l0aFRlbmFudENvbnRleHQg4oCUIG9wZW5zIHRoZSBSTFMgdGVuYW50IHNjb3BlIGZvciB0aGUgcmVxdWVzdFxuICogLSBjaGVja1F1b3RhIOKAlCBxdW90YSBlbmZvcmNlbWVudCBtaWRkbGV3YXJlXG4gKiAtIGlkZW1wb3RlbmN5TWlkZGxld2FyZSDigJQgaWRlbXBvdGVudCByZXF1ZXN0IGhhbmRsaW5nXG4gKiAtIGNyZWF0ZVByb3RlY3RlZFJvdXRlIC8gY3JlYXRlQXV0aGVudGljYXRlZFdpdGhPcmdSb3V0ZSDigJQgY29tcG9zYWJsZSBtaWRkbGV3YXJlIGNoYWluc1xuICpcbiAqICoqUm91dGUgSGVscGVycyoqXG4gKiAtIHdpdGhSb3V0ZSDigJQgd3JhcHMgYXN5bmMgcm91dGUgaGFuZGxlcnMgd2l0aCBjb250ZXh0IGV4dHJhY3Rpb24sIG9yZ0lkIHZhbGlkYXRpb24sIGFuZCBlcnJvciBoYW5kbGluZ1xuICogLSBnZXRDb250ZXh0IOKAlCByZXRyaWV2ZXMgUmVxdWVzdENvbnRleHQgZnJvbSB0aGUgRXhwcmVzcyByZXF1ZXN0XG4gKiAtIFJvdXRlQ29udGV4dCwgUmVxdWVzdENvbnRleHQg4oCUIHJvdXRlIGFuZCByZXF1ZXN0IGNvbnRleHQgdHlwZXNcbiAqXG4gKiAqKlNTRSoqXG4gKiAtIFNTRU1hbmFnZXIg4oCUIFNlcnZlci1TZW50IEV2ZW50cyBjb25uZWN0aW9uIG1hbmFnZXJcbiAqXG4gKiAqKk9ic2VydmFiaWxpdHkqKlxuICogLSBUcmFjaW5nIGFuZCBtZXRyaWNzIGNvbGxlY3Rpb24gdXRpbGl0aWVzXG4gKi9cblxuLy8gQVBJIEluZnJhc3RydWN0dXJlXG5leHBvcnQgKiBmcm9tICcuL2FwaS9pbmRleC5qcyc7XG5cbi8vIEhUVFAgVXRpbGl0aWVzXG5leHBvcnQgKiBmcm9tICcuL2h0dHAvaW5kZXguanMnOyJdfQ==
@@ -8,7 +8,7 @@
8
8
  * node --import @pipeline-builder/api-server/lib/otel-bootstrap.js index.js
9
9
  * (see each service's Dockerfile CMD).
10
10
  *
11
- * Why a preload and not `initTracing()` from createApp/index.ts:
11
+ * Why a preload and not a programmatic SDK start from createApp/index.ts:
12
12
  * OpenTelemetry auto-instrumentation patches modules as they load. If
13
13
  * `http`/`express` are already loaded when the SDK starts, the HTTP server is
14
14
  * never wrapped, so no inbound server span — and therefore no trace id — is ever
@@ -21,8 +21,8 @@
21
21
  * `process.env` directly. It must NOT import this package's own barrel (or
22
22
  * api-core / pipeline-core), because those transitively require express — which
23
23
  * would load express before the SDK starts and defeat the preload. This is why
24
- * the bootstrap lives in its own entrypoint file rather than reusing
25
- * `initTracing()` from `api/tracing.ts`.
24
+ * the bootstrap lives in its own entrypoint file rather than starting the SDK
25
+ * from within `api/tracing.ts`.
26
26
  *
27
27
  * No-op unless `OTEL_TRACING_ENABLED=true`. Service name comes from
28
28
  * `OTEL_SERVICE_NAME` (falling back to `SERVICE_NAME`), which every service
@@ -72,4 +72,4 @@ if (process.env.OTEL_TRACING_ENABLED === 'true') {
72
72
  process.once('SIGTERM', shutdown);
73
73
  process.once('SIGINT', shutdown);
74
74
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbC1ib290c3RyYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb3RlbC1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ2hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksaUNBQWlDLENBQUM7SUFDOUYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7SUFFdkYsZ0ZBQWdGO0lBQ2hGLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsc0JBQXNCO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2Isc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUcsR0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixRQUFRLEVBQUUsc0JBQXNCLENBQUM7WUFDL0IsY0FBYyxFQUFFLFdBQVc7WUFDM0IsbUJBQW1CLEVBQUUsa0JBQWtCO1lBQ3ZDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLGFBQWE7U0FDaEUsQ0FBQztRQUNGLGFBQWEsRUFBRSxJQUFJLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0Usd0VBQXdFO1FBQ3hFLGdCQUFnQixFQUFFO1lBQ2hCLDJCQUEyQixDQUFDO2dCQUMxQixtQ0FBbUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7YUFDeEQsQ0FBQztTQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1osc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFdBQVcsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtRQUNwQixLQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNoYXJlZCBPcGVuVGVsZW1ldHJ5IHByZWxvYWQgYm9vdHN0cmFwIGZvciBldmVyeSBQaXBlbGluZSBCdWlsZGVyIHNlcnZpY2UuXG4gKlxuICogUHJlbG9hZCBpdCBCRUZPUkUgdGhlIGFwcCdzIG93biBjb2RlIHdpdGggKHNlcnZpY2VzIGFyZSBFU00sIHNvIGAtLWltcG9ydGAsXG4gKiBub3QgdGhlIENKUyBgLXJgKTpcbiAqICAgbm9kZSAtLWltcG9ydCBAcGlwZWxpbmUtYnVpbGRlci9hcGktc2VydmVyL2xpYi9vdGVsLWJvb3RzdHJhcC5qcyBpbmRleC5qc1xuICogKHNlZSBlYWNoIHNlcnZpY2UncyBEb2NrZXJmaWxlIENNRCkuXG4gKlxuICogV2h5IGEgcHJlbG9hZCBhbmQgbm90IGBpbml0VHJhY2luZygpYCBmcm9tIGNyZWF0ZUFwcC9pbmRleC50czpcbiAqIE9wZW5UZWxlbWV0cnkgYXV0by1pbnN0cnVtZW50YXRpb24gcGF0Y2hlcyBtb2R1bGVzIGFzIHRoZXkgbG9hZC4gSWZcbiAqIGBodHRwYC9gZXhwcmVzc2AgYXJlIGFscmVhZHkgbG9hZGVkIHdoZW4gdGhlIFNESyBzdGFydHMsIHRoZSBIVFRQIHNlcnZlciBpc1xuICogbmV2ZXIgd3JhcHBlZCwgc28gbm8gaW5ib3VuZCBzZXJ2ZXIgc3BhbiDigJQgYW5kIHRoZXJlZm9yZSBubyB0cmFjZSBpZCDigJQgaXMgZXZlclxuICogY3JlYXRlZC4gVGhlIGAtLWltcG9ydGAgcHJlbG9hZCBydW5zIGZ1bGx5IGJlZm9yZSBgaW5kZXguanNgIGxvYWRzIGFueVxuICogaW5zdHJ1bWVudGVkIG1vZHVsZS4gQmVjYXVzZSB0aGUgc2VydmljZXMgYXJlIEVTTSwgd2UgYWxzbyByZWdpc3RlciB0aGVcbiAqIGltcG9ydC1pbi10aGUtbWlkZGxlIEVTTSBsb2FkZXIgaG9vayBiZWxvdyDigJQgcmVxdWlyZS1pbi10aGUtbWlkZGxlIGFsb25lIG9ubHlcbiAqIHBhdGNoZXMgQ0pTIGByZXF1aXJlKClgLCB3aGljaCBhbiBFU00gYXBwIG5ldmVyIHVzZXMuXG4gKlxuICogU2VsZi1jb250YWluZWQgb24gcHVycG9zZTogaXQgaW1wb3J0cyBPTkxZIE9wZW5UZWxlbWV0cnkgcGFja2FnZXMgYW5kIHJlYWRzXG4gKiBgcHJvY2Vzcy5lbnZgIGRpcmVjdGx5LiBJdCBtdXN0IE5PVCBpbXBvcnQgdGhpcyBwYWNrYWdlJ3Mgb3duIGJhcnJlbCAob3JcbiAqIGFwaS1jb3JlIC8gcGlwZWxpbmUtY29yZSksIGJlY2F1c2UgdGhvc2UgdHJhbnNpdGl2ZWx5IHJlcXVpcmUgZXhwcmVzcyDigJQgd2hpY2hcbiAqIHdvdWxkIGxvYWQgZXhwcmVzcyBiZWZvcmUgdGhlIFNESyBzdGFydHMgYW5kIGRlZmVhdCB0aGUgcHJlbG9hZC4gVGhpcyBpcyB3aHlcbiAqIHRoZSBib290c3RyYXAgbGl2ZXMgaW4gaXRzIG93biBlbnRyeXBvaW50IGZpbGUgcmF0aGVyIHRoYW4gcmV1c2luZ1xuICogYGluaXRUcmFjaW5nKClgIGZyb20gYGFwaS90cmFjaW5nLnRzYC5cbiAqXG4gKiBOby1vcCB1bmxlc3MgYE9URUxfVFJBQ0lOR19FTkFCTEVEPXRydWVgLiBTZXJ2aWNlIG5hbWUgY29tZXMgZnJvbVxuICogYE9URUxfU0VSVklDRV9OQU1FYCAoZmFsbGluZyBiYWNrIHRvIGBTRVJWSUNFX05BTUVgKSwgd2hpY2ggZXZlcnkgc2VydmljZVxuICogYWxyZWFkeSBzZXRzIGluIGl0cyBkZXBsb3kgZW52LlxuICovXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCB7IGdldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2F1dG8taW5zdHJ1bWVudGF0aW9ucy1ub2RlJztcbmltcG9ydCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwJztcbmltcG9ydCB7IHJlc291cmNlRnJvbUF0dHJpYnV0ZXMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgTm9kZVNESyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay1ub2RlJztcblxuaWYgKHByb2Nlc3MuZW52Lk9URUxfVFJBQ0lOR19FTkFCTEVEID09PSAndHJ1ZScpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6NDMxOC92MS90cmFjZXMnO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52Lk9URUxfU0VSVklDRV9OQU1FIHx8IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJztcblxuICAvLyBFbmFibGUgRVNNIGluc3RydW1lbnRhdGlvbjogcmVnaXN0ZXIgdGhlIGltcG9ydC1pbi10aGUtbWlkZGxlIGhvb2sgYmVmb3JlIGFueVxuICAvLyBpbnN0cnVtZW50ZWQgbW9kdWxlIGlzIGltcG9ydGVkLiBXcmFwcGVkIHNvIGEgaG9vay1yZXNvbHV0aW9uIGZhaWx1cmVcbiAgLy8gZGVncmFkZXMgdG8gbm8taW5zdHJ1bWVudGF0aW9uICh0b2RheSdzIGJlaGF2aW91cikgcmF0aGVyIHRoYW4gY3Jhc2hpbmcgdGhlXG4gIC8vIHNlcnZpY2Ugb24gc3RhcnR1cC5cbiAgdHJ5IHtcbiAgICByZWdpc3RlcignQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2hvb2subWpzJywgaW1wb3J0Lm1ldGEudXJsKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oJ1tvdGVsXSBFU00gaW5zdHJ1bWVudGF0aW9uIGhvb2sgbm90IHJlZ2lzdGVyZWQ6JywgKGVyciBhcyBFcnJvcikubWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCBzZGsgPSBuZXcgTm9kZVNESyh7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlRnJvbUF0dHJpYnV0ZXMoe1xuICAgICAgJ3NlcnZpY2UubmFtZSc6IHNlcnZpY2VOYW1lLFxuICAgICAgJ3NlcnZpY2UubmFtZXNwYWNlJzogJ3BpcGVsaW5lLWJ1aWxkZXInLFxuICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA/PyAnZGV2ZWxvcG1lbnQnLFxuICAgIH0pLFxuICAgIHRyYWNlRXhwb3J0ZXI6IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogZW5kcG9pbnQgfSksXG4gICAgLy8gYGZzYCBzcGFucyBhcmUgbm9pc2UgZm9yIHJlcXVlc3QtbGV2ZWwgY29ycmVsYXRpb247IGV2ZXJ5dGhpbmcgZWxzZVxuICAgIC8vIChodHRwL2V4cHJlc3MvbW9uZ28vcGcv4oCmKSBpcyBhdXRvLWluc3RydW1lbnRlZCBzbyBpbmJvdW5kIHJlcXVlc3RzIGdldCBhXG4gICAgLy8gc2VydmVyIHNwYW4gd2hvc2UgdHJhY2UgaWQgZmxvd3Mgb250byBhdWRpdCBldmVudHMgKyBzdHJ1Y3R1cmVkIGxvZ3MuXG4gICAgaW5zdHJ1bWVudGF0aW9uczogW1xuICAgICAgZ2V0Tm9kZUF1dG9JbnN0cnVtZW50YXRpb25zKHtcbiAgICAgICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcyc6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xuXG4gIHNkay5zdGFydCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhgW290ZWxdIHRyYWNpbmcgaW5pdGlhbGl6ZWQgZm9yICR7c2VydmljZU5hbWV9IC0+ICR7ZW5kcG9pbnR9YCk7XG5cbiAgY29uc3Qgc2h1dGRvd24gPSAoKSA9PiB7XG4gICAgdm9pZCBzZGsuc2h1dGRvd24oKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9O1xuICBwcm9jZXNzLm9uY2UoJ1NJR1RFUk0nLCBzaHV0ZG93bik7XG4gIHByb2Nlc3Mub25jZSgnU0lHSU5UJywgc2h1dGRvd24pO1xufVxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbC1ib290c3RyYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb3RlbC1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ2hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksaUNBQWlDLENBQUM7SUFDOUYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7SUFFdkYsZ0ZBQWdGO0lBQ2hGLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsc0JBQXNCO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2Isc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUcsR0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixRQUFRLEVBQUUsc0JBQXNCLENBQUM7WUFDL0IsY0FBYyxFQUFFLFdBQVc7WUFDM0IsbUJBQW1CLEVBQUUsa0JBQWtCO1lBQ3ZDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLGFBQWE7U0FDaEUsQ0FBQztRQUNGLGFBQWEsRUFBRSxJQUFJLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0Usd0VBQXdFO1FBQ3hFLGdCQUFnQixFQUFFO1lBQ2hCLDJCQUEyQixDQUFDO2dCQUMxQixtQ0FBbUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7YUFDeEQsQ0FBQztTQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1osc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFdBQVcsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtRQUNwQixLQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNoYXJlZCBPcGVuVGVsZW1ldHJ5IHByZWxvYWQgYm9vdHN0cmFwIGZvciBldmVyeSBQaXBlbGluZSBCdWlsZGVyIHNlcnZpY2UuXG4gKlxuICogUHJlbG9hZCBpdCBCRUZPUkUgdGhlIGFwcCdzIG93biBjb2RlIHdpdGggKHNlcnZpY2VzIGFyZSBFU00sIHNvIGAtLWltcG9ydGAsXG4gKiBub3QgdGhlIENKUyBgLXJgKTpcbiAqICAgbm9kZSAtLWltcG9ydCBAcGlwZWxpbmUtYnVpbGRlci9hcGktc2VydmVyL2xpYi9vdGVsLWJvb3RzdHJhcC5qcyBpbmRleC5qc1xuICogKHNlZSBlYWNoIHNlcnZpY2UncyBEb2NrZXJmaWxlIENNRCkuXG4gKlxuICogV2h5IGEgcHJlbG9hZCBhbmQgbm90IGEgcHJvZ3JhbW1hdGljIFNESyBzdGFydCBmcm9tIGNyZWF0ZUFwcC9pbmRleC50czpcbiAqIE9wZW5UZWxlbWV0cnkgYXV0by1pbnN0cnVtZW50YXRpb24gcGF0Y2hlcyBtb2R1bGVzIGFzIHRoZXkgbG9hZC4gSWZcbiAqIGBodHRwYC9gZXhwcmVzc2AgYXJlIGFscmVhZHkgbG9hZGVkIHdoZW4gdGhlIFNESyBzdGFydHMsIHRoZSBIVFRQIHNlcnZlciBpc1xuICogbmV2ZXIgd3JhcHBlZCwgc28gbm8gaW5ib3VuZCBzZXJ2ZXIgc3BhbiDigJQgYW5kIHRoZXJlZm9yZSBubyB0cmFjZSBpZCDigJQgaXMgZXZlclxuICogY3JlYXRlZC4gVGhlIGAtLWltcG9ydGAgcHJlbG9hZCBydW5zIGZ1bGx5IGJlZm9yZSBgaW5kZXguanNgIGxvYWRzIGFueVxuICogaW5zdHJ1bWVudGVkIG1vZHVsZS4gQmVjYXVzZSB0aGUgc2VydmljZXMgYXJlIEVTTSwgd2UgYWxzbyByZWdpc3RlciB0aGVcbiAqIGltcG9ydC1pbi10aGUtbWlkZGxlIEVTTSBsb2FkZXIgaG9vayBiZWxvdyDigJQgcmVxdWlyZS1pbi10aGUtbWlkZGxlIGFsb25lIG9ubHlcbiAqIHBhdGNoZXMgQ0pTIGByZXF1aXJlKClgLCB3aGljaCBhbiBFU00gYXBwIG5ldmVyIHVzZXMuXG4gKlxuICogU2VsZi1jb250YWluZWQgb24gcHVycG9zZTogaXQgaW1wb3J0cyBPTkxZIE9wZW5UZWxlbWV0cnkgcGFja2FnZXMgYW5kIHJlYWRzXG4gKiBgcHJvY2Vzcy5lbnZgIGRpcmVjdGx5LiBJdCBtdXN0IE5PVCBpbXBvcnQgdGhpcyBwYWNrYWdlJ3Mgb3duIGJhcnJlbCAob3JcbiAqIGFwaS1jb3JlIC8gcGlwZWxpbmUtY29yZSksIGJlY2F1c2UgdGhvc2UgdHJhbnNpdGl2ZWx5IHJlcXVpcmUgZXhwcmVzcyDigJQgd2hpY2hcbiAqIHdvdWxkIGxvYWQgZXhwcmVzcyBiZWZvcmUgdGhlIFNESyBzdGFydHMgYW5kIGRlZmVhdCB0aGUgcHJlbG9hZC4gVGhpcyBpcyB3aHlcbiAqIHRoZSBib290c3RyYXAgbGl2ZXMgaW4gaXRzIG93biBlbnRyeXBvaW50IGZpbGUgcmF0aGVyIHRoYW4gc3RhcnRpbmcgdGhlIFNES1xuICogZnJvbSB3aXRoaW4gYGFwaS90cmFjaW5nLnRzYC5cbiAqXG4gKiBOby1vcCB1bmxlc3MgYE9URUxfVFJBQ0lOR19FTkFCTEVEPXRydWVgLiBTZXJ2aWNlIG5hbWUgY29tZXMgZnJvbVxuICogYE9URUxfU0VSVklDRV9OQU1FYCAoZmFsbGluZyBiYWNrIHRvIGBTRVJWSUNFX05BTUVgKSwgd2hpY2ggZXZlcnkgc2VydmljZVxuICogYWxyZWFkeSBzZXRzIGluIGl0cyBkZXBsb3kgZW52LlxuICovXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCB7IGdldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2F1dG8taW5zdHJ1bWVudGF0aW9ucy1ub2RlJztcbmltcG9ydCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwJztcbmltcG9ydCB7IHJlc291cmNlRnJvbUF0dHJpYnV0ZXMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgTm9kZVNESyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay1ub2RlJztcblxuaWYgKHByb2Nlc3MuZW52Lk9URUxfVFJBQ0lOR19FTkFCTEVEID09PSAndHJ1ZScpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6NDMxOC92MS90cmFjZXMnO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52Lk9URUxfU0VSVklDRV9OQU1FIHx8IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJztcblxuICAvLyBFbmFibGUgRVNNIGluc3RydW1lbnRhdGlvbjogcmVnaXN0ZXIgdGhlIGltcG9ydC1pbi10aGUtbWlkZGxlIGhvb2sgYmVmb3JlIGFueVxuICAvLyBpbnN0cnVtZW50ZWQgbW9kdWxlIGlzIGltcG9ydGVkLiBXcmFwcGVkIHNvIGEgaG9vay1yZXNvbHV0aW9uIGZhaWx1cmVcbiAgLy8gZGVncmFkZXMgdG8gbm8taW5zdHJ1bWVudGF0aW9uICh0b2RheSdzIGJlaGF2aW91cikgcmF0aGVyIHRoYW4gY3Jhc2hpbmcgdGhlXG4gIC8vIHNlcnZpY2Ugb24gc3RhcnR1cC5cbiAgdHJ5IHtcbiAgICByZWdpc3RlcignQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2hvb2subWpzJywgaW1wb3J0Lm1ldGEudXJsKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oJ1tvdGVsXSBFU00gaW5zdHJ1bWVudGF0aW9uIGhvb2sgbm90IHJlZ2lzdGVyZWQ6JywgKGVyciBhcyBFcnJvcikubWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCBzZGsgPSBuZXcgTm9kZVNESyh7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlRnJvbUF0dHJpYnV0ZXMoe1xuICAgICAgJ3NlcnZpY2UubmFtZSc6IHNlcnZpY2VOYW1lLFxuICAgICAgJ3NlcnZpY2UubmFtZXNwYWNlJzogJ3BpcGVsaW5lLWJ1aWxkZXInLFxuICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA/PyAnZGV2ZWxvcG1lbnQnLFxuICAgIH0pLFxuICAgIHRyYWNlRXhwb3J0ZXI6IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogZW5kcG9pbnQgfSksXG4gICAgLy8gYGZzYCBzcGFucyBhcmUgbm9pc2UgZm9yIHJlcXVlc3QtbGV2ZWwgY29ycmVsYXRpb247IGV2ZXJ5dGhpbmcgZWxzZVxuICAgIC8vIChodHRwL2V4cHJlc3MvbW9uZ28vcGcv4oCmKSBpcyBhdXRvLWluc3RydW1lbnRlZCBzbyBpbmJvdW5kIHJlcXVlc3RzIGdldCBhXG4gICAgLy8gc2VydmVyIHNwYW4gd2hvc2UgdHJhY2UgaWQgZmxvd3Mgb250byBhdWRpdCBldmVudHMgKyBzdHJ1Y3R1cmVkIGxvZ3MuXG4gICAgaW5zdHJ1bWVudGF0aW9uczogW1xuICAgICAgZ2V0Tm9kZUF1dG9JbnN0cnVtZW50YXRpb25zKHtcbiAgICAgICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcyc6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xuXG4gIHNkay5zdGFydCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhgW290ZWxdIHRyYWNpbmcgaW5pdGlhbGl6ZWQgZm9yICR7c2VydmljZU5hbWV9IC0+ICR7ZW5kcG9pbnR9YCk7XG5cbiAgY29uc3Qgc2h1dGRvd24gPSAoKSA9PiB7XG4gICAgdm9pZCBzZGsuc2h1dGRvd24oKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9O1xuICBwcm9jZXNzLm9uY2UoJ1NJR1RFUk0nLCBzaHV0ZG93bik7XG4gIHByb2Nlc3Mub25jZSgnU0lHSU5UJywgc2h1dGRvd24pO1xufVxuIl19
package/package.json CHANGED
@@ -11,9 +11,9 @@
11
11
  "@types/compression": "1.8.1",
12
12
  "@types/cors": "2.8.19",
13
13
  "@types/express": "5.0.6",
14
- "@types/express-serve-static-core": "5.1.1",
14
+ "@types/express-serve-static-core": "5.1.2",
15
15
  "@types/jsonwebtoken": "9.0.10",
16
- "@types/node": "25.9.2",
16
+ "@types/node": "26.1.1",
17
17
  "@types/swagger-ui-express": "4.1.8",
18
18
  "@typescript-eslint/eslint-plugin": "^8",
19
19
  "@typescript-eslint/parser": "^8",
@@ -27,25 +27,25 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@opentelemetry/api": "1.9.1",
30
- "@opentelemetry/auto-instrumentations-node": "0.76.0",
31
- "@opentelemetry/exporter-trace-otlp-http": "0.218.0",
32
- "@opentelemetry/instrumentation": "0.218.0",
33
- "@opentelemetry/resources": "2.7.1",
34
- "@opentelemetry/sdk-node": "0.218.0",
30
+ "@opentelemetry/auto-instrumentations-node": "0.78.0",
31
+ "@opentelemetry/exporter-trace-otlp-http": "0.220.0",
32
+ "@opentelemetry/instrumentation": "0.220.0",
33
+ "@opentelemetry/resources": "2.9.0",
34
+ "@opentelemetry/sdk-node": "0.220.0",
35
35
  "compression": "1.8.1",
36
36
  "cors": "2.8.6",
37
37
  "express": "5.2.1",
38
- "express-rate-limit": "8.5.2",
39
- "helmet": "8.2.0",
38
+ "express-rate-limit": "8.6.0",
39
+ "helmet": "8.3.0",
40
40
  "ioredis": "5.11.1",
41
41
  "jsonwebtoken": "9.0.3",
42
42
  "prom-client": "15.1.3",
43
- "rate-limit-redis": "5.0.0",
43
+ "rate-limit-redis": "6.0.0",
44
44
  "swagger-ui-express": "5.0.1",
45
- "uuid": "14.0.0",
46
- "@pipeline-builder/api-core": "3.4.85",
47
- "@pipeline-builder/pipeline-core": "3.4.102",
48
- "@pipeline-builder/pipeline-data": "3.4.88"
45
+ "uuid": "14.0.1",
46
+ "@pipeline-builder/pipeline-core": "3.4.104",
47
+ "@pipeline-builder/api-core": "3.4.87",
48
+ "@pipeline-builder/pipeline-data": "3.4.90"
49
49
  },
50
50
  "keywords": [
51
51
  "ci-cd",
@@ -101,7 +101,7 @@
101
101
  "access": "public",
102
102
  "registry": "https://registry.npmjs.org/"
103
103
  },
104
- "version": "3.4.108",
104
+ "version": "3.4.110",
105
105
  "bugs": {
106
106
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
107
107
  },