@odigos/aws-cdk 0.0.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 ADDED
@@ -0,0 +1,191 @@
1
+ # Odigos CDK constructs for AWS Lambda
2
+
3
+ Instrument AWS Lambda functions with the Odigos OpenTelemetry layer, from your own CDK app.
4
+
5
+ ```bash
6
+ npm install @odigos/aws-cdk # TypeScript / JavaScript
7
+ pip install odigos-aws-cdk # Python
8
+ ```
9
+
10
+ ```ts
11
+ import { OdigosLambdaInstrumentation } from '@odigos/aws-cdk';
12
+
13
+ new OdigosLambdaInstrumentation(this, 'Odigos', {
14
+ destination: { endpoint: 'otlp.example.com:4317' },
15
+ functions: [apiFn, workerFn],
16
+ });
17
+ ```
18
+
19
+ ```python
20
+ from odigos_aws_cdk import OdigosLambdaInstrumentation
21
+
22
+ OdigosLambdaInstrumentation(self, "Odigos",
23
+ destination={"endpoint": "otlp.example.com:4317"},
24
+ functions=[api_fn, worker_fn],
25
+ )
26
+ ```
27
+
28
+ That attaches the layer for each function's language and architecture, sets the exec wrapper that loads
29
+ the OpenTelemetry SDK, and hands the in-Lambda collector its whole configuration.
30
+
31
+ ## How the telemetry actually leaves the function
32
+
33
+ Your function's SDK **does not** export to your destination. It exports to an OpenTelemetry collector
34
+ running inside the same Lambda sandbox, on localhost. The collector forwards to your destination *after*
35
+ the handler has already returned its response.
36
+
37
+ That indirection is the whole point. A slow or unreachable destination costs billed duration, not caller
38
+ latency — and the collector's `decouple` processor is what holds the sandbox open until the export queue
39
+ drains, so a low-traffic function does not lose its telemetry to the freeze.
40
+
41
+ Consequently `OTEL_EXPORTER_OTLP_ENDPOINT` is deliberately never set. If you set it yourself you put the
42
+ export back on the invocation's critical path.
43
+
44
+ ## Choosing a layer source
45
+
46
+ ```ts
47
+ new OdigosLambdaInstrumentation(this, 'Odigos', {
48
+ destination: { endpoint: 'otlp.example.com:4317' },
49
+ functions: [fn],
50
+ layerSource: OdigosLayerSource.IN_ACCOUNT,
51
+ });
52
+ ```
53
+
54
+ | | `ODIGOS_PUBLIC` (default) | `IN_ACCOUNT` |
55
+ |---|---|---|
56
+ | What it synthesizes | a layer ARN | an `AWS::Serverless::Application` (nested stack) per language/arch |
57
+ | Layer owner | the Odigos AWS account | **your** account, created by your stack |
58
+ | Resolution | synth time, from a table baked into this package | deploy time, from the Serverless Application Repository |
59
+ | Environment-agnostic stacks | not supported — needs a concrete region | works |
60
+ | Deploy speed | unchanged | slower on first deploy |
61
+
62
+ Both install identical bytes. `IN_ACCOUNT` exists for organisations whose policy forbids attaching a
63
+ Lambda layer owned by another AWS account. It needs the deploying principal to be allowed
64
+ `serverlessrepo:CreateCloudFormationTemplate` and `serverlessrepo:GetApplication`.
65
+
66
+ If you mirror the layer somewhere yourself, pass `layerVersion` and neither path is used.
67
+
68
+ ## Versioning
69
+
70
+ **The package version is the layer version.** `@odigos/aws-cdk@0.2.0` resolves to the layer built and
71
+ published by Odigos release `v0.2.0`, and pins the SAR application to semantic version `0.2.0` — which is
72
+ immutable, so it means the same bytes forever.
73
+
74
+ Nothing resolves at deploy time in the default path, so upgrading the layer is `npm update` and a
75
+ `cdk diff` that shows the change. An instrumentation layer moving on its own, under a deployment that
76
+ changed nothing, is not a property you want.
77
+
78
+ ## Handler mode vs. web-server mode
79
+
80
+ `OdigosInstrumentationMode.HANDLER` (the default) is for a normal Lambda handler. It sets
81
+ `AWS_LAMBDA_EXEC_WRAPPER`.
82
+
83
+ `OdigosInstrumentationMode.WEB_SERVER` is for a function running a web server behind the
84
+ [AWS Lambda Web Adapter](https://github.com/awslabs/aws-lambda-web-adapter). The adapter owns the exec
85
+ wrapper, so this mode does not touch it and loads instrumentation through the language's own loader
86
+ variable instead.
87
+
88
+ ```ts
89
+ new OdigosLambdaInstrumentation(this, 'Odigos', {
90
+ destination: { endpoint: 'otlp.example.com:4317' },
91
+ functions: [webFn],
92
+ mode: OdigosInstrumentationMode.WEB_SERVER,
93
+ // NODE_OPTIONS the function already needs — ours is appended, not substituted.
94
+ existingLoaderValue: '--max-old-space-size=2048',
95
+ });
96
+ ```
97
+
98
+ There is no auto-detection, deliberately. Detecting the adapter means inspecting the function's other
99
+ layers, which at synth time are frequently unresolved tokens; a detector that was right most of the time
100
+ would silently break the functions it got wrong. **Applying `HANDLER` to a web-adapter function
101
+ overwrites the adapter's wrapper and the function stops serving.**
102
+
103
+ `existingLoaderValue` has to be passed explicitly because CDK's `lambda.Function` exposes no way to read
104
+ back an environment variable set elsewhere in your app. Omit it and the loader variable is set to the
105
+ Odigos value alone — for `NODE_OPTIONS` that can mean losing a flag your app needs to boot.
106
+
107
+ Ruby has no verified web-server loader and is rejected at synth in this mode.
108
+
109
+ ## Java handler interfaces
110
+
111
+ The Java layer ships four wrapper scripts, one per handler interface, and this is a correctness switch
112
+ rather than a detail level:
113
+
114
+ ```ts
115
+ javaHandlerDistro: OdigosJavaHandlerDistro.OTEL_STREAM_HANDLER
116
+ ```
117
+
118
+ | Distro | For |
119
+ |---|---|
120
+ | `OTEL_HANDLER` (default) | `RequestHandler` |
121
+ | `OTEL_PROXY_HANDLER` | API Gateway proxy events (enriched) |
122
+ | `OTEL_SQS_HANDLER` | SQS events (enriched) |
123
+ | `OTEL_STREAM_HANDLER` | `RequestStreamHandler` |
124
+
125
+ `OTEL_HANDLER` installs a `RequestHandler` implementation. A `RequestStreamHandler` function has a
126
+ different signature entirely, so wrapping it with the default **breaks the invocation** — it does not
127
+ merely produce thinner spans.
128
+
129
+ ## Signals
130
+
131
+ ```ts
132
+ destination: {
133
+ endpoint: 'otlp.example.com:4317',
134
+ metrics: false, // traces and logs stay on
135
+ }
136
+ ```
137
+
138
+ A disabled signal gets no collector pipeline **and** the SDK is told not to produce it. Both halves
139
+ matter: a signal with no pipeline is refused at the receiver on every batch, so suppressing it at the
140
+ source is what stops the error loop.
141
+
142
+ Turning all three off throws at synth — a collector with no pipeline fails to start, which would leave
143
+ the function instrumented and silent.
144
+
145
+ ## Instrumenting a whole stack
146
+
147
+ ```ts
148
+ Aspects.of(stack).add(new OdigosInstrumentationAspect(stack, {
149
+ destination: { endpoint: 'otlp.example.com:4317' },
150
+ }));
151
+ ```
152
+
153
+ `skipUnsupportedRuntimes` defaults to `true` for the aspect: it visits every function in the scope,
154
+ including ones whose runtime has no OpenTelemetry Lambda layer (`dotnet*`, `provided.*` for Go and custom
155
+ runtimes). Each skip is a synth warning rather than a silent no-op. The construct defaults it to `false`,
156
+ because explicitly asking to instrument a Go function is a mistake worth failing on.
157
+
158
+ ## Credentials in `headers`
159
+
160
+ `destination.headers` is rendered into `OPENTELEMETRY_COLLECTOR_CONFIG_URI`, which is a plain Lambda
161
+ environment variable — readable by anyone with `lambda:GetFunctionConfiguration` and visible in the
162
+ console. For a long-lived credential, prefer a destination that authenticates by network position, or
163
+ terminate at a collector you control.
164
+
165
+ ## Do not also instrument these functions with the Odigos connector
166
+
167
+ The Odigos AWS connector instruments **live** functions by mutating them, and reconciles them back to its
168
+ own desired state on every pass. A function instrumented here *and* enabled as a connector source ends up
169
+ owned by both: each `cdk deploy` reasserts the CDK's environment, each reconcile reasserts the
170
+ connector's, and every round trip publishes a new function version.
171
+
172
+ Pick one per function. These constructs never set the connector's `ODIGOS_MANAGED` ownership marker — so
173
+ an IaC-instrumented function is not one the connector will roll back — but the connector will take it
174
+ over if you enable it as a source.
175
+
176
+ ## API
177
+
178
+ | Export | |
179
+ |---|---|
180
+ | `OdigosLambdaInstrumentation` | the construct; `instrument(fn)`, `instrumentAll(fns)` |
181
+ | `OdigosInstrumentationAspect` | applies it to every function in a scope |
182
+ | `OdigosDestination` | where the collector exports; exactly one of `endpoint` / `httpEndpoint` |
183
+ | `OdigosLayerSource` | `ODIGOS_PUBLIC` \| `IN_ACCOUNT` |
184
+ | `OdigosInstrumentationMode` | `HANDLER` \| `WEB_SERVER` |
185
+ | `OdigosJavaHandlerDistro` | the four Java wrappers |
186
+ | `renderCollectorConfig` | the collector config renderer, if you want to inspect what gets set |
187
+ | `LAYER_ARNS`, `ODIGOS_VERSION` | the baked layer table and the release it came from |
188
+
189
+ ## License
190
+
191
+ Apache-2.0.
@@ -0,0 +1,68 @@
1
+ import { OdigosDestination } from './types';
2
+ /**
3
+ * Renders the in-Lambda collector's complete configuration as an inline
4
+ * `OPENTELEMETRY_COLLECTOR_CONFIG_URI` value.
5
+ *
6
+ * This is a PORT of `renderCollectorConfig` in the connector
7
+ * (connectors/providers/aws/pkg/workload/instrumentor/collector_config.go) and is deliberately
8
+ * byte-for-byte compatible with it. That equivalence is not cosmetic: a function instrumented here and
9
+ * later enabled as a connector source is compared against the connector's rendering to decide whether it
10
+ * needs converging. A stray space would make every reconcile see drift and churn a new function version
11
+ * forever.
12
+ *
13
+ * WHY THE WHOLE DOCUMENT, RATHER THAN A FEW VARIABLES. The layer ships a baked
14
+ * /opt/collector-config/config.yaml, but that file is ONE document shared by every function, so it can
15
+ * only reach a destination through env indirection — `${env:SOMETHING}`. That made three things
16
+ * impossible at once:
17
+ *
18
+ * - AUTH. A credential is a headers map, not a scalar. A baked file can substitute a value but cannot
19
+ * conditionally grow a `headers:` block, so an authenticated destination was unreachable.
20
+ * - OTLP/HTTP DESTINATIONS. The baked file hardcodes a gRPC `otlp` exporter. An otlphttp-only
21
+ * destination resolves with an empty gRPC endpoint, and the collector does not degrade — it fails to
22
+ * build the pipeline and exits, so the function is instrumented, looks healthy, and exports nothing.
23
+ * - PER-SIGNAL PIPELINES. The baked file declares all three pipelines unconditionally, so a signal the
24
+ * destination does not accept is received and then fails on export rather than never being built.
25
+ *
26
+ * FLOW STYLE IS LOAD-BEARING. The document is emitted on a single line because it has to survive as an
27
+ * environment variable value. In a YAML flow mapping a colon must be followed by a space, or the parser
28
+ * reads `a:b` as the plain scalar `"a:b"` rather than a mapping. Written without the spaces the collector
29
+ * accepts the variable, reports the URI it read, and then fails to start with a bare
30
+ * `otelcol state is Closed` — no parse error, no mention of the config. Every `: ` below earns its place.
31
+ */
32
+ /**
33
+ * The collector layer's own config-source variable — upstream's name, not ours. Pointed at a `yaml:` URI
34
+ * it carries the entire configuration inline, so no second variable is needed to hold it.
35
+ *
36
+ * Upstream also reads the older `OPENTELEMETRY_COLLECTOR_CONFIG_FILE` and logs a deprecation warning for
37
+ * it; this is the current name.
38
+ */
39
+ export declare const ENV_COLLECTOR_CONFIG_URI = "OPENTELEMETRY_COLLECTOR_CONFIG_URI";
40
+ /** Value an unsupported signal's `OTEL_*_EXPORTER` is set to. */
41
+ export declare const EXPORTER_NONE = "none";
42
+ /** The three `OTEL_*_EXPORTER` variables, in the order the connector writes them. */
43
+ export declare const ENV_TRACES_EXPORTER = "OTEL_TRACES_EXPORTER";
44
+ export declare const ENV_METRICS_EXPORTER = "OTEL_METRICS_EXPORTER";
45
+ export declare const ENV_LOGS_EXPORTER = "OTEL_LOGS_EXPORTER";
46
+ /** Whether a signal is enabled, defaulting to on. */
47
+ export declare function signalEnabled(value: boolean | undefined): boolean;
48
+ /**
49
+ * Picks the exporter by the transport the destination configured. A destination carries a gRPC endpoint
50
+ * (type `otlp`) or an OTLP/HTTP one (type `otlphttp`); the two are different collector components with
51
+ * different endpoint grammars, so this is a genuine branch.
52
+ */
53
+ export declare function exporterNameFor(dest: OdigosDestination): string;
54
+ /**
55
+ * Returns the value a signal's `OTEL_*_EXPORTER` must hold: `none` to suppress a signal the destination
56
+ * does not accept, or `undefined` meaning the variable must be ABSENT because the SDK's own default is
57
+ * already what we want.
58
+ *
59
+ * Only the "none" side is written, because `otlp` is already every OpenTelemetry SDK's default for all
60
+ * three signals — setting it would restate the default in three variables on every function.
61
+ */
62
+ export declare function exporterOverrideFor(supported: boolean): string | undefined;
63
+ /**
64
+ * Renders the complete collector configuration for one destination.
65
+ *
66
+ * @throws if the destination names neither transport, both transports, or no signals at all.
67
+ */
68
+ export declare function renderCollectorConfig(dest: OdigosDestination): string;
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ENV_LOGS_EXPORTER = exports.ENV_METRICS_EXPORTER = exports.ENV_TRACES_EXPORTER = exports.EXPORTER_NONE = exports.ENV_COLLECTOR_CONFIG_URI = void 0;
4
+ exports.signalEnabled = signalEnabled;
5
+ exports.exporterNameFor = exporterNameFor;
6
+ exports.exporterOverrideFor = exporterOverrideFor;
7
+ exports.renderCollectorConfig = renderCollectorConfig;
8
+ /**
9
+ * Renders the in-Lambda collector's complete configuration as an inline
10
+ * `OPENTELEMETRY_COLLECTOR_CONFIG_URI` value.
11
+ *
12
+ * This is a PORT of `renderCollectorConfig` in the connector
13
+ * (connectors/providers/aws/pkg/workload/instrumentor/collector_config.go) and is deliberately
14
+ * byte-for-byte compatible with it. That equivalence is not cosmetic: a function instrumented here and
15
+ * later enabled as a connector source is compared against the connector's rendering to decide whether it
16
+ * needs converging. A stray space would make every reconcile see drift and churn a new function version
17
+ * forever.
18
+ *
19
+ * WHY THE WHOLE DOCUMENT, RATHER THAN A FEW VARIABLES. The layer ships a baked
20
+ * /opt/collector-config/config.yaml, but that file is ONE document shared by every function, so it can
21
+ * only reach a destination through env indirection — `${env:SOMETHING}`. That made three things
22
+ * impossible at once:
23
+ *
24
+ * - AUTH. A credential is a headers map, not a scalar. A baked file can substitute a value but cannot
25
+ * conditionally grow a `headers:` block, so an authenticated destination was unreachable.
26
+ * - OTLP/HTTP DESTINATIONS. The baked file hardcodes a gRPC `otlp` exporter. An otlphttp-only
27
+ * destination resolves with an empty gRPC endpoint, and the collector does not degrade — it fails to
28
+ * build the pipeline and exits, so the function is instrumented, looks healthy, and exports nothing.
29
+ * - PER-SIGNAL PIPELINES. The baked file declares all three pipelines unconditionally, so a signal the
30
+ * destination does not accept is received and then fails on export rather than never being built.
31
+ *
32
+ * FLOW STYLE IS LOAD-BEARING. The document is emitted on a single line because it has to survive as an
33
+ * environment variable value. In a YAML flow mapping a colon must be followed by a space, or the parser
34
+ * reads `a:b` as the plain scalar `"a:b"` rather than a mapping. Written without the spaces the collector
35
+ * accepts the variable, reports the URI it read, and then fails to start with a bare
36
+ * `otelcol state is Closed` — no parse error, no mention of the config. Every `: ` below earns its place.
37
+ */
38
+ /**
39
+ * The collector layer's own config-source variable — upstream's name, not ours. Pointed at a `yaml:` URI
40
+ * it carries the entire configuration inline, so no second variable is needed to hold it.
41
+ *
42
+ * Upstream also reads the older `OPENTELEMETRY_COLLECTOR_CONFIG_FILE` and logs a deprecation warning for
43
+ * it; this is the current name.
44
+ */
45
+ exports.ENV_COLLECTOR_CONFIG_URI = 'OPENTELEMETRY_COLLECTOR_CONFIG_URI';
46
+ /**
47
+ * The confmap provider that reads a configuration out of the URI itself. The collector registers
48
+ * env/file/yaml/http/https/s3 providers; `yaml:` is the only one that needs no second variable and no
49
+ * network read on a cold start.
50
+ */
51
+ const COLLECTOR_CONFIG_SCHEME = 'yaml:';
52
+ /**
53
+ * Mirrors the baked config's processor set, and the ORDER is the contract:
54
+ *
55
+ * - `memory_limiter` first, so an export backlog is shed before it is charged to the same memory budget
56
+ * the customer's handler allocates from. Percentages, not `limit_mib`, because one layer serves
57
+ * functions from 128MB to 10GB.
58
+ * - `decouple` LAST. Lambda freezes the sandbox once the handler returns and every extension has called
59
+ * /next; a frozen sandbox runs no timers, so a batch sitting behind its timeout is flushed on a later
60
+ * invocation or dropped when the sandbox is reaped. `decouple` acknowledges the receive path
61
+ * immediately and tracks in-flight exports, which is what lets the extension hold /next open until the
62
+ * queue drains — after the caller already has its response.
63
+ */
64
+ const COLLECTOR_PROCESSORS = '{memory_limiter: {check_interval: 1s, limit_percentage: 50, spike_limit_percentage: 20}, ' +
65
+ 'batch: {send_batch_size: 512, timeout: 200ms}, decouple: null}';
66
+ /** Value an unsupported signal's `OTEL_*_EXPORTER` is set to. */
67
+ exports.EXPORTER_NONE = 'none';
68
+ /** The three `OTEL_*_EXPORTER` variables, in the order the connector writes them. */
69
+ exports.ENV_TRACES_EXPORTER = 'OTEL_TRACES_EXPORTER';
70
+ exports.ENV_METRICS_EXPORTER = 'OTEL_METRICS_EXPORTER';
71
+ exports.ENV_LOGS_EXPORTER = 'OTEL_LOGS_EXPORTER';
72
+ /** Whether a signal is enabled, defaulting to on. */
73
+ function signalEnabled(value) {
74
+ return value !== false;
75
+ }
76
+ /**
77
+ * Renders a double-quoted YAML scalar.
78
+ *
79
+ * Quoting unconditionally is what keeps a value such as a bare `host:4317` from being re-read as a nested
80
+ * mapping in flow context. `JSON.stringify` is the TypeScript equivalent of the connector's
81
+ * `strconv.Quote` for the vocabulary that matters here (`\"` and `\\`); both produce the same output for
82
+ * the ASCII endpoints, header names and credentials this ever sees.
83
+ */
84
+ function yamlString(s) {
85
+ return JSON.stringify(s);
86
+ }
87
+ /**
88
+ * Picks the exporter by the transport the destination configured. A destination carries a gRPC endpoint
89
+ * (type `otlp`) or an OTLP/HTTP one (type `otlphttp`); the two are different collector components with
90
+ * different endpoint grammars, so this is a genuine branch.
91
+ */
92
+ function exporterNameFor(dest) {
93
+ return dest.endpoint ? 'otlp' : 'otlphttp';
94
+ }
95
+ /**
96
+ * Emits the destination's per-request headers — in practice its credential. Empty when the destination
97
+ * needs none, so no header block is written at all rather than an empty one.
98
+ *
99
+ * Keys are sorted so the rendered config is byte-identical across synths. The string is compared against
100
+ * the live function's environment to decide whether an update is needed, and map order would otherwise
101
+ * make every deploy look like a change.
102
+ */
103
+ function renderHeaders(headers) {
104
+ if (!headers) {
105
+ return '';
106
+ }
107
+ const keys = Object.keys(headers).sort();
108
+ if (keys.length === 0) {
109
+ return '';
110
+ }
111
+ const rendered = keys.map((k) => `${yamlString(k)}: ${yamlString(headers[k])}`).join(', ');
112
+ return `, headers: {${rendered}}`;
113
+ }
114
+ function renderExporter(dest) {
115
+ let out;
116
+ if (dest.endpoint) {
117
+ // tls.insecure applies to the gRPC exporter only; the HTTP exporter takes the scheme from the URL.
118
+ out = `{otlp: {endpoint: ${yamlString(dest.endpoint)}, tls: {insecure: ${dest.insecure === true}}`;
119
+ }
120
+ else if (dest.httpEndpoint) {
121
+ out = `{otlphttp: {endpoint: ${yamlString(dest.httpEndpoint)}`;
122
+ }
123
+ else {
124
+ // Reached when a destination carries neither transport. Failing here is the whole point: the
125
+ // alternative is a collector that exits on startup while the function is reported healthy.
126
+ throw new Error('Odigos destination has neither `endpoint` (OTLP/gRPC) nor `httpEndpoint` (OTLP/HTTP), ' +
127
+ 'so the in-Lambda collector would have nowhere to export.');
128
+ }
129
+ return `${out}${renderHeaders(dest.headers)}}}`;
130
+ }
131
+ /**
132
+ * Builds a pipeline only for the signals the destination accepts. A signal with no pipeline is refused at
133
+ * the receiver, which is the behaviour we want: the SDK is told not to produce it either (see
134
+ * `exporterOverrideFor`), and the two together mean an unaccepted signal is never generated, never
135
+ * exported, and never a per-batch error against a backend that does not implement it.
136
+ */
137
+ function renderPipelines(dest, exporterName) {
138
+ const parts = [];
139
+ const signals = [
140
+ ['traces', signalEnabled(dest.traces)],
141
+ ['metrics', signalEnabled(dest.metrics)],
142
+ ['logs', signalEnabled(dest.logs)],
143
+ ];
144
+ for (const [name, enabled] of signals) {
145
+ if (!enabled) {
146
+ continue;
147
+ }
148
+ parts.push(`${name}: {receivers: [otlp], processors: [memory_limiter, batch, decouple], exporters: [${exporterName}]}`);
149
+ }
150
+ return parts.length === 0 ? '' : `{${parts.join(', ')}}`;
151
+ }
152
+ /**
153
+ * Returns the value a signal's `OTEL_*_EXPORTER` must hold: `none` to suppress a signal the destination
154
+ * does not accept, or `undefined` meaning the variable must be ABSENT because the SDK's own default is
155
+ * already what we want.
156
+ *
157
+ * Only the "none" side is written, because `otlp` is already every OpenTelemetry SDK's default for all
158
+ * three signals — setting it would restate the default in three variables on every function.
159
+ */
160
+ function exporterOverrideFor(supported) {
161
+ return supported ? undefined : exports.EXPORTER_NONE;
162
+ }
163
+ /**
164
+ * Renders the complete collector configuration for one destination.
165
+ *
166
+ * @throws if the destination names neither transport, both transports, or no signals at all.
167
+ */
168
+ function renderCollectorConfig(dest) {
169
+ if (dest.endpoint && dest.httpEndpoint) {
170
+ throw new Error('Odigos destination sets both `endpoint` (OTLP/gRPC) and `httpEndpoint` (OTLP/HTTP); ' +
171
+ 'they select different collector exporters, so exactly one must be set.');
172
+ }
173
+ const exporter = renderExporter(dest);
174
+ const pipelines = renderPipelines(dest, exporterNameFor(dest));
175
+ if (pipelines === '') {
176
+ throw new Error('Odigos destination accepts no telemetry signals (traces, metrics and logs are all false), ' +
177
+ 'so the collector would have no pipeline to build and would fail to start.');
178
+ }
179
+ return (COLLECTOR_CONFIG_SCHEME +
180
+ '{receivers: {otlp: {protocols: ' +
181
+ // Bound to localhost: the receiver exists only for the in-process SDK. Binding it wider would expose
182
+ // an unauthenticated OTLP endpoint on the sandbox's network interface.
183
+ '{grpc: {endpoint: "localhost:4317"}, http: {endpoint: "localhost:4318"}}}}, ' +
184
+ 'processors: ' +
185
+ COLLECTOR_PROCESSORS +
186
+ ', exporters: ' +
187
+ exporter +
188
+ ', service: {telemetry: {metrics: {level: none}}, pipelines: ' +
189
+ pipelines +
190
+ '}}');
191
+ }
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0b3ItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBFQSxzQ0FFQztBQW1CRCwwQ0FFQztBQXdFRCxrREFFQztBQU9ELHNEQStCQztBQS9NRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSDs7Ozs7O0dBTUc7QUFDVSxRQUFBLHdCQUF3QixHQUFHLG9DQUFvQyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sb0JBQW9CLEdBQ3hCLDJGQUEyRjtJQUMzRixnRUFBZ0UsQ0FBQztBQUVuRSxpRUFBaUU7QUFDcEQsUUFBQSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBRXBDLHFGQUFxRjtBQUN4RSxRQUFBLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO0FBQzdDLFFBQUEsb0JBQW9CLEdBQUcsdUJBQXVCLENBQUM7QUFDL0MsUUFBQSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztBQUV0RCxxREFBcUQ7QUFDckQsU0FBZ0IsYUFBYSxDQUFDLEtBQTBCO0lBQ3RELE9BQU8sS0FBSyxLQUFLLEtBQUssQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsVUFBVSxDQUFDLENBQVM7SUFDM0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLElBQXVCO0lBQ3JELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUFtQztJQUN4RCxJQUFJLENBQUMs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QUFJLENBQUMsQ0FBQztJQUN0QyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUksU0FBUyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEZBQTRGO1lBQzFGLDJFQUEyRSxDQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FDTCx1QkFBdUI7UUFDdkIsaUNBQWlDO1FBQ2pDLHFHQUFxRztRQUNyRyx1RUFBdUU7UUFDdkUsOEVBQThFO1FBQzlFLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLFFBQVE7UUFDUiw4REFBOEQ7UUFDOUQsU0FBUztRQUNULElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9kaWdvc0Rlc3RpbmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvcidzIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gYXMgYW4gaW5saW5lXG4gKiBgT1BFTlRFTEVNRVRSWV9DT0xMRUNUT1JfQ09ORklHX1VSSWAgdmFsdWUuXG4gKlxuICogVGhpcyBpcyBhIFBPUlQgb2YgYHJlbmRlckNvbGxlY3RvckNvbmZpZ2AgaW4gdGhlIGNvbm5lY3RvclxuICogKGNvbm5lY3RvcnMvcHJvdmlkZXJzL2F3cy9wa2cvd29ya2xvYWQvaW5zdHJ1bWVudG9yL2NvbGxlY3Rvcl9jb25maWcuZ28pIGFuZCBpcyBkZWxpYmVyYXRlbHlcbiAqIGJ5dGUtZm9yLWJ5dGUgY29tcGF0aWJsZSB3aXRoIGl0LiBUaGF0IGVxdWl2YWxlbmNlIGlzIG5vdCBjb3NtZXRpYzogYSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQgaGVyZSBhbmRcbiAqIGxhdGVyIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGNvbm5lY3RvcidzIHJlbmRlcmluZyB0byBkZWNpZGUgd2hldGhlciBpdFxuICogbmVlZHMgY29udmVyZ2luZy4gQSBzdHJheSBzcGFjZSB3b3VsZCBtYWtlIGV2ZXJ5IHJlY29uY2lsZSBzZWUgZHJpZnQgYW5kIGNodXJuIGEgbmV3IGZ1bmN0aW9uIHZlcnNpb25cbiAqIGZvcmV2ZXIuXG4gKlxuICogV0hZIFRIRSBXSE9MRSBET0NVTUVOVCwgUkFUSEVSIFRIQU4gQSBGRVcgVkFSSUFCTEVTLiBUaGUgbGF5ZXIgc2hpcHMgYSBiYWtlZFxuICogL29wdC9jb2xsZWN0b3ItY29uZmlnL2NvbmZpZy55YW1sLCBidXQgdGhhdCBmaWxlIGlzIE9ORSBkb2N1bWVudCBzaGFyZWQgYnkgZXZlcnkgZnVuY3Rpb24sIHNvIGl0IGNhblxuICogb25seSByZWFjaCBhIGRlc3RpbmF0aW9uIHRocm91Z2ggZW52IGluZGlyZWN0aW9uIOKAlCBgJHtlbnY6U09NRVRISU5HfWAuIFRoYXQgbWFkZSB0aHJlZSB0aGluZ3NcbiAqIGltcG9zc2libGUgYXQgb25jZTpcbiAqXG4gKiAgIC0gQVVUSC4gQSBjcmVkZW50aWFsIGlzIGEgaGVhZGVycyBtYXAsIG5vdCBhIHNjYWxhci4gQSBiYWtlZCBmaWxlIGNhbiBzdWJzdGl0dXRlIGEgdmFsdWUgYnV0IGNhbm5vdFxuICogICAgIGNvbmRpdGlvbmFsbHkgZ3JvdyBhIGBoZWFkZXJzOmAgYmxvY2ssIHNvIGFuIGF1dGhlbnRpY2F0ZWQgZGVzdGluYXRpb24gd2FzIHVucmVhY2hhYmxlLlxuICogICAtIE9UTFAvSFRUUCBERVNUSU5BVElPTlMuIFRoZSBiYWtlZCBmaWxlIGhhcmRjb2RlcyBhIGdSUEMgYG90bHBgIGV4cG9ydGVyLiBBbiBvdGxwaHR0cC1vbmx5XG4gKiAgICAgZGVzdGluYXRpb24gcmVzb2x2ZXMgd2l0aCBhbiBlbXB0eSBnUlBDIGVuZHBvaW50LCBhbmQgdGhlIGNvbGxlY3RvciBkb2VzIG5vdCBkZWdyYWRlIOKAlCBpdCBmYWlscyB0b1xuICogICAgIGJ1aWxkIHRoZSBwaXBlbGluZSBhbmQgZXhpdHMsIHNvIHRoZSBmdW5jdGlvbiBpcyBpbnN0cnVtZW50ZWQsIGxvb2tzIGhlYWx0aHksIGFuZCBleHBvcnRzIG5vdGhpbmcuXG4gKiAgIC0gUEVSLVNJR05BTCBQSVBFTElORVMuIFRoZSBiYWtlZCBmaWxlIGRlY2xhcmVzIGFsbCB0aHJlZSBwaXBlbGluZXMgdW5jb25kaXRpb25hbGx5LCBzbyBhIHNpZ25hbCB0aGVcbiAqICAgICBkZXN0aW5hdGlvbiBkb2VzIG5vdCBhY2NlcHQgaXMgcmVjZWl2ZWQgYW5kIHRoZW4gZmFpbHMgb24gZXhwb3J0IHJhdGhlciB0aGFuIG5ldmVyIGJlaW5nIGJ1aWx0LlxuICpcbiAqIEZMT1cgU1RZTEUgSVMgTE9BRC1CRUFSSU5HLiBUaGUgZG9jdW1lbnQgaXMgZW1pdHRlZCBvbiBhIHNpbmdsZSBsaW5lIGJlY2F1c2UgaXQgaGFzIHRvIHN1cnZpdmUgYXMgYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLiBJbiBhIFlBTUwgZmxvdyBtYXBwaW5nIGEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlLCBvciB0aGUgcGFyc2VyXG4gKiByZWFkcyBgYTpiYCBhcyB0aGUgcGxhaW4gc2NhbGFyIGBcImE6YlwiYCByYXRoZXIgdGhhbiBhIG1hcHBpbmcuIFdyaXR0ZW4gd2l0aG91dCB0aGUgc3BhY2VzIHRoZSBjb2xsZWN0b3JcbiAqIGFjY2VwdHMgdGhlIHZhcmlhYmxlLCByZXBvcnRzIHRoZSBVUkkgaXQgcmVhZCwgYW5kIHRoZW4gZmFpbHMgdG8gc3RhcnQgd2l0aCBhIGJhcmVcbiAqIGBvdGVsY29sIHN0YXRlIGlzIENsb3NlZGAg4oCUIG5vIHBhcnNlIGVycm9yLCBubyBtZW50aW9uIG9mIHRoZSBjb25maWcuIEV2ZXJ5IGA6IGAgYmVsb3cgZWFybnMgaXRzIHBsYWNlLlxuICovXG5cbi8qKlxuICogVGhlIGNvbGxlY3RvciBsYXllcidzIG93biBjb25maWctc291cmNlIHZhcmlhYmxlIOKAlCB1cHN0cmVhbSdzIG5hbWUsIG5vdCBvdXJzLiBQb2ludGVkIGF0IGEgYHlhbWw6YCBVUklcbiAqIGl0IGNhcnJpZXMgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIGlubGluZSwgc28gbm8gc2Vjb25kIHZhcmlhYmxlIGlzIG5lZWRlZCB0byBob2xkIGl0LlxuICpcbiAqIFVwc3RyZWFtIGFsc28gcmVhZHMgdGhlIG9sZGVyIGBPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfRklMRWAgYW5kIGxvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvclxuICogaXQ7IHRoaXMgaXMgdGhlIGN1cnJlbnQgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVl9DT0xMRUNUT1JfQ09ORklHX1VSSSA9ICdPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfVVJJJztcblxuLyoqXG4gKiBUaGUgY29uZm1hcCBwcm92aWRlciB0aGF0IHJlYWRzIGEgY29uZmlndXJhdGlvbiBvdXQgb2YgdGhlIFVSSSBpdHNlbGYuIFRoZSBjb2xsZWN0b3IgcmVnaXN0ZXJzXG4gKiBlbnYvZmlsZS95YW1sL2h0dHAvaHR0cHMvczMgcHJvdmlkZXJzOyBgeWFtbDpgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIG5vIHNlY29uZCB2YXJpYWJsZSBhbmQgbm9cbiAqIG5ldHdvcmsgcmVhZCBvbiBhIGNvbGQgc3RhcnQuXG4gKi9cbmNvbnN0IENPTExFQ1RPUl9DT05GSUdfU0NIRU1FID0gJ3lhbWw6JztcblxuLyoqXG4gKiBNaXJyb3JzIHRoZSBiYWtlZCBjb25maWcncyBwcm9jZXNzb3Igc2V0LCBhbmQgdGhlIE9SREVSIGlzIHRoZSBjb250cmFjdDpcbiAqXG4gKiAgIC0gYG1lbW9yeV9saW1pdGVyYCBmaXJzdCwgc28gYW4gZXhwb3J0IGJhY2tsb2cgaXMgc2hlZCBiZWZvcmUgaXQgaXMgY2hhcmdlZCB0byB0aGUgc2FtZSBtZW1vcnkgYnVkZ2V0XG4gKiAgICAgdGhlIGN1c3RvbWVyJ3MgaGFuZGxlciBhbGxvY2F0ZXMgZnJvbS4gUGVyY2VudGFnZXMsIG5vdCBgbGltaXRfbWliYCwgYmVjYXVzZSBvbmUgbGF5ZXIgc2VydmVzXG4gKiAgICAgZnVuY3Rpb25zIGZyb20gMTI4TUIgdG8gMTBHQi5cbiAqICAgLSBgZGVjb3VwbGVgIExBU1QuIExhbWJkYSBmcmVlemVzIHRoZSBzYW5kYm94IG9uY2UgdGhlIGhhbmRsZXIgcmV0dXJucyBhbmQgZXZlcnkgZXh0ZW5zaW9uIGhhcyBjYWxsZWRcbiAqICAgICAvbmV4dDsgYSBmcm96ZW4gc2FuZGJveCBydW5zIG5vIHRpbWVycywgc28gYSBiYXRjaCBzaXR0aW5nIGJlaGluZCBpdHMgdGltZW91dCBpcyBmbHVzaGVkIG9uIGEgbGF0ZXJcbiAqICAgICBpbnZvY2F0aW9uIG9yIGRyb3BwZWQgd2hlbiB0aGUgc2FuZGJveCBpcyByZWFwZWQuIGBkZWNvdXBsZWAgYWNrbm93bGVkZ2VzIHRoZSByZWNlaXZlIHBhdGhcbiAqICAgICBpbW1lZGlhdGVseSBhbmQgdHJhY2tzIGluLWZsaWdodCBleHBvcnRzLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIGV4dGVuc2lvbiBob2xkIC9uZXh0IG9wZW4gdW50aWwgdGhlXG4gKiAgICAgcXVldWUgZHJhaW5zIOKAlCBhZnRlciB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIGl0cyByZXNwb25zZS5cbiAqL1xuY29uc3QgQ09MTEVDVE9SX1BST0NFU1NPUlMgPVxuICAne21lbW9yeV9saW1pdGVyOiB7Y2hlY2tfaW50ZXJ2YWw6IDFzLCBsaW1pdF9wZXJjZW50YWdlOiA1MCwgc3Bpa2VfbGltaXRfcGVyY2VudGFnZTogMjB9LCAnICtcbiAgJ2JhdGNoOiB7c2VuZF9iYXRjaF9zaXplOiA1MTIsIHRpbWVvdXQ6IDIwMG1zfSwgZGVjb3VwbGU6IG51bGx9JztcblxuLyoqIFZhbHVlIGFuIHVuc3VwcG9ydGVkIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIGlzIHNldCB0by4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRFUl9OT05FID0gJ25vbmUnO1xuXG4vKiogVGhlIHRocmVlIGBPVEVMXypfRVhQT1JURVJgIHZhcmlhYmxlcywgaW4gdGhlIG9yZGVyIHRoZSBjb25uZWN0b3Igd3JpdGVzIHRoZW0uICovXG5leHBvcnQgY29uc3QgRU5WX1RSQUNFU19FWFBPUlRFUiA9ICdPVEVMX1RSQUNFU19FWFBPUlRFUic7XG5leHBvcnQgY29uc3QgRU5WX01FVFJJQ1NfRVhQT1JURVIgPSAnT1RFTF9NRVRSSUNTX0VYUE9SVEVSJztcbmV4cG9ydCBjb25zdCBFTlZfTE9HU19FWFBPUlRFUiA9ICdPVEVMX0xPR1NfRVhQT1JURVInO1xuXG4vKiogV2hldGhlciBhIHNpZ25hbCBpcyBlbmFibGVkLCBkZWZhdWx0aW5nIHRvIG9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hbEVuYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZG91YmxlLXF1b3RlZCBZQU1MIHNjYWxhci5cbiAqXG4gKiBRdW90aW5nIHVuY29uZGl0aW9uYWxseSBpcyB3aGF0IGtlZXBzIGEgdmFsdWUgc3VjaCBhcyBhIGJhcmUgYGhvc3Q6NDMxN2AgZnJvbSBiZWluZyByZS1yZWFkIGFzIGEgbmVzdGVkXG4gKiBtYXBwaW5nIGluIGZsb3cgY29udGV4dC4gYEpTT04uc3RyaW5naWZ5YCBpcyB0aGUgVHlwZVNjcmlwdCBlcXVpdmFsZW50IG9mIHRoZSBjb25uZWN0b3Inc1xuICogYHN0cmNvbnYuUXVvdGVgIGZvciB0aGUgdm9jYWJ1bGFyeSB0aGF0IG1hdHRlcnMgaGVyZSAoYFxcXCJgIGFuZCBgXFxcXGApOyBib3RoIHByb2R1Y2UgdGhlIHNhbWUgb3V0cHV0IGZvclxuICogdGhlIEFTQ0lJIGVuZHBvaW50cywgaGVhZGVyIG5hbWVzIGFuZCBjcmVkZW50aWFscyB0aGlzIGV2ZXIgc2Vlcy5cbiAqL1xuZnVuY3Rpb24geWFtbFN0cmluZyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocyk7XG59XG5cbi8qKlxuICogUGlja3MgdGhlIGV4cG9ydGVyIGJ5IHRoZSB0cmFuc3BvcnQgdGhlIGRlc3RpbmF0aW9uIGNvbmZpZ3VyZWQuIEEgZGVzdGluYXRpb24gY2FycmllcyBhIGdSUEMgZW5kcG9pbnRcbiAqICh0eXBlIGBvdGxwYCkgb3IgYW4gT1RMUC9IVFRQIG9uZSAodHlwZSBgb3RscGh0dHBgKTsgdGhlIHR3byBhcmUgZGlmZmVyZW50IGNvbGxlY3RvciBjb21wb25lbnRzIHdpdGhcbiAqIGRpZmZlcmVudCBlbmRwb2ludCBncmFtbWFycywgc28gdGhpcyBpcyBhIGdlbnVpbmUgYnJhbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJOYW1lRm9yKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRlc3QuZW5kcG9pbnQgPyAnb3RscCcgOiAnb3RscGh0dHAnO1xufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBkZXN0aW5hdGlvbidzIHBlci1yZXF1ZXN0IGhlYWRlcnMg4oCUIGluIHByYWN0aWNlIGl0cyBjcmVkZW50aWFsLiBFbXB0eSB3aGVuIHRoZSBkZXN0aW5hdGlvblxuICogbmVlZHMgbm9uZSwgc28gbm8gaGVhZGVyIGJsb2NrIGlzIHdyaXR0ZW4gYXQgYWxsIHJhdGhlciB0aGFuIGFuIGVtcHR5IG9uZS5cbiAqXG4gKiBLZXlzIGFyZSBzb3J0ZWQgc28gdGhlIHJlbmRlcmVkIGNvbmZpZyBpcyBieXRlLWlkZW50aWNhbCBhY3Jvc3Mgc3ludGhzLiBUaGUgc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3RcbiAqIHRoZSBsaXZlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnQgdG8gZGVjaWRlIHdoZXRoZXIgYW4gdXBkYXRlIGlzIG5lZWRlZCwgYW5kIG1hcCBvcmRlciB3b3VsZCBvdGhlcndpc2VcbiAqIG1ha2UgZXZlcnkgZGVwbG95IGxvb2sgbGlrZSBhIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVySGVhZGVycyhoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycykuc29ydCgpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcmVuZGVyZWQgPSBrZXlzLm1hcCgoaykgPT4gYCR7eWFtbFN0cmluZyhrKX06ICR7eWFtbFN0cmluZyhoZWFkZXJzW2tdKX1gKS5qb2luKCcsICcpO1xuICByZXR1cm4gYCwgaGVhZGVyczogeyR7cmVuZGVyZWR9fWA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckV4cG9ydGVyKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgbGV0IG91dDogc3RyaW5nO1xuICBpZiAoZGVzdC5lbmRwb2ludCkge1xuICAgIC8vIHRscy5pbnNlY3VyZSBhcHBsaWVzIHRvIHRoZSBnUlBDIGV4cG9ydGVyIG9ubHk7IHRoZSBIVFRQIGV4cG9ydGVyIHRha2VzIHRoZSBzY2hlbWUgZnJvbSB0aGUgVVJMLlxuICAgIG91dCA9IGB7b3RscDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5lbmRwb2ludCl9LCB0bHM6IHtpbnNlY3VyZTogJHtkZXN0Lmluc2VjdXJlID09PSB0cnVlfX1gO1xuICB9IGVsc2UgaWYgKGRlc3QuaHR0cEVuZHBvaW50KSB7XG4gICAgb3V0ID0gYHtvdGxwaHR0cDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5odHRwRW5kcG9pbnQpfWA7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVhY2hlZCB3aGVuIGEgZGVzdGluYXRpb24gY2FycmllcyBuZWl0aGVyIHRyYW5zcG9ydC4gRmFpbGluZyBoZXJlIGlzIHRoZSB3aG9sZSBwb2ludDogdGhlXG4gICAgLy8gYWx0ZXJuYXRpdmUgaXMgYSBjb2xsZWN0b3IgdGhhdCBleGl0cyBvbiBzdGFydHVwIHdoaWxlIHRoZSBmdW5jdGlvbiBpcyByZXBvcnRlZCBoZWFsdGh5LlxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdPZGlnb3MgZGVzdGluYXRpb24gaGFzIG5laXRoZXIgYGVuZHBvaW50YCAoT1RMUC9nUlBDKSBub3IgYGh0dHBFbmRwb2ludGAgKE9UTFAvSFRUUCksICcgK1xuICAgICAgICAnc28gdGhlIGluLUxhbWJkYSBjb2xsZWN0b3Igd291bGQgaGF2ZSBub3doZXJlIHRvIGV4cG9ydC4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGAke291dH0ke3JlbmRlckhlYWRlcnMoZGVzdC5oZWFkZXJzKX19fWA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgcGlwZWxpbmUgb25seSBmb3IgdGhlIHNpZ25hbHMgdGhlIGRlc3RpbmF0aW9uIGFjY2VwdHMuIEEgc2lnbmFsIHdpdGggbm8gcGlwZWxpbmUgaXMgcmVmdXNlZCBhdFxuICogdGhlIHJlY2VpdmVyLCB3aGljaCBpcyB0aGUgYmVoYXZpb3VyIHdlIHdhbnQ6IHRoZSBTREsgaXMgdG9sZCBub3QgdG8gcHJvZHVjZSBpdCBlaXRoZXIgKHNlZVxuICogYGV4cG9ydGVyT3ZlcnJpZGVGb3JgKSwgYW5kIHRoZSB0d28gdG9nZXRoZXIgbWVhbiBhbiB1bmFjY2VwdGVkIHNpZ25hbCBpcyBuZXZlciBnZW5lcmF0ZWQsIG5ldmVyXG4gKiBleHBvcnRlZCwgYW5kIG5ldmVyIGEgcGVyLWJhdGNoIGVycm9yIGFnYWluc3QgYSBiYWNrZW5kIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGl0LlxuICovXG5mdW5jdGlvbiByZW5kZXJQaXBlbGluZXMoZGVzdDogT2RpZ29zRGVzdGluYXRpb24sIGV4cG9ydGVyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNpZ25hbHM6IEFycmF5PFtzdHJpbmcsIGJvb2xlYW5dPiA9IFtcbiAgICBbJ3RyYWNlcycsIHNpZ25hbEVuYWJsZWQoZGVzdC50cmFjZXMpXSxcbiAgICBbJ21ldHJpY3MnLCBzaWduYWxFbmFibGVkKGRlc3QubWV0cmljcyldLFxuICAgIFsnbG9ncycsIHNpZ25hbEVuYWJsZWQoZGVzdC5sb2dzKV0sXG4gIF07XG4gIGZvciAoY29uc3QgW25hbWUsIGVuYWJsZWRdIG9mIHNpZ25hbHMpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgYCR7bmFtZX06IHtyZWNlaXZlcnM6IFtvdGxwXSwgcHJvY2Vzc29yczogW21lbW9yeV9saW1pdGVyLCBiYXRjaCwgZGVjb3VwbGVdLCBleHBvcnRlcnM6IFske2V4cG9ydGVyTmFtZX1dfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gJycgOiBgeyR7cGFydHMuam9pbignLCAnKX19YDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBhIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIG11c3QgaG9sZDogYG5vbmVgIHRvIHN1cHByZXNzIGEgc2lnbmFsIHRoZSBkZXN0aW5hdGlvblxuICogZG9lcyBub3QgYWNjZXB0LCBvciBgdW5kZWZpbmVkYCBtZWFuaW5nIHRoZSB2YXJpYWJsZSBtdXN0IGJlIEFCU0VOVCBiZWNhdXNlIHRoZSBTREsncyBvd24gZGVmYXVsdCBpc1xuICogYWxyZWFkeSB3aGF0IHdlIHdhbnQuXG4gKlxuICogT25seSB0aGUgXCJub25lXCIgc2lkZSBpcyB3cml0dGVuLCBiZWNhdXNlIGBvdGxwYCBpcyBhbHJlYWR5IGV2ZXJ5IE9wZW5UZWxlbWV0cnkgU0RLJ3MgZGVmYXVsdCBmb3IgYWxsXG4gKiB0aHJlZSBzaWduYWxzIOKAlCBzZXR0aW5nIGl0IHdvdWxkIHJlc3RhdGUgdGhlIGRlZmF1bHQgaW4gdGhyZWUgdmFyaWFibGVzIG9uIGV2ZXJ5IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJPdmVycmlkZUZvcihzdXBwb3J0ZWQ6IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3VwcG9ydGVkID8gdW5kZWZpbmVkIDogRVhQT1JURVJfTk9ORTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb21wbGV0ZSBjb2xsZWN0b3IgY29uZmlndXJhdGlvbiBmb3Igb25lIGRlc3RpbmF0aW9uLlxuICpcbiAqIEB0aHJvd3MgaWYgdGhlIGRlc3RpbmF0aW9uIG5hbWVzIG5laXRoZXIgdHJhbnNwb3J0LCBib3RoIHRyYW5zcG9ydHMsIG9yIG5vIHNpZ25hbHMgYXQgYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29sbGVjdG9yQ29uZmlnKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgaWYgKGRlc3QuZW5kcG9pbnQgJiYgZGVzdC5odHRwRW5kcG9pbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT2RpZ29zIGRlc3RpbmF0aW9uIHNldHMgYm90aCBgZW5kcG9pbnRgIChPVExQL2dSUEMpIGFuZCBgaHR0cEVuZHBvaW50YCAoT1RMUC9IVFRQKTsgJyArXG4gICAgICAgICd0aGV5IHNlbGVjdCBkaWZmZXJlbnQgY29sbGVjdG9yIGV4cG9ydGVycywgc28gZXhhY3RseSBvbmUgbXVzdCBiZSBzZXQuJyxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0ZXIgPSByZW5kZXJFeHBvcnRlcihkZXN0KTtcbiAgY29uc3QgcGlwZWxpbmVzID0gcmVuZGVyUGlwZWxpbmVzKGRlc3QsIGV4cG9ydGVyTmFtZUZvcihkZXN0KSk7XG4gIGlmIChwaXBlbGluZXMgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09kaWdvcyBkZXN0aW5hdGlvbiBhY2NlcHRzIG5vIHRlbGVtZXRyeSBzaWduYWxzICh0cmFjZXMsIG1ldHJpY3MgYW5kIGxvZ3MgYXJlIGFsbCBmYWxzZSksICcgK1xuICAgICAgICAnc28gdGhlIGNvbGxlY3RvciB3b3VsZCBoYXZlIG5vIHBpcGVsaW5lIHRvIGJ1aWxkIGFuZCB3b3VsZCBmYWlsIHRvIHN0YXJ0LicsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgQ09MTEVDVE9SX0NPTkZJR19TQ0hFTUUgK1xuICAgICd7cmVjZWl2ZXJzOiB7b3RscDoge3Byb3RvY29sczogJyArXG4gICAgLy8gQm91bmQgdG8gbG9jYWxob3N0OiB0aGUgcmVjZWl2ZXIgZXhpc3RzIG9ubHkgZm9yIHRoZSBpbi1wcm9jZXNzIFNESy4gQmluZGluZyBpdCB3aWRlciB3b3VsZCBleHBvc2VcbiAgICAvLyBhbiB1bmF1dGhlbnRpY2F0ZWQgT1RMUCBlbmRwb2ludCBvbiB0aGUgc2FuZGJveCdzIG5ldHdvcmsgaW50ZXJmYWNlLlxuICAgICd7Z3JwYzoge2VuZHBvaW50OiBcImxvY2FsaG9zdDo0MzE3XCJ9LCBodHRwOiB7ZW5kcG9pbnQ6IFwibG9jYWxob3N0OjQzMThcIn19fX0sICcgK1xuICAgICdwcm9jZXNzb3JzOiAnICtcbiAgICBDT0xMRUNUT1JfUFJPQ0VTU09SUyArXG4gICAgJywgZXhwb3J0ZXJzOiAnICtcbiAgICBleHBvcnRlciArXG4gICAgJywgc2VydmljZToge3RlbGVtZXRyeToge21ldHJpY3M6IHtsZXZlbDogbm9uZX19LCBwaXBlbGluZXM6ICcgK1xuICAgIHBpcGVsaW5lcyArXG4gICAgJ319J1xuICApO1xufVxuIl19
@@ -0,0 +1,45 @@
1
+ /**
2
+ * GENERATED FILE — DO NOT EDIT.
3
+ *
4
+ * Produced by cdk/scripts/generate-layers.ts from artifacts.json and manifest/layers.json.
5
+ * Run `npm run generate` (or `npm run build`) to refresh it.
6
+ *
7
+ * Odigos artifact version: (unreleased)
8
+ */
9
+ /** Release this table was generated from. Empty before the first release. */
10
+ export declare const ODIGOS_VERSION = "";
11
+ /** SAR semantic version matching ODIGOS_VERSION (no leading "v"). */
12
+ export declare const SAR_SEMANTIC_VERSION = "";
13
+ /** Public layer ARNs, keyed "<region>/<language>/<architecture>". */
14
+ export declare const LAYER_ARNS: {
15
+ [key: string]: string;
16
+ };
17
+ /** SAR application ids, keyed "<language>/<architecture>". */
18
+ export declare const SAR_APPLICATIONS: {
19
+ [key: string]: string;
20
+ };
21
+ /** Loader configuration for web-server (Lambda Web Adapter) mode. */
22
+ export interface GeneratedWebServerLoader {
23
+ readonly envKey: string;
24
+ readonly separator: string;
25
+ readonly prepend: boolean;
26
+ readonly value: string;
27
+ readonly extraEnv: {
28
+ [key: string]: string;
29
+ };
30
+ }
31
+ /** Static per-language facts, mirrored from the connector's instrumentor. */
32
+ export interface GeneratedLanguageSpec {
33
+ readonly layerName: string;
34
+ readonly execWrapper: string;
35
+ readonly compatibleRuntimes: string[];
36
+ readonly handlerDistros?: {
37
+ [key: string]: string;
38
+ };
39
+ readonly webServer: GeneratedWebServerLoader | null;
40
+ }
41
+ export declare const LANGUAGES: {
42
+ [language: string]: GeneratedLanguageSpec;
43
+ };
44
+ /** Architectures every language is built for. */
45
+ export declare const ARCHITECTURES: string[];
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /* eslint-disable */
3
+ /**
4
+ * GENERATED FILE — DO NOT EDIT.
5
+ *
6
+ * Produced by cdk/scripts/generate-layers.ts from artifacts.json and manifest/layers.json.
7
+ * Run `npm run generate` (or `npm run build`) to refresh it.
8
+ *
9
+ * Odigos artifact version: (unreleased)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ARCHITECTURES = exports.LANGUAGES = exports.SAR_APPLICATIONS = exports.LAYER_ARNS = exports.SAR_SEMANTIC_VERSION = exports.ODIGOS_VERSION = void 0;
13
+ /** Release this table was generated from. Empty before the first release. */
14
+ exports.ODIGOS_VERSION = "";
15
+ /** SAR semantic version matching ODIGOS_VERSION (no leading "v"). */
16
+ exports.SAR_SEMANTIC_VERSION = "";
17
+ /** Public layer ARNs, keyed "<region>/<language>/<architecture>". */
18
+ exports.LAYER_ARNS = {};
19
+ /** SAR application ids, keyed "<language>/<architecture>". */
20
+ exports.SAR_APPLICATIONS = {};
21
+ exports.LANGUAGES = {
22
+ "python": {
23
+ "layerName": "odigos-otel-python",
24
+ "execWrapper": "/opt/otel-instrument",
25
+ "compatibleRuntimes": [
26
+ "python3.9",
27
+ "python3.10",
28
+ "python3.11",
29
+ "python3.12",
30
+ "python3.13",
31
+ "python3.14"
32
+ ],
33
+ "webServer": {
34
+ "envKey": "PYTHONPATH",
35
+ "separator": ":",
36
+ "prepend": true,
37
+ "value": "/opt/python:/opt/python/opentelemetry/instrumentation/auto_instrumentation:/var/task:/var/task/site-packages",
38
+ "extraEnv": {
39
+ "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf"
40
+ }
41
+ }
42
+ },
43
+ "nodejs": {
44
+ "layerName": "odigos-otel-nodejs",
45
+ "execWrapper": "/opt/otel-handler",
46
+ "compatibleRuntimes": [
47
+ "nodejs18.x",
48
+ "nodejs20.x",
49
+ "nodejs22.x",
50
+ "nodejs24.x"
51
+ ],
52
+ "webServer": {
53
+ "envKey": "NODE_OPTIONS",
54
+ "separator": " ",
55
+ "prepend": false,
56
+ "value": "--import /opt/init.mjs",
57
+ "extraEnv": {}
58
+ }
59
+ },
60
+ "java": {
61
+ "layerName": "odigos-otel-java",
62
+ "execWrapper": "/opt/otel-handler",
63
+ "compatibleRuntimes": [
64
+ "java8.al2",
65
+ "java11",
66
+ "java17",
67
+ "java21",
68
+ "java25"
69
+ ],
70
+ "handlerDistros": {
71
+ "otel-handler": "/opt/otel-handler",
72
+ "otel-proxy-handler": "/opt/otel-proxy-handler",
73
+ "otel-sqs-handler": "/opt/otel-sqs-handler",
74
+ "otel-stream-handler": "/opt/otel-stream-handler"
75
+ },
76
+ "webServer": {
77
+ "envKey": "JAVA_TOOL_OPTIONS",
78
+ "separator": " ",
79
+ "prepend": false,
80
+ "value": "-javaagent:/opt/opentelemetry-javaagent.jar",
81
+ "extraEnv": {}
82
+ }
83
+ },
84
+ "ruby": {
85
+ "layerName": "odigos-otel-ruby",
86
+ "execWrapper": "/opt/otel-handler",
87
+ "compatibleRuntimes": [
88
+ "ruby3.2",
89
+ "ruby3.3",
90
+ "ruby3.4",
91
+ "ruby4.0"
92
+ ],
93
+ "webServer": null
94
+ }
95
+ };
96
+ /** Architectures every language is built for. */
97
+ exports.ARCHITECTURES = [
98
+ "x86_64",
99
+ "arm64"
100
+ ];
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dlbmVyYXRlZC9sYXllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9CQUFvQjtBQUNwQjs7Ozs7OztHQU9HOzs7QUFFSCw2RUFBNkU7QUFDaEUsUUFBQSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBRWpDLHFFQUFxRTtBQUN4RCxRQUFBLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUV2QyxxRUFBcUU7QUFDeEQsUUFBQSxVQUFVLEdBQThCLEVBQUUsQ0FBQztBQUV4RCw4REFBOEQ7QUFDakQsUUFBQSxnQkFBZ0IsR0FBOEIsRUFBRSxDQUFDO0FBb0JqRCxRQUFBLFNBQVMsR0FBa0Q7SUFDdEUsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxhQUFhLEVBQUUsc0JBQXNCO1FBQ3JDLG9CQUFvQixFQUFFO1lBQ3BCLFdBQVc7WUFDWCxZQUFZO1lBQ1osWUFBWTtZQUNaLFlBQVk7WUFDWixZQUFZO1lBQ1osWUFBWTtTQUNiO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsUUFBUSxFQUFFLFlBQVk7WUFDdEIsV0FBVyxFQUFFLEdBQUc7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsOEdBQThHO1lBQ3ZILFVBQVUsRUFBRTtnQkFDViw2QkFBNkIsRUFBRSxlQUFlO2FBQy9DO1NBQ0Y7S0FDRjtJQUNELFFBQVEsRUFBRTtRQUNSLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsYUFBYSxFQUFFLG1CQUFtQjtRQUNsQyxvQkFBb0IsRUFBRTtZQUNwQixZQUFZO1lBQ1osWUFBWTtZQUNaLFlBQVk7WUFDWixZQUFZO1NBQ2I7UUFDRCxXQUFXLEVBQUU7WUFDWCxRQUFRLEVBQUUsY0FBYztZQUN4QixXQUFXLEVBQUUsR0FBRztZQUNoQixTQUFTLEVBQUUsS0FBSztZQUNoQixPQUFPLEVBQUUsd0JBQXdCO1lBQ2pDLFVBQVUsRUFBRSxFQUFFO1NBQ2Y7S0FDRjtJQUNELE1BQU0sRUFBRTtRQUNOLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0IsYUFBYSxFQUFFLG1CQUFtQjtRQUNsQyxvQkFBb0IsRUFBRTtZQUNwQixXQUFXO1lBQ1gsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtTQUNUO1FBQ0QsZ0JBQWdCLEVBQUU7WUFDaEIsY0FBYyxFQUFFLG1CQUFtQjtZQUNuQyxvQkFBb0IsRUFBRSx5QkFBeUI7WUFDL0Msa0JBQWtCLEVBQUUsdUJBQXVCO1lBQzNDLHFCQUFxQixFQUFFLDBCQUEwQjtTQUNsRDtRQUNELFdBQVcsRUFBRTtZQUNYLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsV0FBVyxFQUFFLEdBQUc7WUFDaEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxVQUFVLEVBQUUsRUFBRTtTQUNmO0tBQ0Y7SUFDRCxNQUFNLEVBQUU7UUFDTixXQUFXLEVBQUUsa0JBQWtCO1FBQy9CLGFBQWEsRUFBRSxtQkFBbUI7UUFDbEMsb0JBQW9CLEVBQUU7WUFDcEIsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztTQUNWO1FBQ0QsV0FBVyxFQUFFLElBQUk7S0FDbEI7Q0FDRixDQUFDO0FBRUYsaURBQWlEO0FBQ3BDLFFBQUEsYUFBYSxHQUFhO0lBQ3JDLFFBQVE7SUFDUixPQUFPO0NBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdFTkVSQVRFRCBGSUxFIOKAlCBETyBOT1QgRURJVC5cbiAqXG4gKiBQcm9kdWNlZCBieSBjZGsvc2NyaXB0cy9nZW5lcmF0ZS1sYXllcnMudHMgZnJvbSBhcnRpZmFjdHMuanNvbiBhbmQgbWFuaWZlc3QvbGF5ZXJzLmpzb24uXG4gKiBSdW4gYG5wbSBydW4gZ2VuZXJhdGVgIChvciBgbnBtIHJ1biBidWlsZGApIHRvIHJlZnJlc2ggaXQuXG4gKlxuICogT2RpZ29zIGFydGlmYWN0IHZlcnNpb246ICh1bnJlbGVhc2VkKVxuICovXG5cbi8qKiBSZWxlYXNlIHRoaXMgdGFibGUgd2FzIGdlbmVyYXRlZCBmcm9tLiBFbXB0eSBiZWZvcmUgdGhlIGZpcnN0IHJlbGVhc2UuICovXG5leHBvcnQgY29uc3QgT0RJR09TX1ZFUlNJT04gPSBcIlwiO1xuXG4vKiogU0FSIHNlbWFudGljIHZlcnNpb24gbWF0Y2hpbmcgT0RJR09TX1ZFUlNJT04gKG5vIGxlYWRpbmcgXCJ2XCIpLiAqL1xuZXhwb3J0IGNvbnN0IFNBUl9TRU1BTlRJQ19WRVJTSU9OID0gXCJcIjtcblxuLyoqIFB1YmxpYyBsYXllciBBUk5zLCBrZXllZCBcIjxyZWdpb24+LzxsYW5ndWFnZT4vPGFyY2hpdGVjdHVyZT5cIi4gKi9cbmV4cG9ydCBjb25zdCBMQVlFUl9BUk5TOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbi8qKiBTQVIgYXBwbGljYXRpb24gaWRzLCBrZXllZCBcIjxsYW5ndWFnZT4vPGFyY2hpdGVjdHVyZT5cIi4gKi9cbmV4cG9ydCBjb25zdCBTQVJfQVBQTElDQVRJT05TOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbi8qKiBMb2FkZXIgY29uZmlndXJhdGlvbiBmb3Igd2ViLXNlcnZlciAoTGFtYmRhIFdlYiBBZGFwdGVyKSBtb2RlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRXZWJTZXJ2ZXJMb2FkZXIge1xuICByZWFkb25seSBlbnZLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZXBlbmQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4dHJhRW52OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKiogU3RhdGljIHBlci1sYW5ndWFnZSBmYWN0cywgbWlycm9yZWQgZnJvbSB0aGUgY29ubmVjdG9yJ3MgaW5zdHJ1bWVudG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRMYW5ndWFnZVNwZWMge1xuICByZWFkb25seSBsYXllck5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZXhlY1dyYXBwZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgY29tcGF0aWJsZVJ1bnRpbWVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaGFuZGxlckRpc3Ryb3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSB3ZWJTZXJ2ZXI6IEdlbmVyYXRlZFdlYlNlcnZlckxvYWRlciB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBMQU5HVUFHRVM6IHsgW2xhbmd1YWdlOiBzdHJpbmddOiBHZW5lcmF0ZWRMYW5ndWFnZVNwZWMgfSA9IHtcbiAgXCJweXRob25cIjoge1xuICAgIFwibGF5ZXJOYW1lXCI6IFwib2RpZ29zLW90ZWwtcHl0aG9uXCIsXG4gICAgXCJleGVjV3JhcHBlclwiOiBcIi9vcHQvb3RlbC1pbnN0cnVtZW50XCIsXG4gICAgXCJjb21wYXRpYmxlUnVudGltZXNcIjogW1xuICAgICAgXCJweXRob24zLjlcIixcbiAgICAgIFwicHl0aG9uMy4xMFwiLFxuICAgICAgXCJweXRob24zLjExXCIsXG4gICAgICBcInB5dGhvbjMuMTJcIixcbiAgICAgIFwicHl0aG9uMy4xM1wiLFxuICAgICAgXCJweXRob24zLjE0XCJcbiAgICBdLFxuICAgIFwid2ViU2VydmVyXCI6IHtcbiAgICAgIFwiZW52S2V5XCI6IFwiUFlUSE9OUEFUSFwiLFxuICAgICAgXCJzZXBhcmF0b3JcIjogXCI6XCIsXG4gICAgICBcInByZXBlbmRcIjogdHJ1ZSxcbiAgICAgIFwidmFsdWVcIjogXCIvb3B0L3B5dGhvbjovb3B0L3B5dGhvbi9vcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9hdXRvX2luc3RydW1lbnRhdGlvbjovdmFyL3Rhc2s6L3Zhci90YXNrL3NpdGUtcGFja2FnZXNcIixcbiAgICAgIFwiZXh0cmFFbnZcIjoge1xuICAgICAgICBcIk9URUxfRVhQT1JURVJfT1RMUF9QUk9UT0NPTFwiOiBcImh0dHAvcHJvdG9idWZcIlxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgXCJub2RlanNcIjoge1xuICAgIFwibGF5ZXJOYW1lXCI6IFwib2RpZ29zLW90ZWwtbm9kZWpzXCIsXG4gICAgXCJleGVjV3JhcHBlclwiOiBcIi9vcHQvb3RlbC1oYW5kbGVyXCIsXG4gICAgXCJjb21wYXRpYmxlUnVudGltZXNcIjogW1xuICAgICAgXCJub2RlanMxOC54XCIsXG4gICAgICBcIm5vZGVqczIwLnhcIixcbiAgICAgIFwibm9kZWpzMjIueFwiLFxuICAgICAgXCJub2RlanMyNC54XCJcbiAgICBdLFxuICAgIFwid2ViU2VydmVyXCI6IHtcbiAgICAgIFwiZW52S2V5XCI6IFwiTk9ERV9PUFRJT05TXCIsXG4gICAgICBcInNlcGFyYXRvclwiOiBcIiBcIixcbiAgICAgIFwicHJlcGVuZFwiOiBmYWxzZSxcbiAgICAgIFwidmFsdWVcIjogXCItLWltcG9ydCAvb3B0L2luaXQubWpzXCIsXG4gICAgICBcImV4dHJhRW52XCI6IHt9XG4gICAgfVxuICB9LFxuICBcImphdmFcIjoge1xuICAgIFwibGF5ZXJOYW1lXCI6IFwib2RpZ29zLW90ZWwtamF2YVwiLFxuICAgIFwiZXhlY1dyYXBwZXJcIjogXCIvb3B0L290ZWwtaGFuZGxlclwiLFxuICAgIFwiY29tcGF0aWJsZVJ1bnRpbWVzXCI6IFtcbiAgICAgIFwiamF2YTguYWwyXCIsXG4gICAgICBcImphdmExMVwiLFxuICAgICAgXCJqYXZhMTdcIixcbiAgICAgIFwiamF2YTIxXCIsXG4gICAgICBcImphdmEyNVwiXG4gICAgXSxcbiAgICBcImhhbmRsZXJEaXN0cm9zXCI6IHtcbiAgICAgIFwib3RlbC1oYW5kbGVyXCI6IFwiL29wdC9vdGVsLWhhbmRsZXJcIixcbiAgICAgIFwib3RlbC1wcm94eS1oYW5kbGVyXCI6IFwiL29wdC9vdGVsLXByb3h5LWhhbmRsZXJcIixcbiAgICAgIFwib3RlbC1zcXMtaGFuZGxlclwiOiBcIi9vcHQvb3RlbC1zcXMtaGFuZGxlclwiLFxuICAgICAgXCJvdGVsLXN0cmVhbS1oYW5kbGVyXCI6IFwiL29wdC9vdGVsLXN0cmVhbS1oYW5kbGVyXCJcbiAgICB9LFxuICAgIFwid2ViU2VydmVyXCI6IHtcbiAgICAgIFwiZW52S2V5XCI6IFwiSkFWQV9UT09MX09QVElPTlNcIixcbiAgICAgIFwic2VwYXJhdG9yXCI6IFwiIFwiLFxuICAgICAgXCJwcmVwZW5kXCI6IGZhbHNlLFxuICAgICAgXCJ2YWx1ZVwiOiBcIi1qYXZhYWdlbnQ6L29wdC9vcGVudGVsZW1ldHJ5LWphdmFhZ2VudC5qYXJcIixcbiAgICAgIFwiZXh0cmFFbnZcIjoge31cbiAgICB9XG4gIH0sXG4gIFwicnVieVwiOiB7XG4gICAgXCJsYXllck5hbWVcIjogXCJvZGlnb3Mtb3RlbC1ydWJ5XCIsXG4gICAgXCJleGVjV3JhcHBlclwiOiBcIi9vcHQvb3RlbC1oYW5kbGVyXCIsXG4gICAgXCJjb21wYXRpYmxlUnVudGltZXNcIjogW1xuICAgICAgXCJydWJ5My4yXCIsXG4gICAgICBcInJ1YnkzLjNcIixcbiAgICAgIFwicnVieTMuNFwiLFxuICAgICAgXCJydWJ5NC4wXCJcbiAgICBdLFxuICAgIFwid2ViU2VydmVyXCI6IG51bGxcbiAgfVxufTtcblxuLyoqIEFyY2hpdGVjdHVyZXMgZXZlcnkgbGFuZ3VhZ2UgaXMgYnVpbHQgZm9yLiAqL1xuZXhwb3J0IGNvbnN0IEFSQ0hJVEVDVFVSRVM6IHN0cmluZ1tdID0gW1xuICBcIng4Nl82NFwiLFxuICBcImFybTY0XCJcbl07XG4iXX0=
package/lib/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export * from './types';
2
+ export * from './instrumentation';
3
+ export { odigosLayerName } from './layer-resolver';
4
+ export { languageFromRuntime, execWrapperFor, layerNameFor } from './runtime';
5
+ export { renderCollectorConfig, ENV_COLLECTOR_CONFIG_URI, ENV_TRACES_EXPORTER, ENV_METRICS_EXPORTER, ENV_LOGS_EXPORTER, } from './collector-config';
6
+ export { ODIGOS_VERSION, LAYER_ARNS, SAR_APPLICATIONS, SAR_SEMANTIC_VERSION } from './generated/layers';