@voicethere/client 0.7.13 → 0.7.15
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/CHANGELOG.md +25 -0
- package/README.md +14 -11
- package/dist/browser/browser-session.d.ts +7 -1
- package/dist/browser/browser-session.d.ts.map +1 -1
- package/dist/browser/browser-session.js +6 -1
- package/dist/browser/browser-session.js.map +1 -1
- package/dist/browser/browser-voice-session.d.ts +19 -0
- package/dist/browser/browser-voice-session.d.ts.map +1 -1
- package/dist/browser/browser-voice-session.js +580 -93
- package/dist/browser/browser-voice-session.js.map +1 -1
- package/dist/browser/client-capabilities.d.ts +15 -0
- package/dist/browser/client-capabilities.d.ts.map +1 -0
- package/dist/browser/client-capabilities.js +14 -0
- package/dist/browser/client-capabilities.js.map +1 -0
- package/dist/browser/peer-connection-close.d.ts +34 -0
- package/dist/browser/peer-connection-close.d.ts.map +1 -0
- package/dist/browser/peer-connection-close.js +98 -0
- package/dist/browser/peer-connection-close.js.map +1 -0
- package/dist/browser/session-api-retry.d.ts +2 -0
- package/dist/browser/session-api-retry.d.ts.map +1 -1
- package/dist/browser/session-api-retry.js +37 -3
- package/dist/browser/session-api-retry.js.map +1 -1
- package/dist/browser/session-provision-poll.d.ts +1 -0
- package/dist/browser/session-provision-poll.d.ts.map +1 -1
- package/dist/browser/session-provision-poll.js +31 -2
- package/dist/browser/session-provision-poll.js.map +1 -1
- package/dist/browser/session-provision.d.ts +5 -0
- package/dist/browser/session-provision.d.ts.map +1 -1
- package/dist/browser/session-provision.js +8 -1
- package/dist/browser/session-provision.js.map +1 -1
- package/dist/browser/voice-session-diagnostics.d.ts +26 -0
- package/dist/browser/voice-session-diagnostics.d.ts.map +1 -0
- package/dist/browser/voice-session-diagnostics.js +48 -0
- package/dist/browser/voice-session-diagnostics.js.map +1 -0
- package/dist/browser/webrtc-runtime.d.ts +4 -0
- package/dist/browser/webrtc-runtime.d.ts.map +1 -1
- package/dist/browser/webrtc-runtime.js +8 -0
- package/dist/browser/webrtc-runtime.js.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +1 -0
- package/dist/node/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## 0.7.15 — 2026-07-28
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`StartSessionOptions.signal`** — optional `AbortSignal` cancels `POST /sessions` and status-poll fetches/retry sleeps via `fetchSessionApi` / `pollSessionStatus`.
|
|
10
|
+
- **`CLIENT_CAPABILITIES.startSessionAbortSignal`** — explicit capability flag so load/soak harnesses can fail closed when the installed package cannot cancel in-flight provisioning.
|
|
11
|
+
|
|
12
|
+
### Notes
|
|
13
|
+
|
|
14
|
+
- Consumers that require abortable `startSession` (canonical voice soak) must install this release (or newer). Older published `0.7.14` builds do not advertise the capability.
|
|
15
|
+
|
|
16
|
+
## 0.7.14 — 2026-07-27
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- **`disconnectAsync()`** — awaitable terminal cleanup barrier; awaits Node runtime `closeAsync()` when present. Close failure is diagnostic-only and never aborts cleanup. Emits `peer_close` (redacted).
|
|
21
|
+
- **`CLIENT_CAPABILITIES.iceTransportPolicy`** — explicit package capability export for e2e fail-closed checks (`/browser` and `/node` entry points).
|
|
22
|
+
- **`iceTransportPolicy`** option — `"all" | "relay"` pass-through to `RTCConfiguration` for forced-relay TURN smokes.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **`disconnect()` remains synchronous** — terminal invalidation (timers, WebSocket, peer/channels, mic) using standard sync `pc.close()`. Prefer `disconnectAsync()` when callers need to await native cleanup.
|
|
27
|
+
- **Removed startup ICE PC reconstruction** — race-prone automatic peer rebuild on failed/disconnected startup was dropped. Existing same-session signaling reconnect is unchanged.
|
|
28
|
+
- Diagnostic redaction covers `http(s)`, `ws(s)`, `turn(s)`, `stun` URIs, join tokens, JSON credentials, and SDP `ice-pwd`; async diagnostic handler rejections are isolated.
|
|
29
|
+
|
|
5
30
|
## 0.7.13 — 2026-07-26
|
|
6
31
|
|
|
7
32
|
### Added
|
package/README.md
CHANGED
|
@@ -75,19 +75,19 @@ See [`examples/browser-test/README.md`](examples/browser-test/README.md).
|
|
|
75
75
|
|
|
76
76
|
## Ending a session
|
|
77
77
|
|
|
78
|
-
| Action | API
|
|
79
|
-
| --------------------- |
|
|
80
|
-
| Local teardown | `session.disconnect()`
|
|
81
|
-
| Graceful close signal | `session.sendCloseSignal(reason?)`
|
|
82
|
-
| Server idle timeout | _(automatic)_
|
|
78
|
+
| Action | API | Server `end_reason` |
|
|
79
|
+
| --------------------- | --------------------------------------------------------------------------------- | --------------------- |
|
|
80
|
+
| Local teardown | `session.disconnect()` (sync) or `session.disconnectAsync()` (await native close) | `client_disconnected` |
|
|
81
|
+
| Graceful close signal | `session.sendCloseSignal(reason?)` | `client_close_signal` |
|
|
82
|
+
| Server idle timeout | _(automatic)_ | `idle_timeout` |
|
|
83
83
|
|
|
84
84
|
## Reconnect and billing
|
|
85
85
|
|
|
86
|
-
| UI / API
|
|
87
|
-
|
|
|
88
|
-
| Dashboard **Reconnect** or embed **Connect** after disconnect | Calls `startSession()` → **new orchestrator session id**, new Supabase row, new billing period once WebRTC connects
|
|
89
|
-
| Unintentional drop (network, signaling close)
|
|
90
|
-
| Manual `session.reconnect()`
|
|
86
|
+
| UI / API | Behavior |
|
|
87
|
+
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
88
|
+
| Dashboard **Reconnect** or embed **Connect** after disconnect | Calls `startSession()` → **new orchestrator session id**, new Supabase row, new billing period once WebRTC connects |
|
|
89
|
+
| Unintentional drop (network, signaling close) | Default `reconnectPolicy: "same-session"` re-joins with the **same credentials** and `peerId` (auto-retry with backoff) |
|
|
90
|
+
| Manual `session.reconnect()` | Same orchestrator session — re-opens signaling only |
|
|
91
91
|
|
|
92
92
|
Billing starts when the runner reports a billable WebRTC leg (voice: connected PC + open control channel + agent; data-only: PC + DC). Provision alone does not bill.
|
|
93
93
|
|
|
@@ -114,7 +114,10 @@ Configure idle timeouts per project in the dashboard **Session settings** panel
|
|
|
114
114
|
Pass `onSessionError` to `startSession` and `connectBrowserSession` for a unified handler across provisioning failures, WebRTC errors, and runner `session_error` data-channel events:
|
|
115
115
|
|
|
116
116
|
```typescript
|
|
117
|
-
import {
|
|
117
|
+
import {
|
|
118
|
+
startSession,
|
|
119
|
+
connectBrowserSession,
|
|
120
|
+
} from "@voicethere/client/browser";
|
|
118
121
|
|
|
119
122
|
const provision = await startSession({
|
|
120
123
|
apiBase: "https://sessions.example/v1",
|
|
@@ -19,6 +19,8 @@ export type ConnectBrowserSessionOptions = {
|
|
|
19
19
|
maxAutoReconnectAttempts?: number;
|
|
20
20
|
onReconnecting?: (attempt: number) => void;
|
|
21
21
|
onConnectionStatus?: (status: WebRtcConnectionStatus) => void;
|
|
22
|
+
iceTransportPolicy?: BrowserVoiceSessionOptions["iceTransportPolicy"];
|
|
23
|
+
onDiagnosticEvent?: BrowserVoiceSessionOptions["onDiagnosticEvent"];
|
|
22
24
|
};
|
|
23
25
|
export type BrowserSession = BrowserVoiceSession & {
|
|
24
26
|
mode: BrowserSessionMode;
|
|
@@ -41,5 +43,9 @@ export { buildWebRtcConnectionStatus, deriveWebRtcConnectionPhase, isWebRtcConne
|
|
|
41
43
|
export { collectWebRtcDiagnostics, formatWebRtcDiagnosticsLines, summarizeRtcStatsReport, type WebRtcDiagnostics, type WebRtcIceCandidatePairSummary, type WebRtcStatsSummary, } from "./webrtc-diagnostics.js";
|
|
42
44
|
export type { DebugConsole, DebugEvent } from "./debug-console.js";
|
|
43
45
|
export type { WebRtcRuntime } from "./webrtc-runtime.js";
|
|
44
|
-
export { getDefaultBrowserRuntime } from "./webrtc-runtime.js";
|
|
46
|
+
export { getDefaultBrowserRuntime, peerConnectionSupportsCloseAsync, } from "./webrtc-runtime.js";
|
|
47
|
+
export { closePeerConnectionAwaitable, type AwaitableCloseablePeerConnection, type PeerCloseResult, type PeerCloseStatus, } from "./peer-connection-close.js";
|
|
48
|
+
export type { VoiceSessionDiagnosticEvent, VoiceSessionDiagnosticHandler, } from "./voice-session-diagnostics.js";
|
|
49
|
+
export { redactDiagnosticDetail } from "./voice-session-diagnostics.js";
|
|
50
|
+
export { CLIENT_CAPABILITIES, type ClientCapabilities, } from "./client-capabilities.js";
|
|
45
51
|
//# sourceMappingURL=browser-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAChC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,sBAAsB,EAAE,mBAAmB,CAAC;IACpE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,eAAe,CAAC,EAAE,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;IAChE,mBAAmB,CAAC,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,CAAC;IACxE,iBAAiB,CAAC,EAAE,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;IACpE,eAAe,CAAC,EAAE,OAAO,4BAA4B,EAAE,eAAe,CAAC;IACvE,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ export async function connectBrowserSession(options) {
|
|
|
37
37
|
maxAutoReconnectAttempts: options.maxAutoReconnectAttempts,
|
|
38
38
|
onReconnecting: options.onReconnecting,
|
|
39
39
|
onConnectionStatus: options.onConnectionStatus,
|
|
40
|
+
iceTransportPolicy: options.iceTransportPolicy,
|
|
41
|
+
onDiagnosticEvent: options.onDiagnosticEvent,
|
|
40
42
|
});
|
|
41
43
|
return { ...session, mode: resolvedMode };
|
|
42
44
|
}
|
|
@@ -54,5 +56,8 @@ export { createDebugConsole } from "./debug-console.js";
|
|
|
54
56
|
export { BrowserSessionModeType, ProvisionedRunnerModeType, } from "./session-modes.js";
|
|
55
57
|
export { buildWebRtcConnectionStatus, deriveWebRtcConnectionPhase, isWebRtcConnectionReady, resolveReadinessProfile, } from "./webrtc-connection-status.js";
|
|
56
58
|
export { collectWebRtcDiagnostics, formatWebRtcDiagnosticsLines, summarizeRtcStatsReport, } from "./webrtc-diagnostics.js";
|
|
57
|
-
export { getDefaultBrowserRuntime } from "./webrtc-runtime.js";
|
|
59
|
+
export { getDefaultBrowserRuntime, peerConnectionSupportsCloseAsync, } from "./webrtc-runtime.js";
|
|
60
|
+
export { closePeerConnectionAwaitable, } from "./peer-connection-close.js";
|
|
61
|
+
export { redactDiagnosticDetail } from "./voice-session-diagnostics.js";
|
|
62
|
+
export { CLIENT_CAPABILITIES, } from "./client-capabilities.js";
|
|
58
63
|
//# sourceMappingURL=browser-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,0BAA0B,GAG3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAE1B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ import type { DebugConsole } from "./debug-console.js";
|
|
|
4
4
|
import { type WebRtcConnectionStatus, type WebRtcReadinessProfile } from "./webrtc-connection-status.js";
|
|
5
5
|
import { type WebRtcDiagnostics } from "./webrtc-diagnostics.js";
|
|
6
6
|
import { type WebRtcRuntime } from "./webrtc-runtime.js";
|
|
7
|
+
import { type PeerCloseResult } from "./peer-connection-close.js";
|
|
8
|
+
import { type VoiceSessionDiagnosticHandler } from "./voice-session-diagnostics.js";
|
|
7
9
|
/**
|
|
8
10
|
* Native RTCPeerConnection rejects offers without `a=ice-ufrag` (empty or truncated SDP).
|
|
9
11
|
* Detect before setRemoteDescription so we can same-session reconnect instead of hanging.
|
|
@@ -41,6 +43,13 @@ export type BrowserVoiceSessionOptions = {
|
|
|
41
43
|
onDebugEvent?: DebugConsole;
|
|
42
44
|
/** Injectable WebRTC runtime (default: browser globals). */
|
|
43
45
|
runtime?: WebRtcRuntime;
|
|
46
|
+
/**
|
|
47
|
+
* ICE transport policy for the peer connection (`all` | `relay`).
|
|
48
|
+
* Passed through to `RTCConfiguration.iceTransportPolicy`.
|
|
49
|
+
*/
|
|
50
|
+
iceTransportPolicy?: "all" | "relay";
|
|
51
|
+
/** Structured diagnostics (peer close) — redacted; exceptions never affect lifecycle. */
|
|
52
|
+
onDiagnosticEvent?: VoiceSessionDiagnosticHandler;
|
|
44
53
|
/** Opaque context forwarded to runner/agent on session start. */
|
|
45
54
|
customerContext?: Record<string, unknown>;
|
|
46
55
|
/** Unified handler for session_error DC events and local WebRTC failures. */
|
|
@@ -80,7 +89,17 @@ export type BrowserVoiceSessionOptions = {
|
|
|
80
89
|
};
|
|
81
90
|
export type BrowserVoiceSession = {
|
|
82
91
|
peerId: string;
|
|
92
|
+
/**
|
|
93
|
+
* Synchronous terminal invalidation (reconnect-friendly; uses sync `pc.close()`).
|
|
94
|
+
* Does not await native close — prefer {@link disconnectAsync} for soak/capacity.
|
|
95
|
+
* Safe if async close is in flight: does not call a second close or mask failure.
|
|
96
|
+
*/
|
|
83
97
|
disconnect: () => void;
|
|
98
|
+
/**
|
|
99
|
+
* Awaitable terminal cleanup barrier (Node `closeAsync` when present).
|
|
100
|
+
* Returns strict {@link PeerCloseResult} so callers can observe closed/timed_out/failed.
|
|
101
|
+
*/
|
|
102
|
+
disconnectAsync: () => Promise<PeerCloseResult>;
|
|
84
103
|
/** Ask the server to close this WebRTC leg (graceful close signal on voice-control). */
|
|
85
104
|
sendCloseSignal: (reason?: string) => void;
|
|
86
105
|
sendSpeak: (text: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-voice-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-voice-session.ts"],"names":[],"mappings":"AAMA,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-voice-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-voice-session.ts"],"names":[],"mappings":"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"}
|