11'use strict'
22
3- const logger = require ( '../../log' )
4- const { EVP_PROXY_PATH_V2 } = require ( '../../evp_proxy/constants' )
3+ const {
4+ EVP_EVENT_PLATFORM_SUBDOMAIN ,
5+ EVP_PROXY_PATH_V2 ,
6+ EVP_PROXY_PATH_V4 ,
7+ EVP_SUBDOMAIN_HEADER_NAME ,
8+ } = require ( '../../evp_proxy/constants' )
9+ const { createDirectEVPRoute } = require ( '../../evp_proxy/direct' )
510const { discoverEVPProxy } = require ( '../../evp_proxy/discovery' )
11+ const logger = require ( '../../log' )
12+
13+ let missingRouteWarningLogged = false
14+
15+ /**
16+ * Logs the unavailable exposure-delivery warning once.
17+ *
18+ * @returns {void }
19+ */
20+ function warnExposureDeliveryUnavailable ( ) {
21+ if ( missingRouteWarningLogged ) return
22+ missingRouteWarningLogged = true
23+ logger . warn (
24+ 'Feature Flags exposure delivery is disabled because no compatible local EVP route or direct intake ' +
25+ 'credentials are available.'
26+ )
27+ }
628
729/**
8- * Determines if the agent supports EVP proxy and sets the writer enabled state accordingly
30+ * Preserves Agent exposure delivery for the Remote Configuration source.
31+ *
932 * @param {import('../../config') } config - Tracer configuration object
1033 * @param {Function } setWriterEnabledValue - Callback to set the writer enabled state
34+ * @returns {void }
1135 */
1236function setAgentStrategy ( config , setWriterEnabledValue ) {
1337 discoverEVPProxy ( config . url , {
1438 supportedPaths : [ EVP_PROXY_PATH_V2 ] ,
15- } , ( err , route ) => {
16- if ( err ) {
17- logger . debug ( 'FFE Writer disabled - error getting agent info: %s' , err . message )
39+ } , ( error , route ) => {
40+ if ( error ) {
41+ logger . debug ( 'FFE Writer disabled - error getting agent info: %s' , error . message )
1842 setWriterEnabledValue ( false )
1943 return
2044 }
@@ -29,6 +53,67 @@ function setAgentStrategy (config, setWriterEnabledValue) {
2953 } )
3054}
3155
32- module . exports = {
33- setAgentStrategy,
56+ /**
57+ * Selects a local serverless receiver or authenticated direct intake.
58+ *
59+ * Local discovery is optional for delivery. A missing listener, discovery
60+ * error, or incompatible receiver selects direct intake when credentials exist.
61+ *
62+ * @param {import('../../config') } config - Tracer configuration object
63+ * @param {Function } setWriterEnabledValue - Callback to set the writer enabled state
64+ * @returns {void }
65+ */
66+ function setAgentlessStrategy ( config , setWriterEnabledValue ) {
67+ const directRoute = createDirectEVPRoute ( config , EVP_EVENT_PLATFORM_SUBDOMAIN )
68+
69+ discoverEVPProxy ( config . url , {
70+ supportedPaths : [ EVP_PROXY_PATH_V4 , EVP_PROXY_PATH_V2 ] ,
71+ } , ( error , localRoute ) => {
72+ if ( localRoute ) {
73+ const route = {
74+ ...localRoute ,
75+ headers : {
76+ [ EVP_SUBDOMAIN_HEADER_NAME ] : EVP_EVENT_PLATFORM_SUBDOMAIN ,
77+ } ,
78+ ...( directRoute && { fallback : directRoute } ) ,
79+ }
80+ logger . debug ( 'FFE Writer enabled with local EVP route %s' , route . basePath )
81+ setWriterEnabledValue ( true , route )
82+ return
83+ }
84+
85+ if ( directRoute ) {
86+ if ( error ) {
87+ logger . debug ( 'FFE Writer using direct EVP intake after local discovery failed: %s' , error . message )
88+ } else {
89+ logger . debug ( 'FFE Writer using direct EVP intake because no compatible local route was advertised' )
90+ }
91+ setWriterEnabledValue ( true , directRoute )
92+ return
93+ }
94+
95+ if ( error ) {
96+ logger . debug ( 'FFE Writer disabled - error getting local receiver info: %s' , error . message )
97+ }
98+ warnExposureDeliveryUnavailable ( )
99+ setWriterEnabledValue ( false )
100+ } )
101+ }
102+
103+ /**
104+ * Applies the exposure-delivery strategy for the configured Feature Flags source.
105+ *
106+ * @param {import('../../config') } config - Tracer configuration object
107+ * @param {Function } setWriterEnabledValue - Callback to set the writer enabled state
108+ * @returns {void }
109+ */
110+ function setExposureDeliveryStrategy ( config , setWriterEnabledValue ) {
111+ if ( config . featureFlags ?. DD_FEATURE_FLAGS_CONFIGURATION_SOURCE === 'agentless' ) {
112+ setAgentlessStrategy ( config , setWriterEnabledValue )
113+ return
114+ }
115+
116+ setAgentStrategy ( config , setWriterEnabledValue )
34117}
118+
119+ module . exports = { setExposureDeliveryStrategy }
0 commit comments