From ece77c305e8dbec749758fbd02770ff3186bcc18 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 May 2026 17:07:23 +0100 Subject: [PATCH] JSCO-70: Throw appropriate AnalyticsException if startQuery response is missing requestID or handle --- lib/asyncqueryexecutor.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/asyncqueryexecutor.ts b/lib/asyncqueryexecutor.ts index 4f7cd1b..14bc63d 100644 --- a/lib/asyncqueryexecutor.ts +++ b/lib/asyncqueryexecutor.ts @@ -230,7 +230,7 @@ export class AsyncQueryExecutor extends QueryExecutor { CouchbaseLogger.debug( `Received startQuery response from ${requestOptions.hostname}:${requestOptions.port}. statusCode=${res.statusCode} clientContextId=${this._clientContextId}` ) - this._handleJsonResponse(res, resolve, reject) + this._handleJsonResponse(res, resolve, reject, ['requestID', 'handle']) } ) @@ -461,7 +461,8 @@ export class AsyncQueryExecutor extends QueryExecutor { private _handleJsonResponse( res: http.IncomingMessage, resolve: (value: T) => void, - reject: (err: any) => void + reject: (err: any) => void, + requiredKeys?: string[] ): void { res.once('error', (err) => { CouchbaseLogger.error( @@ -497,6 +498,21 @@ export class AsyncQueryExecutor extends QueryExecutor { return reject(parsed.errors) } + if (requiredKeys && requiredKeys.length > 0) { + const missingFields = requiredKeys.filter( + (key) => parsed[key] === undefined + ) + if (missingFields.length > 0) { + return reject( + new AnalyticsError( + this._requestContext.attachErrorContext( + `Server response is missing required fields: ${missingFields.join(', ')}` + ) + ) + ) + } + } + resolve(parsed) }) }