@anganyai/voice-sdk 0.0.9 → 0.0.10
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.cjs +50 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +50 -30
- package/dist/index.js.map +1 -1
- package/package.json +28 -18
package/dist/index.js
CHANGED
|
@@ -16320,8 +16320,9 @@ var SipManager = class extends EventEmitter {
|
|
|
16320
16320
|
{ urls: "stun:stun1.l.google.com:19302" }
|
|
16321
16321
|
]
|
|
16322
16322
|
},
|
|
16323
|
-
|
|
16324
|
-
|
|
16323
|
+
// Reduced timeouts for faster connection (was 2000ms/5000ms)
|
|
16324
|
+
iceGatheringTimeout: 500,
|
|
16325
|
+
iceCheckingTimeout: 2e3
|
|
16325
16326
|
},
|
|
16326
16327
|
delegate: {
|
|
16327
16328
|
onConnect: () => {
|
|
@@ -16486,7 +16487,7 @@ var SipManager = class extends EventEmitter {
|
|
|
16486
16487
|
this.logger.debug("No active session to hang up");
|
|
16487
16488
|
return;
|
|
16488
16489
|
}
|
|
16489
|
-
this.logger.info("
|
|
16490
|
+
this.logger.info("Hanging up call...");
|
|
16490
16491
|
try {
|
|
16491
16492
|
const sessionState = this.currentSession.state;
|
|
16492
16493
|
if (sessionState === "Established" || sessionState === "Establishing") {
|
|
@@ -16495,7 +16496,7 @@ var SipManager = class extends EventEmitter {
|
|
|
16495
16496
|
this.logger.debug("Session already terminated, skipping BYE", { state: sessionState });
|
|
16496
16497
|
}
|
|
16497
16498
|
} catch (error) {
|
|
16498
|
-
this.logger.warn("
|
|
16499
|
+
this.logger.warn("Error sending BYE", { error });
|
|
16499
16500
|
}
|
|
16500
16501
|
delete this.currentSession;
|
|
16501
16502
|
this.cleanupAudioResources();
|
|
@@ -16790,16 +16791,16 @@ var SipManager = class extends EventEmitter {
|
|
|
16790
16791
|
delete this.audioAnalyser;
|
|
16791
16792
|
}
|
|
16792
16793
|
cleanupAudioResources() {
|
|
16793
|
-
this.logger.debug("
|
|
16794
|
+
this.logger.debug("Performing audio resource cleanup", {
|
|
16794
16795
|
platform: isReactNative() ? "react-native" : "browser"
|
|
16795
16796
|
});
|
|
16796
16797
|
this.stopAudioMonitoring();
|
|
16797
16798
|
if (this.audioElement && isBrowser()) {
|
|
16798
|
-
this.logger.debug("
|
|
16799
|
+
this.logger.debug("Cleaning up audio element");
|
|
16799
16800
|
if (this.audioElement.srcObject) {
|
|
16800
16801
|
const tracks = this.audioElement.srcObject.getTracks();
|
|
16801
16802
|
tracks.forEach((track) => {
|
|
16802
|
-
this.logger.debug("
|
|
16803
|
+
this.logger.debug("Stopping remote track", { kind: track.kind });
|
|
16803
16804
|
track.stop();
|
|
16804
16805
|
});
|
|
16805
16806
|
this.audioElement.srcObject = null;
|
|
@@ -16812,29 +16813,29 @@ var SipManager = class extends EventEmitter {
|
|
|
16812
16813
|
this.logger.debug("Audio element cleaned up");
|
|
16813
16814
|
}
|
|
16814
16815
|
if (this.localStream) {
|
|
16815
|
-
this.logger.debug("
|
|
16816
|
+
this.logger.debug("Cleaning up local stream");
|
|
16816
16817
|
const tracks = this.localStream.getTracks();
|
|
16817
16818
|
tracks.forEach((track) => {
|
|
16818
|
-
this.logger.debug("
|
|
16819
|
+
this.logger.debug("Stopping local track", { kind: track.kind });
|
|
16819
16820
|
track.stop();
|
|
16820
16821
|
});
|
|
16821
16822
|
delete this.localStream;
|
|
16822
16823
|
}
|
|
16823
16824
|
if (this.preAcquiredStream) {
|
|
16824
|
-
this.logger.debug("
|
|
16825
|
+
this.logger.debug("Stopping pre-acquired microphone stream");
|
|
16825
16826
|
const tracks = this.preAcquiredStream.getTracks();
|
|
16826
16827
|
tracks.forEach((track) => {
|
|
16827
|
-
this.logger.debug("
|
|
16828
|
+
this.logger.debug("Stopping pre-acquired track", { kind: track.kind });
|
|
16828
16829
|
track.stop();
|
|
16829
16830
|
});
|
|
16830
16831
|
delete this.preAcquiredStream;
|
|
16831
16832
|
}
|
|
16832
16833
|
if (this.remoteStream) {
|
|
16833
|
-
this.logger.debug("
|
|
16834
|
+
this.logger.debug("Cleaning up remote stream");
|
|
16834
16835
|
try {
|
|
16835
16836
|
const tracks = this.remoteStream.getTracks();
|
|
16836
16837
|
tracks.forEach((track) => {
|
|
16837
|
-
this.logger.debug("
|
|
16838
|
+
this.logger.debug("Stopping remote track", { kind: track.kind });
|
|
16838
16839
|
track.stop();
|
|
16839
16840
|
});
|
|
16840
16841
|
} catch (error) {
|
|
@@ -16844,15 +16845,15 @@ var SipManager = class extends EventEmitter {
|
|
|
16844
16845
|
}
|
|
16845
16846
|
if (this.audioContext) {
|
|
16846
16847
|
try {
|
|
16847
|
-
this.logger.debug("
|
|
16848
|
+
this.logger.debug("Closing audio context");
|
|
16848
16849
|
this.audioContext.close();
|
|
16849
16850
|
delete this.audioContext;
|
|
16850
16851
|
} catch (error) {
|
|
16851
|
-
this.logger.warn("
|
|
16852
|
+
this.logger.warn("Error closing audio context", { error });
|
|
16852
16853
|
}
|
|
16853
16854
|
}
|
|
16854
16855
|
delete this.audioAnalyser;
|
|
16855
|
-
this.logger.
|
|
16856
|
+
this.logger.debug("Audio resources cleanup completed");
|
|
16856
16857
|
}
|
|
16857
16858
|
startKeepAlive() {
|
|
16858
16859
|
this.stopKeepAlive();
|
|
@@ -17075,7 +17076,10 @@ var TranscriptionService = class extends EventEmitter {
|
|
|
17075
17076
|
}
|
|
17076
17077
|
});
|
|
17077
17078
|
const handleSSEEvent = (eventType, event) => {
|
|
17078
|
-
this.logger.debug(`EventSource [${eventType}] received`, {
|
|
17079
|
+
this.logger.debug(`EventSource [${eventType}] received`, {
|
|
17080
|
+
data: event.data,
|
|
17081
|
+
type: event.type
|
|
17082
|
+
});
|
|
17079
17083
|
if (!event.data) {
|
|
17080
17084
|
this.logger.debug(`EventSource [${eventType}] has no data, skipping`);
|
|
17081
17085
|
return;
|
|
@@ -17103,13 +17107,31 @@ var TranscriptionService = class extends EventEmitter {
|
|
|
17103
17107
|
}
|
|
17104
17108
|
});
|
|
17105
17109
|
this.eventSource.addEventListener("message", (event) => handleSSEEvent("message", event));
|
|
17106
|
-
this.eventSource.addEventListener(
|
|
17107
|
-
|
|
17108
|
-
|
|
17109
|
-
|
|
17110
|
-
this.eventSource.addEventListener(
|
|
17110
|
+
this.eventSource.addEventListener(
|
|
17111
|
+
"transcription",
|
|
17112
|
+
(event) => handleSSEEvent("transcription", event)
|
|
17113
|
+
);
|
|
17114
|
+
this.eventSource.addEventListener(
|
|
17115
|
+
"call_event",
|
|
17116
|
+
(event) => handleSSEEvent("call_event", event)
|
|
17117
|
+
);
|
|
17118
|
+
this.eventSource.addEventListener(
|
|
17119
|
+
"call_started",
|
|
17120
|
+
(event) => handleSSEEvent("call_started", event)
|
|
17121
|
+
);
|
|
17122
|
+
this.eventSource.addEventListener(
|
|
17123
|
+
"call_ended",
|
|
17124
|
+
(event) => handleSSEEvent("call_ended", event)
|
|
17125
|
+
);
|
|
17126
|
+
this.eventSource.addEventListener(
|
|
17127
|
+
"connected",
|
|
17128
|
+
(event) => handleSSEEvent("connected", event)
|
|
17129
|
+
);
|
|
17111
17130
|
this.eventSource.addEventListener("welcome", (event) => handleSSEEvent("welcome", event));
|
|
17112
|
-
this.eventSource.addEventListener(
|
|
17131
|
+
this.eventSource.addEventListener(
|
|
17132
|
+
"heartbeat",
|
|
17133
|
+
(event) => handleSSEEvent("heartbeat", event)
|
|
17134
|
+
);
|
|
17113
17135
|
}
|
|
17114
17136
|
/**
|
|
17115
17137
|
* Stop the SSE connection
|
|
@@ -17551,11 +17573,10 @@ var Conversation = class extends EventEmitter {
|
|
|
17551
17573
|
* Initialize and start the conversation
|
|
17552
17574
|
*/
|
|
17553
17575
|
async initialize() {
|
|
17554
|
-
this.logger.debug("
|
|
17576
|
+
this.logger.debug("Initializing conversation");
|
|
17555
17577
|
try {
|
|
17556
17578
|
this.setState("connecting");
|
|
17557
17579
|
this.startTime = /* @__PURE__ */ new Date();
|
|
17558
|
-
this.logger.debug("=== STEP 1: CHECKING AUTHENTICATION ===");
|
|
17559
17580
|
const authStatus = this.authManager.getAuthStatus();
|
|
17560
17581
|
this.logger.debug("Auth status received", {
|
|
17561
17582
|
authenticated: authStatus.authenticated,
|
|
@@ -17567,8 +17588,7 @@ var Conversation = class extends EventEmitter {
|
|
|
17567
17588
|
this.logger.error("Authentication check failed", { authStatus });
|
|
17568
17589
|
throw new AuthenticationError("Not authenticated");
|
|
17569
17590
|
}
|
|
17570
|
-
this.logger.debug("
|
|
17571
|
-
this.logger.debug("=== STEP 2: GETTING ACCESS TOKEN (OPTIONAL) ===");
|
|
17591
|
+
this.logger.debug("Authentication check passed");
|
|
17572
17592
|
let accessToken = authStatus.tokens?.accessToken;
|
|
17573
17593
|
this.logger.debug("OAuth access token", { hasOAuthToken: !!accessToken });
|
|
17574
17594
|
if (!accessToken) {
|
|
@@ -17593,11 +17613,10 @@ var Conversation = class extends EventEmitter {
|
|
|
17593
17613
|
);
|
|
17594
17614
|
} else {
|
|
17595
17615
|
this.accessToken = accessToken;
|
|
17596
|
-
this.logger.debug("
|
|
17616
|
+
this.logger.debug("Access token obtained for API calls", {
|
|
17597
17617
|
tokenLength: accessToken.length
|
|
17598
17618
|
});
|
|
17599
17619
|
}
|
|
17600
|
-
this.logger.debug("=== STEP 3: ENSURING EPHEMERAL CREDENTIALS ===");
|
|
17601
17620
|
if (!this.ephemeralCredentials) {
|
|
17602
17621
|
this.logger.debug("Getting ephemeral credentials");
|
|
17603
17622
|
this.ephemeralCredentials = this.authManager.getCachedEphemeralCredentials();
|
|
@@ -17613,7 +17632,7 @@ var Conversation = class extends EventEmitter {
|
|
|
17613
17632
|
uriCount: this.ephemeralCredentials.sip?.uris?.length || 0
|
|
17614
17633
|
});
|
|
17615
17634
|
} else {
|
|
17616
|
-
this.logger.debug("
|
|
17635
|
+
this.logger.debug("Ephemeral credentials already available");
|
|
17617
17636
|
}
|
|
17618
17637
|
this.logger.debug("Raw ephemeral credentials", {
|
|
17619
17638
|
sip: {
|
|
@@ -17737,6 +17756,7 @@ var Conversation = class extends EventEmitter {
|
|
|
17737
17756
|
}
|
|
17738
17757
|
}
|
|
17739
17758
|
await this.sipManager.makeCall(callOptions);
|
|
17759
|
+
this.logger.debug("Conversation initialization complete");
|
|
17740
17760
|
} catch (error) {
|
|
17741
17761
|
this.logger.error("Failed to initialize conversation", { error });
|
|
17742
17762
|
this.setState("error");
|