Layer 1 (SerpApi) Failed: AxiosError: Request failed with status code 400
    at settle (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:2049:12)
    at IncomingMessage.handleStreamEnd (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:3591:11)
    at IncomingMessage.emit (node:events:520:35)
    at endReadableNT (node:internal/streams/readable:1729:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
    at Axios.request (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:4871:41)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async SearchService.fetchFromSerpApi (/home/shuloana/skytier.shuloana.com/dist/services/SearchService.js:74:26)
    at async SearchService.searchFlights (/home/shuloana/skytier.shuloana.com/dist/services/SearchService.js:24:27)
    at async /home/shuloana/skytier.shuloana.com/dist/index.js:232:22 {
  isAxiosError: true,
  code: 'ERR_BAD_REQUEST',
  config: [Object: null prototype] {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false,
      legacyInterceptorReqResOrdering: true
    },
    adapter: [ 'xhr', 'http', 'fetch' ],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function], Blob: [class Blob] },
    validateStatus: [Function: validateStatus],
    headers: Object [AxiosHeaders] {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': undefined,
      'User-Agent': 'axios/1.16.0',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },
    params: {
      engine: 'google_flights',
      departure_id: 'KUALA LUMPUR (UNDEFINED)',
      arrival_id: 'DHAKA (UNDEFINED)',
      outbound_date: '2026-05-28',
      type: 2,
      travel_class: 1,
      currency: 'USD',
      hl: 'en',
      api_key: 'b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541'
    },
    method: 'get',
    url: 'https://serpapi.com/search.json',
    allowAbsoluteUrls: true,
    data: undefined
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      finish: [Function: requestOnFinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: true,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: true,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: false,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    strictContentLength: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: true,
    _header: 'GET /search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541 HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'User-Agent: axios/1.16.0\r\n' +
      'Accept-Encoding: gzip, compress, deflate, br\r\n' +
      'Host: serpapi.com\r\n' +
      'Connection: keep-alive\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      options: [Object: null prototype],
      defaultPort: 443,
      protocol: 'https:',
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype] {},
      freeSockets: [Object: null prototype],
      keepAliveMsecs: 1000,
      keepAlive: true,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      agentKeepAliveTimeoutBuffer: 1000,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      Symbol(shapeMode): false,
      Symbol(kCapture): false
    },
    socketPath: undefined,
    method: 'GET',
    maxHeaderSize: undefined,
    insecureHTTPParser: false,
    joinDuplicateHeaders: undefined,
    path: '/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
    _ended: true,
    res: IncomingMessage {
      _events: [Object],
      _readableState: [ReadableState],
      _maxListeners: undefined,
      socket: null,
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      joinDuplicateHeaders: undefined,
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 400,
      statusMessage: 'Bad Request',
      client: [TLSSocket],
      _consuming: true,
      _dumped: false,
      req: [Circular *1],
      _eventsCount: 4,
      responseUrl: 'https://serpapi.com/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      redirects: [],
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kHeaders): [Object],
      Symbol(kHeadersCount): 36,
      Symbol(kTrailers): null,
      Symbol(kTrailersCount): 0
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'serpapi.com',
    protocol: 'https:',
    _redirectable: Writable {
      _events: [Object],
      _writableState: [WritableState],
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 0,
      _requestBodyBuffers: [],
      _eventsCount: 4,
      _onNativeResponse: [Function (anonymous)],
      _headerFilter: /^(?:Authorization|Proxy-Authorization|Cookie)$/i,
      _currentRequest: [Circular *1],
      _currentUrl: 'https://serpapi.com/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      _timeout: null,
      Symbol(shapeMode): true,
      Symbol(kCapture): false
    },
    Symbol(shapeMode): false,
    Symbol(kCapture): false,
    Symbol(kBytesWritten): 0,
    Symbol(kNeedDrain): false,
    Symbol(corked): 0,
    Symbol(kChunkedBuffer): [],
    Symbol(kChunkedLength): 0,
    Symbol(kSocket): TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'serpapi.com',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 9,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'serpapi.com',
      _closeAfterHandlingError: false,
      _readableState: [ReadableState],
      _writableState: [WritableState],
      allowHalfOpen: false,
      _maxListeners: undefined,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      timeout: 5000,
      parser: null,
      _httpMessage: null,
      autoSelectFamilyAttemptedAddresses: [Array],
      Symbol(alpncallback): null,
      Symbol(res): [TLSWrap],
      Symbol(verified): true,
      Symbol(pendingSession): null,
      Symbol(async_id_symbol): -1,
      Symbol(kHandle): [TLSWrap],
      Symbol(lastWriteQueueSize): 0,
      Symbol(timeout): Timeout {
        _idleTimeout: 5000,
        _idlePrev: [TimersList],
        _idleNext: [TimersList],
        _idleStart: 493,
        _onTimeout: [Function: bound ],
        _timerArgs: undefined,
        _repeat: null,
        _destroyed: false,
        Symbol(refed): false,
        Symbol(kHasPrimitive): false,
        Symbol(asyncId): 58,
        Symbol(triggerId): 56,
        Symbol(kAsyncContextFrame): undefined
      },
      Symbol(kBuffer): null,
      Symbol(kBufferCb): null,
      Symbol(kBufferGen): null,
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kSetNoDelay): false,
      Symbol(kSetKeepAlive): true,
      Symbol(kSetKeepAliveInitialDelay): 1,
      Symbol(kBytesRead): 0,
      Symbol(kBytesWritten): 0,
      Symbol(connect-options): [Object],
      Symbol(axios.http.socketListener): true,
      Symbol(axios.http.currentReq): [Writable]
    },
    Symbol(kOutHeaders): [Object: null prototype] {
      accept: [Array],
      'user-agent': [Array],
      'accept-encoding': [Array],
      host: [Array]
    },
    Symbol(errored): null,
    Symbol(kHighWaterMark): 65536,
    Symbol(kRejectNonStandardBodyWrites): false,
    Symbol(kUniqueHeaders): null
  },
  response: {
    status: 400,
    statusText: 'Bad Request',
    headers: Object [AxiosHeaders] {
      date: 'Thu, 14 May 2026 01:47:35 GMT',
      'content-type': 'application/json; charset=utf-8',
      'transfer-encoding': 'chunked',
      connection: 'keep-alive',
      'x-frame-options': 'SAMEORIGIN',
      'x-xss-protection': '1; mode=block',
      'x-content-type-options': 'nosniff',
      'x-download-options': 'noopen',
      'x-permitted-cross-domain-policies': 'none',
      'referrer-policy': 'strict-origin-when-cross-origin',
      'cache-control': 'no-cache',
      'x-request-id': '592f4a53-aca5-4729-b5be-56e6f9972259',
      'x-runtime': '0.007895',
      vary: 'accept-encoding',
      'cf-cache-status': 'MISS',
      server: 'cloudflare',
      'cf-ray': '9fb63c576983cba2-LAX',
      'alt-svc': 'h3=":443"; ma=86400'
    },
    config: [Object: null prototype] {
      transitional: [Object],
      adapter: [Array],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      env: [Object],
      validateStatus: [Function: validateStatus],
      headers: [Object [AxiosHeaders]],
      params: [Object],
      method: 'get',
      url: 'https://serpapi.com/search.json',
      allowAbsoluteUrls: true,
      data: undefined
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: true,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: true,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: true,
      _header: 'GET /search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'User-Agent: axios/1.16.0\r\n' +
        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
        'Host: serpapi.com\r\n' +
        'Connection: keep-alive\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: false,
      joinDuplicateHeaders: undefined,
      path: '/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'serpapi.com',
      protocol: 'https:',
      _redirectable: [Writable],
      Symbol(shapeMode): false,
      Symbol(kCapture): false,
      Symbol(kBytesWritten): 0,
      Symbol(kNeedDrain): false,
      Symbol(corked): 0,
      Symbol(kChunkedBuffer): [],
      Symbol(kChunkedLength): 0,
      Symbol(kSocket): [TLSSocket],
      Symbol(kOutHeaders): [Object: null prototype],
      Symbol(errored): null,
      Symbol(kHighWaterMark): 65536,
      Symbol(kRejectNonStandardBodyWrites): false,
      Symbol(kUniqueHeaders): null
    },
    data: {
      error: '`departure_id` ("KUALA LUMPUR (UNDEFINED)") should either be an uppercase 3-letter code or start with "/m" or "/g".'
    }
  },
  status: 400
}
Gozayaan Crawl Blocked or Failed.
GEMINI_API_KEY not found. Skipping Gemini search.
All search layers failed to find results.
Layer 1 (SerpApi) Failed: AxiosError: Request failed with status code 400
    at settle (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:2049:12)
    at IncomingMessage.handleStreamEnd (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:3591:11)
    at IncomingMessage.emit (node:events:520:35)
    at endReadableNT (node:internal/streams/readable:1729:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
    at Axios.request (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:4871:41)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async SearchService.fetchFromSerpApi (/home/shuloana/skytier.shuloana.com/dist/services/SearchService.js:74:26)
    at async SearchService.searchFlights (/home/shuloana/skytier.shuloana.com/dist/services/SearchService.js:24:27)
    at async /home/shuloana/skytier.shuloana.com/dist/index.js:232:22 {
  isAxiosError: true,
  code: 'ERR_BAD_REQUEST',
  config: [Object: null prototype] {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false,
      legacyInterceptorReqResOrdering: true
    },
    adapter: [ 'xhr', 'http', 'fetch' ],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function], Blob: [class Blob] },
    validateStatus: [Function: validateStatus],
    headers: Object [AxiosHeaders] {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': undefined,
      'User-Agent': 'axios/1.16.0',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },
    params: {
      engine: 'google_flights',
      departure_id: 'KUALA LUMPUR (UNDEFINED)',
      arrival_id: 'DHAKA (UNDEFINED)',
      outbound_date: '2026-05-28',
      type: 2,
      travel_class: 1,
      currency: 'USD',
      hl: 'en',
      api_key: 'b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541'
    },
    method: 'get',
    url: 'https://serpapi.com/search.json',
    allowAbsoluteUrls: true,
    data: undefined
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      finish: [Function: requestOnFinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: true,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: true,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: false,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    strictContentLength: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: true,
    _header: 'GET /search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541 HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'User-Agent: axios/1.16.0\r\n' +
      'Accept-Encoding: gzip, compress, deflate, br\r\n' +
      'Host: serpapi.com\r\n' +
      'Connection: keep-alive\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      options: [Object: null prototype],
      defaultPort: 443,
      protocol: 'https:',
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype] {},
      freeSockets: [Object: null prototype],
      keepAliveMsecs: 1000,
      keepAlive: true,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      agentKeepAliveTimeoutBuffer: 1000,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      Symbol(shapeMode): false,
      Symbol(kCapture): false
    },
    socketPath: undefined,
    method: 'GET',
    maxHeaderSize: undefined,
    insecureHTTPParser: false,
    joinDuplicateHeaders: undefined,
    path: '/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
    _ended: true,
    res: IncomingMessage {
      _events: [Object],
      _readableState: [ReadableState],
      _maxListeners: undefined,
      socket: null,
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      joinDuplicateHeaders: undefined,
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 400,
      statusMessage: 'Bad Request',
      client: [TLSSocket],
      _consuming: true,
      _dumped: false,
      req: [Circular *1],
      _eventsCount: 4,
      responseUrl: 'https://serpapi.com/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      redirects: [],
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kHeaders): [Object],
      Symbol(kHeadersCount): 36,
      Symbol(kTrailers): null,
      Symbol(kTrailersCount): 0
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'serpapi.com',
    protocol: 'https:',
    _redirectable: Writable {
      _events: [Object],
      _writableState: [WritableState],
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 0,
      _requestBodyBuffers: [],
      _eventsCount: 4,
      _onNativeResponse: [Function (anonymous)],
      _headerFilter: /^(?:Authorization|Proxy-Authorization|Cookie)$/i,
      _currentRequest: [Circular *1],
      _currentUrl: 'https://serpapi.com/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      _timeout: null,
      Symbol(shapeMode): true,
      Symbol(kCapture): false
    },
    Symbol(shapeMode): false,
    Symbol(kCapture): false,
    Symbol(kBytesWritten): 0,
    Symbol(kNeedDrain): false,
    Symbol(corked): 0,
    Symbol(kChunkedBuffer): [],
    Symbol(kChunkedLength): 0,
    Symbol(kSocket): TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'serpapi.com',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 9,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'serpapi.com',
      _closeAfterHandlingError: false,
      _readableState: [ReadableState],
      _writableState: [WritableState],
      allowHalfOpen: false,
      _maxListeners: undefined,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      timeout: 5000,
      parser: null,
      _httpMessage: null,
      autoSelectFamilyAttemptedAddresses: [Array],
      Symbol(alpncallback): null,
      Symbol(res): [TLSWrap],
      Symbol(verified): true,
      Symbol(pendingSession): null,
      Symbol(async_id_symbol): -1,
      Symbol(kHandle): [TLSWrap],
      Symbol(lastWriteQueueSize): 0,
      Symbol(timeout): Timeout {
        _idleTimeout: 5000,
        _idlePrev: [TimersList],
        _idleNext: [TimersList],
        _idleStart: 30368822,
        _onTimeout: [Function: bound ],
        _timerArgs: undefined,
        _repeat: null,
        _destroyed: false,
        Symbol(refed): false,
        Symbol(kHasPrimitive): false,
        Symbol(asyncId): 228,
        Symbol(triggerId): 226,
        Symbol(kAsyncContextFrame): undefined
      },
      Symbol(kBuffer): null,
      Symbol(kBufferCb): null,
      Symbol(kBufferGen): null,
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kSetNoDelay): false,
      Symbol(kSetKeepAlive): true,
      Symbol(kSetKeepAliveInitialDelay): 1,
      Symbol(kBytesRead): 0,
      Symbol(kBytesWritten): 0,
      Symbol(connect-options): [Object],
      Symbol(axios.http.socketListener): true,
      Symbol(axios.http.currentReq): [Writable]
    },
    Symbol(kOutHeaders): [Object: null prototype] {
      accept: [Array],
      'user-agent': [Array],
      'accept-encoding': [Array],
      host: [Array]
    },
    Symbol(errored): null,
    Symbol(kHighWaterMark): 65536,
    Symbol(kRejectNonStandardBodyWrites): false,
    Symbol(kUniqueHeaders): null
  },
  response: {
    status: 400,
    statusText: 'Bad Request',
    headers: Object [AxiosHeaders] {
      date: 'Thu, 14 May 2026 10:13:43 GMT',
      'content-type': 'application/json; charset=utf-8',
      'transfer-encoding': 'chunked',
      connection: 'keep-alive',
      'x-frame-options': 'SAMEORIGIN',
      'x-xss-protection': '1; mode=block',
      'x-content-type-options': 'nosniff',
      'x-download-options': 'noopen',
      'x-permitted-cross-domain-policies': 'none',
      'referrer-policy': 'strict-origin-when-cross-origin',
      'cache-control': 'no-cache',
      'x-request-id': 'f2561f84-ddaf-473b-80d6-b0572ac6c303',
      'x-runtime': '0.008193',
      vary: 'accept-encoding',
      'cf-cache-status': 'MISS',
      server: 'cloudflare',
      'cf-ray': '9fb921c27aad2b72-LAX',
      'alt-svc': 'h3=":443"; ma=86400'
    },
    config: [Object: null prototype] {
      transitional: [Object],
      adapter: [Array],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      env: [Object],
      validateStatus: [Function: validateStatus],
      headers: [Object [AxiosHeaders]],
      params: [Object],
      method: 'get',
      url: 'https://serpapi.com/search.json',
      allowAbsoluteUrls: true,
      data: undefined
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: true,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: true,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: true,
      _header: 'GET /search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'User-Agent: axios/1.16.0\r\n' +
        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
        'Host: serpapi.com\r\n' +
        'Connection: keep-alive\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: false,
      joinDuplicateHeaders: undefined,
      path: '/search.json?engine=google_flights&departure_id=KUALA+LUMPUR+(UNDEFINED)&arrival_id=DHAKA+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'serpapi.com',
      protocol: 'https:',
      _redirectable: [Writable],
      Symbol(shapeMode): false,
      Symbol(kCapture): false,
      Symbol(kBytesWritten): 0,
      Symbol(kNeedDrain): false,
      Symbol(corked): 0,
      Symbol(kChunkedBuffer): [],
      Symbol(kChunkedLength): 0,
      Symbol(kSocket): [TLSSocket],
      Symbol(kOutHeaders): [Object: null prototype],
      Symbol(errored): null,
      Symbol(kHighWaterMark): 65536,
      Symbol(kRejectNonStandardBodyWrites): false,
      Symbol(kUniqueHeaders): null
    },
    data: {
      error: '`departure_id` ("KUALA LUMPUR (UNDEFINED)") should either be an uppercase 3-letter code or start with "/m" or "/g".'
    }
  },
  status: 400
}
Gozayaan Crawl Blocked or Failed.
GEMINI_API_KEY not found. Skipping Gemini search.
All search layers failed to find results.
Layer 1 (SerpApi) Failed: AxiosError: Request failed with status code 400
    at settle (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:2049:12)
    at IncomingMessage.handleStreamEnd (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:3591:11)
    at IncomingMessage.emit (node:events:520:35)
    at endReadableNT (node:internal/streams/readable:1729:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
    at Axios.request (/home/shuloana/nodevenv/skytier.shuloana.com/24/lib/node_modules/axios/dist/node/axios.cjs:4871:41)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async SearchService.fetchFromSerpApi (/home/shuloana/skytier.shuloana.com/dist/services/SearchService.js:74:26)
    at async SearchService.searchFlights (/home/shuloana/skytier.shuloana.com/dist/services/SearchService.js:24:27)
    at async /home/shuloana/skytier.shuloana.com/dist/index.js:232:22 {
  isAxiosError: true,
  code: 'ERR_BAD_REQUEST',
  config: [Object: null prototype] {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false,
      legacyInterceptorReqResOrdering: true
    },
    adapter: [ 'xhr', 'http', 'fetch' ],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function], Blob: [class Blob] },
    validateStatus: [Function: validateStatus],
    headers: Object [AxiosHeaders] {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': undefined,
      'User-Agent': 'axios/1.16.0',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },
    params: {
      engine: 'google_flights',
      departure_id: 'ABU DHABI (UNDEFINED)',
      arrival_id: 'ABU DHABI (UNDEFINED)',
      outbound_date: '2026-05-28',
      type: 2,
      travel_class: 1,
      currency: 'USD',
      hl: 'en',
      api_key: 'b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541'
    },
    method: 'get',
    url: 'https://serpapi.com/search.json',
    allowAbsoluteUrls: true,
    data: undefined
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      finish: [Function: requestOnFinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: true,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: true,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: false,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    strictContentLength: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: true,
    _header: 'GET /search.json?engine=google_flights&departure_id=ABU+DHABI+(UNDEFINED)&arrival_id=ABU+DHABI+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541 HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'User-Agent: axios/1.16.0\r\n' +
      'Accept-Encoding: gzip, compress, deflate, br\r\n' +
      'Host: serpapi.com\r\n' +
      'Connection: keep-alive\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      options: [Object: null prototype],
      defaultPort: 443,
      protocol: 'https:',
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype] {},
      freeSockets: [Object: null prototype],
      keepAliveMsecs: 1000,
      keepAlive: true,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      agentKeepAliveTimeoutBuffer: 1000,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      Symbol(shapeMode): false,
      Symbol(kCapture): false
    },
    socketPath: undefined,
    method: 'GET',
    maxHeaderSize: undefined,
    insecureHTTPParser: false,
    joinDuplicateHeaders: undefined,
    path: '/search.json?engine=google_flights&departure_id=ABU+DHABI+(UNDEFINED)&arrival_id=ABU+DHABI+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
    _ended: true,
    res: IncomingMessage {
      _events: [Object],
      _readableState: [ReadableState],
      _maxListeners: undefined,
      socket: null,
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      joinDuplicateHeaders: undefined,
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 400,
      statusMessage: 'Bad Request',
      client: [TLSSocket],
      _consuming: true,
      _dumped: false,
      req: [Circular *1],
      _eventsCount: 4,
      responseUrl: 'https://serpapi.com/search.json?engine=google_flights&departure_id=ABU+DHABI+(UNDEFINED)&arrival_id=ABU+DHABI+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      redirects: [],
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kHeaders): [Object],
      Symbol(kHeadersCount): 36,
      Symbol(kTrailers): null,
      Symbol(kTrailersCount): 0
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'serpapi.com',
    protocol: 'https:',
    _redirectable: Writable {
      _events: [Object],
      _writableState: [WritableState],
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 0,
      _requestBodyBuffers: [],
      _eventsCount: 4,
      _onNativeResponse: [Function (anonymous)],
      _headerFilter: /^(?:Authorization|Proxy-Authorization|Cookie)$/i,
      _currentRequest: [Circular *1],
      _currentUrl: 'https://serpapi.com/search.json?engine=google_flights&departure_id=ABU+DHABI+(UNDEFINED)&arrival_id=ABU+DHABI+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      _timeout: null,
      Symbol(shapeMode): true,
      Symbol(kCapture): false
    },
    Symbol(shapeMode): false,
    Symbol(kCapture): false,
    Symbol(kBytesWritten): 0,
    Symbol(kNeedDrain): false,
    Symbol(corked): 0,
    Symbol(kChunkedBuffer): [],
    Symbol(kChunkedLength): 0,
    Symbol(kSocket): TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'serpapi.com',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 9,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'serpapi.com',
      _closeAfterHandlingError: false,
      _readableState: [ReadableState],
      _writableState: [WritableState],
      allowHalfOpen: false,
      _maxListeners: undefined,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      timeout: 5000,
      parser: null,
      _httpMessage: null,
      autoSelectFamilyAttemptedAddresses: [Array],
      Symbol(alpncallback): null,
      Symbol(res): [TLSWrap],
      Symbol(verified): true,
      Symbol(pendingSession): null,
      Symbol(async_id_symbol): -1,
      Symbol(kHandle): [TLSWrap],
      Symbol(lastWriteQueueSize): 0,
      Symbol(timeout): Timeout {
        _idleTimeout: 5000,
        _idlePrev: [TimersList],
        _idleNext: [TimersList],
        _idleStart: 30401155,
        _onTimeout: [Function: bound ],
        _timerArgs: undefined,
        _repeat: null,
        _destroyed: false,
        Symbol(refed): false,
        Symbol(kHasPrimitive): false,
        Symbol(asyncId): 490,
        Symbol(triggerId): 488,
        Symbol(kAsyncContextFrame): undefined
      },
      Symbol(kBuffer): null,
      Symbol(kBufferCb): null,
      Symbol(kBufferGen): null,
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kSetNoDelay): false,
      Symbol(kSetKeepAlive): true,
      Symbol(kSetKeepAliveInitialDelay): 1,
      Symbol(kBytesRead): 0,
      Symbol(kBytesWritten): 0,
      Symbol(connect-options): [Object],
      Symbol(axios.http.socketListener): true,
      Symbol(axios.http.currentReq): [Writable]
    },
    Symbol(kOutHeaders): [Object: null prototype] {
      accept: [Array],
      'user-agent': [Array],
      'accept-encoding': [Array],
      host: [Array]
    },
    Symbol(errored): null,
    Symbol(kHighWaterMark): 65536,
    Symbol(kRejectNonStandardBodyWrites): false,
    Symbol(kUniqueHeaders): null
  },
  response: {
    status: 400,
    statusText: 'Bad Request',
    headers: Object [AxiosHeaders] {
      date: 'Thu, 14 May 2026 10:14:15 GMT',
      'content-type': 'application/json; charset=utf-8',
      'transfer-encoding': 'chunked',
      connection: 'keep-alive',
      'x-frame-options': 'SAMEORIGIN',
      'x-xss-protection': '1; mode=block',
      'x-content-type-options': 'nosniff',
      'x-download-options': 'noopen',
      'x-permitted-cross-domain-policies': 'none',
      'referrer-policy': 'strict-origin-when-cross-origin',
      'cache-control': 'no-cache',
      'x-request-id': '32316ea5-c2a2-48e9-95c6-eb3e132052d4',
      'x-runtime': '0.008537',
      vary: 'accept-encoding',
      'cf-cache-status': 'MISS',
      server: 'cloudflare',
      'cf-ray': '9fb9228c8c9283d5-LAX',
      'alt-svc': 'h3=":443"; ma=86400'
    },
    config: [Object: null prototype] {
      transitional: [Object],
      adapter: [Array],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      env: [Object],
      validateStatus: [Function: validateStatus],
      headers: [Object [AxiosHeaders]],
      params: [Object],
      method: 'get',
      url: 'https://serpapi.com/search.json',
      allowAbsoluteUrls: true,
      data: undefined
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: true,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: true,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: true,
      _header: 'GET /search.json?engine=google_flights&departure_id=ABU+DHABI+(UNDEFINED)&arrival_id=ABU+DHABI+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'User-Agent: axios/1.16.0\r\n' +
        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
        'Host: serpapi.com\r\n' +
        'Connection: keep-alive\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: false,
      joinDuplicateHeaders: undefined,
      path: '/search.json?engine=google_flights&departure_id=ABU+DHABI+(UNDEFINED)&arrival_id=ABU+DHABI+(UNDEFINED)&outbound_date=2026-05-28&type=2&travel_class=1&currency=USD&hl=en&api_key=b90117f841d76af313b857c202b977ae03598ffdc643274455eeb33d83677541',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'serpapi.com',
      protocol: 'https:',
      _redirectable: [Writable],
      Symbol(shapeMode): false,
      Symbol(kCapture): false,
      Symbol(kBytesWritten): 0,
      Symbol(kNeedDrain): false,
      Symbol(corked): 0,
      Symbol(kChunkedBuffer): [],
      Symbol(kChunkedLength): 0,
      Symbol(kSocket): [TLSSocket],
      Symbol(kOutHeaders): [Object: null prototype],
      Symbol(errored): null,
      Symbol(kHighWaterMark): 65536,
      Symbol(kRejectNonStandardBodyWrites): false,
      Symbol(kUniqueHeaders): null
    },
    data: {
      error: '`departure_id` ("ABU DHABI (UNDEFINED)") should either be an uppercase 3-letter code or start with "/m" or "/g".'
    }
  },
  status: 400
}
Gozayaan Crawl Blocked or Failed.
GEMINI_API_KEY not found. Skipping Gemini search.
All search layers failed to find results.
Gozayaan Crawl Blocked or Failed.
GEMINI_API_KEY not found. Skipping Gemini search.
All search layers failed to find results.
Gozayaan Crawl Blocked or Failed.
GEMINI_API_KEY not found. Skipping Gemini search.
All search layers failed to find results.
