ff-automationv2 2.2.17 → 2.2.20

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.
@@ -31,7 +31,7 @@ export class llmAction {
31
31
  async getLLMResponseText(system, user) {
32
32
  let attempt = 0;
33
33
  const MAX_RETRIES = 5;
34
- const startTime = new Date().getTime();
34
+ // const startTime = new Date().getTime()
35
35
  while (attempt < MAX_RETRIES) {
36
36
  attempt++;
37
37
  try {
@@ -49,7 +49,7 @@ export class llmAction {
49
49
  logger.error(`Invalid LLM output. Retrying (${attempt})`);
50
50
  continue;
51
51
  }
52
- logger.info("Time taken to get LLM response (Text):", Date.now() - startTime, "ms");
52
+ // logger.info("Time taken to get LLM response (Text):", Date.now() - startTime, "ms");
53
53
  return response;
54
54
  }
55
55
  catch (error) {
@@ -64,7 +64,7 @@ export class llmAction {
64
64
  async getLLMResponseWithVision(system, userPrompt) {
65
65
  let attempt = 0;
66
66
  const MAX_RETRIES = 5;
67
- const startTime = new Date().getTime();
67
+ // const startTime = new Date().getTime()
68
68
  while (attempt < MAX_RETRIES) {
69
69
  attempt++;
70
70
  try {
@@ -82,7 +82,7 @@ export class llmAction {
82
82
  logger.error(`Invalid Vision output. Retrying (${attempt})`);
83
83
  continue;
84
84
  }
85
- logger.info("Time taken to get LLM response (vision):", Date.now() - startTime, "ms");
85
+ // logger.info("Time taken to get LLM response (vision):", Date.now() - startTime, "ms");
86
86
  return response;
87
87
  }
88
88
  catch (error) {
@@ -1,4 +1,4 @@
1
- import { logger } from "../../utils/logger/logData.js";
1
+ // import { logger } from "../../utils/logger/logData.js";
2
2
  export class LLMResultParser {
3
3
  constructor() {
4
4
  this.inputTokens = 0;
@@ -19,11 +19,9 @@ export class LLMResultParser {
19
19
  }
20
20
  let parsedContent;
21
21
  try {
22
- // Try direct parse first
23
22
  parsedContent = JSON.parse(content);
24
23
  }
25
24
  catch {
26
- // If LLM added explanation text, extract JSON block
27
25
  const extracted = this.extractJsonObject(content);
28
26
  if (!extracted) {
29
27
  throw new Error("Could not extract valid JSON from LLM response");
@@ -31,13 +29,10 @@ export class LLMResultParser {
31
29
  parsedContent = extracted;
32
30
  }
33
31
  const usage = llmOutput?.usage ?? {};
34
- const inputTokens = Number(usage.prompt_tokens ?? 0);
35
- const outputTokens = Number(usage.completion_tokens ?? 0);
36
- const totalTokens = Number(usage.total_tokens ?? 0);
37
- this.inputTokens += inputTokens;
38
- this.outputTokens += outputTokens;
39
- this.totalTokens += totalTokens;
40
- logger.info(`Total tokens for this call is : ${usage.total_tokens}`);
32
+ this.inputTokens += Number(usage.prompt_tokens ?? 0);
33
+ this.outputTokens += Number(usage.completion_tokens ?? 0);
34
+ this.totalTokens += Number(usage.total_tokens ?? 0);
35
+ // logger.info(`Total tokens for this call is : ${usage.total_tokens}`);
41
36
  return { response: parsedContent };
42
37
  }
43
38
  catch (error) {
@@ -1,4 +1,4 @@
1
- import { Browser } from "../../core/types/browserType.js";
1
+ import { BrowserId } from "../../core/types/browserType.js";
2
2
  import { CloudConfig } from "../../core/interfaces/cloudConfigInterface.js";
3
3
  export declare class BrowserSession {
4
4
  private driver;
@@ -6,7 +6,7 @@ export declare class BrowserSession {
6
6
  private pageLoad;
7
7
  private cloudSessionInstances;
8
8
  private isCloud;
9
- constructor(browserName: Browser, isCloud: boolean | undefined, capabilities: Record<string, any> | undefined, pageLoad: number, CloudConfig: CloudConfig | undefined);
9
+ constructor(browserName: BrowserId, isCloud: boolean | undefined, capabilities: Record<string, any> | undefined, pageLoad: number, CloudConfig: CloudConfig | undefined);
10
10
  private openBrowser;
11
11
  open(): Promise<void>;
12
12
  close(): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { Browser } from "../../core/types/browserType";
1
+ import { BrowserName } from "../../core/types/browserType";
2
2
  export interface BrowserConfig {
3
- browserName: Browser;
3
+ browserName: BrowserName;
4
4
  }
@@ -18,7 +18,7 @@ export interface AutomationRequest {
18
18
  licenseId: string;
19
19
  userId: string;
20
20
  projectType: string;
21
- serverData: any;
21
+ env: string;
22
22
  userName: string;
23
23
  serverHost: string;
24
24
  browser: BrowserConfig;
@@ -33,4 +33,5 @@ export interface AutomationRequest {
33
33
  isCloud?: boolean;
34
34
  capabilities?: Record<string, any>;
35
35
  cloudConfig?: CloudConfig;
36
+ serverData?: any;
36
37
  }
@@ -20,7 +20,7 @@ export interface IPayload {
20
20
  licenseId: string;
21
21
  userId: string;
22
22
  projectType: string;
23
- tokensConsumed: number;
23
+ tokensConsumed?: number;
24
24
  errorInfo?: IErrorInfo;
25
25
  }
26
26
  export interface IFireFlinkApiService {
@@ -3,11 +3,12 @@ import { MobileSession } from "../../automation/mobileSession/initiateMobileSess
3
3
  import { ElementGetter } from "../../fireflinkData/fireflinkLocators/getListOfLocators.js";
4
4
  import { ScriptDataAppender } from "../../fireflinkData/fireflinkScript/scriptGenrationData.js";
5
5
  import { DEFAULT_PAGE_LOAD } from "../constants/defaultValues.js";
6
+ import { browsers } from "../../core/types/browserType.js";
6
7
  export class ExecutionContext {
7
8
  constructor(request) {
8
9
  this.request = request;
9
10
  this.executor = null;
10
- this.session = new BrowserSession(request.browser.browserName, request.isCloud, request.capabilities, DEFAULT_PAGE_LOAD, request.cloudConfig);
11
+ this.session = new BrowserSession(browsers[request.browser.browserName], request.isCloud, request.capabilities, DEFAULT_PAGE_LOAD, request.cloudConfig);
11
12
  this.locator = new ElementGetter();
12
13
  this.scriptAppender = new ScriptDataAppender();
13
14
  this.androidSession = new MobileSession(request.appiumPort, request.isCloud, request.capabilities, request.cloudConfig);
@@ -82,12 +82,13 @@ export class AutomationRunner {
82
82
  async run(request) {
83
83
  const usedElementNames = [];
84
84
  initLogger(request.sessionPath);
85
+ logger.info("User Given Step", request.userStory);
85
86
  if (request.isTerminate)
86
87
  return AutomationRunner.updateSessionTerminationInfo(request.testCaseId);
87
88
  AutomationRunner.sessionTerminationDetails[request.testCaseId] = request.isTerminate;
88
89
  const apiService = new FireFlinkApiService();
89
90
  const fireflinkServiceInstance = new fireflinkService(apiService, request.broker, request.sslConfig);
90
- const instanceDetails = await fireflinkServiceInstance.runGetInstancesDetails(request.projectId, request.token, request.serverData);
91
+ const instanceDetails = await fireflinkServiceInstance.runGetInstancesDetails(request.projectId, request.token, request.serverHost);
91
92
  const aiInfo = getAiInstanceInfo(instanceDetails.responseObject);
92
93
  const context = new ExecutionContext(request);
93
94
  const configProvider = new ServiceProviderBaseUrlProvider();
@@ -559,17 +560,19 @@ export class AutomationRunner {
559
560
  };
560
561
  try {
561
562
  await context.scriptAppender.waitForAllSteps();
562
- logger.info(context.scriptAppender.getData(), payload);
563
- this.KafkaPayload.topic = `Topic-FIREFLINK-api-requests-${request.serverHost}`;
563
+ logger.info(context.scriptAppender.getData());
564
+ this.KafkaPayload.topic = `Topic-FIREFLINK-api-requests-${request.env}`;
564
565
  this.KafkaPayload.message = {
565
566
  ...payload,
566
567
  stepData: context.scriptAppender.getData(),
567
568
  serverHost: request.serverHost
568
569
  };
569
- logger.info(this.KafkaPayload);
570
+ delete payload.tokensConsumed;
571
+ logger.info({ ...payload, topic: this.KafkaPayload.topic });
570
572
  await fireflinkServiceInstance.produceMessageToKafka(this.KafkaPayload);
571
573
  }
572
574
  catch (error) {
575
+ logger.error("Failed to produce message :", logger.getError(error));
573
576
  throw new Error("Failed to produce message :", { cause: error });
574
577
  }
575
578
  finally {
@@ -1 +1,8 @@
1
- export type Browser = 'chrome' | 'firefox' | 'edge' | 'safari';
1
+ export declare const browsers: {
2
+ readonly "Microsoft Edge": "edge";
3
+ readonly "Google Chrome": "chrome";
4
+ readonly "Mozilla Firefox": "firefox";
5
+ readonly Safari: "safari";
6
+ };
7
+ export type BrowserName = keyof typeof browsers;
8
+ export type BrowserId = typeof browsers[BrowserName];
@@ -1 +1,6 @@
1
- export {};
1
+ export const browsers = {
2
+ "Microsoft Edge": "edge",
3
+ "Google Chrome": "chrome",
4
+ "Mozilla Firefox": "firefox",
5
+ "Safari": "safari"
6
+ };
@@ -3,6 +3,6 @@ export declare class fireflinkService implements IFireflinkService {
3
3
  private apiService;
4
4
  private kafkaProducer;
5
5
  constructor(apiService: IFireFlinkApiService, broker: string[], sslConfig: any);
6
- runGetInstancesDetails(projectId: string, token: string, serverData: string): Promise<any>;
6
+ runGetInstancesDetails(projectId: string, token: string, serverHost: string): Promise<any>;
7
7
  produceMessageToKafka(kafkaArgs: IKafkaPayload): Promise<void>;
8
8
  }
@@ -5,7 +5,7 @@ export class fireflinkService {
5
5
  this.apiService = apiService;
6
6
  this.kafkaProducer = new KafkaProducerService(broker, sslConfig);
7
7
  }
8
- async runGetInstancesDetails(projectId, token, serverData) {
8
+ async runGetInstancesDetails(projectId, token, serverHost) {
9
9
  const headers = {
10
10
  Accept: "*/*",
11
11
  "Accept-Language": "en-US,en;q=0.9",
@@ -13,7 +13,7 @@ export class fireflinkService {
13
13
  projectId: projectId || "",
14
14
  Authorization: `Bearer ${token}`,
15
15
  };
16
- const url = `${serverData}/project/optimize/v3/ai-service-provider/selected-instance?projectId=${projectId}`;
16
+ const url = `${serverHost}/project/optimize/v3/ai-service-provider/selected-instance?projectId=${projectId}`;
17
17
  try {
18
18
  const finalResult = await this.apiService.getInstancesDetailsApi(headers, url);
19
19
  if (finalResult) {
@@ -30,6 +30,6 @@ export class fireflinkService {
30
30
  }
31
31
  }
32
32
  async produceMessageToKafka(kafkaArgs) {
33
- this.kafkaProducer.produceMessage(kafkaArgs);
33
+ await this.kafkaProducer.produceMessage(kafkaArgs);
34
34
  }
35
35
  }
@@ -1,7 +1,5 @@
1
1
  import { Kafka, logLevel } from "kafkajs";
2
2
  import { logger } from "../../utils/logger/logData.js";
3
- import dotenv from "dotenv";
4
- dotenv.config();
5
3
  export class KafkaProducerService {
6
4
  constructor(brokers, sslConfig) {
7
5
  this.kafka = new Kafka({
@@ -1,6 +1,14 @@
1
+ console.log(new Date().getTime());
1
2
  import { AutomationRunner } from "../index.js";
2
3
  import path from "path";
4
+ import fs from "fs";
5
+ const certPath = path.join("D:", "Bitbucket", "automationV2", "Certificates", "certificate.crt");
6
+ const ssl = {
7
+ cert: fs.readFileSync(certPath, "utf-8"),
8
+ rejectUnauthorized: false,
9
+ };
3
10
  const runner = new AutomationRunner();
11
+ console.log(new Date().getTime());
4
12
  runner.run({
5
13
  userStory: [
6
14
  ["Open browser"],
@@ -30,13 +38,8 @@ runner.run({
30
38
  pageName: "ai-Page"
31
39
  }
32
40
  },
33
- broker: ["test3.fireflink.com:9092"],
34
- sslConfig: {
35
- rejectUnauthorized: false,
36
- ca: ["D:\Bitbucket\automationV2\Certificates\certificate.crt"]
37
- },
38
41
  sessionPath: path.join("D:", "Bitbucket", "automationV2"),
39
- serverHost: "test3",
42
+ serverHost: "https://test3.fireflink.com",
40
43
  // topic: "",
41
44
  // serviceAccounts: "",
42
45
  webSocketId: "",
@@ -46,9 +49,11 @@ runner.run({
46
49
  userId: "USR26935",
47
50
  projectType: "Web",
48
51
  browser: {
49
- browserName: "chrome",
52
+ browserName: "Google Chrome",
50
53
  },
51
- serverData: "https://test3.fireflink.com",
54
+ broker: ["test3.fireflink.com"],
55
+ sslConfig: ssl,
56
+ env: "test3",
52
57
  version: "asdfg",
53
58
  type: "sdfg",
54
59
  scriptName: "url",
@@ -60,6 +65,7 @@ runner.run({
60
65
  appiumPort: 0,
61
66
  platformVersion: "",
62
67
  realDeviceId: "",
68
+ serverData: "",
63
69
  isCloud: false,
64
70
  cloudConfig: {
65
71
  accessKey: "yfAa_w199cJge2Gezsgb2Jnu7hKdqER1tExY5kKvgSvXfi1lRUelFsbTFI5pMq7zQuwwNXXnsLTkjKhvWcKDWsUoGLi9KjUV6gbUNDhqj0jWYFyW9h_0LIDEg5qXigwZdqzQqAvWwHin3gBhzGndeROtixv_VFhnseGSWRAHTajZzE-Zl0d8BP6gl0TEBUfoNgqBtAQVDLP6wAQzPfcyjjGFsdHkXWeHFkKmA78D7rKlnNuN2WgjIUlhYheDRDeqZ98Ig_PyS1GbUvjwJ73L38sr_cD4Y9lrKyWJV-m5RmtKhmkqRM8uk5gEfjzgwy30",
@@ -75,5 +81,5 @@ runner.run({
75
81
  browserVersion: "146"
76
82
  },
77
83
  isTerminate: false,
78
- token: "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRUFRfTnFuMkxxdDVmN09tOElWaW53dUJlR3ZVUUVBUkdxZkFuRHJxZU9NIn0.eyJleHAiOjE3NzUxMDczODIsImlhdCI6MTc3NTAyMDk4MiwianRpIjoib25ydHJvOmVkOGU3NzA4LTQ0OGUtNDdhZi05OTU0LWNjMWZkMzNlN2E1OCIsImlzcyI6Imh0dHA6Ly8xMDMuMTgyLjIxMC4yMjY6MzAxMDcvcmVhbG1zL0ZpcmVGbGluay10ZXN0MyIsImF1ZCI6InRhcmdldC1jbGllbnQiLCJzdWIiOiJmOmNhMzBmNDk3LTY1Y2YtNGU4Zi1iZGE3LTE0ZjM1NTNiYzZmNTpqYWlha2FzaEB5b3BtYWlsLmNvbSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImZsaW5rLXNlcnZpY2UiLCJzaWQiOiIxOGExYWFiYy0xYzA5LTQ4YTMtOGJhMi01OThhYTc2MDkyZjYiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImN1cnJlbnRMaWNlbnNlSWQiOiJMSUMzOTg1IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJjdXJyZW50UHJpdmlsZWdlIjoiU3VwZXIgQWRtaW4iLCJmdWxsTmFtZSI6ImphaSIsImFjdGl2YXRpb25TdGF0dXMiOiJBQ1RJVkUiLCJwcml2aWxlZ2UiOiJTdXBlciBBZG1pbiIsImxpY2Vuc2VOYW1lIjoiRmlyZUZsaW5rIC0gTElDMzk4NSIsInByZWZlcnJlZF91c2VybmFtZSI6ImphaSIsInVzZXJOYW1lIjoiamFpYWthc2hAeW9wbWFpbC5jb20iLCJiaWxsaW5nQ3ljbGUiOiJRdWFydGVybHkiLCJpZCI6IlVTUjI2OTM1IiwibGljZW5zZUlkIjoiTElDMzk4NSIsImVtYWlsIjoiamFpYWthc2hAeW9wbWFpbC5jb20ifQ.HxaDrSYbsIjz0u0_Kmg3rEy4y4-tFuDWhbWYHllWUQnXD9-yQQEx1u2dE_nzc-wRHkwtKf3nieO1HjQ-rmm0wy7P9vCpSTQg8Z8EY7G1GpxObHdLgqoRe1JvXbMXJu9LSWI80Kt0EgdTEdN93MwfhRTyHNEkdr4X8q0bvbkkYNu9r5PZs-NZnsQaAeHygsx85CSuYfXq43_LgMC6qPVpRS0y0V36hzEJVylwSg2z3xP9znAWHohL_F5gQ9Er8r1t3xUgy6_ob-0t_q7Bha5iaYOq0vl2P51DkT87C7NIzm5TjiiSUWZwIdLBKUKXSWNUG1RX89mrTZyuYyocO1yNng"
84
+ token: "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRUFRfTnFuMkxxdDVmN09tOElWaW53dUJlR3ZVUUVBUkdxZkFuRHJxZU9NIn0.eyJleHAiOjE3NzUyODczODQsImlhdCI6MTc3NTIwMDk4NCwianRpIjoib25ydHJvOjYzOTYzMjJkLTNlZWYtNDg1NC04NmUzLTdlNzBhNjY1ZjM0MSIsImlzcyI6Imh0dHA6Ly8xMDMuMTgyLjIxMC4yMjY6MzAxMDcvcmVhbG1zL0ZpcmVGbGluay10ZXN0MyIsImF1ZCI6InRhcmdldC1jbGllbnQiLCJzdWIiOiJmOmNhMzBmNDk3LTY1Y2YtNGU4Zi1iZGE3LTE0ZjM1NTNiYzZmNTpqYWlha2FzaEB5b3BtYWlsLmNvbSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImZsaW5rLXNlcnZpY2UiLCJzaWQiOiIxMDkzNTU4Yi0xMDY4LTQxM2MtYjhlNi0wMjE3NzQwODBjMjgiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImN1cnJlbnRMaWNlbnNlSWQiOiJMSUMzOTg1IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJjdXJyZW50UHJpdmlsZWdlIjoiU3VwZXIgQWRtaW4iLCJmdWxsTmFtZSI6ImphaSIsImFjdGl2YXRpb25TdGF0dXMiOiJBQ1RJVkUiLCJwcml2aWxlZ2UiOiJTdXBlciBBZG1pbiIsImxpY2Vuc2VOYW1lIjoiRmlyZUZsaW5rIC0gTElDMzk4NSIsInByZWZlcnJlZF91c2VybmFtZSI6ImphaSIsInVzZXJOYW1lIjoiamFpYWthc2hAeW9wbWFpbC5jb20iLCJiaWxsaW5nQ3ljbGUiOiJRdWFydGVybHkiLCJpZCI6IlVTUjI2OTM1IiwibGljZW5zZUlkIjoiTElDMzk4NSIsImVtYWlsIjoiamFpYWthc2hAeW9wbWFpbC5jb20ifQ.NOa6gz1thU8Qh04dvJMwUvGo3FZVc_ZAMbHL0j0pg_wOkmshcd8LSua0RoFYbBw5LR2RjJhVBkiZ2zD6s28EqdUdMJwjFfx4QF9ol8ut1T6-ohI_-xtCy1wdzx-dJ7svVSc7zptEcYEMEnkGEPXhTIjB0iql-Ry5MM2CkjOQP5yPdO3W8Lua2kSQmXWwWfZJSSnem8foN4oG7uJ_4T8Yh8V69iI2Trsbdp5k8CXUxs42vI73KyX0qwzcL-B-X6o1DnOaNS6T6RI7t9kGq6WXW0Iu29EVdqQ3jVnkPbOFfvSdRYRCb9Uw4qZL2qUQK3V31Jqw6Rd-r1IjDmBcXogoTg"
79
85
  });
@@ -1,5 +1,5 @@
1
- import { Browser } from "../../core/types/browserType";
2
- export declare function getCapabilities(browserName: Browser): {
1
+ import { BrowserId } from "../../core/types/browserType.js";
2
+ export declare function getCapabilities(browserName: BrowserId): {
3
3
  'goog:chromeOptions'?: {
4
4
  args: string[];
5
5
  } | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ff-automationv2",
3
- "version": "2.2.17",
3
+ "version": "2.2.20",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "This lib is used to automate the manual testcase",