1- import { createTempConfig } from '../../__tests__/helpers/temp-config' ;
2- import { resolveTelemetryPreference } from '../config' ;
3- import { writeFile } from 'fs/promises' ;
4- import { join } from 'node:path' ;
5- import { afterAll , afterEach , beforeEach , describe , expect , it } from 'vitest' ;
6-
7- const tmp = createTempConfig ( 'resolve' ) ;
1+ import {
2+ resolveAuditEnabled ,
3+ resolveTelemetryEndpoint ,
4+ resolveTelemetryPreference ,
5+ validateEndpointUrl ,
6+ } from '../config' ;
7+ import { afterEach , beforeEach , describe , expect , it } from 'vitest' ;
88
99describe ( 'resolveTelemetryPreference' , ( ) => {
1010 const originalEnv = process . env ;
1111
12- beforeEach ( async ( ) => {
12+ beforeEach ( ( ) => {
1313 process . env = { ...originalEnv } ;
1414 delete process . env . AGENTCORE_TELEMETRY_DISABLED ;
15- await tmp . setup ( ) ;
1615 } ) ;
1716
1817 afterEach ( ( ) => {
1918 process . env = originalEnv ;
2019 } ) ;
2120
22- afterAll ( ( ) => tmp . cleanup ( ) ) ;
23-
2421 describe ( 'AGENTCORE_TELEMETRY_DISABLED env var' , ( ) => {
2522 it ( 'disables telemetry for any non-false/non-0 value' , async ( ) => {
2623 for ( const val of [ 'true' , 'TRUE' , '1' , 'yes' ] ) {
2724 process . env . AGENTCORE_TELEMETRY_DISABLED = val ;
2825
29- const result = await resolveTelemetryPreference ( tmp . configFile ) ;
26+ const result = await resolveTelemetryPreference ( ) ;
3027
3128 expect ( result ) . toMatchObject ( { enabled : false , source : 'environment' } ) ;
3229 expect ( result . envVar ) . toEqual ( { name : 'AGENTCORE_TELEMETRY_DISABLED' , value : val } ) ;
@@ -37,7 +34,7 @@ describe('resolveTelemetryPreference', () => {
3734 for ( const val of [ 'false' , '0' ] ) {
3835 process . env . AGENTCORE_TELEMETRY_DISABLED = val ;
3936
40- const result = await resolveTelemetryPreference ( tmp . configFile ) ;
37+ const result = await resolveTelemetryPreference ( ) ;
4138
4239 expect ( result ) . toMatchObject ( { enabled : true , source : 'environment' } ) ;
4340 expect ( result . envVar ) . toEqual ( { name : 'AGENTCORE_TELEMETRY_DISABLED' , value : val } ) ;
@@ -46,28 +43,122 @@ describe('resolveTelemetryPreference', () => {
4643 } ) ;
4744
4845 describe ( 'global config' , ( ) => {
49- it ( 'uses config file when no env vars set' , async ( ) => {
50- await writeFile ( tmp . configFile , JSON . stringify ( { telemetry : { enabled : false } } ) ) ;
51-
52- const result = await resolveTelemetryPreference ( tmp . configFile ) ;
46+ it ( 'uses config when telemetry.enabled is false' , async ( ) => {
47+ const result = await resolveTelemetryPreference ( { telemetry : { enabled : false } } ) ;
5348
5449 expect ( result ) . toEqual ( { enabled : false , source : 'global-config' } ) ;
5550 } ) ;
5651
5752 it ( 'ignores non-boolean enabled values in config' , async ( ) => {
58- await writeFile ( tmp . configFile , JSON . stringify ( { telemetry : { enabled : 'false' } } ) ) ;
59-
60- const result = await resolveTelemetryPreference ( tmp . configFile ) ;
53+ // @ts -expect-error — intentionally invalid
54+ const result = await resolveTelemetryPreference ( { telemetry : { enabled : 'false' } } ) ;
6155
6256 expect ( result ) . toEqual ( { enabled : true , source : 'default' } ) ;
6357 } ) ;
6458 } ) ;
6559
6660 describe ( 'default' , ( ) => {
6761 it ( 'defaults to enabled when no env vars or config' , async ( ) => {
68- const result = await resolveTelemetryPreference ( join ( tmp . testDir , 'nonexistent.json' ) ) ;
62+ const result = await resolveTelemetryPreference ( { } ) ;
6963
7064 expect ( result ) . toEqual ( { enabled : true , source : 'default' } ) ;
7165 } ) ;
7266 } ) ;
7367} ) ;
68+
69+ describe ( 'validateEndpointUrl' , ( ) => {
70+ it ( 'returns success with normalized URL for valid https endpoint' , ( ) => {
71+ const result = validateEndpointUrl ( 'https://telemetry.example.com/v1/' ) ;
72+ expect ( result ) . toEqual ( { success : true , url : 'https://telemetry.example.com/v1' } ) ;
73+ } ) ;
74+
75+ it ( 'returns success for http endpoint' , ( ) => {
76+ const result = validateEndpointUrl ( 'http://localhost:4318' ) ;
77+ expect ( result ) . toEqual ( { success : true , url : 'http://localhost:4318' } ) ;
78+ } ) ;
79+
80+ it ( 'strips trailing slashes' , ( ) => {
81+ const result = validateEndpointUrl ( 'https://example.com/' ) ;
82+ expect ( result ) . toEqual ( { success : true , url : 'https://example.com' } ) ;
83+ } ) ;
84+
85+ it ( 'returns failure for non-http protocol' , ( ) => {
86+ const result = validateEndpointUrl ( 'file:///etc/passwd' ) ;
87+ expect ( result . success ) . toBe ( false ) ;
88+ expect ( ! result . success && result . error . message ) . toContain ( 'Unsupported protocol' ) ;
89+ } ) ;
90+
91+ it ( 'returns failure for malformed URL' , ( ) => {
92+ const result = validateEndpointUrl ( 'not-a-url' ) ;
93+ expect ( result . success ) . toBe ( false ) ;
94+ expect ( ! result . success && result . error . message ) . toContain ( 'Invalid URL' ) ;
95+ } ) ;
96+ } ) ;
97+
98+ describe ( 'resolveTelemetryEndpoint' , ( ) => {
99+ const originalEnv = process . env ;
100+
101+ beforeEach ( ( ) => {
102+ process . env = { ...originalEnv } ;
103+ delete process . env . AGENTCORE_TELEMETRY_ENDPOINT ;
104+ } ) ;
105+
106+ afterEach ( ( ) => {
107+ process . env = originalEnv ;
108+ } ) ;
109+
110+ it ( 'returns endpoint from env var' , async ( ) => {
111+ process . env . AGENTCORE_TELEMETRY_ENDPOINT = 'https://env.example.com' ;
112+
113+ const result = await resolveTelemetryEndpoint ( { } ) ;
114+
115+ expect ( result ) . toEqual ( { success : true , url : 'https://env.example.com' } ) ;
116+ } ) ;
117+
118+ it ( 'falls back to config endpoint' , async ( ) => {
119+ const result = await resolveTelemetryEndpoint ( { telemetry : { endpoint : 'https://config.example.com' } } ) ;
120+
121+ expect ( result ) . toEqual ( { success : true , url : 'https://config.example.com' } ) ;
122+ } ) ;
123+
124+ it ( 'returns failure when no endpoint configured' , async ( ) => {
125+ const result = await resolveTelemetryEndpoint ( { } ) ;
126+
127+ expect ( result . success ) . toBe ( false ) ;
128+ } ) ;
129+
130+ it ( 'returns failure for invalid env endpoint' , async ( ) => {
131+ process . env . AGENTCORE_TELEMETRY_ENDPOINT = 'not-a-url' ;
132+
133+ const result = await resolveTelemetryEndpoint ( { } ) ;
134+
135+ expect ( result . success ) . toBe ( false ) ;
136+ } ) ;
137+ } ) ;
138+
139+ describe ( 'resolveAuditEnabled' , ( ) => {
140+ const originalEnv = process . env ;
141+
142+ beforeEach ( ( ) => {
143+ process . env = { ...originalEnv } ;
144+ delete process . env . AGENTCORE_TELEMETRY_AUDIT ;
145+ } ) ;
146+
147+ afterEach ( ( ) => {
148+ process . env = originalEnv ;
149+ } ) ;
150+
151+ it ( 'returns true when env var is "1"' , async ( ) => {
152+ process . env . AGENTCORE_TELEMETRY_AUDIT = '1' ;
153+
154+ expect ( await resolveAuditEnabled ( { } ) ) . toBe ( true ) ;
155+ } ) ;
156+
157+ it ( 'returns true when config audit is true' , async ( ) => {
158+ expect ( await resolveAuditEnabled ( { telemetry : { audit : true } } ) ) . toBe ( true ) ;
159+ } ) ;
160+
161+ it ( 'returns false when neither env nor config enables audit' , async ( ) => {
162+ expect ( await resolveAuditEnabled ( { } ) ) . toBe ( false ) ;
163+ } ) ;
164+ } ) ;
0 commit comments