@volley/recognition-client-sdk 0.1.707 → 0.1.782
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 +4 -1
- package/dist/browser.bundled.d.ts +282 -116
- package/dist/config-builder.d.ts +6 -1
- package/dist/config-builder.d.ts.map +1 -1
- package/dist/index.bundled.d.ts +344 -164
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -7
- package/dist/index.js.map +3 -3
- package/dist/recog-client-sdk.browser.js +70 -7
- package/dist/recog-client-sdk.browser.js.map +3 -3
- package/dist/recognition-client.d.ts.map +1 -1
- package/dist/recognition-client.types.d.ts +7 -1
- package/dist/recognition-client.types.d.ts.map +1 -1
- package/dist/utils/message-handler.d.ts +2 -1
- package/dist/utils/message-handler.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/config-builder.ts +11 -0
- package/src/index.ts +3 -0
- package/src/recognition-client.ts +15 -0
- package/src/recognition-client.types.ts +9 -0
- package/src/utils/message-handler.ts +14 -3
- package/src/utils/url-builder.spec.ts +43 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognition-client.d.ts","sourceRoot":"","sources":["../src/recognition-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;
|
|
1
|
+
{"version":3,"file":"recognition-client.d.ts","sourceRoot":"","sources":["../src/recognition-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Type definitions and interfaces for the recognition client SDK.
|
|
5
5
|
* These interfaces enable dependency injection, testing, and alternative implementations.
|
|
6
6
|
*/
|
|
7
|
-
import { TranscriptionResultV1, FunctionCallResultV1, MetadataResultV1, ErrorResultV1, SessionConfiguredV1, ASRRequestConfig, GameContextV1, Stage } from '@recog/shared-types';
|
|
7
|
+
import { TranscriptionResultV1, FunctionCallResultV1, MetadataResultV1, ErrorResultV1, SessionConfiguredV1, AudioMetricsResultV1, ASRRequestConfig, GameContextV1, Stage } from '@recog/shared-types';
|
|
8
8
|
/**
|
|
9
9
|
* Client connection state enum
|
|
10
10
|
* Represents the various states a recognition client can be in during its lifecycle
|
|
@@ -106,6 +106,12 @@ export interface IRecognitionClientConfig {
|
|
|
106
106
|
onFunctionCall?: (result: FunctionCallResultV1) => void;
|
|
107
107
|
/** Callback when metadata is received. Only once after transcription is complete.*/
|
|
108
108
|
onMetadata?: (metadata: MetadataResultV1) => void;
|
|
109
|
+
/**
|
|
110
|
+
* Callback when streaming audio metrics arrive (volume, silence ratio, clipping, SNR, etc.).
|
|
111
|
+
* Only fires when `asrRequestConfig.audioMetricsIntervalMs > 0`.
|
|
112
|
+
* Final metrics still arrive embedded in `onMetadata.audioMetrics`.
|
|
113
|
+
*/
|
|
114
|
+
onAudioMetrics?: (metrics: AudioMetricsResultV1) => void;
|
|
109
115
|
/** Callback when session is configured with actual ASR provider/model (optional) */
|
|
110
116
|
onSessionConfigured?: (config: SessionConfiguredV1) => void;
|
|
111
117
|
/** Callback when error occurs */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognition-client.types.d.ts","sourceRoot":"","sources":["../src/recognition-client.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recognition-client.types.d.ts","sourceRoot":"","sources":["../src/recognition-client.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Message Handler for Recognition Client
|
|
3
3
|
* Routes incoming WebSocket messages to appropriate callbacks
|
|
4
4
|
*/
|
|
5
|
-
import { type TranscriptionResultV1, type FunctionCallResultV1, type MetadataResultV1, type ErrorResultV1, type ClientControlMessageV1, type SessionConfiguredV1 } from '@recog/shared-types';
|
|
5
|
+
import { type TranscriptionResultV1, type FunctionCallResultV1, type MetadataResultV1, type ErrorResultV1, type ClientControlMessageV1, type SessionConfiguredV1, type AudioMetricsResultV1 } from '@recog/shared-types';
|
|
6
6
|
export interface MessageHandlerCallbacks {
|
|
7
7
|
onTranscript: (result: TranscriptionResultV1) => void;
|
|
8
8
|
onFunctionCall: (result: FunctionCallResultV1) => void;
|
|
@@ -10,6 +10,7 @@ export interface MessageHandlerCallbacks {
|
|
|
10
10
|
onError: (error: ErrorResultV1) => void;
|
|
11
11
|
onControlMessage: (msg: ClientControlMessageV1) => void;
|
|
12
12
|
onSessionConfigured?: ((config: SessionConfiguredV1) => void) | undefined;
|
|
13
|
+
onAudioMetrics?: ((metrics: AudioMetricsResultV1) => void) | undefined;
|
|
13
14
|
logger?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void;
|
|
14
15
|
}
|
|
15
16
|
export declare class MessageHandler {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../../src/utils/message-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../../src/utils/message-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACtD,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACvD,UAAU,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACjD,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACxD,mBAAmB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1E,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAEvE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CAC5F;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,SAAS,CAA0B;gBAE/B,SAAS,EAAE,uBAAuB;IAI9C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;IAEH,aAAa,CAAC,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI;IA8DhE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,UAAU,IAAI;QACZ,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;KACtC;CAUF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volley/recognition-client-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.782",
|
|
4
4
|
"description": "Recognition Service TypeScript/Node.js Client SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
"semantic-release": "25.0.1",
|
|
55
55
|
"ts-jest": "29.2.5",
|
|
56
56
|
"typescript": "5.1.6",
|
|
57
|
+
"@recog/shared-config": "1.0.0",
|
|
57
58
|
"@recog/shared-types": "1.0.0",
|
|
58
|
-
"@recog/websocket": "1.0.0",
|
|
59
59
|
"@recog/shared-utils": "1.0.0",
|
|
60
|
-
"@recog/
|
|
60
|
+
"@recog/websocket": "1.0.0"
|
|
61
61
|
},
|
|
62
62
|
"keywords": [
|
|
63
63
|
"recognition",
|
package/src/config-builder.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type {
|
|
|
14
14
|
TranscriptionResultV1,
|
|
15
15
|
MetadataResultV1,
|
|
16
16
|
SessionConfiguredV1,
|
|
17
|
+
AudioMetricsResultV1,
|
|
17
18
|
ErrorResultV1,
|
|
18
19
|
Stage
|
|
19
20
|
} from '@recog/shared-types';
|
|
@@ -193,6 +194,15 @@ export class ConfigBuilder {
|
|
|
193
194
|
return this;
|
|
194
195
|
}
|
|
195
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Set streaming audio metrics callback (optional).
|
|
199
|
+
* Only fires when `asrRequestConfig.audioMetricsIntervalMs > 0`.
|
|
200
|
+
*/
|
|
201
|
+
onAudioMetrics(callback: (metrics: AudioMetricsResultV1) => void): this {
|
|
202
|
+
this.config.onAudioMetrics = callback;
|
|
203
|
+
return this;
|
|
204
|
+
}
|
|
205
|
+
|
|
196
206
|
/**
|
|
197
207
|
* Set error callback
|
|
198
208
|
*/
|
|
@@ -252,6 +262,7 @@ export class ConfigBuilder {
|
|
|
252
262
|
/**
|
|
253
263
|
* Set logger function
|
|
254
264
|
*/
|
|
265
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
255
266
|
logger(logger: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void): this {
|
|
256
267
|
this.config.logger = logger;
|
|
257
268
|
return this;
|
package/src/index.ts
CHANGED
|
@@ -87,6 +87,7 @@ export {
|
|
|
87
87
|
type TranscriptionResultV1,
|
|
88
88
|
type FunctionCallResultV1,
|
|
89
89
|
type MetadataResultV1,
|
|
90
|
+
type AudioMetricsResultV1,
|
|
90
91
|
type ErrorResultV1,
|
|
91
92
|
RecognitionResultTypeV1,
|
|
92
93
|
ClientControlActionV1,
|
|
@@ -110,6 +111,8 @@ export {
|
|
|
110
111
|
CartesiaModel,
|
|
111
112
|
DashScopeModel,
|
|
112
113
|
BedrockModel,
|
|
114
|
+
AwsTranscribeModel,
|
|
115
|
+
AmazonNovaSonicModel,
|
|
113
116
|
Language,
|
|
114
117
|
SampleRate,
|
|
115
118
|
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
|
+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-function-return-type */
|
|
36
37
|
import { WebSocketAudioClient } from '@recog/websocket';
|
|
37
38
|
import {
|
|
38
39
|
AudioEncoding,
|
|
@@ -46,6 +47,7 @@ import {
|
|
|
46
47
|
type ErrorResultV1,
|
|
47
48
|
type ClientControlMessageV1,
|
|
48
49
|
type SessionConfiguredV1,
|
|
50
|
+
type AudioMetricsResultV1,
|
|
49
51
|
type ASRRequestConfig,
|
|
50
52
|
type ASRRequestV1,
|
|
51
53
|
type GameContextV1,
|
|
@@ -129,6 +131,7 @@ interface InternalConfig {
|
|
|
129
131
|
onFunctionCall: (result: FunctionCallResultV1) => void;
|
|
130
132
|
onMetadata: (metadata: MetadataResultV1) => void;
|
|
131
133
|
onSessionConfigured?: ((config: SessionConfiguredV1) => void) | undefined;
|
|
134
|
+
onAudioMetrics?: ((metrics: AudioMetricsResultV1) => void) | undefined;
|
|
132
135
|
onError: (error: ErrorResultV1) => void;
|
|
133
136
|
onConnected: () => void;
|
|
134
137
|
onDisconnected: (code: number, reason: string) => void;
|
|
@@ -223,6 +226,7 @@ export class RealTimeTwoWayWebSocketRecognitionClient
|
|
|
223
226
|
onFunctionCall: config.onFunctionCall || (() => {}),
|
|
224
227
|
onMetadata: config.onMetadata || (() => {}),
|
|
225
228
|
onSessionConfigured: config.onSessionConfigured,
|
|
229
|
+
onAudioMetrics: config.onAudioMetrics,
|
|
226
230
|
onError: config.onError || (() => {}),
|
|
227
231
|
onConnected: config.onConnected || (() => {}),
|
|
228
232
|
onDisconnected: config.onDisconnected || (() => {}),
|
|
@@ -252,6 +256,7 @@ export class RealTimeTwoWayWebSocketRecognitionClient
|
|
|
252
256
|
onError: this.config.onError,
|
|
253
257
|
onControlMessage: this.handleControlMessage.bind(this),
|
|
254
258
|
onSessionConfigured: this.config.onSessionConfigured,
|
|
259
|
+
onAudioMetrics: this.config.onAudioMetrics,
|
|
255
260
|
...(this.config.logger && { logger: this.config.logger })
|
|
256
261
|
});
|
|
257
262
|
}
|
|
@@ -711,6 +716,16 @@ export class RealTimeTwoWayWebSocketRecognitionClient
|
|
|
711
716
|
// Include prefix text to remove if provided (for server-side prefix text removal)
|
|
712
717
|
...(this.config.asrRequestConfig.prefixTextToRemove && {
|
|
713
718
|
prefixTextToRemove: this.config.asrRequestConfig.prefixTextToRemove
|
|
719
|
+
}),
|
|
720
|
+
// Streaming audio metrics opt-in (ms interval). Server only forwards metrics if > 0.
|
|
721
|
+
...(this.config.asrRequestConfig.audioMetricsIntervalMs !== undefined && {
|
|
722
|
+
audioMetricsIntervalMs: this.config.asrRequestConfig.audioMetricsIntervalMs
|
|
723
|
+
}),
|
|
724
|
+
// Opt-in: round-trip Deepgram nova-2 search-phrase hits into the
|
|
725
|
+
// transcript. Only fires server-side when (model = nova-2) AND
|
|
726
|
+
// (GameContext.gamePhase = 'Solve Puzzle'). See ASRRequestConfig.appendSearch.
|
|
727
|
+
...(this.config.asrRequestConfig.appendSearch !== undefined && {
|
|
728
|
+
appendSearch: this.config.asrRequestConfig.appendSearch
|
|
714
729
|
})
|
|
715
730
|
};
|
|
716
731
|
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
MetadataResultV1,
|
|
12
12
|
ErrorResultV1,
|
|
13
13
|
SessionConfiguredV1,
|
|
14
|
+
AudioMetricsResultV1,
|
|
14
15
|
ASRRequestConfig,
|
|
15
16
|
GameContextV1,
|
|
16
17
|
Stage
|
|
@@ -146,6 +147,13 @@ export interface IRecognitionClientConfig {
|
|
|
146
147
|
/** Callback when metadata is received. Only once after transcription is complete.*/
|
|
147
148
|
onMetadata?: (metadata: MetadataResultV1) => void;
|
|
148
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Callback when streaming audio metrics arrive (volume, silence ratio, clipping, SNR, etc.).
|
|
152
|
+
* Only fires when `asrRequestConfig.audioMetricsIntervalMs > 0`.
|
|
153
|
+
* Final metrics still arrive embedded in `onMetadata.audioMetrics`.
|
|
154
|
+
*/
|
|
155
|
+
onAudioMetrics?: (metrics: AudioMetricsResultV1) => void;
|
|
156
|
+
|
|
149
157
|
/** Callback when session is configured with actual ASR provider/model (optional) */
|
|
150
158
|
onSessionConfigured?: (config: SessionConfiguredV1) => void;
|
|
151
159
|
|
|
@@ -206,6 +214,7 @@ export interface IRecognitionClientConfig {
|
|
|
206
214
|
* @param message - Log message
|
|
207
215
|
* @param data - Optional additional data
|
|
208
216
|
*/
|
|
217
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
209
218
|
logger?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void;
|
|
210
219
|
}
|
|
211
220
|
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
RecognitionResultTypeV1,
|
|
8
|
-
ClientControlActionV1,
|
|
9
8
|
type TranscriptionResultV1,
|
|
10
9
|
type FunctionCallResultV1,
|
|
11
10
|
type MetadataResultV1,
|
|
12
11
|
type ErrorResultV1,
|
|
13
12
|
type ClientControlMessageV1,
|
|
14
|
-
type SessionConfiguredV1
|
|
13
|
+
type SessionConfiguredV1,
|
|
14
|
+
type AudioMetricsResultV1
|
|
15
15
|
} from '@recog/shared-types';
|
|
16
16
|
|
|
17
17
|
export interface MessageHandlerCallbacks {
|
|
@@ -21,6 +21,8 @@ export interface MessageHandlerCallbacks {
|
|
|
21
21
|
onError: (error: ErrorResultV1) => void;
|
|
22
22
|
onControlMessage: (msg: ClientControlMessageV1) => void;
|
|
23
23
|
onSessionConfigured?: ((config: SessionConfiguredV1) => void) | undefined;
|
|
24
|
+
onAudioMetrics?: ((metrics: AudioMetricsResultV1) => void) | undefined;
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
26
|
logger?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => void;
|
|
25
27
|
}
|
|
26
28
|
|
|
@@ -43,6 +45,7 @@ export class MessageHandler {
|
|
|
43
45
|
/**
|
|
44
46
|
* Handle incoming WebSocket message
|
|
45
47
|
*/
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
49
|
handleMessage(msg: { v: number; type: string; data: any }): void {
|
|
47
50
|
// Log ALL incoming messages for debugging
|
|
48
51
|
if (this.callbacks.logger) {
|
|
@@ -93,6 +96,10 @@ export class MessageHandler {
|
|
|
93
96
|
this.callbacks.onSessionConfigured?.(msgData as SessionConfiguredV1);
|
|
94
97
|
break;
|
|
95
98
|
|
|
99
|
+
case RecognitionResultTypeV1.AUDIO_METRICS:
|
|
100
|
+
this.callbacks.onAudioMetrics?.(msgData as AudioMetricsResultV1);
|
|
101
|
+
break;
|
|
102
|
+
|
|
96
103
|
default:
|
|
97
104
|
// Unknown message type - log if logger available
|
|
98
105
|
if (this.callbacks.logger) {
|
|
@@ -124,7 +131,11 @@ export class MessageHandler {
|
|
|
124
131
|
/**
|
|
125
132
|
* Get performance metrics
|
|
126
133
|
*/
|
|
127
|
-
getMetrics() {
|
|
134
|
+
getMetrics(): {
|
|
135
|
+
sessionStartTime: number | null;
|
|
136
|
+
firstTranscriptTime: number | null;
|
|
137
|
+
timeToFirstTranscript: number | null;
|
|
138
|
+
} {
|
|
128
139
|
return {
|
|
129
140
|
sessionStartTime: this.sessionStartTime,
|
|
130
141
|
firstTranscriptTime: this.firstTranscriptTime,
|
|
@@ -240,6 +240,49 @@ describe('buildWebSocketUrl', () => {
|
|
|
240
240
|
expect(urlObj.searchParams.get('platform')).toBe('iOS 17.0');
|
|
241
241
|
});
|
|
242
242
|
|
|
243
|
+
// Spec: docs-internal/spec/experiment-cohort-routing.spec.md
|
|
244
|
+
it('should add experimentCohort to query parameters', () => {
|
|
245
|
+
const config = {
|
|
246
|
+
...baseConfig,
|
|
247
|
+
experimentCohort: 'treatment' as const
|
|
248
|
+
};
|
|
249
|
+
const url = buildWebSocketUrl(config);
|
|
250
|
+
const urlObj = new URL(url);
|
|
251
|
+
expect(urlObj.searchParams.get('experimentCohort')).toBe('treatment');
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
it('should add experimentMajorVersion to query parameters', () => {
|
|
255
|
+
const config = {
|
|
256
|
+
...baseConfig,
|
|
257
|
+
experimentMajorVersion: 3
|
|
258
|
+
};
|
|
259
|
+
const url = buildWebSocketUrl(config);
|
|
260
|
+
const urlObj = new URL(url);
|
|
261
|
+
expect(urlObj.searchParams.get('experimentMajorVersion')).toBe('3');
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it('should not add experimentCohort if not provided', () => {
|
|
265
|
+
const url = buildWebSocketUrl(baseConfig);
|
|
266
|
+
expect(url).not.toContain('experimentCohort=');
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
it('should not add experimentMajorVersion if not provided', () => {
|
|
270
|
+
const url = buildWebSocketUrl(baseConfig);
|
|
271
|
+
expect(url).not.toContain('experimentMajorVersion=');
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
it('should add both experimentCohort and experimentMajorVersion', () => {
|
|
275
|
+
const config = {
|
|
276
|
+
...baseConfig,
|
|
277
|
+
experimentCohort: 'control' as const,
|
|
278
|
+
experimentMajorVersion: 1
|
|
279
|
+
};
|
|
280
|
+
const url = buildWebSocketUrl(config);
|
|
281
|
+
const urlObj = new URL(url);
|
|
282
|
+
expect(urlObj.searchParams.get('experimentCohort')).toBe('control');
|
|
283
|
+
expect(urlObj.searchParams.get('experimentMajorVersion')).toBe('1');
|
|
284
|
+
});
|
|
285
|
+
|
|
243
286
|
it('should create valid URL object', () => {
|
|
244
287
|
const config = {
|
|
245
288
|
...baseConfig,
|