@sahab-platform/agents 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.cjs +9 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -135,11 +135,19 @@ var AgentsResource = class {
|
|
|
135
135
|
this.http = http;
|
|
136
136
|
this.options = options;
|
|
137
137
|
}
|
|
138
|
-
async initialize() {
|
|
138
|
+
async initialize(mode = "start") {
|
|
139
139
|
const livekitConfig = await getConfig(this.http);
|
|
140
140
|
setOptions(this.options);
|
|
141
141
|
const __dirname = path__namespace.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))));
|
|
142
142
|
const agentPath = path__namespace.resolve(__dirname, "_internal-agent.js");
|
|
143
|
+
const knownCommands = ["dev", "start", "connect"];
|
|
144
|
+
const hasCommand = process.argv.slice(2).some((arg) => knownCommands.includes(arg));
|
|
145
|
+
if (!hasCommand) {
|
|
146
|
+
process.argv.splice(2, 0, mode);
|
|
147
|
+
}
|
|
148
|
+
process.env.LIVEKIT_URL = livekitConfig.url;
|
|
149
|
+
process.env.LIVEKIT_API_KEY = livekitConfig.apiKey;
|
|
150
|
+
process.env.LIVEKIT_API_SECRET = livekitConfig.apiSecret;
|
|
143
151
|
agents.cli.runApp(
|
|
144
152
|
new agents.ServerOptions({
|
|
145
153
|
agent: agentPath,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/utils/get-config.utils.ts","../src/store.ts","../src/resources/agents.ts","../src/index.ts"],"names":["path","fileURLToPath","cli","ServerOptions"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiErrorBody } from \"./types.js\";\n\nexport class SahabAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SahabAgentsError\";\n }\n}\n\nexport class ApiError extends SahabAgentsError {\n readonly status: number;\n readonly code?: string;\n readonly details?: unknown;\n\n constructor(status: number, body: ApiErrorBody) {\n super(body.message);\n this.name = \"ApiError\";\n this.status = status;\n this.code = body.code;\n this.details = body.details;\n }\n}\n\nexport class TimeoutError extends SahabAgentsError {\n constructor(timeoutMs: number) {\n super(`Request timed out after ${timeoutMs}ms`);\n this.name = \"TimeoutError\";\n }\n}\n","import { ApiError, TimeoutError } from \"./errors.js\";\nimport type { ApiErrorBody, SahabAgentsOptions } from \"./types.js\";\n\nconst DEFAULT_TIMEOUT = 30_000;\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly timeout: number;\n\n constructor(options: SahabAgentsOptions) {\n this.baseUrl = \"https://api.sahab.live/v1\";\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.defaultHeaders = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"api-key\": options.apiKey,\n ...options.headers,\n };\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n\n let response: Response;\n\n try {\n response = await fetch(url.toString(), {\n method,\n headers: this.defaultHeaders,\n body:\n options.body !== undefined ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new TimeoutError(this.timeout);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n let body: ApiErrorBody = { message: response.statusText };\n try {\n body = (await response.json()) as ApiErrorBody;\n } catch {\n // use default body\n }\n throw new ApiError(response.status, body);\n }\n\n // 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n get<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n return this.request<T>(\"GET\", path, { params });\n }\n\n post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, { body });\n }\n\n patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, { body });\n }\n\n delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n}\n","import { HttpClient } from \"../client.js\";\nimport type { LiveKitConfig } from \"../types.js\";\n\nexport async function getConfig(http: HttpClient): Promise<LiveKitConfig> {\n const response = await http.get<LiveKitConfig>(\"/auth/config\");\n return response;\n}\n","import type { LiveKitConfig, SahabAgentsOptions } from \"./types.js\";\n\nlet _options: SahabAgentsOptions | undefined;\nlet _livekitConfig: LiveKitConfig | undefined;\n\nexport function setOptions(options: SahabAgentsOptions): void {\n _options = options;\n}\n\nexport function getOptions(): SahabAgentsOptions {\n if (!_options) {\n throw new Error(\n \"SahabAgents options have not been set. Call initialize() first.\",\n );\n }\n return _options;\n}\n\nexport function setLiveKitConfig(config: LiveKitConfig): void {\n _livekitConfig = config;\n}\n\nexport function getLiveKitConfig(): LiveKitConfig {\n if (!_livekitConfig) {\n throw new Error(\n \"LiveKit config has not been set. Call initialize() first.\",\n );\n }\n return _livekitConfig;\n}\n","import { cli, ServerOptions } from \"@livekit/agents\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { HttpClient } from \"../client.js\";\nimport type { SahabAgentsOptions } from \"../types.js\";\nimport { getConfig } from \"../utils/get-config.utils.js\";\nimport { setOptions, setLiveKitConfig } from \"../store.js\";\n\nexport class AgentsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly options: SahabAgentsOptions,\n ) {}\n\n async initialize(): Promise<void> {\n const livekitConfig = await getConfig(this.http);\n setOptions(this.options);\n setLiveKitConfig(livekitConfig);\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const agentPath = path.resolve(__dirname, \"_internal-agent.js\");\n\n cli.runApp(\n new ServerOptions({\n agent: agentPath,\n agentName: \"sahab-agent-\" + livekitConfig.id,\n wsURL: livekitConfig.url,\n apiKey: livekitConfig.apiKey,\n apiSecret: livekitConfig.apiSecret,\n }),\n );\n }\n}\n","import { HttpClient } from \"./client.js\";\nimport { AgentsResource } from \"./resources/agents.js\";\nimport type { SahabAgentsOptions } from \"./types.js\";\n\nexport class SahabAgents {\n readonly agents: AgentsResource;\n\n constructor(options: SahabAgentsOptions) {\n const http = new HttpClient(options);\n this.agents = new AgentsResource(http, options);\n }\n}\n\nexport type { SahabAgentsOptions } from \"./types.js\";\n\nexport { ApiError, SahabAgentsError, TimeoutError } from \"./errors.js\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/utils/get-config.utils.ts","../src/store.ts","../src/resources/agents.ts","../src/index.ts"],"names":["path","fileURLToPath","cli","ServerOptions"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiErrorBody } from \"./types.js\";\n\nexport class SahabAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SahabAgentsError\";\n }\n}\n\nexport class ApiError extends SahabAgentsError {\n readonly status: number;\n readonly code?: string;\n readonly details?: unknown;\n\n constructor(status: number, body: ApiErrorBody) {\n super(body.message);\n this.name = \"ApiError\";\n this.status = status;\n this.code = body.code;\n this.details = body.details;\n }\n}\n\nexport class TimeoutError extends SahabAgentsError {\n constructor(timeoutMs: number) {\n super(`Request timed out after ${timeoutMs}ms`);\n this.name = \"TimeoutError\";\n }\n}\n","import { ApiError, TimeoutError } from \"./errors.js\";\nimport type { ApiErrorBody, SahabAgentsOptions } from \"./types.js\";\n\nconst DEFAULT_TIMEOUT = 30_000;\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly timeout: number;\n\n constructor(options: SahabAgentsOptions) {\n this.baseUrl = \"https://api.sahab.live/v1\";\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.defaultHeaders = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"api-key\": options.apiKey,\n ...options.headers,\n };\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n\n let response: Response;\n\n try {\n response = await fetch(url.toString(), {\n method,\n headers: this.defaultHeaders,\n body:\n options.body !== undefined ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new TimeoutError(this.timeout);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n let body: ApiErrorBody = { message: response.statusText };\n try {\n body = (await response.json()) as ApiErrorBody;\n } catch {\n // use default body\n }\n throw new ApiError(response.status, body);\n }\n\n // 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n get<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n return this.request<T>(\"GET\", path, { params });\n }\n\n post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, { body });\n }\n\n patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, { body });\n }\n\n delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n}\n","import { HttpClient } from \"../client.js\";\nimport type { LiveKitConfig } from \"../types.js\";\n\nexport async function getConfig(http: HttpClient): Promise<LiveKitConfig> {\n const response = await http.get<LiveKitConfig>(\"/auth/config\");\n return response;\n}\n","import type { LiveKitConfig, SahabAgentsOptions } from \"./types.js\";\n\nlet _options: SahabAgentsOptions | undefined;\nlet _livekitConfig: LiveKitConfig | undefined;\n\nexport function setOptions(options: SahabAgentsOptions): void {\n _options = options;\n}\n\nexport function getOptions(): SahabAgentsOptions {\n if (!_options) {\n throw new Error(\n \"SahabAgents options have not been set. Call initialize() first.\",\n );\n }\n return _options;\n}\n\nexport function setLiveKitConfig(config: LiveKitConfig): void {\n _livekitConfig = config;\n}\n\nexport function getLiveKitConfig(): LiveKitConfig {\n if (!_livekitConfig) {\n throw new Error(\n \"LiveKit config has not been set. Call initialize() first.\",\n );\n }\n return _livekitConfig;\n}\n","import { cli, ServerOptions } from \"@livekit/agents\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { HttpClient } from \"../client.js\";\nimport type { SahabAgentsOptions } from \"../types.js\";\nimport { getConfig } from \"../utils/get-config.utils.js\";\nimport { setOptions, setLiveKitConfig } from \"../store.js\";\n\nexport class AgentsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly options: SahabAgentsOptions,\n ) {}\n\n async initialize(mode: \"dev\" | \"start\" | \"connect\" = \"start\"): Promise<void> {\n const livekitConfig = await getConfig(this.http);\n setOptions(this.options);\n setLiveKitConfig(livekitConfig);\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const agentPath = path.resolve(__dirname, \"_internal-agent.js\");\n\n const knownCommands = [\"dev\", \"start\", \"connect\"];\n const hasCommand = process.argv\n .slice(2)\n .some((arg) => knownCommands.includes(arg));\n if (!hasCommand) {\n process.argv.splice(2, 0, mode);\n }\n\n // Inject credentials fetched from Sahab API into env so the livekit CLI\n // commander picks them up — the user never needs to set these manually.\n process.env.LIVEKIT_URL = livekitConfig.url;\n process.env.LIVEKIT_API_KEY = livekitConfig.apiKey;\n process.env.LIVEKIT_API_SECRET = livekitConfig.apiSecret;\n\n cli.runApp(\n new ServerOptions({\n agent: agentPath,\n agentName: \"sahab-agent-\" + livekitConfig.id,\n wsURL: livekitConfig.url,\n apiKey: livekitConfig.apiKey,\n apiSecret: livekitConfig.apiSecret,\n }),\n );\n }\n}\n","import { HttpClient } from \"./client.js\";\nimport { AgentsResource } from \"./resources/agents.js\";\nimport type { SahabAgentsOptions } from \"./types.js\";\n\nexport class SahabAgents {\n readonly agents: AgentsResource;\n\n constructor(options: SahabAgentsOptions) {\n const http = new HttpClient(options);\n this.agents = new AgentsResource(http, options);\n }\n}\n\nexport type { SahabAgentsOptions } from \"./types.js\";\n\nexport { ApiError, SahabAgentsError, TimeoutError } from \"./errors.js\";\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -19,7 +19,7 @@ declare class AgentsResource {
|
|
|
19
19
|
private readonly http;
|
|
20
20
|
private readonly options;
|
|
21
21
|
constructor(http: HttpClient, options: SahabAgentsOptions);
|
|
22
|
-
initialize(): Promise<void>;
|
|
22
|
+
initialize(mode?: "dev" | "start" | "connect"): Promise<void>;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
declare class SahabAgentsError extends Error {
|
package/dist/index.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ declare class AgentsResource {
|
|
|
19
19
|
private readonly http;
|
|
20
20
|
private readonly options;
|
|
21
21
|
constructor(http: HttpClient, options: SahabAgentsOptions);
|
|
22
|
-
initialize(): Promise<void>;
|
|
22
|
+
initialize(mode?: "dev" | "start" | "connect"): Promise<void>;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
declare class SahabAgentsError extends Error {
|
package/dist/index.js
CHANGED
|
@@ -112,11 +112,19 @@ var AgentsResource = class {
|
|
|
112
112
|
this.http = http;
|
|
113
113
|
this.options = options;
|
|
114
114
|
}
|
|
115
|
-
async initialize() {
|
|
115
|
+
async initialize(mode = "start") {
|
|
116
116
|
const livekitConfig = await getConfig(this.http);
|
|
117
117
|
setOptions(this.options);
|
|
118
118
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
119
119
|
const agentPath = path.resolve(__dirname, "_internal-agent.js");
|
|
120
|
+
const knownCommands = ["dev", "start", "connect"];
|
|
121
|
+
const hasCommand = process.argv.slice(2).some((arg) => knownCommands.includes(arg));
|
|
122
|
+
if (!hasCommand) {
|
|
123
|
+
process.argv.splice(2, 0, mode);
|
|
124
|
+
}
|
|
125
|
+
process.env.LIVEKIT_URL = livekitConfig.url;
|
|
126
|
+
process.env.LIVEKIT_API_KEY = livekitConfig.apiKey;
|
|
127
|
+
process.env.LIVEKIT_API_SECRET = livekitConfig.apiSecret;
|
|
120
128
|
cli.runApp(
|
|
121
129
|
new ServerOptions({
|
|
122
130
|
agent: agentPath,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/utils/get-config.utils.ts","../src/store.ts","../src/resources/agents.ts","../src/index.ts"],"names":["path"],"mappings":"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","file":"index.js","sourcesContent":["import type { ApiErrorBody } from \"./types.js\";\n\nexport class SahabAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SahabAgentsError\";\n }\n}\n\nexport class ApiError extends SahabAgentsError {\n readonly status: number;\n readonly code?: string;\n readonly details?: unknown;\n\n constructor(status: number, body: ApiErrorBody) {\n super(body.message);\n this.name = \"ApiError\";\n this.status = status;\n this.code = body.code;\n this.details = body.details;\n }\n}\n\nexport class TimeoutError extends SahabAgentsError {\n constructor(timeoutMs: number) {\n super(`Request timed out after ${timeoutMs}ms`);\n this.name = \"TimeoutError\";\n }\n}\n","import { ApiError, TimeoutError } from \"./errors.js\";\nimport type { ApiErrorBody, SahabAgentsOptions } from \"./types.js\";\n\nconst DEFAULT_TIMEOUT = 30_000;\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly timeout: number;\n\n constructor(options: SahabAgentsOptions) {\n this.baseUrl = \"https://api.sahab.live/v1\";\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.defaultHeaders = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"api-key\": options.apiKey,\n ...options.headers,\n };\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n\n let response: Response;\n\n try {\n response = await fetch(url.toString(), {\n method,\n headers: this.defaultHeaders,\n body:\n options.body !== undefined ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new TimeoutError(this.timeout);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n let body: ApiErrorBody = { message: response.statusText };\n try {\n body = (await response.json()) as ApiErrorBody;\n } catch {\n // use default body\n }\n throw new ApiError(response.status, body);\n }\n\n // 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n get<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n return this.request<T>(\"GET\", path, { params });\n }\n\n post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, { body });\n }\n\n patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, { body });\n }\n\n delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n}\n","import { HttpClient } from \"../client.js\";\nimport type { LiveKitConfig } from \"../types.js\";\n\nexport async function getConfig(http: HttpClient): Promise<LiveKitConfig> {\n const response = await http.get<LiveKitConfig>(\"/auth/config\");\n return response;\n}\n","import type { LiveKitConfig, SahabAgentsOptions } from \"./types.js\";\n\nlet _options: SahabAgentsOptions | undefined;\nlet _livekitConfig: LiveKitConfig | undefined;\n\nexport function setOptions(options: SahabAgentsOptions): void {\n _options = options;\n}\n\nexport function getOptions(): SahabAgentsOptions {\n if (!_options) {\n throw new Error(\n \"SahabAgents options have not been set. Call initialize() first.\",\n );\n }\n return _options;\n}\n\nexport function setLiveKitConfig(config: LiveKitConfig): void {\n _livekitConfig = config;\n}\n\nexport function getLiveKitConfig(): LiveKitConfig {\n if (!_livekitConfig) {\n throw new Error(\n \"LiveKit config has not been set. Call initialize() first.\",\n );\n }\n return _livekitConfig;\n}\n","import { cli, ServerOptions } from \"@livekit/agents\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { HttpClient } from \"../client.js\";\nimport type { SahabAgentsOptions } from \"../types.js\";\nimport { getConfig } from \"../utils/get-config.utils.js\";\nimport { setOptions, setLiveKitConfig } from \"../store.js\";\n\nexport class AgentsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly options: SahabAgentsOptions,\n ) {}\n\n async initialize(): Promise<void> {\n const livekitConfig = await getConfig(this.http);\n setOptions(this.options);\n setLiveKitConfig(livekitConfig);\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const agentPath = path.resolve(__dirname, \"_internal-agent.js\");\n\n cli.runApp(\n new ServerOptions({\n agent: agentPath,\n agentName: \"sahab-agent-\" + livekitConfig.id,\n wsURL: livekitConfig.url,\n apiKey: livekitConfig.apiKey,\n apiSecret: livekitConfig.apiSecret,\n }),\n );\n }\n}\n","import { HttpClient } from \"./client.js\";\nimport { AgentsResource } from \"./resources/agents.js\";\nimport type { SahabAgentsOptions } from \"./types.js\";\n\nexport class SahabAgents {\n readonly agents: AgentsResource;\n\n constructor(options: SahabAgentsOptions) {\n const http = new HttpClient(options);\n this.agents = new AgentsResource(http, options);\n }\n}\n\nexport type { SahabAgentsOptions } from \"./types.js\";\n\nexport { ApiError, SahabAgentsError, TimeoutError } from \"./errors.js\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/utils/get-config.utils.ts","../src/store.ts","../src/resources/agents.ts","../src/index.ts"],"names":["path"],"mappings":"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","file":"index.js","sourcesContent":["import type { ApiErrorBody } from \"./types.js\";\n\nexport class SahabAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SahabAgentsError\";\n }\n}\n\nexport class ApiError extends SahabAgentsError {\n readonly status: number;\n readonly code?: string;\n readonly details?: unknown;\n\n constructor(status: number, body: ApiErrorBody) {\n super(body.message);\n this.name = \"ApiError\";\n this.status = status;\n this.code = body.code;\n this.details = body.details;\n }\n}\n\nexport class TimeoutError extends SahabAgentsError {\n constructor(timeoutMs: number) {\n super(`Request timed out after ${timeoutMs}ms`);\n this.name = \"TimeoutError\";\n }\n}\n","import { ApiError, TimeoutError } from \"./errors.js\";\nimport type { ApiErrorBody, SahabAgentsOptions } from \"./types.js\";\n\nconst DEFAULT_TIMEOUT = 30_000;\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly timeout: number;\n\n constructor(options: SahabAgentsOptions) {\n this.baseUrl = \"https://api.sahab.live/v1\";\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.defaultHeaders = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"api-key\": options.apiKey,\n ...options.headers,\n };\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n\n let response: Response;\n\n try {\n response = await fetch(url.toString(), {\n method,\n headers: this.defaultHeaders,\n body:\n options.body !== undefined ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new TimeoutError(this.timeout);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n let body: ApiErrorBody = { message: response.statusText };\n try {\n body = (await response.json()) as ApiErrorBody;\n } catch {\n // use default body\n }\n throw new ApiError(response.status, body);\n }\n\n // 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n get<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n return this.request<T>(\"GET\", path, { params });\n }\n\n post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, { body });\n }\n\n patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, { body });\n }\n\n delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n}\n","import { HttpClient } from \"../client.js\";\nimport type { LiveKitConfig } from \"../types.js\";\n\nexport async function getConfig(http: HttpClient): Promise<LiveKitConfig> {\n const response = await http.get<LiveKitConfig>(\"/auth/config\");\n return response;\n}\n","import type { LiveKitConfig, SahabAgentsOptions } from \"./types.js\";\n\nlet _options: SahabAgentsOptions | undefined;\nlet _livekitConfig: LiveKitConfig | undefined;\n\nexport function setOptions(options: SahabAgentsOptions): void {\n _options = options;\n}\n\nexport function getOptions(): SahabAgentsOptions {\n if (!_options) {\n throw new Error(\n \"SahabAgents options have not been set. Call initialize() first.\",\n );\n }\n return _options;\n}\n\nexport function setLiveKitConfig(config: LiveKitConfig): void {\n _livekitConfig = config;\n}\n\nexport function getLiveKitConfig(): LiveKitConfig {\n if (!_livekitConfig) {\n throw new Error(\n \"LiveKit config has not been set. Call initialize() first.\",\n );\n }\n return _livekitConfig;\n}\n","import { cli, ServerOptions } from \"@livekit/agents\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { HttpClient } from \"../client.js\";\nimport type { SahabAgentsOptions } from \"../types.js\";\nimport { getConfig } from \"../utils/get-config.utils.js\";\nimport { setOptions, setLiveKitConfig } from \"../store.js\";\n\nexport class AgentsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly options: SahabAgentsOptions,\n ) {}\n\n async initialize(mode: \"dev\" | \"start\" | \"connect\" = \"start\"): Promise<void> {\n const livekitConfig = await getConfig(this.http);\n setOptions(this.options);\n setLiveKitConfig(livekitConfig);\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const agentPath = path.resolve(__dirname, \"_internal-agent.js\");\n\n const knownCommands = [\"dev\", \"start\", \"connect\"];\n const hasCommand = process.argv\n .slice(2)\n .some((arg) => knownCommands.includes(arg));\n if (!hasCommand) {\n process.argv.splice(2, 0, mode);\n }\n\n // Inject credentials fetched from Sahab API into env so the livekit CLI\n // commander picks them up — the user never needs to set these manually.\n process.env.LIVEKIT_URL = livekitConfig.url;\n process.env.LIVEKIT_API_KEY = livekitConfig.apiKey;\n process.env.LIVEKIT_API_SECRET = livekitConfig.apiSecret;\n\n cli.runApp(\n new ServerOptions({\n agent: agentPath,\n agentName: \"sahab-agent-\" + livekitConfig.id,\n wsURL: livekitConfig.url,\n apiKey: livekitConfig.apiKey,\n apiSecret: livekitConfig.apiSecret,\n }),\n );\n }\n}\n","import { HttpClient } from \"./client.js\";\nimport { AgentsResource } from \"./resources/agents.js\";\nimport type { SahabAgentsOptions } from \"./types.js\";\n\nexport class SahabAgents {\n readonly agents: AgentsResource;\n\n constructor(options: SahabAgentsOptions) {\n const http = new HttpClient(options);\n this.agents = new AgentsResource(http, options);\n }\n}\n\nexport type { SahabAgentsOptions } from \"./types.js\";\n\nexport { ApiError, SahabAgentsError, TimeoutError } from \"./errors.js\";\n"]}
|