@voxevolv/server 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - 2026-07-18
4
+
5
+ - Add typed session creation, lookup, and ending.
6
+ - Add deterministic intent-based idempotency and bounded safe retries.
7
+ - Add typed API errors and browser-safe credential projection.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 VoxEvolv contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # `@voxevolv/server`
2
+
3
+ Server-only TypeScript client for creating and managing VoxEvolv sessions. Never
4
+ ship this package or its organization API key to a browser.
5
+
6
+ ```ts
7
+ import { VoxEvolv } from "@voxevolv/server";
8
+
9
+ const client = new VoxEvolv({
10
+ apiKey: process.env.VOXEVOLV_API_KEY!,
11
+ baseUrl: process.env.VOXEVOLV_API_BASE!,
12
+ });
13
+ const session = await client.sessions.create({
14
+ intentId: interviewSessionId,
15
+ profile: "live-interviewer",
16
+ participant: { identity: userId, displayName },
17
+ instructions,
18
+ greeting,
19
+ });
20
+
21
+ return session.browserCredentials();
22
+ ```
23
+
24
+ `intentId` is converted to one deterministic idempotency key. Retryable network,
25
+ 429, and 5xx failures reuse that exact key. API failures throw `VoxEvolvError`
26
+ with the HTTP status, VoxEvolv error code, request ID, details, and retryability.
@@ -0,0 +1,87 @@
1
+ export interface ParticipantInput {
2
+ identity: string;
3
+ displayName?: string;
4
+ }
5
+ export interface SessionCreateInput {
6
+ intentId: string;
7
+ profile: string;
8
+ participant: ParticipantInput;
9
+ instructions?: string;
10
+ greeting?: string;
11
+ language?: string;
12
+ voice?: string;
13
+ require?: {
14
+ contextReplace?: "none" | "soft" | "hard";
15
+ transcriptFinal?: boolean;
16
+ bargeIn?: boolean;
17
+ };
18
+ media?: {
19
+ input?: Array<"audio" | "text" | "image" | "video">;
20
+ output?: Array<"audio" | "text" | "video">;
21
+ };
22
+ maxDurationSeconds?: number;
23
+ mediaIdleTimeoutSeconds?: number;
24
+ metadata?: Record<string, unknown>;
25
+ }
26
+ export interface BrowserCredentials {
27
+ id: string;
28
+ connection: {
29
+ url: string;
30
+ token: string;
31
+ room_name: string;
32
+ };
33
+ access_token: string;
34
+ access_token_expires_at: string;
35
+ }
36
+ export interface SessionPayload extends BrowserCredentials {
37
+ status: string;
38
+ profile_revision: string;
39
+ created_at: string;
40
+ }
41
+ export interface VoxEvolvOptions {
42
+ apiKey: string;
43
+ baseUrl: string;
44
+ fetch?: typeof globalThis.fetch;
45
+ maxRetries?: number;
46
+ retryBaseMs?: number;
47
+ }
48
+ export declare class VoxEvolvError extends Error {
49
+ readonly status: number;
50
+ readonly code: string | null;
51
+ readonly requestId: string | null;
52
+ readonly details: unknown[];
53
+ readonly retryable: boolean;
54
+ constructor(message: string, options: {
55
+ status: number;
56
+ code?: string | null;
57
+ requestId?: string | null;
58
+ details?: unknown[];
59
+ retryable?: boolean;
60
+ });
61
+ }
62
+ export declare class Session {
63
+ readonly payload: SessionPayload;
64
+ constructor(payload: SessionPayload);
65
+ get id(): string;
66
+ get profileRevision(): string;
67
+ browserCredentials(): BrowserCredentials;
68
+ }
69
+ export declare class SessionsResource {
70
+ private readonly client;
71
+ constructor(client: VoxEvolv);
72
+ create(input: SessionCreateInput): Promise<Session>;
73
+ get(sessionId: string): Promise<Record<string, unknown>>;
74
+ end(sessionId: string): Promise<void>;
75
+ }
76
+ export declare class VoxEvolv {
77
+ readonly sessions: SessionsResource;
78
+ private readonly apiKey;
79
+ private readonly baseUrl;
80
+ private readonly fetcher;
81
+ private readonly maxRetries;
82
+ private readonly retryBaseMs;
83
+ constructor(options: VoxEvolvOptions);
84
+ request<T>(path: string, init?: RequestInit): Promise<T>;
85
+ }
86
+ export declare function idempotencyKeyFor(intentId: string): string;
87
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,200 @@
1
+ import { createHash } from "node:crypto";
2
+ export class VoxEvolvError extends Error {
3
+ status;
4
+ code;
5
+ requestId;
6
+ details;
7
+ retryable;
8
+ constructor(message, options) {
9
+ super(message);
10
+ this.name = "VoxEvolvError";
11
+ this.status = options.status;
12
+ this.code = options.code ?? null;
13
+ this.requestId = options.requestId ?? null;
14
+ this.details = options.details ?? [];
15
+ this.retryable = options.retryable ?? false;
16
+ }
17
+ }
18
+ export class Session {
19
+ payload;
20
+ constructor(payload) {
21
+ this.payload = payload;
22
+ }
23
+ get id() {
24
+ return this.payload.id;
25
+ }
26
+ get profileRevision() {
27
+ return this.payload.profile_revision;
28
+ }
29
+ browserCredentials() {
30
+ return {
31
+ id: this.payload.id,
32
+ connection: this.payload.connection,
33
+ access_token: this.payload.access_token,
34
+ access_token_expires_at: this.payload.access_token_expires_at,
35
+ };
36
+ }
37
+ }
38
+ export class SessionsResource {
39
+ client;
40
+ constructor(client) {
41
+ this.client = client;
42
+ }
43
+ async create(input) {
44
+ validateCreateInput(input);
45
+ const idempotencyKey = idempotencyKeyFor(input.intentId);
46
+ const payload = await this.client.request("sessions/", {
47
+ method: "POST",
48
+ headers: { "Idempotency-Key": idempotencyKey },
49
+ body: JSON.stringify({
50
+ protocol_version: 1,
51
+ client_reference_id: input.intentId,
52
+ profile: input.profile,
53
+ participant: {
54
+ identity: input.participant.identity,
55
+ ...(input.participant.displayName === undefined
56
+ ? {}
57
+ : { display_name: input.participant.displayName }),
58
+ },
59
+ instructions: input.instructions ?? "",
60
+ greeting: input.greeting ?? "",
61
+ ...(input.language === undefined ? {} : { language: input.language }),
62
+ ...(input.voice === undefined ? {} : { voice: input.voice }),
63
+ ...(input.require === undefined ? {} : {
64
+ require: {
65
+ ...(input.require.contextReplace === undefined
66
+ ? {}
67
+ : { context_replace: input.require.contextReplace }),
68
+ ...(input.require.transcriptFinal === undefined
69
+ ? {}
70
+ : { transcript_final: input.require.transcriptFinal }),
71
+ ...(input.require.bargeIn === undefined
72
+ ? {}
73
+ : { barge_in: input.require.bargeIn }),
74
+ },
75
+ }),
76
+ ...(input.media === undefined ? {} : {
77
+ media: {
78
+ input: input.media.input ?? ["audio"],
79
+ output: input.media.output ?? ["audio", "text"],
80
+ },
81
+ }),
82
+ ...(input.maxDurationSeconds === undefined
83
+ ? {}
84
+ : { max_duration_seconds: input.maxDurationSeconds }),
85
+ ...(input.mediaIdleTimeoutSeconds === undefined
86
+ ? {}
87
+ : { media_idle_timeout_seconds: input.mediaIdleTimeoutSeconds }),
88
+ metadata: input.metadata ?? {},
89
+ }),
90
+ });
91
+ return new Session(payload);
92
+ }
93
+ async get(sessionId) {
94
+ return this.client.request(`sessions/${encodeURIComponent(sessionId)}`);
95
+ }
96
+ async end(sessionId) {
97
+ await this.client.request(`sessions/${encodeURIComponent(sessionId)}`, {
98
+ method: "DELETE",
99
+ });
100
+ }
101
+ }
102
+ export class VoxEvolv {
103
+ sessions;
104
+ apiKey;
105
+ baseUrl;
106
+ fetcher;
107
+ maxRetries;
108
+ retryBaseMs;
109
+ constructor(options) {
110
+ if (!options.apiKey?.startsWith("sk_")) {
111
+ throw new TypeError("apiKey must be a VoxEvolv server API key");
112
+ }
113
+ this.apiKey = options.apiKey;
114
+ if (!options.baseUrl)
115
+ throw new TypeError("baseUrl is required");
116
+ this.baseUrl = options.baseUrl.replace(/\/+$/, "");
117
+ this.fetcher = options.fetch ?? globalThis.fetch.bind(globalThis);
118
+ this.maxRetries = options.maxRetries ?? 2;
119
+ this.retryBaseMs = options.retryBaseMs ?? 250;
120
+ this.sessions = new SessionsResource(this);
121
+ }
122
+ async request(path, init = {}) {
123
+ const headers = new Headers(init.headers);
124
+ headers.set("Authorization", `Bearer ${this.apiKey}`);
125
+ if (init.body && !headers.has("Content-Type"))
126
+ headers.set("Content-Type", "application/json");
127
+ let attempt = 0;
128
+ while (true) {
129
+ let response;
130
+ try {
131
+ response = await this.fetcher(`${this.baseUrl}/${path.replace(/^\/+/, "")}`, {
132
+ ...init,
133
+ headers,
134
+ });
135
+ }
136
+ catch (error) {
137
+ if (attempt >= this.maxRetries) {
138
+ throw new VoxEvolvError(error instanceof Error ? `Could not reach VoxEvolv: ${error.message}` : "Could not reach VoxEvolv", { status: 0, code: "network_error", retryable: true });
139
+ }
140
+ const delay = this.retryBaseMs * 2 ** attempt;
141
+ attempt += 1;
142
+ await new Promise((resolve) => globalThis.setTimeout(resolve, delay));
143
+ continue;
144
+ }
145
+ if (response.ok) {
146
+ if (response.status === 204)
147
+ return undefined;
148
+ return await response.json();
149
+ }
150
+ const retryable = response.status === 429 || response.status >= 500;
151
+ if (!retryable || attempt >= this.maxRetries)
152
+ throw await apiError(response, retryable);
153
+ const retryAfter = retryAfterMs(response.headers.get("Retry-After"));
154
+ const delay = retryAfter ?? this.retryBaseMs * 2 ** attempt;
155
+ attempt += 1;
156
+ await new Promise((resolve) => globalThis.setTimeout(resolve, delay));
157
+ }
158
+ }
159
+ }
160
+ export function idempotencyKeyFor(intentId) {
161
+ if (!intentId || intentId.length > 200) {
162
+ throw new TypeError("intentId must be between 1 and 200 characters");
163
+ }
164
+ return `intent_${createHash("sha256").update(intentId, "utf8").digest("hex")}`;
165
+ }
166
+ function validateCreateInput(input) {
167
+ idempotencyKeyFor(input.intentId);
168
+ if (!/^[a-z][a-z0-9-]{1,62}[a-z0-9]$/.test(input.profile)) {
169
+ throw new TypeError("profile must be a valid published profile name");
170
+ }
171
+ if (!/^[A-Za-z0-9_.:@-]{1,120}$/.test(input.participant.identity)) {
172
+ throw new TypeError("participant.identity is invalid");
173
+ }
174
+ }
175
+ async function apiError(response, retryable) {
176
+ let payload = {};
177
+ try {
178
+ payload = await response.json();
179
+ }
180
+ catch {
181
+ // Preserve the HTTP status if an intermediary returns a non-JSON body.
182
+ }
183
+ return new VoxEvolvError(typeof payload.message === "string" ? payload.message : `VoxEvolv request failed (${response.status})`, {
184
+ status: response.status,
185
+ code: typeof payload.error === "string" ? payload.error : null,
186
+ requestId: typeof payload.request_id === "string" ? payload.request_id : null,
187
+ details: Array.isArray(payload.details) ? payload.details : [],
188
+ retryable,
189
+ });
190
+ }
191
+ function retryAfterMs(value) {
192
+ if (!value)
193
+ return null;
194
+ const seconds = Number(value);
195
+ if (Number.isFinite(seconds) && seconds >= 0)
196
+ return seconds * 1000;
197
+ const date = Date.parse(value);
198
+ return Number.isNaN(date) ? null : Math.max(0, date - Date.now());
199
+ }
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@voxevolv/server",
3
+ "version": "0.1.0",
4
+ "description": "Server-side TypeScript client for the VoxEvolv Voice Session API",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/shobhansuri/VoxEvolv.git",
9
+ "directory": "sdk/server-js"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/shobhansuri/VoxEvolv/issues"
13
+ },
14
+ "type": "module",
15
+ "main": "dist/index.js",
16
+ "types": "dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js",
21
+ "default": "./dist/index.js"
22
+ },
23
+ "./package.json": "./package.json"
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "README.md",
28
+ "CHANGELOG.md",
29
+ "LICENSE"
30
+ ],
31
+ "sideEffects": false,
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "engines": {
36
+ "node": ">=20"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc -p tsconfig.json",
40
+ "typecheck": "tsc -p tsconfig.json --noEmit",
41
+ "test": "npm run build && node scripts/smoke.mjs",
42
+ "pack:check": "npm run build && npm pack --dry-run"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "24.0.15",
46
+ "typescript": "7.0.2"
47
+ }
48
+ }