Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,8 @@
/packages/dd-trace/src/bootstrap.js @DataDog/lang-platform-js
/packages/dd-trace/src/feature-registry.js @DataDog/lang-platform-js
/packages/dd-trace/src/exporters/common/ @DataDog/lang-platform-js
/packages/dd-trace/src/exporters/common/client-library-headers.js @DataDog/lang-platform-js @DataDog/feature-flagging-and-experimentation-sdk
/packages/dd-trace/src/proxy.js @DataDog/lang-platform-js
/packages/dd-trace/test/agent/ @DataDog/lang-platform-js
/packages/dd-trace/test/dd-trace.spec.js @DataDog/lang-platform-js
/packages/dd-trace/test/dogstatsd.spec.js @DataDog/lang-platform-js
Expand Down
16 changes: 8 additions & 8 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,12 @@ interface Tracer extends opentracing.Tracer {
llmobs: tracer.llmobs.LLMObs;

/**
* OpenFeature Provider with Remote Config integration.
* OpenFeature Provider with agentless and Agent Remote Config delivery.
*
* Extends DatadogNodeServerProvider with Remote Config integration for dynamic flag configuration.
* Enable with DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true.
* Agentless delivery is enabled by default and starts when the provider is first accessed.
*
* @env DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED
* @env DD_FEATURE_FLAGS_ENABLED
* @env DD_FEATURE_FLAGS_CONFIGURATION_SOURCE
* @beta This feature is in preview and not ready for production use
*/
openfeature: tracer.OpenFeatureProvider;
Expand Down Expand Up @@ -799,9 +799,9 @@ declare namespace tracer {
*/
flaggingProvider?: {
/**
* Whether to enable the feature flagging provider.
* Requires Remote Config to be properly configured.
* Can be configured via DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED environment variable.
* Legacy feature flagging provider switch.
* When the stable Feature Flags configuration is unset, true selects Agent Remote Config and false disables
* the provider.
*
* @default false
* @env DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED
Expand Down Expand Up @@ -1620,7 +1620,7 @@ declare namespace tracer {
/**
* Flagging Provider (OpenFeature-compatible).
*
* Wraps @datadog/openfeature-node-server with Remote Config integration for dynamic flag configuration.
* Wraps @datadog/openfeature-node-server with agentless and Agent Remote Config delivery.
* Implements the OpenFeature Provider interface for flag evaluation.
*
* @beta This feature is in preview and not ready for production use
Expand Down
16 changes: 8 additions & 8 deletions index.d.v5.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,12 @@ interface Tracer extends opentracing.Tracer {
llmobs: tracer.llmobs.LLMObs;

/**
* OpenFeature Provider with Remote Config integration.
* OpenFeature Provider with agentless and Agent Remote Config delivery.
*
* Extends DatadogNodeServerProvider with Remote Config integration for dynamic flag configuration.
* Enable with DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true.
* Agentless delivery is enabled by default and starts when the provider is first accessed.
*
* @env DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED
* @env DD_FEATURE_FLAGS_ENABLED
* @env DD_FEATURE_FLAGS_CONFIGURATION_SOURCE
* @beta This feature is in preview and not ready for production use
*/
openfeature: tracer.OpenFeatureProvider;
Expand Down Expand Up @@ -869,9 +869,9 @@ declare namespace tracer {
*/
flaggingProvider?: {
/**
* Whether to enable the feature flagging provider.
* Requires Remote Config to be properly configured.
* Can be configured via DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED environment variable.
* Legacy feature flagging provider switch.
* When the stable Feature Flags configuration is unset, true selects Agent Remote Config and false disables
* the provider.
*
* @default false
* @env DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED
Expand Down Expand Up @@ -1732,7 +1732,7 @@ declare namespace tracer {
/**
* Flagging Provider (OpenFeature-compatible).
*
* Wraps @datadog/openfeature-node-server with Remote Config integration for dynamic flag configuration.
* Wraps @datadog/openfeature-node-server with agentless and Agent Remote Config delivery.
* Implements the OpenFeature Provider interface for flag evaluation.
*
* @beta This feature is in preview and not ready for production use
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
'use strict'

const tracer = require('dd-trace')

const { once } = require('node:events')
const http = require('node:http')

const { OpenFeature } = require('@openfeature/server-sdk')

const {
TEST_DEFAULT_VALUE,
TEST_FLAG_KEY,
TEST_SERVICE,
TEST_TARGETING_KEY,
} = process.env

tracer.init({
env: 'integration',
flushInterval: 0,
service: TEST_SERVICE,
})

let client

/**
* @param {object} message
* @param {'access'|'evaluate'|'trace'} message.command
* @param {string} [message.spanName]
* @param {string} [message.url]
* @param {boolean} [message.waitForReady]
*/
async function handleMessage (message) {
try {
if (message.command === 'access') {
const provider = tracer.openfeature
if (message.waitForReady) {
await OpenFeature.setProviderAndWait(provider)
} else {
OpenFeature.setProvider(provider)
}
client = OpenFeature.getClient()
send({ accessed: true })
return
}

if (message.command === 'evaluate') {
const details = await client.getStringDetails(TEST_FLAG_KEY, TEST_DEFAULT_VALUE, {
targetingKey: TEST_TARGETING_KEY,
userId: TEST_TARGETING_KEY,
})
send({ details })
return
}

if (message.command === 'trace') {
await tracer.trace(message.spanName, async () => {
if (message.url) {
const request = http.get(message.url)
const [response] = await once(request, 'response')
response.resume()
await once(response, 'end')
}
})
send({ traced: true })
}
} catch (error) {
send({ error: error.stack || error.message })
}
}

/**
* @param {object} message
*/
function send (message) {
process.send?.({ port: 0, ...message })
}

process.on('message', handleMessage)
send({ ready: true })
Loading
Loading