11// eslint-disable-next-line import/no-extraneous-dependencies
22import { parseMultipart } from '@mjackson/multipart-parser' ;
3+ import qs from 'qs' ;
34
45import {
56 isQueryResponseChunk ,
@@ -14,6 +15,8 @@ import {settingsManager} from '../settings';
1415
1516import { BaseYdbAPI } from './base' ;
1617
18+ const BOUNDARY = 'boundary' ;
19+
1720export interface StreamQueryParams {
1821 query ?: string ;
1922 database ?: string ;
@@ -42,17 +45,7 @@ export class StreamingAPI extends BaseYdbAPI {
4245 true ,
4346 ) ;
4447
45- let traceId : string | undefined = '' ;
46-
47- const queryParams = new URLSearchParams ( ) ;
48- // Add only string/number params
49- Object . entries ( params ) . forEach ( ( [ key , value ] ) => {
50- if ( value !== undefined ) {
51- queryParams . set ( key , String ( value ) ) ;
52- }
53- } ) ;
54- queryParams . set ( 'base64' , String ( base64 ) ) ;
55- queryParams . set ( 'schema' , 'multipart' ) ;
48+ const queryParams = qs . stringify ( { ...params , base64} , { encoder : encodeURIComponent } ) ;
5649
5750 const headers = new Headers ( {
5851 Accept : 'multipart/x-mixed-replace' ,
@@ -76,9 +69,9 @@ export class StreamingAPI extends BaseYdbAPI {
7669 throw new Error ( 'Empty response body' ) ;
7770 }
7871
79- traceId = response . headers . get ( 'traceresponse' ) ?. split ( '-' ) [ 1 ] ;
72+ const traceId = response . headers . get ( 'traceresponse' ) ?. split ( '-' ) [ 1 ] ;
8073
81- await parseMultipart ( response . body , { boundary : 'boundary' } , async ( part ) => {
74+ await parseMultipart ( response . body , { boundary : BOUNDARY } , async ( part ) => {
8275 try {
8376 const chunk = JSON . parse ( await part . text ( ) ) ;
8477
0 commit comments