@anganyai/voice-sdk 0.0.5 → 0.0.7

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.
package/dist/index.js CHANGED
@@ -16421,6 +16421,15 @@ var SipManager = class extends EventEmitter {
16421
16421
  }
16422
16422
  const inviter = new Inviter(this.userAgent, uri, inviterOptions);
16423
16423
  this.currentSession = inviter;
16424
+ let rejectionReason;
16425
+ inviter.delegate = {
16426
+ onReject: (response) => {
16427
+ const statusCode = response.message.statusCode;
16428
+ const reasonPhrase = response.message.reasonPhrase;
16429
+ this.logger.warn("Call rejected", { statusCode, reasonPhrase });
16430
+ rejectionReason = { code: statusCode, reason: this.mapSipErrorToMessage(statusCode, reasonPhrase) };
16431
+ }
16432
+ };
16424
16433
  inviter.stateChange.addListener((state) => {
16425
16434
  this.logger.debug("Call state changed", { state });
16426
16435
  switch (state) {
@@ -16434,6 +16443,9 @@ var SipManager = class extends EventEmitter {
16434
16443
  break;
16435
16444
  case SessionState2.Terminated:
16436
16445
  this.setState("registered");
16446
+ if (rejectionReason) {
16447
+ this.emit("error", new Error(rejectionReason.reason));
16448
+ }
16437
16449
  this.emit("callEnded");
16438
16450
  this.cleanupAudioResources();
16439
16451
  delete this.currentSession;
@@ -16473,7 +16485,12 @@ var SipManager = class extends EventEmitter {
16473
16485
  }
16474
16486
  this.logger.info("\u{1F4F5} Hanging up call...");
16475
16487
  try {
16476
- this.currentSession.bye();
16488
+ const sessionState = this.currentSession.state;
16489
+ if (sessionState === "Established" || sessionState === "Establishing") {
16490
+ this.currentSession.bye();
16491
+ } else {
16492
+ this.logger.debug("Session already terminated, skipping BYE", { state: sessionState });
16493
+ }
16477
16494
  } catch (error) {
16478
16495
  this.logger.warn("\u26A0\uFE0F Error sending BYE", { error });
16479
16496
  }
@@ -16894,6 +16911,50 @@ var SipManager = class extends EventEmitter {
16894
16911
  }
16895
16912
  }, delay);
16896
16913
  }
16914
+ /**
16915
+ * Map SIP error codes to user-friendly messages
16916
+ */
16917
+ mapSipErrorToMessage(statusCode, reasonPhrase) {
16918
+ const errorMessages = {
16919
+ // 4xx Client Errors
16920
+ 400: "Invalid request",
16921
+ 401: "Authentication required",
16922
+ 403: "Access denied",
16923
+ 404: "Agent not found",
16924
+ 408: "Request timeout",
16925
+ 480: "Agent unavailable",
16926
+ 486: "Agent is busy",
16927
+ 487: "Call cancelled",
16928
+ 488: "Not acceptable",
16929
+ // 5xx Server Errors
16930
+ 500: "Server error",
16931
+ 502: "Bad gateway",
16932
+ 503: "Service unavailable",
16933
+ 504: "Gateway timeout",
16934
+ // 6xx Global Failures
16935
+ 600: "Agent is busy",
16936
+ 603: "Agent declined the call",
16937
+ 604: "Agent does not exist",
16938
+ 606: "Not acceptable"
16939
+ };
16940
+ const message = errorMessages[statusCode];
16941
+ if (message) {
16942
+ return message;
16943
+ }
16944
+ if (reasonPhrase) {
16945
+ return reasonPhrase;
16946
+ }
16947
+ if (statusCode >= 400 && statusCode < 500) {
16948
+ return "Call failed";
16949
+ }
16950
+ if (statusCode >= 500 && statusCode < 600) {
16951
+ return "Server error";
16952
+ }
16953
+ if (statusCode >= 600) {
16954
+ return "Agent unavailable";
16955
+ }
16956
+ return "Unknown error";
16957
+ }
16897
16958
  };
16898
16959
 
16899
16960
  // src/services/TranscriptionService.ts
@@ -17438,7 +17499,9 @@ var Conversation = class extends EventEmitter {
17438
17499
  }
17439
17500
  }
17440
17501
  if (!accessToken) {
17441
- this.logger.info("No access token available - running in SIP-only mode (no transcription/API features)");
17502
+ this.logger.info(
17503
+ "No access token available - running in SIP-only mode (no transcription/API features)"
17504
+ );
17442
17505
  } else {
17443
17506
  this.accessToken = accessToken;
17444
17507
  this.logger.debug("\u2713 Access token obtained for API calls", {