@talk2view/sdk 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.
Files changed (87) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +594 -0
  3. package/dist/auth.d.ts +39 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +102 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +27 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +195 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/errors.d.ts +21 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +38 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/index.d.ts +80 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +115 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/react/ChatInput.d.ts +13 -0
  20. package/dist/react/ChatInput.d.ts.map +1 -0
  21. package/dist/react/ChatInput.js +163 -0
  22. package/dist/react/ChatInput.js.map +1 -0
  23. package/dist/react/ChatMessage.d.ts +10 -0
  24. package/dist/react/ChatMessage.d.ts.map +1 -0
  25. package/dist/react/ChatMessage.js +53 -0
  26. package/dist/react/ChatMessage.js.map +1 -0
  27. package/dist/react/ChatPanel.d.ts +17 -0
  28. package/dist/react/ChatPanel.d.ts.map +1 -0
  29. package/dist/react/ChatPanel.js +385 -0
  30. package/dist/react/ChatPanel.js.map +1 -0
  31. package/dist/react/LoginModal.d.ts +10 -0
  32. package/dist/react/LoginModal.d.ts.map +1 -0
  33. package/dist/react/LoginModal.js +135 -0
  34. package/dist/react/LoginModal.js.map +1 -0
  35. package/dist/react/SettingsView.d.ts +9 -0
  36. package/dist/react/SettingsView.d.ts.map +1 -0
  37. package/dist/react/SettingsView.js +190 -0
  38. package/dist/react/SettingsView.js.map +1 -0
  39. package/dist/react/T2VProvider.d.ts +25 -0
  40. package/dist/react/T2VProvider.d.ts.map +1 -0
  41. package/dist/react/T2VProvider.js +38 -0
  42. package/dist/react/T2VProvider.js.map +1 -0
  43. package/dist/react/index.d.ts +38 -0
  44. package/dist/react/index.d.ts.map +1 -0
  45. package/dist/react/index.js +28 -0
  46. package/dist/react/index.js.map +1 -0
  47. package/dist/react/theme.d.ts +32 -0
  48. package/dist/react/theme.d.ts.map +1 -0
  49. package/dist/react/theme.js +131 -0
  50. package/dist/react/theme.js.map +1 -0
  51. package/dist/react/useT2VAuth.d.ts +16 -0
  52. package/dist/react/useT2VAuth.d.ts.map +1 -0
  53. package/dist/react/useT2VAuth.js +52 -0
  54. package/dist/react/useT2VAuth.js.map +1 -0
  55. package/dist/react/useT2VChat.d.ts +28 -0
  56. package/dist/react/useT2VChat.d.ts.map +1 -0
  57. package/dist/react/useT2VChat.js +103 -0
  58. package/dist/react/useT2VChat.js.map +1 -0
  59. package/dist/react/useT2VTools.d.ts +11 -0
  60. package/dist/react/useT2VTools.d.ts.map +1 -0
  61. package/dist/react/useT2VTools.js +29 -0
  62. package/dist/react/useT2VTools.js.map +1 -0
  63. package/dist/react/useUserPreferences.d.ts +13 -0
  64. package/dist/react/useUserPreferences.d.ts.map +1 -0
  65. package/dist/react/useUserPreferences.js +40 -0
  66. package/dist/react/useUserPreferences.js.map +1 -0
  67. package/dist/sessions.d.ts +34 -0
  68. package/dist/sessions.d.ts.map +1 -0
  69. package/dist/sessions.js +95 -0
  70. package/dist/sessions.js.map +1 -0
  71. package/dist/storage.d.ts +16 -0
  72. package/dist/storage.d.ts.map +1 -0
  73. package/dist/storage.js +84 -0
  74. package/dist/storage.js.map +1 -0
  75. package/dist/streaming.d.ts +9 -0
  76. package/dist/streaming.d.ts.map +1 -0
  77. package/dist/streaming.js +45 -0
  78. package/dist/streaming.js.map +1 -0
  79. package/dist/tools.d.ts +40 -0
  80. package/dist/tools.d.ts.map +1 -0
  81. package/dist/tools.js +83 -0
  82. package/dist/tools.js.map +1 -0
  83. package/dist/types.d.ts +153 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +3 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +74 -0
package/dist/auth.js ADDED
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Auth module — login, signup, refresh, logout, auth state management.
3
+ */
4
+ import { AuthenticationError } from './errors';
5
+ import { clearAuth, getUser, hasValidTokens, setAccessToken, setUserApiKey, setRefreshToken, setUser, } from './storage';
6
+ export class T2VAuth {
7
+ client;
8
+ listeners = new Set();
9
+ constructor(client) {
10
+ this.client = client;
11
+ // Listen for auth cleared events (e.g., from 401 handling)
12
+ if (typeof window !== 'undefined') {
13
+ window.addEventListener('talk2view_auth_cleared', () => {
14
+ this.notifyListeners(null);
15
+ });
16
+ }
17
+ }
18
+ /**
19
+ * Create a new Talk2View account.
20
+ */
21
+ async signup(email, password) {
22
+ const request = { email, password };
23
+ const response = await this.client.request('/v1/auth/signup', { method: 'POST', body: JSON.stringify(request) }, false);
24
+ this.storeTokens(response);
25
+ const user = response.user;
26
+ if (!user)
27
+ throw new AuthenticationError('Signup succeeded but no user returned');
28
+ this.notifyListeners(user);
29
+ return user;
30
+ }
31
+ /**
32
+ * Authenticate with email and password.
33
+ */
34
+ async login(email, password) {
35
+ const request = { email, password };
36
+ const response = await this.client.request('/v1/auth/login', { method: 'POST', body: JSON.stringify(request) }, false);
37
+ this.storeTokens(response);
38
+ const user = response.user;
39
+ if (!user)
40
+ throw new AuthenticationError('Login succeeded but no user returned');
41
+ this.notifyListeners(user);
42
+ return user;
43
+ }
44
+ /**
45
+ * Sign out the current user.
46
+ */
47
+ async logout() {
48
+ try {
49
+ await this.client.request('/v1/auth/logout', { method: 'POST' });
50
+ }
51
+ catch {
52
+ // Logout failures are non-critical
53
+ }
54
+ clearAuth();
55
+ this.notifyListeners(null);
56
+ }
57
+ /**
58
+ * Get the current user (from storage).
59
+ */
60
+ getUser() {
61
+ const raw = getUser();
62
+ if (!raw)
63
+ return null;
64
+ try {
65
+ return JSON.parse(raw);
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ /**
72
+ * Check if a user is currently authenticated.
73
+ */
74
+ isAuthenticated() {
75
+ return hasValidTokens();
76
+ }
77
+ /**
78
+ * Subscribe to auth state changes.
79
+ */
80
+ onAuthStateChange(callback) {
81
+ this.listeners.add(callback);
82
+ return () => {
83
+ this.listeners.delete(callback);
84
+ };
85
+ }
86
+ storeTokens(response) {
87
+ setAccessToken(response.access_token);
88
+ setRefreshToken(response.refresh_token);
89
+ if (response.user) {
90
+ setUser(response.user);
91
+ }
92
+ if (response.user_api_key) {
93
+ setUserApiKey(response.user_api_key);
94
+ }
95
+ }
96
+ notifyListeners(user) {
97
+ for (const listener of this.listeners) {
98
+ listener(user);
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EACL,SAAS,EAET,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,OAAO,GACR,MAAM,WAAW,CAAC;AAKnB,MAAM,OAAO,OAAO;IAGW;IAFrB,SAAS,GAA2B,IAAI,GAAG,EAAE,CAAC;IAEtD,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;QAC5C,2DAA2D;QAC3D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,GAAG,EAAE;gBACrD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,QAAgB;QAC1C,MAAM,OAAO,GAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,iBAAiB,EACjB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EACjD,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,mBAAmB,CAAC,uCAAuC,CAAC,CAAC;QAElF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,QAAgB;QACzC,MAAM,OAAO,GAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,gBAAgB,EAChB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EACjD,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;QAEjF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAO,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;QACD,SAAS,EAAE,CAAC;QACZ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAS,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAA2B;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,QAAuB;QACzC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACtC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,IAAiB;QACvC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * HTTP/SSE API client with two-tier auth (partner key + user JWT).
3
+ */
4
+ import type { ChatCompletionChunk, T2VConfig } from './types';
5
+ export declare class T2VClient {
6
+ private readonly baseUrl;
7
+ private readonly partnerKey;
8
+ private isRefreshing;
9
+ private refreshPromise;
10
+ constructor(config: T2VConfig);
11
+ /**
12
+ * Make an authenticated JSON request.
13
+ */
14
+ request<T>(endpoint: string, options?: RequestInit, requiresAuth?: boolean): Promise<T>;
15
+ /**
16
+ * Make an authenticated multipart upload request (e.g. audio files).
17
+ * Does NOT set Content-Type — the browser sets it with the correct boundary.
18
+ */
19
+ uploadRequest<T>(endpoint: string, formData: FormData, requiresAuth?: boolean): Promise<T>;
20
+ /**
21
+ * Make an authenticated SSE streaming request.
22
+ */
23
+ streamRequest(endpoint: string, body: object): AsyncGenerator<ChatCompletionChunk>;
24
+ private tryRefreshToken;
25
+ private doRefreshToken;
26
+ }
27
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EACV,mBAAmB,EAEnB,SAAS,EACV,MAAM,SAAS,CAAC;AAIjB,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAiC;gBAE3C,MAAM,EAAE,SAAS;IAK7B;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,EACzB,YAAY,UAAO,GAClB,OAAO,CAAC,CAAC,CAAC;IAgDb;;;OAGG;IACG,aAAa,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,UAAO,GAClB,OAAO,CAAC,CAAC,CAAC;IAsDb;;OAEG;IACI,aAAa,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,cAAc,CAAC,mBAAmB,CAAC;YA6CxB,eAAe;YAgBf,cAAc;CAwB7B"}
package/dist/client.js ADDED
@@ -0,0 +1,195 @@
1
+ /**
2
+ * HTTP/SSE API client with two-tier auth (partner key + user JWT).
3
+ */
4
+ import { AuthenticationError, NetworkError, T2VError } from './errors';
5
+ import { clearAuth, getAccessToken, getRefreshToken, setAccessToken, setRefreshToken, } from './storage';
6
+ import { decodeSSEStream } from './streaming';
7
+ const DEFAULT_BASE_URL = 'https://engine.talk2view.com';
8
+ export class T2VClient {
9
+ baseUrl;
10
+ partnerKey;
11
+ isRefreshing = false;
12
+ refreshPromise = null;
13
+ constructor(config) {
14
+ this.partnerKey = config.partnerKey;
15
+ this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
16
+ }
17
+ /**
18
+ * Make an authenticated JSON request.
19
+ */
20
+ async request(endpoint, options = {}, requiresAuth = true) {
21
+ const headers = {
22
+ 'Content-Type': 'application/json',
23
+ 'X-T2V-Partner-Key': this.partnerKey,
24
+ ...options.headers,
25
+ };
26
+ if (requiresAuth) {
27
+ const token = getAccessToken();
28
+ if (token) {
29
+ headers['Authorization'] = `Bearer ${token}`;
30
+ }
31
+ }
32
+ let response;
33
+ try {
34
+ response = await fetch(`${this.baseUrl}${endpoint}`, { ...options, headers });
35
+ }
36
+ catch (err) {
37
+ throw new NetworkError(`Network request failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
38
+ }
39
+ // Handle 401 — try to refresh token
40
+ if (response.status === 401 && requiresAuth) {
41
+ const refreshed = await this.tryRefreshToken();
42
+ if (refreshed) {
43
+ headers['Authorization'] = `Bearer ${getAccessToken()}`;
44
+ const retryResponse = await fetch(`${this.baseUrl}${endpoint}`, { ...options, headers });
45
+ if (!retryResponse.ok) {
46
+ const error = await retryResponse.json().catch(() => ({ error: { message: 'Request failed' } }));
47
+ throw new T2VError(error?.error?.message ?? 'Request failed', error?.error?.type, retryResponse.status);
48
+ }
49
+ return retryResponse.json();
50
+ }
51
+ else {
52
+ clearAuth();
53
+ throw new AuthenticationError('Session expired. Please log in again.');
54
+ }
55
+ }
56
+ if (!response.ok) {
57
+ const error = await response.json().catch(() => ({ error: { message: 'Request failed' } }));
58
+ throw new T2VError(error?.error?.message ?? 'Request failed', error?.error?.type, response.status);
59
+ }
60
+ return response.json();
61
+ }
62
+ /**
63
+ * Make an authenticated multipart upload request (e.g. audio files).
64
+ * Does NOT set Content-Type — the browser sets it with the correct boundary.
65
+ */
66
+ async uploadRequest(endpoint, formData, requiresAuth = true) {
67
+ const headers = {
68
+ 'X-T2V-Partner-Key': this.partnerKey,
69
+ };
70
+ if (requiresAuth) {
71
+ const token = getAccessToken();
72
+ if (token) {
73
+ headers['Authorization'] = `Bearer ${token}`;
74
+ }
75
+ }
76
+ let response;
77
+ try {
78
+ response = await fetch(`${this.baseUrl}${endpoint}`, {
79
+ method: 'POST',
80
+ headers,
81
+ body: formData,
82
+ });
83
+ }
84
+ catch (err) {
85
+ throw new NetworkError(`Network request failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
86
+ }
87
+ // Handle 401 — try to refresh token
88
+ if (response.status === 401 && requiresAuth) {
89
+ const refreshed = await this.tryRefreshToken();
90
+ if (refreshed) {
91
+ headers['Authorization'] = `Bearer ${getAccessToken()}`;
92
+ const retryResponse = await fetch(`${this.baseUrl}${endpoint}`, {
93
+ method: 'POST',
94
+ headers,
95
+ body: formData,
96
+ });
97
+ if (!retryResponse.ok) {
98
+ const error = await retryResponse.json().catch(() => ({ error: { message: 'Upload failed' } }));
99
+ throw new T2VError(error?.error?.message ?? 'Upload failed', error?.error?.type, retryResponse.status);
100
+ }
101
+ return retryResponse.json();
102
+ }
103
+ else {
104
+ clearAuth();
105
+ throw new AuthenticationError('Session expired. Please log in again.');
106
+ }
107
+ }
108
+ if (!response.ok) {
109
+ const error = await response.json().catch(() => ({ error: { message: 'Upload failed' } }));
110
+ throw new T2VError(error?.error?.message ?? 'Upload failed', error?.error?.type, response.status);
111
+ }
112
+ return response.json();
113
+ }
114
+ /**
115
+ * Make an authenticated SSE streaming request.
116
+ */
117
+ async *streamRequest(endpoint, body) {
118
+ const headers = {
119
+ 'Content-Type': 'application/json',
120
+ 'X-T2V-Partner-Key': this.partnerKey,
121
+ };
122
+ const token = getAccessToken();
123
+ if (token) {
124
+ headers['Authorization'] = `Bearer ${token}`;
125
+ }
126
+ const response = await fetch(`${this.baseUrl}${endpoint}`, {
127
+ method: 'POST',
128
+ headers,
129
+ body: JSON.stringify(body),
130
+ });
131
+ if (!response.ok) {
132
+ if (response.status === 401) {
133
+ const refreshed = await this.tryRefreshToken();
134
+ if (refreshed) {
135
+ // Retry with new token
136
+ headers['Authorization'] = `Bearer ${getAccessToken()}`;
137
+ const retryResponse = await fetch(`${this.baseUrl}${endpoint}`, {
138
+ method: 'POST',
139
+ headers,
140
+ body: JSON.stringify(body),
141
+ });
142
+ if (!retryResponse.ok) {
143
+ throw new T2VError('Stream request failed after token refresh');
144
+ }
145
+ yield* decodeSSEStream(retryResponse);
146
+ return;
147
+ }
148
+ clearAuth();
149
+ throw new AuthenticationError('Session expired. Please log in again.');
150
+ }
151
+ const error = await response.json().catch(() => ({ error: { message: 'Stream request failed' } }));
152
+ throw new T2VError(error?.error?.message ?? 'Stream request failed', error?.error?.type, response.status);
153
+ }
154
+ yield* decodeSSEStream(response);
155
+ }
156
+ async tryRefreshToken() {
157
+ if (this.isRefreshing) {
158
+ return this.refreshPromise;
159
+ }
160
+ this.isRefreshing = true;
161
+ this.refreshPromise = this.doRefreshToken();
162
+ try {
163
+ return await this.refreshPromise;
164
+ }
165
+ finally {
166
+ this.isRefreshing = false;
167
+ this.refreshPromise = null;
168
+ }
169
+ }
170
+ async doRefreshToken() {
171
+ const refreshToken = getRefreshToken();
172
+ if (!refreshToken)
173
+ return false;
174
+ try {
175
+ const response = await fetch(`${this.baseUrl}/v1/auth/refresh`, {
176
+ method: 'POST',
177
+ headers: {
178
+ 'Content-Type': 'application/json',
179
+ 'X-T2V-Partner-Key': this.partnerKey,
180
+ },
181
+ body: JSON.stringify({ refresh_token: refreshToken }),
182
+ });
183
+ if (!response.ok)
184
+ return false;
185
+ const data = await response.json();
186
+ setAccessToken(data.access_token);
187
+ setRefreshToken(data.refresh_token);
188
+ return true;
189
+ }
190
+ catch {
191
+ return false;
192
+ }
193
+ }
194
+ }
195
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EACL,SAAS,EACT,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AAExD,MAAM,OAAO,SAAS;IACH,OAAO,CAAS;IAChB,UAAU,CAAS;IAC5B,YAAY,GAAG,KAAK,CAAC;IACrB,cAAc,GAA4B,IAAI,CAAC;IAEvD,YAAY,MAAiB;QAC3B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,UAAuB,EAAE,EACzB,YAAY,GAAG,IAAI;QAEnB,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,mBAAmB,EAAE,IAAI,CAAC,UAAU;YACpC,GAAI,OAAO,CAAC,OAA8C;SAC3D,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,YAAY,CACpB,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAClF,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,cAAc,EAAE,EAAE,CAAC;gBACxD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzF,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;oBACjG,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC1G,CAAC;gBACD,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,SAAS,EAAE,CAAC;gBACZ,MAAM,IAAI,mBAAmB,CAAC,uCAAuC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5F,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrG,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CACjB,QAAgB,EAChB,QAAkB,EAClB,YAAY,GAAG,IAAI;QAEnB,MAAM,OAAO,GAA2B;YACtC,mBAAmB,EAAE,IAAI,CAAC,UAAU;SACrC,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,YAAY,CACpB,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAClF,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,cAAc,EAAE,EAAE,CAAC;gBACxD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;oBAC9D,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,QAAQ;iBACf,CAAC,CAAC;gBACH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;oBAChG,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;gBACzG,CAAC;gBACD,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,SAAS,EAAE,CAAC;gBACZ,MAAM,IAAI,mBAAmB,CAAC,uCAAuC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3F,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpG,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,aAAa,CAClB,QAAgB,EAChB,IAAY;QAEZ,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,mBAAmB,EAAE,IAAI,CAAC,UAAU;SACrC,CAAC;QAEF,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC/C,IAAI,SAAS,EAAE,CAAC;oBACd,uBAAuB;oBACvB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,cAAc,EAAE,EAAE,CAAC;oBACxD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;wBAC9D,MAAM,EAAE,MAAM;wBACd,OAAO;wBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBAC3B,CAAC,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;wBACtB,MAAM,IAAI,QAAQ,CAAC,2CAA2C,CAAC,CAAC;oBAClE,CAAC;oBACD,KAAK,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;oBACtC,OAAO;gBACT,CAAC;gBACD,SAAS,EAAE,CAAC;gBACZ,MAAM,IAAI,mBAAmB,CAAC,uCAAuC,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC;YACnG,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,uBAAuB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5G,CAAC;QAED,KAAK,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,cAAe,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5C,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,EAAE;gBAC9D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,mBAAmB,EAAE,IAAI,CAAC,UAAU;iBACrC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;aACtD,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;YAE/B,MAAM,IAAI,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpD,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Base error class for Talk2View SDK errors.
3
+ */
4
+ export declare class T2VError extends Error {
5
+ readonly type: string;
6
+ readonly statusCode?: number | undefined;
7
+ constructor(message: string, type?: string, statusCode?: number | undefined);
8
+ }
9
+ export declare class AuthenticationError extends T2VError {
10
+ constructor(message: string);
11
+ }
12
+ export declare class PartnerKeyError extends T2VError {
13
+ constructor(message: string);
14
+ }
15
+ export declare class SessionError extends T2VError {
16
+ constructor(message: string);
17
+ }
18
+ export declare class NetworkError extends T2VError {
19
+ constructor(message: string);
20
+ }
21
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,EAAE,MAAM;aACZ,UAAU,CAAC,EAAE,MAAM;gBAFnC,OAAO,EAAE,MAAM,EACC,IAAI,GAAE,MAAoB,EAC1B,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM;CAI5B"}
package/dist/errors.js ADDED
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Base error class for Talk2View SDK errors.
3
+ */
4
+ export class T2VError extends Error {
5
+ type;
6
+ statusCode;
7
+ constructor(message, type = 'sdk_error', statusCode) {
8
+ super(message);
9
+ this.type = type;
10
+ this.statusCode = statusCode;
11
+ this.name = 'T2VError';
12
+ }
13
+ }
14
+ export class AuthenticationError extends T2VError {
15
+ constructor(message) {
16
+ super(message, 'authentication_error', 401);
17
+ this.name = 'AuthenticationError';
18
+ }
19
+ }
20
+ export class PartnerKeyError extends T2VError {
21
+ constructor(message) {
22
+ super(message, 'partner_key_error', 401);
23
+ this.name = 'PartnerKeyError';
24
+ }
25
+ }
26
+ export class SessionError extends T2VError {
27
+ constructor(message) {
28
+ super(message, 'session_error');
29
+ this.name = 'SessionError';
30
+ }
31
+ }
32
+ export class NetworkError extends T2VError {
33
+ constructor(message) {
34
+ super(message, 'network_error');
35
+ this.name = 'NetworkError';
36
+ }
37
+ }
38
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGf;IACA;IAHlB,YACE,OAAe,EACC,OAAe,WAAW,EAC1B,UAAmB;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAsB;QAC1B,eAAU,GAAV,UAAU,CAAS;QAGnC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Talk2View SDK — Add AI-powered natural language control to any application.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Talk2View } from '@talk2view/sdk';
7
+ *
8
+ * const t2v = new Talk2View({ partnerKey: 'pk_live_abc123' });
9
+ *
10
+ * await t2v.auth.login('user@example.com', 'password');
11
+ *
12
+ * t2v.tools.handle('create_shape', async (args) => {
13
+ * return JSON.stringify(await myApp.createShape(args));
14
+ * });
15
+ *
16
+ * await t2v.tools.register([{
17
+ * name: 'create_shape',
18
+ * description: 'Create a 3D shape',
19
+ * parameters: { type: 'object', properties: { ... }, required: [...] },
20
+ * }]);
21
+ *
22
+ * for await (const event of t2v.chat('Make a red cylinder')) {
23
+ * if (event.type === 'text') console.log(event.content);
24
+ * }
25
+ * ```
26
+ */
27
+ import { T2VAuth } from './auth';
28
+ import { T2VSession } from './sessions';
29
+ import { T2VTools } from './tools';
30
+ import type { AudioModelsResponse, ChatEvent, ChatMessage, ModelsResponse, T2VConfig, TranscriptionResponse } from './types';
31
+ export declare class Talk2View {
32
+ readonly auth: T2VAuth;
33
+ readonly tools: T2VTools;
34
+ private readonly client;
35
+ readonly config: T2VConfig;
36
+ private currentSession;
37
+ constructor(config: T2VConfig);
38
+ /**
39
+ * Create a new chat session.
40
+ */
41
+ createSession(): Promise<T2VSession>;
42
+ /**
43
+ * Send a message with automatic session management and tool handling.
44
+ *
45
+ * Creates a session if one doesn't exist. Tool calls are handled
46
+ * automatically if handlers are registered via `t2v.tools.handle()`.
47
+ */
48
+ chat(message: string, options?: {
49
+ systemPrompt?: string;
50
+ history?: ChatMessage[];
51
+ }): AsyncGenerator<ChatEvent>;
52
+ /**
53
+ * List available LLM models.
54
+ */
55
+ listModels(): Promise<ModelsResponse>;
56
+ /**
57
+ * Transcribe audio via the engine's /v1/audio/transcriptions endpoint.
58
+ */
59
+ transcribe(formData: FormData): Promise<TranscriptionResponse>;
60
+ /**
61
+ * List available speech-to-text models.
62
+ */
63
+ listAudioModels(): Promise<AudioModelsResponse>;
64
+ /**
65
+ * Get the current session (if any).
66
+ */
67
+ getSession(): T2VSession | null;
68
+ /**
69
+ * Clear the current session so the next chat() creates a new one.
70
+ * Also deletes the session on the server so conversation history is reset.
71
+ */
72
+ clearSession(): void;
73
+ }
74
+ export { T2VAuth } from './auth';
75
+ export { T2VClient } from './client';
76
+ export { T2VSession } from './sessions';
77
+ export { T2VTools } from './tools';
78
+ export { T2VError, AuthenticationError, PartnerKeyError, SessionError, NetworkError } from './errors';
79
+ export type { T2VConfig, User, ChatEvent, ChatMessage, ClientTool, ClientToolSchema, ToolHandler, TokenResponse, ToolCallInterrupt, AgentStatus, ChatCompletionChunk, RegisterToolsResponse, Model, ModelsResponse, TranscriptionResponse, AudioModelsResponse, UserPreferences, } from './types';
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,WAAW,EAAS,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEpI,qBAAa,SAAS;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,cAAc,CAA2B;gBAErC,MAAM,EAAE,SAAS;IAc7B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAe1C;;;;;OAKG;IACI,IAAI,CACT,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE,GAC3D,cAAc,CAAC,SAAS,CAAC;IAQ5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAI3C;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIpE;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIrD;;OAEG;IACH,UAAU,IAAI,UAAU,GAAG,IAAI;IAI/B;;;OAGG;IACH,YAAY,IAAI,IAAI;CAQrB;AAGD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtG,YAAY,EACV,SAAS,EACT,IAAI,EACJ,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,GAChB,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Talk2View SDK — Add AI-powered natural language control to any application.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Talk2View } from '@talk2view/sdk';
7
+ *
8
+ * const t2v = new Talk2View({ partnerKey: 'pk_live_abc123' });
9
+ *
10
+ * await t2v.auth.login('user@example.com', 'password');
11
+ *
12
+ * t2v.tools.handle('create_shape', async (args) => {
13
+ * return JSON.stringify(await myApp.createShape(args));
14
+ * });
15
+ *
16
+ * await t2v.tools.register([{
17
+ * name: 'create_shape',
18
+ * description: 'Create a 3D shape',
19
+ * parameters: { type: 'object', properties: { ... }, required: [...] },
20
+ * }]);
21
+ *
22
+ * for await (const event of t2v.chat('Make a red cylinder')) {
23
+ * if (event.type === 'text') console.log(event.content);
24
+ * }
25
+ * ```
26
+ */
27
+ import { T2VAuth } from './auth';
28
+ import { T2VClient } from './client';
29
+ import { T2VSession } from './sessions';
30
+ import { T2VTools } from './tools';
31
+ export class Talk2View {
32
+ auth;
33
+ tools;
34
+ client;
35
+ config;
36
+ currentSession = null;
37
+ constructor(config) {
38
+ if (config.voiceApiUrl) {
39
+ console.warn('[Talk2View] voiceApiUrl is deprecated and has no effect. ' +
40
+ 'Voice requests now route through baseUrl. ' +
41
+ 'Remove voiceApiUrl from your T2VConfig.');
42
+ }
43
+ this.config = config;
44
+ this.client = new T2VClient(config);
45
+ this.auth = new T2VAuth(this.client);
46
+ this.tools = new T2VTools(this.client);
47
+ }
48
+ /**
49
+ * Create a new chat session.
50
+ */
51
+ async createSession() {
52
+ const response = await this.client.request('/v1/sessions', {
53
+ method: 'POST',
54
+ body: JSON.stringify({ model: this.config.model }),
55
+ });
56
+ const session = new T2VSession(response, this.client, this.tools, this.config);
57
+ this.currentSession = session;
58
+ return session;
59
+ }
60
+ /**
61
+ * Send a message with automatic session management and tool handling.
62
+ *
63
+ * Creates a session if one doesn't exist. Tool calls are handled
64
+ * automatically if handlers are registered via `t2v.tools.handle()`.
65
+ */
66
+ async *chat(message, options) {
67
+ if (!this.currentSession) {
68
+ await this.createSession();
69
+ }
70
+ yield* this.currentSession.sendMessage(message, options);
71
+ }
72
+ /**
73
+ * List available LLM models.
74
+ */
75
+ async listModels() {
76
+ return this.client.request('/v1/models');
77
+ }
78
+ /**
79
+ * Transcribe audio via the engine's /v1/audio/transcriptions endpoint.
80
+ */
81
+ async transcribe(formData) {
82
+ return this.client.uploadRequest('/v1/audio/transcriptions', formData);
83
+ }
84
+ /**
85
+ * List available speech-to-text models.
86
+ */
87
+ async listAudioModels() {
88
+ return this.client.request('/v1/audio/models');
89
+ }
90
+ /**
91
+ * Get the current session (if any).
92
+ */
93
+ getSession() {
94
+ return this.currentSession;
95
+ }
96
+ /**
97
+ * Clear the current session so the next chat() creates a new one.
98
+ * Also deletes the session on the server so conversation history is reset.
99
+ */
100
+ clearSession() {
101
+ if (this.currentSession) {
102
+ const sessionId = this.currentSession.id;
103
+ // Fire-and-forget — don't block the UI on server cleanup
104
+ this.client.request(`/v1/sessions/${sessionId}`, { method: 'DELETE' }).catch(() => { });
105
+ }
106
+ this.currentSession = null;
107
+ }
108
+ }
109
+ // Re-export types and classes for consumers
110
+ export { T2VAuth } from './auth';
111
+ export { T2VClient } from './client';
112
+ export { T2VSession } from './sessions';
113
+ export { T2VTools } from './tools';
114
+ export { T2VError, AuthenticationError, PartnerKeyError, SessionError, NetworkError } from './errors';
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ChatInput — text input with mic and send buttons.
3
+ *
4
+ * Voice input uses MediaRecorder + Talk2View's /v1/audio/transcriptions endpoint.
5
+ */
6
+ export interface ChatInputProps {
7
+ onSend: (message: string) => void;
8
+ disabled?: boolean;
9
+ placeholder?: string;
10
+ className?: string;
11
+ }
12
+ export declare function ChatInput({ onSend, disabled, placeholder, className, }: ChatInputProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=ChatInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../src/react/ChatInput.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,QAAgB,EAChB,WAAiC,EACjC,SAAc,GACf,EAAE,cAAc,2CAgOhB"}