• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

yext / search-core / 13399991792

18 Feb 2025 09:03PM UTC coverage: 88.937% (-0.3%) from 89.252%
13399991792

Pull #293

github

web-flow
Merge 65757c63b into ad7ea9357
Pull Request #293: Version 2.6.0

174 of 203 branches covered (85.71%)

Branch coverage included in aggregate %.

21 of 23 new or added lines in 5 files covered. (91.3%)

236 of 258 relevant lines covered (91.47%)

9.53 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.62
/src/infra/GenerativeDirectAnswerServiceImpl.ts
1
import { defaultApiVersion } from '../provideEndpoints';
2
import { QueryParams } from '../models/http/params';
3
import { HttpService } from '../services/HttpService';
4
import { SearchConfigWithDefaulting } from '../models/core/SearchConfig';
5
import { ApiResponseValidator } from '../validation/ApiResponseValidator';
6
import { ApiResponse } from '../models/searchapi/ApiResponse';
7
import { getClientSdk } from '../utils/getClientSdk';
8
import { GenerativeDirectAnswerRequest } from '../models/generativedirectanswer/GenerativeDirectAnswerRequest';
9
import { GenerativeDirectAnswerResponse } from '../models/generativedirectanswer/GenerativeDirectAnswerResponse';
10
import { GenerativeDirectAnswerService } from '../services/GenerativeDirectAnswerService';
11
import { createGenerativeDirectAnswerResponse } from '../transformers/generativedirectanswerservice/createGenerativeDirectAnswerResponse';
12

13
/**
14
 * Represents the query params which may be sent in a generative direct answer.
15
 *
16
 * @internal
17
 */
18
interface GenerativeDirectAnswerQueryParams extends QueryParams {
19
  experienceKey: string,
20
  api_key?: string,
21
  v: number,
22
  version?: string | number,
23
  locale?: string
24
}
25

26
export class GenerativeDirectAnswerServiceImpl implements GenerativeDirectAnswerService {
27
  private config: SearchConfigWithDefaulting;
28
  private httpService: HttpService;
29
  private apiResponseValidator: ApiResponseValidator;
30
  private endpoint: string;
31

32
  constructor(
33
    config: SearchConfigWithDefaulting,
34
    httpService: HttpService,
35
    apiResponseValidator: ApiResponseValidator
36
  ) {
37
    this.config = config;
4✔
38
    this.httpService = httpService;
4✔
39
    this.apiResponseValidator = apiResponseValidator;
4✔
40
    this.endpoint = this.config.endpoints.generativeDirectAnswer;
4✔
41
  }
42

43
  async generateAnswer(request: GenerativeDirectAnswerRequest): Promise<GenerativeDirectAnswerResponse> {
44
    const queryParams: GenerativeDirectAnswerQueryParams = {
4✔
45
      experienceKey: this.config.experienceKey,
46
      ...('apiKey' in this.config && { api_key: this.config.apiKey }),
8✔
47
      v: defaultApiVersion,
48
      version: this.config.experienceVersion,
49
      locale: this.config.locale,
50
      visitorId: this.config.visitor?.id,
51
      visitorIdMethod: this.config.visitor?.idMethod,
52
      ...this.config?.additionalQueryParams
53
    };
54
    let results: NonNullable<unknown> = {};
4✔
55
    if (request.results.length === 1) {
4✔
56
      results = request.results[0];
3✔
57
    } else if (request.results.length > 1) {
1!
58
      results = { verticals: request.results };
1✔
59
    }
60
    const body = {
4✔
61
      searchId: request.searchId,
62
      searchTerm: request.searchTerm,
63
      results: results
64
    };
65
    const response = 'token' in this.config
4!
66
      ? await this.httpService.post<ApiResponse>(
67
        this.endpoint,
68
        queryParams,
69
        body,
70
        getClientSdk(request.additionalHttpHeaders),
71
        this.config.token
72
      )
73
      : await this.httpService.post<ApiResponse>(
74
        this.endpoint,
75
        queryParams,
76
        body,
77
        getClientSdk(request.additionalHttpHeaders)
78
      );
79

80
    const validationResult = this.apiResponseValidator.validate(response);
4✔
81
    if (validationResult instanceof Error) {
4!
NEW
82
      return Promise.reject(validationResult);
×
83
    }
84

85
    return createGenerativeDirectAnswerResponse(response);
4✔
86
  }
87
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc