diff --git a/packages/dd-trace/src/config/generated-config-types.d.ts b/packages/dd-trace/src/config/generated-config-types.d.ts index 9dec6c4d28..ef991ae73e 100644 --- a/packages/dd-trace/src/config/generated-config-types.d.ts +++ b/packages/dd-trace/src/config/generated-config-types.d.ts @@ -16,6 +16,7 @@ export interface GeneratedConfig { DD_API_SECURITY_MAX_DOWNSTREAM_BODY_BYTES: number; DD_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS: number; DD_API_SECURITY_SAMPLE_DELAY: number; + DD_APPSEC_AGENTIC_ONBOARDING: string; DD_APPSEC_SCA_ENABLED: boolean | undefined; enabled: boolean | undefined; eventTracking: { @@ -620,6 +621,7 @@ export interface GeneratedEnvVarConfig { DD_APM_FLUSH_DEADLINE_MILLISECONDS: number; DD_APM_TRACING_ENABLED: boolean; DD_APP_KEY: string | undefined; + DD_APPSEC_AGENTIC_ONBOARDING: string; DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE: string; DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING: string; DD_APPSEC_COLLECT_ALL_HEADERS: boolean; diff --git a/packages/dd-trace/src/config/supported-configurations.json b/packages/dd-trace/src/config/supported-configurations.json index bb8fbb2d4c..30d6866b1d 100644 --- a/packages/dd-trace/src/config/supported-configurations.json +++ b/packages/dd-trace/src/config/supported-configurations.json @@ -206,6 +206,15 @@ ] } ], + "DD_APPSEC_AGENTIC_ONBOARDING": [ + { + "implementation": "A", + "type": "string", + "default": "", + "namespace": "appsec", + "description": "Set automatically by Datadog's agentic onboarding solution when it configures App & API Protection for a service. Reported verbatim in configuration telemetry only; it has no effect on tracer behavior." + } + ], "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE": [ { "implementation": "E", diff --git a/packages/dd-trace/test/config/index.spec.js b/packages/dd-trace/test/config/index.spec.js index 1c3bdcb307..935f2d847f 100644 --- a/packages/dd-trace/test/config/index.spec.js +++ b/packages/dd-trace/test/config/index.spec.js @@ -615,6 +615,41 @@ describe('Config', () => { }) }) + describe('DD_APPSEC_AGENTIC_ONBOARDING', () => { + // RFC-1113: reported verbatim in configuration telemetry, always emitted + // (empty value with origin=default when unset). No effect on tracer behavior. + it('should default to an empty string and report it with origin=default when unset', () => { + const config = getConfig() + + assert.strictEqual(config.appsec.DD_APPSEC_AGENTIC_ONBOARDING, '') + assertConfigUpdateContains(updateConfig.getCall(0).args[0], [ + { name: 'DD_APPSEC_AGENTIC_ONBOARDING', value: '', origin: 'default' }, + ]) + }) + + it('should report the value verbatim with origin=env_var when set to true', () => { + process.env.DD_APPSEC_AGENTIC_ONBOARDING = 'true' + + const config = getConfig() + + assert.strictEqual(config.appsec.DD_APPSEC_AGENTIC_ONBOARDING, 'true') + assertConfigUpdateContains(updateConfig.getCall(0).args[0], [ + { name: 'DD_APPSEC_AGENTIC_ONBOARDING', value: 'true', origin: 'env_var' }, + ]) + }) + + it('should report an arbitrary value verbatim rather than collapsing to a boolean', () => { + process.env.DD_APPSEC_AGENTIC_ONBOARDING = 'false' + + const config = getConfig() + + assert.strictEqual(config.appsec.DD_APPSEC_AGENTIC_ONBOARDING, 'false') + assertConfigUpdateContains(updateConfig.getCall(0).args[0], [ + { name: 'DD_APPSEC_AGENTIC_ONBOARDING', value: 'false', origin: 'env_var' }, + ]) + }) + }) + it('should correctly map OTEL_RESOURCE_ATTRIBUTES', () => { process.env.OTEL_RESOURCE_ATTRIBUTES = 'deployment.environment=test1,service.name=test2,service.version=5,foo=bar1,baz=qux1'