@aiqa/sdk 1.0.0-develop.3 → 1.0.0-develop.5

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.
@@ -15,12 +15,22 @@ declare enum Methods {
15
15
  STOP_RECORDING = "STOP_RECORDING",
16
16
  IS_RECORDING = "IS_RECORDING",
17
17
  ADD_FACT = "ADD_FACT",
18
- SET_CONVERSATION_PRODUCT = "SET_CONVERSATION_PRODUCT"
18
+ SET_CONVERSATION_PRODUCT = "SET_CONVERSATION_PRODUCT",
19
+ SET_CONVERSATION_LANGUAGE = "SET_CONVERSATION_LANGUAGE"
19
20
  }
20
21
  type SetConversationProductResult = {
21
22
  success: boolean;
22
23
  product: string;
23
24
  };
25
+ type SetConversationLanguageResult = {
26
+ success: boolean;
27
+ language: string;
28
+ };
29
+ declare enum ConversationLanguage {
30
+ EN = "en",
31
+ ES = "es",
32
+ FR = "fr"
33
+ }
24
34
  type SdkEvent = Methods | "connect" | "disconnect" | "close" | "error" | "reconnect_attempt" | "reconnect_error" | "reconnect_failed" | "authenticated" | "app_version";
25
35
  declare enum FactAnswerFormatType {
26
36
  string = "STRING",
@@ -79,6 +89,7 @@ declare abstract class IAiqaSdk {
79
89
  abstract addFact(fact: ApplicationFactInput): Promise<AddFactResult>;
80
90
  abstract getFacts(): Promise<ApplicationFact[]>;
81
91
  abstract setConversationProduct(product: string): Promise<SetConversationProductResult>;
92
+ abstract setConversationLanguage(language: ConversationLanguage): Promise<SetConversationLanguageResult>;
82
93
  }
83
94
 
84
95
  declare class AiQaSdk implements IAiqaSdk {
@@ -99,14 +110,14 @@ declare class AiQaSdk implements IAiqaSdk {
99
110
  getFacts(): Promise<ApplicationFact[]>;
100
111
  addFact(fact: ApplicationFactInput): Promise<AddFactResult>;
101
112
  setConversationProduct(product: string): Promise<SetConversationProductResult>;
113
+ setConversationLanguage(language: ConversationLanguage): Promise<SetConversationLanguageResult>;
102
114
  authenticate(): Promise<void>;
103
115
  startRecording(): Promise<boolean>;
104
116
  stopRecording(): Promise<boolean>;
105
117
  isRecordingNow(): Promise<boolean>;
106
- private compareVersions;
107
118
  private emitInternal;
108
119
  private createRequestId;
109
120
  private isManagerEvent;
110
121
  }
111
122
 
112
- export { type AddFactResult, AiQaSdk, type Application, type ApplicationFact, type ApplicationFactAnswerChoice, type ApplicationFactAnswerFormat, type ApplicationFactInput, FactAnswerFormatType, IAiqaSdk, Methods, type QuestionStatus, type SdkError, type SdkEvent, type SetConversationProductResult, type VerificationStatus };
123
+ export { type AddFactResult, AiQaSdk, type Application, type ApplicationFact, type ApplicationFactAnswerChoice, type ApplicationFactAnswerFormat, type ApplicationFactInput, ConversationLanguage, FactAnswerFormatType, IAiqaSdk, Methods, type QuestionStatus, type SdkError, type SdkEvent, type SetConversationLanguageResult, type SetConversationProductResult, type VerificationStatus };
package/dist/node/node.js CHANGED
@@ -10,8 +10,15 @@ var Methods = /* @__PURE__ */ ((Methods2) => {
10
10
  Methods2["IS_RECORDING"] = "IS_RECORDING";
11
11
  Methods2["ADD_FACT"] = "ADD_FACT";
12
12
  Methods2["SET_CONVERSATION_PRODUCT"] = "SET_CONVERSATION_PRODUCT";
13
+ Methods2["SET_CONVERSATION_LANGUAGE"] = "SET_CONVERSATION_LANGUAGE";
13
14
  return Methods2;
14
15
  })(Methods || {});
16
+ var ConversationLanguage = /* @__PURE__ */ ((ConversationLanguage3) => {
17
+ ConversationLanguage3["EN"] = "en";
18
+ ConversationLanguage3["ES"] = "es";
19
+ ConversationLanguage3["FR"] = "fr";
20
+ return ConversationLanguage3;
21
+ })(ConversationLanguage || {});
15
22
  var FactAnswerFormatType = /* @__PURE__ */ ((FactAnswerFormatType2) => {
16
23
  FactAnswerFormatType2["string"] = "STRING";
17
24
  FactAnswerFormatType2["number"] = "NUMBER";
@@ -27,10 +34,32 @@ var FactAnswerFormatType = /* @__PURE__ */ ((FactAnswerFormatType2) => {
27
34
  var IAiqaSdk = class {
28
35
  };
29
36
 
37
+ // src/utils/compareVersions.ts
38
+ var splitVersion = (value) => {
39
+ const [core] = value.split("-", 2);
40
+ return core.split(".").map((part) => Number(part));
41
+ };
42
+ var compareVersions = (left, right) => {
43
+ const leftParts = splitVersion(left);
44
+ const rightParts = splitVersion(right);
45
+ const maxLength = Math.max(leftParts.length, rightParts.length);
46
+ for (let i = 0; i < maxLength; i += 1) {
47
+ const l = leftParts[i] ?? 0;
48
+ const r = rightParts[i] ?? 0;
49
+ if (l > r) {
50
+ return 1;
51
+ }
52
+ if (l < r) {
53
+ return -1;
54
+ }
55
+ }
56
+ return 0;
57
+ };
58
+
30
59
  // package.json
31
60
  var package_default = {
32
61
  name: "@aiqa/sdk",
33
- version: "1.0.0-develop.2",
62
+ version: "1.0.0-develop.4",
34
63
  main: "dist/node/node.js",
35
64
  module: "dist/node/node.js",
36
65
  types: "dist/node/node.d.ts",
@@ -185,8 +214,8 @@ var AiQaSdk = class {
185
214
  const minVersion = versionRange?.min;
186
215
  const maxVersion = versionRange?.max;
187
216
  if (minVersion || maxVersion) {
188
- const tooLow = minVersion ? this.compareVersions(SDK_VERSION, minVersion) < 0 : false;
189
- const tooHigh = maxVersion ? this.compareVersions(SDK_VERSION, maxVersion) > 0 : false;
217
+ const tooLow = minVersion ? compareVersions(SDK_VERSION, minVersion) < 0 : false;
218
+ const tooHigh = maxVersion ? compareVersions(SDK_VERSION, maxVersion) > 0 : false;
190
219
  if (tooLow || tooHigh) {
191
220
  const error = new Error(
192
221
  `SDK version ${SDK_VERSION} is not supported. Supported range: ${minVersion || "-"} to ${maxVersion || "-"}.`
@@ -265,6 +294,12 @@ var AiQaSdk = class {
265
294
  });
266
295
  return result && result.data !== void 0 ? result.data : result;
267
296
  }
297
+ async setConversationLanguage(language) {
298
+ const result = await this.sendMessage("SET_CONVERSATION_LANGUAGE" /* SET_CONVERSATION_LANGUAGE */, {
299
+ language
300
+ });
301
+ return result && result.data !== void 0 ? result.data : result;
302
+ }
268
303
  async authenticate() {
269
304
  try {
270
305
  const result = await this.sendMessage("AUTHENTICATE" /* AUTHENTICATE */, {
@@ -290,22 +325,6 @@ var AiQaSdk = class {
290
325
  const result = await this.sendMessage("IS_RECORDING" /* IS_RECORDING */);
291
326
  return result && result.data !== void 0 ? result.data : result;
292
327
  }
293
- compareVersions(left, right) {
294
- const leftParts = left.split(".").map((part) => Number(part));
295
- const rightParts = right.split(".").map((part) => Number(part));
296
- const maxLength = Math.max(leftParts.length, rightParts.length);
297
- for (let i = 0; i < maxLength; i += 1) {
298
- const l = leftParts[i] ?? 0;
299
- const r = rightParts[i] ?? 0;
300
- if (l > r) {
301
- return 1;
302
- }
303
- if (l < r) {
304
- return -1;
305
- }
306
- }
307
- return 0;
308
- }
309
328
  emitInternal(name, ...args) {
310
329
  const handlers = this.internalListeners.get(name);
311
330
  if (!handlers) {
@@ -323,6 +342,7 @@ var AiQaSdk = class {
323
342
  var shared_default = AiQaSdk;
324
343
  export {
325
344
  shared_default as AiQaSdk,
345
+ ConversationLanguage,
326
346
  FactAnswerFormatType,
327
347
  IAiqaSdk,
328
348
  Methods
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shared.ts","../../src/types.ts","../../package.json"],"sourcesContent":["import { io, Socket } from \"socket.io-client\";\nimport {\n Methods,\n Application,\n ApplicationFact,\n ApplicationFactInput,\n SdkEvent,\n IAiqaSdk,\n AddFactResult,\n SetConversationProductResult,\n} from \"./types.js\";\n// @ts-ignore - compiled builds resolve this at build time\nimport pkg from \"../package.json\";\n\nconst SDK_VERSION = (pkg as { version?: string }).version ?? \"0.0.1\";\nconst DEFAULT_URL = \"ws://localhost:3025/ws\";\nconst DEFAULT_TIMEOUT_MS = 60000; // 1 minute\n\nclass AiQaSdk implements IAiqaSdk {\n socket: Socket | null = null;\n url: string;\n applicationId: string;\n applicationSecretKey: string;\n cachedApplication?: Application;\n internalListeners: Map<SdkEvent, Set<(...args: any[]) => void>>;\n internalEvents: Set<SdkEvent>;\n\n constructor(applicationId: string, applicationSecret: string, url?: string) {\n this.url = url ?? DEFAULT_URL;\n this.internalListeners = new Map();\n this.internalEvents = new Set([\"authenticated\"]);\n\n if (applicationId && applicationSecret) {\n this.applicationId = applicationId;\n this.applicationSecretKey = applicationSecret;\n } else {\n throw new Error(\"Application id and application secret are required\");\n }\n }\n\n on(name: SdkEvent, callback: (...args: any[]) => any) {\n if (this.internalEvents.has(name)) {\n if (!this.internalListeners.has(name)) {\n this.internalListeners.set(name, new Set());\n }\n this.internalListeners.get(name)!.add(callback);\n return;\n }\n\n if (!this.socket) {\n throw new Error(\"Not connected\");\n }\n\n if (this.isManagerEvent(name)) {\n this.socket.io.on(name, callback);\n } else {\n this.socket.on(name, callback);\n }\n }\n\n off(name: SdkEvent, callback?: (...args: any[]) => any) {\n if (this.internalEvents.has(name)) {\n if (!callback) {\n this.internalListeners.delete(name);\n return;\n }\n const handlers = this.internalListeners.get(name);\n if (handlers) {\n handlers.delete(callback);\n if (handlers.size === 0) {\n this.internalListeners.delete(name);\n }\n }\n return;\n }\n\n if (!this.socket) {\n throw new Error(\"Not connected\");\n }\n\n if (this.isManagerEvent(name)) {\n this.socket.io.off(name, callback);\n } else {\n this.socket.off(name, callback);\n }\n }\n\n connect() {\n if (!this.url) {\n return;\n }\n\n const url = new URL(this.url);\n\n const socketOptions: any = {\n reconnectionDelayMax: 10000,\n path: url.pathname,\n };\n\n this.socket = io(url.origin, socketOptions);\n\n this.socket.on(\"connect\", () => {\n this.authenticate();\n });\n\n this.socket.on(\"app_version\", (payload: any) => {\n let versionRange = payload;\n if (typeof payload === \"string\") {\n try {\n versionRange = JSON.parse(payload);\n } catch (error) {\n versionRange = payload;\n }\n }\n\n const minVersion = versionRange?.min;\n const maxVersion = versionRange?.max;\n\n if (minVersion || maxVersion) {\n const tooLow = minVersion\n ? this.compareVersions(SDK_VERSION, minVersion) < 0\n : false;\n const tooHigh = maxVersion\n ? this.compareVersions(SDK_VERSION, maxVersion) > 0\n : false;\n if (tooLow || tooHigh) {\n const error = new Error(\n `SDK version ${SDK_VERSION} is not supported. Supported range: ${minVersion || \"-\"} to ${maxVersion || \"-\"}.`,\n );\n this.socket!.disconnect();\n this.socket!.emit(\"error\", error);\n }\n }\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.disconnect();\n }\n }\n\n sendMessage(method: Methods, data?: any): Promise<any> {\n return new Promise((resolve, reject) => {\n if (!this.socket || !this.socket.connected) {\n reject(new Error(\"Socket is not connected\"));\n return;\n }\n\n const requestId = this.createRequestId();\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const handler = (payload: any) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n this.socket!.off(requestId, handler);\n let parsed = payload;\n if (typeof payload === \"string\") {\n try {\n parsed = JSON.parse(payload);\n } catch (error) {\n parsed = payload;\n }\n }\n\n if (parsed && parsed.error !== undefined) {\n reject(parsed.error);\n return;\n }\n\n resolve(parsed && parsed.data !== undefined ? parsed.data : parsed);\n };\n\n this.socket.on(requestId, handler);\n\n const payload =\n data && typeof data === \"object\"\n ? { ...data, requestId }\n : { requestId, data };\n this.socket.emit(method, JSON.stringify(payload));\n\n timeout = setTimeout(() => {\n this.socket!.off(requestId, handler);\n reject(new Error(`Request timed out for ${method}`));\n }, DEFAULT_TIMEOUT_MS);\n });\n }\n\n async getApplication(): Promise<Application> {\n if (this.cachedApplication) {\n return this.cachedApplication;\n }\n throw new Error(\n \"Application is not available yet. Wait for authentication to complete.\",\n );\n }\n\n async getFacts(): Promise<ApplicationFact[]> {\n const result = await this.sendMessage(Methods.GET_FACTS);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async addFact(fact: ApplicationFactInput): Promise<AddFactResult> {\n const payload = {\n ...fact,\n critical: fact.critical ?? false,\n is_skipped: fact.is_skipped ?? false,\n };\n const result = await this.sendMessage(Methods.ADD_FACT, payload);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async setConversationProduct(\n product: string,\n ): Promise<SetConversationProductResult> {\n const result = await this.sendMessage(Methods.SET_CONVERSATION_PRODUCT, {\n product,\n });\n return result && result.data !== undefined ? result.data : result;\n }\n\n async authenticate(): Promise<void> {\n try {\n const result = await this.sendMessage(Methods.AUTHENTICATE, {\n applicationId: this.applicationId,\n applicationSecretKey: this.applicationSecretKey,\n });\n\n const application =\n result && result.data !== undefined ? result.data : result;\n\n this.cachedApplication = application;\n\n this.emitInternal(\"authenticated\", application);\n } catch (error) {\n this.socket!.emit(\"error\", error);\n }\n }\n\n async startRecording(): Promise<boolean> {\n const result = await this.sendMessage(Methods.START_RECORDING);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async stopRecording(): Promise<boolean> {\n const result = await this.sendMessage(Methods.STOP_RECORDING);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async isRecordingNow(): Promise<boolean> {\n // @TODO: track it from the server, should be sent on successfull connect\n const result = await this.sendMessage(Methods.IS_RECORDING);\n return result && result.data !== undefined ? result.data : result;\n }\n\n private compareVersions(left: string, right: string): number {\n const leftParts = left.split(\".\").map((part) => Number(part));\n const rightParts = right.split(\".\").map((part) => Number(part));\n const maxLength = Math.max(leftParts.length, rightParts.length);\n\n for (let i = 0; i < maxLength; i += 1) {\n const l = leftParts[i] ?? 0;\n const r = rightParts[i] ?? 0;\n if (l > r) {\n return 1;\n }\n if (l < r) {\n return -1;\n }\n }\n\n return 0;\n }\n\n private emitInternal(name: SdkEvent, ...args: any[]) {\n const handlers = this.internalListeners.get(name);\n if (!handlers) {\n return;\n }\n handlers.forEach((handler) => handler(...args));\n }\n\n private createRequestId() {\n return `req_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n }\n\n private isManagerEvent(name: SdkEvent) {\n return (\n name === \"reconnect_attempt\" ||\n name === \"reconnect_error\" ||\n name === \"reconnect_failed\" ||\n name === \"error\"\n );\n }\n}\n\nexport default AiQaSdk;\n","export type Application = {\n application_id: string;\n client_name: string;\n client_phone_number: string;\n agent_id: string;\n agent_first_name: string;\n agent_last_name: string;\n};\n\nexport enum Methods {\n AUTHENTICATE = \"AUTHENTICATE\",\n GET_FACTS = \"GET_FACTS\",\n START_RECORDING = \"START_RECORDING\",\n STOP_RECORDING = \"STOP_RECORDING\",\n IS_RECORDING = \"IS_RECORDING\",\n ADD_FACT = \"ADD_FACT\",\n SET_CONVERSATION_PRODUCT = \"SET_CONVERSATION_PRODUCT\",\n}\n\nexport type SetConversationProductResult = {\n success: boolean;\n product: string;\n};\n\nexport type SdkEvent =\n | Methods\n | \"connect\"\n | \"disconnect\"\n | \"close\"\n | \"error\"\n | \"reconnect_attempt\"\n | \"reconnect_error\"\n | \"reconnect_failed\"\n | \"authenticated\"\n | \"app_version\";\n\nexport enum FactAnswerFormatType {\n string = \"STRING\",\n number = \"NUMBER\",\n integer = \"INT\",\n float = \"FLOAT\",\n bool = \"BOOL\",\n list = \"LIST\",\n strict = \"STRICT\",\n single_choice = \"SINGLE_CHOICE\",\n multiple_choices = \"MULTIPLE_CHOICES\",\n}\n\nexport type ApplicationFactAnswerChoice = {\n key: string;\n text: string;\n};\n\nexport type ApplicationFactAnswerFormat = {\n type: FactAnswerFormatType;\n choices?: ApplicationFactAnswerChoice[];\n};\n\nexport type ApplicationFactInput = {\n id: string;\n question: string;\n expected_answer: any;\n answer_format: ApplicationFactAnswerFormat;\n\n category_id?: string;\n category_name?: string;\n language?: string;\n\n critical?: boolean;\n is_skipped?: boolean;\n};\n\nexport type QuestionStatus = \"searching\" | \"asked\" | \"not_asked\";\n\nexport type VerificationStatus = \"processing\" | \"matched\" | \"unmatched\";\n\nexport type ApplicationFact = ApplicationFactInput & {\n ai_answer?: any;\n question_status: QuestionStatus;\n verification_status: VerificationStatus;\n};\n\nexport interface AddFactResult {\n agent_answer?: string;\n ai_answer?: string;\n is_valid_answer: boolean;\n question_asked?: boolean;\n}\n\nexport type SdkError = {\n code:\n | \"INVALID_CONFIG\"\n | \"CONNECTION_ERROR\"\n | \"TIMEOUT\"\n | \"SERVER_ERROR\"\n | \"UNEXPECTED_RESPONSE\";\n message: string;\n details?: any;\n};\n\nexport abstract class IAiqaSdk {\n abstract connect(): void;\n abstract disconnect(): void;\n\n abstract on(eventName: string, callback: (...args: any[]) => any): void;\n abstract off(eventName: string): void;\n\n abstract getApplication(): Promise<Application>;\n abstract addFact(fact: ApplicationFactInput): Promise<AddFactResult>;\n abstract getFacts(): Promise<ApplicationFact[]>;\n abstract setConversationProduct(\n product: string,\n ): Promise<SetConversationProductResult>;\n}\n","{\n \"name\": \"@aiqa/sdk\",\n \"version\": \"1.0.0-develop.2\",\n \"main\": \"dist/node/node.js\",\n \"module\": \"dist/node/node.js\",\n \"types\": \"dist/node/node.d.ts\",\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"build\": \"tsup && node -e \\\"const fs=require('fs');['dist/node/node','dist/browser/browser'].forEach(f=>{const mts=f+'.d.mts';const ts=f+'.d.ts';if(fs.existsSync(mts)){fs.renameSync(mts,ts);}});\\\"\",\n \"commitlint\": \"commitlint\",\n \"dev:node\": \"tsx src/node.ts\",\n \"lint\": \"tsc --noEmit -p tsconfig.json\",\n \"format\": \"prettier --check \\\"{src,tests}/**/*.{ts,tsx,js,json,md,yml,yaml}\\\" \\\"*.{js,json,md,yml,yaml,ts}\\\"\",\n \"release\": \"semantic-release\",\n \"start:node\": \"node dist/node/node.js\",\n \"serve:browser\": \"serve .\",\n \"test\": \"jest\",\n \"prepare\": \"husky\"\n },\n \"exports\": {\n \".\": {\n \"node\": {\n \"import\": \"./dist/node/node.js\",\n \"types\": \"./dist/node/node.d.ts\"\n },\n \"browser\": {\n \"import\": \"./dist/browser/browser.js\",\n \"types\": \"./dist/browser/browser.d.ts\"\n },\n \"default\": \"./dist/node/node.js\"\n }\n },\n \"private\": false,\n \"license\": \"MIT\",\n \"author\": \"AIQA\",\n \"description\": \"TypeScript/JavaScript SDK for interacting with the AIQA.\",\n \"keywords\": [\n \"aiqa\",\n \"sdk\"\n ],\n \"files\": [\n \"dist\"\n ],\n \"devDependencies\": {\n \"@commitlint/cli\": \"^20.4.4\",\n \"@commitlint/config-conventional\": \"^20.4.4\",\n \"@jest/globals\": \"^29.7.0\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/npm\": \"^12.0.2\",\n \"@semantic-release/release-notes-generator\": \"^14.1.0\",\n \"@types/node\": \"^22.0.0\",\n \"conventional-changelog-conventionalcommits\": \"^9.3.0\",\n \"esbuild\": \"^0.23.0\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^29.7.0\",\n \"prettier\": \"^3.8.1\",\n \"semantic-release\": \"^24.2.9\",\n \"serve\": \"^14.2.3\",\n \"socket.io\": \"^4.7.5\",\n \"ts-jest\": \"^29.2.3\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.0.0\",\n \"typescript\": \"^5.7.0\"\n },\n \"dependencies\": {\n \"socket.io-client\": \"^4.7.5\"\n }\n}\n"],"mappings":"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","names":["Methods","FactAnswerFormatType","payload"]}
1
+ {"version":3,"sources":["../../src/shared.ts","../../src/types.ts","../../src/utils/compareVersions.ts","../../package.json"],"sourcesContent":["import { io, Socket } from \"socket.io-client\";\nimport {\n Methods,\n Application,\n ApplicationFact,\n ApplicationFactInput,\n SdkEvent,\n IAiqaSdk,\n AddFactResult,\n SetConversationProductResult,\n SetConversationLanguageResult,\n ConversationLanguage,\n} from \"./types.js\";\nimport { compareVersions } from \"./utils/compareVersions.js\";\n// @ts-ignore - compiled builds resolve this at build time\nimport pkg from \"../package.json\";\n\nconst SDK_VERSION = (pkg as { version?: string }).version ?? \"0.0.1\";\nconst DEFAULT_URL = \"ws://localhost:3025/ws\";\nconst DEFAULT_TIMEOUT_MS = 60000; // 1 minute\n\nclass AiQaSdk implements IAiqaSdk {\n socket: Socket | null = null;\n url: string;\n applicationId: string;\n applicationSecretKey: string;\n cachedApplication?: Application;\n internalListeners: Map<SdkEvent, Set<(...args: any[]) => void>>;\n internalEvents: Set<SdkEvent>;\n\n constructor(applicationId: string, applicationSecret: string, url?: string) {\n this.url = url ?? DEFAULT_URL;\n this.internalListeners = new Map();\n this.internalEvents = new Set([\"authenticated\"]);\n\n if (applicationId && applicationSecret) {\n this.applicationId = applicationId;\n this.applicationSecretKey = applicationSecret;\n } else {\n throw new Error(\"Application id and application secret are required\");\n }\n }\n\n on(name: SdkEvent, callback: (...args: any[]) => any) {\n if (this.internalEvents.has(name)) {\n if (!this.internalListeners.has(name)) {\n this.internalListeners.set(name, new Set());\n }\n this.internalListeners.get(name)!.add(callback);\n return;\n }\n\n if (!this.socket) {\n throw new Error(\"Not connected\");\n }\n\n if (this.isManagerEvent(name)) {\n this.socket.io.on(name, callback);\n } else {\n this.socket.on(name, callback);\n }\n }\n\n off(name: SdkEvent, callback?: (...args: any[]) => any) {\n if (this.internalEvents.has(name)) {\n if (!callback) {\n this.internalListeners.delete(name);\n return;\n }\n const handlers = this.internalListeners.get(name);\n if (handlers) {\n handlers.delete(callback);\n if (handlers.size === 0) {\n this.internalListeners.delete(name);\n }\n }\n return;\n }\n\n if (!this.socket) {\n throw new Error(\"Not connected\");\n }\n\n if (this.isManagerEvent(name)) {\n this.socket.io.off(name, callback);\n } else {\n this.socket.off(name, callback);\n }\n }\n\n connect() {\n if (!this.url) {\n return;\n }\n\n const url = new URL(this.url);\n\n const socketOptions: any = {\n reconnectionDelayMax: 10000,\n path: url.pathname,\n };\n\n this.socket = io(url.origin, socketOptions);\n\n this.socket.on(\"connect\", () => {\n this.authenticate();\n });\n\n this.socket.on(\"app_version\", (payload: any) => {\n let versionRange = payload;\n if (typeof payload === \"string\") {\n try {\n versionRange = JSON.parse(payload);\n } catch (error) {\n versionRange = payload;\n }\n }\n\n const minVersion = versionRange?.min;\n const maxVersion = versionRange?.max;\n\n if (minVersion || maxVersion) {\n const tooLow = minVersion\n ? compareVersions(SDK_VERSION, minVersion) < 0\n : false;\n const tooHigh = maxVersion\n ? compareVersions(SDK_VERSION, maxVersion) > 0\n : false;\n if (tooLow || tooHigh) {\n const error = new Error(\n `SDK version ${SDK_VERSION} is not supported. Supported range: ${minVersion || \"-\"} to ${maxVersion || \"-\"}.`,\n );\n this.socket!.disconnect();\n this.socket!.emit(\"error\", error);\n }\n }\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.disconnect();\n }\n }\n\n sendMessage(method: Methods, data?: any): Promise<any> {\n return new Promise((resolve, reject) => {\n if (!this.socket || !this.socket.connected) {\n reject(new Error(\"Socket is not connected\"));\n return;\n }\n\n const requestId = this.createRequestId();\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const handler = (payload: any) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n this.socket!.off(requestId, handler);\n let parsed = payload;\n if (typeof payload === \"string\") {\n try {\n parsed = JSON.parse(payload);\n } catch (error) {\n parsed = payload;\n }\n }\n\n if (parsed && parsed.error !== undefined) {\n reject(parsed.error);\n return;\n }\n\n resolve(parsed && parsed.data !== undefined ? parsed.data : parsed);\n };\n\n this.socket.on(requestId, handler);\n\n const payload =\n data && typeof data === \"object\"\n ? { ...data, requestId }\n : { requestId, data };\n this.socket.emit(method, JSON.stringify(payload));\n\n timeout = setTimeout(() => {\n this.socket!.off(requestId, handler);\n reject(new Error(`Request timed out for ${method}`));\n }, DEFAULT_TIMEOUT_MS);\n });\n }\n\n async getApplication(): Promise<Application> {\n if (this.cachedApplication) {\n return this.cachedApplication;\n }\n throw new Error(\n \"Application is not available yet. Wait for authentication to complete.\",\n );\n }\n\n async getFacts(): Promise<ApplicationFact[]> {\n const result = await this.sendMessage(Methods.GET_FACTS);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async addFact(fact: ApplicationFactInput): Promise<AddFactResult> {\n const payload = {\n ...fact,\n critical: fact.critical ?? false,\n is_skipped: fact.is_skipped ?? false,\n };\n const result = await this.sendMessage(Methods.ADD_FACT, payload);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async setConversationProduct(\n product: string,\n ): Promise<SetConversationProductResult> {\n const result = await this.sendMessage(Methods.SET_CONVERSATION_PRODUCT, {\n product,\n });\n return result && result.data !== undefined ? result.data : result;\n }\n\n async setConversationLanguage(\n language: ConversationLanguage,\n ): Promise<SetConversationLanguageResult> {\n const result = await this.sendMessage(Methods.SET_CONVERSATION_LANGUAGE, {\n language,\n });\n return result && result.data !== undefined ? result.data : result;\n }\n\n async authenticate(): Promise<void> {\n try {\n const result = await this.sendMessage(Methods.AUTHENTICATE, {\n applicationId: this.applicationId,\n applicationSecretKey: this.applicationSecretKey,\n });\n\n const application =\n result && result.data !== undefined ? result.data : result;\n\n this.cachedApplication = application;\n\n this.emitInternal(\"authenticated\", application);\n } catch (error) {\n this.socket!.emit(\"error\", error);\n }\n }\n\n async startRecording(): Promise<boolean> {\n const result = await this.sendMessage(Methods.START_RECORDING);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async stopRecording(): Promise<boolean> {\n const result = await this.sendMessage(Methods.STOP_RECORDING);\n return result && result.data !== undefined ? result.data : result;\n }\n\n async isRecordingNow(): Promise<boolean> {\n // @TODO: track it from the server, should be sent on successfull connect\n const result = await this.sendMessage(Methods.IS_RECORDING);\n return result && result.data !== undefined ? result.data : result;\n }\n\n private emitInternal(name: SdkEvent, ...args: any[]) {\n const handlers = this.internalListeners.get(name);\n if (!handlers) {\n return;\n }\n handlers.forEach((handler) => handler(...args));\n }\n\n private createRequestId() {\n return `req_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n }\n\n private isManagerEvent(name: SdkEvent) {\n return (\n name === \"reconnect_attempt\" ||\n name === \"reconnect_error\" ||\n name === \"reconnect_failed\" ||\n name === \"error\"\n );\n }\n}\n\nexport default AiQaSdk;\n","export type Application = {\n application_id: string;\n client_name: string;\n client_phone_number: string;\n agent_id: string;\n agent_first_name: string;\n agent_last_name: string;\n};\n\nexport enum Methods {\n AUTHENTICATE = \"AUTHENTICATE\",\n GET_FACTS = \"GET_FACTS\",\n START_RECORDING = \"START_RECORDING\",\n STOP_RECORDING = \"STOP_RECORDING\",\n IS_RECORDING = \"IS_RECORDING\",\n ADD_FACT = \"ADD_FACT\",\n SET_CONVERSATION_PRODUCT = \"SET_CONVERSATION_PRODUCT\",\n SET_CONVERSATION_LANGUAGE = \"SET_CONVERSATION_LANGUAGE\",\n}\n\nexport type SetConversationProductResult = {\n success: boolean;\n product: string;\n};\n\nexport type SetConversationLanguageResult = {\n success: boolean;\n language: string;\n};\n\nexport enum ConversationLanguage {\n EN = \"en\",\n ES = \"es\",\n FR = \"fr\",\n}\n\nexport type SdkEvent =\n | Methods\n | \"connect\"\n | \"disconnect\"\n | \"close\"\n | \"error\"\n | \"reconnect_attempt\"\n | \"reconnect_error\"\n | \"reconnect_failed\"\n | \"authenticated\"\n | \"app_version\";\n\nexport enum FactAnswerFormatType {\n string = \"STRING\",\n number = \"NUMBER\",\n integer = \"INT\",\n float = \"FLOAT\",\n bool = \"BOOL\",\n list = \"LIST\",\n strict = \"STRICT\",\n single_choice = \"SINGLE_CHOICE\",\n multiple_choices = \"MULTIPLE_CHOICES\",\n}\n\nexport type ApplicationFactAnswerChoice = {\n key: string;\n text: string;\n};\n\nexport type ApplicationFactAnswerFormat = {\n type: FactAnswerFormatType;\n choices?: ApplicationFactAnswerChoice[];\n};\n\nexport type ApplicationFactInput = {\n id: string;\n question: string;\n expected_answer: any;\n answer_format: ApplicationFactAnswerFormat;\n\n category_id?: string;\n category_name?: string;\n language?: string;\n\n critical?: boolean;\n is_skipped?: boolean;\n};\n\nexport type QuestionStatus = \"searching\" | \"asked\" | \"not_asked\";\n\nexport type VerificationStatus = \"processing\" | \"matched\" | \"unmatched\";\n\nexport type ApplicationFact = ApplicationFactInput & {\n ai_answer?: any;\n question_status: QuestionStatus;\n verification_status: VerificationStatus;\n};\n\nexport interface AddFactResult {\n agent_answer?: string;\n ai_answer?: string;\n is_valid_answer: boolean;\n question_asked?: boolean;\n}\n\nexport type SdkError = {\n code:\n | \"INVALID_CONFIG\"\n | \"CONNECTION_ERROR\"\n | \"TIMEOUT\"\n | \"SERVER_ERROR\"\n | \"UNEXPECTED_RESPONSE\";\n message: string;\n details?: any;\n};\n\nexport abstract class IAiqaSdk {\n abstract connect(): void;\n abstract disconnect(): void;\n\n abstract on(eventName: string, callback: (...args: any[]) => any): void;\n abstract off(eventName: string): void;\n\n abstract getApplication(): Promise<Application>;\n abstract addFact(fact: ApplicationFactInput): Promise<AddFactResult>;\n abstract getFacts(): Promise<ApplicationFact[]>;\n abstract setConversationProduct(\n product: string,\n ): Promise<SetConversationProductResult>;\n abstract setConversationLanguage(\n language: ConversationLanguage,\n ): Promise<SetConversationLanguageResult>;\n}\n","const splitVersion = (value: string) => {\n const [core] = value.split(\"-\", 2);\n return core.split(\".\").map((part) => Number(part));\n};\n\nexport const compareVersions = (left: string, right: string): number => {\n const leftParts = splitVersion(left);\n const rightParts = splitVersion(right);\n const maxLength = Math.max(leftParts.length, rightParts.length);\n\n for (let i = 0; i < maxLength; i += 1) {\n const l = leftParts[i] ?? 0;\n const r = rightParts[i] ?? 0;\n if (l > r) {\n return 1;\n }\n if (l < r) {\n return -1;\n }\n }\n\n return 0;\n};\n","{\n \"name\": \"@aiqa/sdk\",\n \"version\": \"1.0.0-develop.4\",\n \"main\": \"dist/node/node.js\",\n \"module\": \"dist/node/node.js\",\n \"types\": \"dist/node/node.d.ts\",\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"build\": \"tsup && node -e \\\"const fs=require('fs');['dist/node/node','dist/browser/browser'].forEach(f=>{const mts=f+'.d.mts';const ts=f+'.d.ts';if(fs.existsSync(mts)){fs.renameSync(mts,ts);}});\\\"\",\n \"commitlint\": \"commitlint\",\n \"dev:node\": \"tsx src/node.ts\",\n \"lint\": \"tsc --noEmit -p tsconfig.json\",\n \"format\": \"prettier --check \\\"{src,tests}/**/*.{ts,tsx,js,json,md,yml,yaml}\\\" \\\"*.{js,json,md,yml,yaml,ts}\\\"\",\n \"release\": \"semantic-release\",\n \"start:node\": \"node dist/node/node.js\",\n \"serve:browser\": \"serve .\",\n \"test\": \"jest\",\n \"prepare\": \"husky\"\n },\n \"exports\": {\n \".\": {\n \"node\": {\n \"import\": \"./dist/node/node.js\",\n \"types\": \"./dist/node/node.d.ts\"\n },\n \"browser\": {\n \"import\": \"./dist/browser/browser.js\",\n \"types\": \"./dist/browser/browser.d.ts\"\n },\n \"default\": \"./dist/node/node.js\"\n }\n },\n \"private\": false,\n \"license\": \"MIT\",\n \"author\": \"AIQA\",\n \"description\": \"TypeScript/JavaScript SDK for interacting with the AIQA.\",\n \"keywords\": [\n \"aiqa\",\n \"sdk\"\n ],\n \"files\": [\n \"dist\"\n ],\n \"devDependencies\": {\n \"@commitlint/cli\": \"^20.4.4\",\n \"@commitlint/config-conventional\": \"^20.4.4\",\n \"@jest/globals\": \"^29.7.0\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/npm\": \"^12.0.2\",\n \"@semantic-release/release-notes-generator\": \"^14.1.0\",\n \"@types/node\": \"^22.0.0\",\n \"conventional-changelog-conventionalcommits\": \"^9.3.0\",\n \"esbuild\": \"^0.23.0\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^29.7.0\",\n \"prettier\": \"^3.8.1\",\n \"semantic-release\": \"^24.2.9\",\n \"serve\": \"^14.2.3\",\n \"socket.io\": \"^4.7.5\",\n \"ts-jest\": \"^29.2.3\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.0.0\",\n \"typescript\": \"^5.7.0\"\n },\n \"dependencies\": {\n \"socket.io-client\": \"^4.7.5\"\n }\n}\n"],"mappings":"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","names":["Methods","ConversationLanguage","FactAnswerFormatType","payload"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiqa/sdk",
3
- "version": "1.0.0-develop.3",
3
+ "version": "1.0.0-develop.5",
4
4
  "main": "dist/node/node.js",
5
5
  "module": "dist/node/node.js",
6
6
  "types": "dist/node/node.d.ts",