@talk2view/sdk 0.12.0 → 0.13.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/dist/auth.d.ts +21 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +132 -17
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +30 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +67 -16
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +15 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +17 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +8 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +9 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -4
- package/dist/index.js.map +1 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +9 -2
- package/dist/streaming.js.map +1 -1
- package/dist/ui/components/Composer.d.ts.map +1 -1
- package/dist/ui/components/Composer.js +42 -6
- package/dist/ui/components/Composer.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +12 -0
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/Talk2View.js +8 -5
- package/dist/ui/components/Talk2View.js.map +1 -1
- package/package.json +5 -2
package/dist/auth.d.ts
CHANGED
|
@@ -35,10 +35,13 @@ export declare class T2VAuth {
|
|
|
35
35
|
* Authenticate with email and password.
|
|
36
36
|
*/
|
|
37
37
|
login(email: string, password: string): Promise<User>;
|
|
38
|
+
private oauthAbort?;
|
|
38
39
|
/** Sign in with Google via a popup (engine-mediated OAuth). */
|
|
39
40
|
signInWithGoogle(): Promise<User>;
|
|
40
41
|
signInWithOAuth(provider: string): Promise<User>;
|
|
41
42
|
private pollOAuthExchange;
|
|
43
|
+
/** Abortable delay used by the OAuth poll loop. */
|
|
44
|
+
private sleep;
|
|
42
45
|
/**
|
|
43
46
|
* Sign out the current user.
|
|
44
47
|
*/
|
|
@@ -51,6 +54,24 @@ export declare class T2VAuth {
|
|
|
51
54
|
* Check if a user is currently authenticated.
|
|
52
55
|
*/
|
|
53
56
|
isAuthenticated(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Return an access token valid *right now*, for a DIRECT request the SDK
|
|
59
|
+
* transport doesn't make for you — streaming straight to a third party, or a
|
|
60
|
+
* self-hosted backend on another origin. Proactively refreshes when the stored
|
|
61
|
+
* token is missing, expired, or within {@link TOKEN_EXPIRY_SKEW_SECONDS} of
|
|
62
|
+
* expiry; pass `forceRefresh` to refresh unconditionally (use that after a
|
|
63
|
+
* direct request still returns 401, e.g. clock skew or a server-side revoke).
|
|
64
|
+
*
|
|
65
|
+
* Refreshes are deduped with the SDK's own 401 handling, so a direct call and
|
|
66
|
+
* an in-flight SDK request never double-rotate the (rotating) refresh token.
|
|
67
|
+
* Returns null only when the session is genuinely dead (refresh token revoked
|
|
68
|
+
* or expired): auth is then cleared and listeners notified, so the app drops
|
|
69
|
+
* to logged-out. On a transient failure (network / 409 / 429) the existing
|
|
70
|
+
* token is returned so the caller can proceed or retry.
|
|
71
|
+
*/
|
|
72
|
+
getValidAccessToken(opts?: {
|
|
73
|
+
forceRefresh?: boolean;
|
|
74
|
+
}): Promise<string | null>;
|
|
54
75
|
/**
|
|
55
76
|
* Subscribe to auth state changes.
|
|
56
77
|
*/
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAe1C,OAAO,KAAK,EAA8C,IAAI,EAAE,MAAM,SAAS,CAAC;AAEhF,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAe1C,OAAO,KAAK,EAA8C,IAAI,EAAE,MAAM,SAAS,CAAC;AAEhF,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AA+BrD,qBAAa,OAAO;IAqBN,OAAO,CAAC,QAAQ,CAAC,MAAM;IApBnC,OAAO,CAAC,SAAS,CAAqC;IAGtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAEF;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKxB;gBAE2B,MAAM,EAAE,SAAS;IAW9C;;;OAGG;IACH,OAAO,IAAI,IAAI;IAOf,oDAAoD;IAC9C,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE,gEAAgE;IAChE,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC5D;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3D,OAAO,CAAC,UAAU,CAAC,CAAkB;IAErC,+DAA+D;IACzD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAoCxC,iBAAiB;IAqD/B,mDAAmD;IACnD,OAAO,CAAC,KAAK;IAkBb;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B;;OAEG;IACH,OAAO,IAAI,IAAI,GAAG,IAAI;IAUtB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;;;;;;;;;;;OAcG;IACG,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBpF;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAO1D,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,eAAe;CAKxB"}
|
package/dist/auth.js
CHANGED
|
@@ -3,6 +3,35 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { AuthenticationError, T2VError } from './errors';
|
|
5
5
|
import { ACCESS_TOKEN_STORAGE_KEY, clearAuth, getAccessToken, getIsAnonymous, getUser, hasValidTokens, setAccessToken, setIsAnonymous, setUserApiKey, setRefreshToken, setUser, } from './storage';
|
|
6
|
+
// Refresh a token this many seconds before it actually expires, so a request
|
|
7
|
+
// fired right at the boundary doesn't race the expiry against clock skew.
|
|
8
|
+
const TOKEN_EXPIRY_SKEW_SECONDS = 30;
|
|
9
|
+
/**
|
|
10
|
+
* True when a JWT is expired or within the skew window of expiring. Returns
|
|
11
|
+
* false when the token can't be parsed or carries no numeric `exp` — we can't
|
|
12
|
+
* prove it's stale, so we let the reactive 401 path handle it rather than
|
|
13
|
+
* refresh on every call.
|
|
14
|
+
*/
|
|
15
|
+
function isExpiringSoon(token, skewSeconds = TOKEN_EXPIRY_SKEW_SECONDS) {
|
|
16
|
+
const exp = decodeJwtExp(token);
|
|
17
|
+
if (exp === null)
|
|
18
|
+
return false;
|
|
19
|
+
return exp - Date.now() / 1000 <= skewSeconds;
|
|
20
|
+
}
|
|
21
|
+
function decodeJwtExp(token) {
|
|
22
|
+
const payloadPart = token.split('.')[1];
|
|
23
|
+
if (!payloadPart || typeof atob !== 'function')
|
|
24
|
+
return null;
|
|
25
|
+
try {
|
|
26
|
+
const base64 = payloadPart.replace(/-/g, '+').replace(/_/g, '/');
|
|
27
|
+
const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);
|
|
28
|
+
const payload = JSON.parse(atob(padded));
|
|
29
|
+
return typeof payload.exp === 'number' ? payload.exp : null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
6
35
|
export class T2VAuth {
|
|
7
36
|
client;
|
|
8
37
|
listeners = new Set();
|
|
@@ -103,6 +132,10 @@ export class T2VAuth {
|
|
|
103
132
|
this.notifyListeners(user);
|
|
104
133
|
return user;
|
|
105
134
|
}
|
|
135
|
+
// Aborts the in-flight OAuth poll loop, if any. A new attempt cancels the
|
|
136
|
+
// previous one so its loop can't linger as a "zombie" and reject a later
|
|
137
|
+
// attempt with a stale "expired"/"window closed" error.
|
|
138
|
+
oauthAbort;
|
|
106
139
|
/** Sign in with Google via a popup (engine-mediated OAuth). */
|
|
107
140
|
async signInWithGoogle() {
|
|
108
141
|
return this.signInWithOAuth('google');
|
|
@@ -111,6 +144,10 @@ export class T2VAuth {
|
|
|
111
144
|
if (typeof window === 'undefined') {
|
|
112
145
|
throw new T2VError('OAuth sign-in requires a browser environment');
|
|
113
146
|
}
|
|
147
|
+
// Cancel any still-running attempt before starting a new one.
|
|
148
|
+
this.oauthAbort?.abort();
|
|
149
|
+
const abort = new AbortController();
|
|
150
|
+
this.oauthAbort = abort;
|
|
114
151
|
const bytes = new Uint8Array(32); // 256-bit nonce
|
|
115
152
|
window.crypto.getRandomValues(bytes);
|
|
116
153
|
const nonce = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
|
@@ -118,12 +155,14 @@ export class T2VAuth {
|
|
|
118
155
|
origin: window.location.origin,
|
|
119
156
|
nonce,
|
|
120
157
|
});
|
|
121
|
-
|
|
158
|
+
// Unique window name per attempt. A fixed name makes a rapid re-click reuse
|
|
159
|
+
// (navigate) the SAME popup, stranding the previous attempt's poll loop.
|
|
160
|
+
const popup = window.open(startUrl, `t2v-oauth-${nonce.slice(0, 12)}`, 'width=480,height=720');
|
|
122
161
|
if (!popup) {
|
|
123
162
|
throw new T2VError('Popup blocked. Please allow popups and try again.');
|
|
124
163
|
}
|
|
125
164
|
try {
|
|
126
|
-
const tokens = await this.pollOAuthExchange(nonce,
|
|
165
|
+
const tokens = await this.pollOAuthExchange(nonce, abort.signal);
|
|
127
166
|
this.storeTokens(tokens);
|
|
128
167
|
const user = tokens.user;
|
|
129
168
|
if (!user)
|
|
@@ -134,34 +173,78 @@ export class T2VAuth {
|
|
|
134
173
|
finally {
|
|
135
174
|
if (!popup.closed)
|
|
136
175
|
popup.close();
|
|
176
|
+
if (this.oauthAbort === abort)
|
|
177
|
+
this.oauthAbort = undefined;
|
|
137
178
|
}
|
|
138
179
|
}
|
|
139
|
-
async pollOAuthExchange(nonce,
|
|
180
|
+
async pollOAuthExchange(nonce, signal) {
|
|
140
181
|
const deadlineMs = Date.now() + 180_000;
|
|
141
|
-
let delay =
|
|
182
|
+
let delay = 600;
|
|
183
|
+
// Has the txn ever been observed server-side? Distinguishes a benign early
|
|
184
|
+
// 410 ("/start hasn't created the row yet" — the first poll can beat the
|
|
185
|
+
// popup's redirect) from a real one ("the row existed and then expired").
|
|
186
|
+
//
|
|
187
|
+
// We deliberately do NOT gate on `popup.closed`. The popup navigates through
|
|
188
|
+
// pages that send Cross-Origin-Opener-Policy (the engine `/start` redirect,
|
|
189
|
+
// Supabase, and Google), which severs the opener↔popup link and makes
|
|
190
|
+
// `popup.closed` report `true` mid-flow — a false positive that would abort
|
|
191
|
+
// a perfectly live sign-in. The flow is poll-based (the session comes from
|
|
192
|
+
// the server, not the popup), so the handle isn't needed for correctness:
|
|
193
|
+
// we poll until ready, the txn expires (→ 410 after it was seen), or the
|
|
194
|
+
// 180s deadline (which matches the server-side txn TTL).
|
|
195
|
+
let sawTxn = false;
|
|
142
196
|
while (Date.now() < deadlineMs) {
|
|
143
|
-
|
|
197
|
+
if (signal.aborted)
|
|
198
|
+
throw new AuthenticationError('Sign-in was cancelled.');
|
|
199
|
+
let ready = null;
|
|
200
|
+
let missing = false;
|
|
144
201
|
try {
|
|
145
|
-
body = await this.client.request('/v1/auth/oauth/exchange', { method: 'POST', body: JSON.stringify({ nonce }) }, false);
|
|
202
|
+
const body = await this.client.request('/v1/auth/oauth/exchange', { method: 'POST', body: JSON.stringify({ nonce }) }, false);
|
|
203
|
+
if (body.access_token) {
|
|
204
|
+
ready = body;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
sawTxn = true; // 202 pending → the txn exists; keep waiting for it
|
|
208
|
+
}
|
|
146
209
|
}
|
|
147
210
|
catch (err) {
|
|
148
|
-
// 410 (expired/consumed) is terminal; surface it.
|
|
149
211
|
if (err instanceof T2VError && err.statusCode === 410) {
|
|
150
|
-
|
|
212
|
+
// 410 after we've seen the txn = genuinely expired/consumed → terminal.
|
|
213
|
+
// 410 before that = the row isn't created yet (race) → keep polling.
|
|
214
|
+
if (sawTxn)
|
|
215
|
+
throw new AuthenticationError('Sign-in expired. Please try again.');
|
|
216
|
+
missing = true;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw err;
|
|
151
220
|
}
|
|
152
|
-
throw err;
|
|
153
|
-
}
|
|
154
|
-
if (body.access_token) {
|
|
155
|
-
return body;
|
|
156
|
-
}
|
|
157
|
-
if (popup.closed) {
|
|
158
|
-
throw new AuthenticationError('Sign-in window was closed before completing.');
|
|
159
221
|
}
|
|
160
|
-
|
|
161
|
-
|
|
222
|
+
if (ready)
|
|
223
|
+
return ready;
|
|
224
|
+
await this.sleep(missing ? 400 : delay, signal);
|
|
225
|
+
if (!missing)
|
|
226
|
+
delay = Math.min(delay * 1.5, 4000);
|
|
162
227
|
}
|
|
163
228
|
throw new AuthenticationError('Google sign-in timed out.');
|
|
164
229
|
}
|
|
230
|
+
/** Abortable delay used by the OAuth poll loop. */
|
|
231
|
+
sleep(ms, signal) {
|
|
232
|
+
return new Promise((resolve, reject) => {
|
|
233
|
+
if (signal.aborted) {
|
|
234
|
+
reject(new AuthenticationError('Sign-in was cancelled.'));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const timer = setTimeout(() => {
|
|
238
|
+
signal.removeEventListener('abort', onAbort);
|
|
239
|
+
resolve();
|
|
240
|
+
}, ms);
|
|
241
|
+
const onAbort = () => {
|
|
242
|
+
clearTimeout(timer);
|
|
243
|
+
reject(new AuthenticationError('Sign-in was cancelled.'));
|
|
244
|
+
};
|
|
245
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
246
|
+
});
|
|
247
|
+
}
|
|
165
248
|
/**
|
|
166
249
|
* Sign out the current user.
|
|
167
250
|
*/
|
|
@@ -200,6 +283,38 @@ export class T2VAuth {
|
|
|
200
283
|
isAuthenticated() {
|
|
201
284
|
return hasValidTokens();
|
|
202
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* Return an access token valid *right now*, for a DIRECT request the SDK
|
|
288
|
+
* transport doesn't make for you — streaming straight to a third party, or a
|
|
289
|
+
* self-hosted backend on another origin. Proactively refreshes when the stored
|
|
290
|
+
* token is missing, expired, or within {@link TOKEN_EXPIRY_SKEW_SECONDS} of
|
|
291
|
+
* expiry; pass `forceRefresh` to refresh unconditionally (use that after a
|
|
292
|
+
* direct request still returns 401, e.g. clock skew or a server-side revoke).
|
|
293
|
+
*
|
|
294
|
+
* Refreshes are deduped with the SDK's own 401 handling, so a direct call and
|
|
295
|
+
* an in-flight SDK request never double-rotate the (rotating) refresh token.
|
|
296
|
+
* Returns null only when the session is genuinely dead (refresh token revoked
|
|
297
|
+
* or expired): auth is then cleared and listeners notified, so the app drops
|
|
298
|
+
* to logged-out. On a transient failure (network / 409 / 429) the existing
|
|
299
|
+
* token is returned so the caller can proceed or retry.
|
|
300
|
+
*/
|
|
301
|
+
async getValidAccessToken(opts) {
|
|
302
|
+
const current = getAccessToken();
|
|
303
|
+
const mustRefresh = opts?.forceRefresh === true || !current || isExpiringSoon(current);
|
|
304
|
+
if (!mustRefresh)
|
|
305
|
+
return current;
|
|
306
|
+
const result = await this.client.refreshTokens();
|
|
307
|
+
if (result === 'refreshed')
|
|
308
|
+
return getAccessToken();
|
|
309
|
+
if (result === 'invalid') {
|
|
310
|
+
// Genuinely dead session: clear + broadcast, same path as a 401 logout.
|
|
311
|
+
clearAuth();
|
|
312
|
+
this.notifyListeners(null);
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
// Transient (network / 409 / 429): keep the session, hand back what we have.
|
|
316
|
+
return current;
|
|
317
|
+
}
|
|
203
318
|
/**
|
|
204
319
|
* Subscribe to auth state changes.
|
|
205
320
|
*/
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* HTTP/SSE API client with two-tier auth (partner key + user JWT).
|
|
3
3
|
*/
|
|
4
4
|
import type { ChatCompletionChunk, T2VConfig } from './types';
|
|
5
|
+
type RefreshResult = 'refreshed' | 'invalid' | 'transient';
|
|
5
6
|
export declare class T2VClient {
|
|
6
7
|
private readonly baseUrl;
|
|
7
8
|
private readonly partnerKey;
|
|
@@ -13,6 +14,23 @@ export declare class T2VClient {
|
|
|
13
14
|
* Create an AbortController that auto-aborts after the configured timeout.
|
|
14
15
|
*/
|
|
15
16
|
private makeTimeoutSignal;
|
|
17
|
+
/**
|
|
18
|
+
* Turn an aborted request into a NetworkError. A timeout abort carries a
|
|
19
|
+
* `TimeoutError` reason naming the real budget; any other abort (e.g. a bare
|
|
20
|
+
* `controller.abort()` on user-stop) falls back to a sensible timeout message
|
|
21
|
+
* rather than surfacing the platform's "The operation was aborted." string.
|
|
22
|
+
*/
|
|
23
|
+
private timeoutError;
|
|
24
|
+
/**
|
|
25
|
+
* Build a sanitized T2VError from a failed response.
|
|
26
|
+
*
|
|
27
|
+
* Only the structured, user-safe fields (`error.type` + `error.message`) and
|
|
28
|
+
* the HTTP status reach the thrown error's user-facing message. The server's
|
|
29
|
+
* raw `detail` (stack traces, DB errors, file paths) is kept on the separate
|
|
30
|
+
* `detail` property for debugging but never folded into `message`, so opaque
|
|
31
|
+
* HTML/text bodies or internal exception text cannot leak to end users.
|
|
32
|
+
*/
|
|
33
|
+
private errorFromResponse;
|
|
16
34
|
/**
|
|
17
35
|
* Execute a fetch with network-error wrapping, 401 refresh/retry, and error parsing.
|
|
18
36
|
*/
|
|
@@ -31,7 +49,7 @@ export declare class T2VClient {
|
|
|
31
49
|
* Make an authenticated multipart upload request (e.g. audio files).
|
|
32
50
|
* Does NOT set Content-Type — the browser sets it with the correct boundary.
|
|
33
51
|
*/
|
|
34
|
-
uploadRequest<T>(endpoint: string, formData: FormData, requiresAuth?: boolean): Promise<T>;
|
|
52
|
+
uploadRequest<T>(endpoint: string, formData: FormData, requiresAuth?: boolean, timeout?: number): Promise<T>;
|
|
35
53
|
/**
|
|
36
54
|
* Make an authenticated SSE streaming request.
|
|
37
55
|
*
|
|
@@ -41,7 +59,18 @@ export declare class T2VClient {
|
|
|
41
59
|
* outlive individual streams. The initial POST benefits from 401 refresh+retry.
|
|
42
60
|
*/
|
|
43
61
|
streamRequest(endpoint: string, body: object, externalSignal?: AbortSignal): AsyncGenerator<ChatCompletionChunk>;
|
|
62
|
+
/**
|
|
63
|
+
* Force a token refresh, deduped with in-flight 401-triggered refreshes.
|
|
64
|
+
*
|
|
65
|
+
* Exposed so that DIRECT (non-SDK-transport) callers — a frontend streaming
|
|
66
|
+
* straight to a third party, or a self-hosted backend on another origin that
|
|
67
|
+
* this client doesn't proxy — can share this client's single refresh authority
|
|
68
|
+
* instead of POSTing `/v1/auth/refresh` themselves and racing the rotation.
|
|
69
|
+
* Prefer {@link T2VAuth.getValidAccessToken} over calling this directly.
|
|
70
|
+
*/
|
|
71
|
+
refreshTokens(): Promise<RefreshResult>;
|
|
44
72
|
private tryRefreshToken;
|
|
45
73
|
private doRefreshToken;
|
|
46
74
|
}
|
|
75
|
+
export {};
|
|
47
76
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AAcjB,KAAK,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3D,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAuC;gBAEjD,MAAM,EAAE,SAAS;IAM7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IASpB;;;;;;;;OAQG;YACW,iBAAiB;IAe/B;;OAEG;YACW,aAAa;IA4D3B,OAAO,CAAC,YAAY;IAiBpB;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAKvE;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,EACzB,YAAY,UAAO,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC;IAgBb;;;OAGG;IACG,aAAa,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,UAAO,EACnB,OAAO,GAAE,MAA+B,GACvC,OAAO,CAAC,CAAC,CAAC;IAiBb;;;;;;;OAOG;IACI,aAAa,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,WAAW,GAC3B,cAAc,CAAC,mBAAmB,CAAC;IA+CtC;;;;;;;;OAQG;IACG,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;YAI/B,eAAe;YAgBf,cAAc;CA0C7B"}
|
package/dist/client.js
CHANGED
|
@@ -6,6 +6,9 @@ import { clearAuth, getAccessToken, getRefreshToken, setAccessToken, setRefreshT
|
|
|
6
6
|
import { decodeSSEStream } from './streaming';
|
|
7
7
|
const DEFAULT_BASE_URL = 'https://engine.talk2view.com';
|
|
8
8
|
const DEFAULT_REQUEST_TIMEOUT = 30_000;
|
|
9
|
+
// Uploads (attachments, audio) move real bytes — a multi-MB file on a slow link
|
|
10
|
+
// or a busy backend easily exceeds the 30s API timeout. Give them a wider window.
|
|
11
|
+
const DEFAULT_UPLOAD_TIMEOUT = 120_000;
|
|
9
12
|
export class T2VClient {
|
|
10
13
|
baseUrl;
|
|
11
14
|
partnerKey;
|
|
@@ -21,10 +24,47 @@ export class T2VClient {
|
|
|
21
24
|
* Create an AbortController that auto-aborts after the configured timeout.
|
|
22
25
|
*/
|
|
23
26
|
makeTimeoutSignal(timeout) {
|
|
27
|
+
const ms = timeout ?? this.requestTimeout;
|
|
24
28
|
const controller = new AbortController();
|
|
25
|
-
|
|
29
|
+
// Carry the real budget in the abort reason so the surfaced error names the
|
|
30
|
+
// actual timeout (e.g. 120000ms for uploads), not a hardcoded default.
|
|
31
|
+
const timer = setTimeout(() => controller.abort(new DOMException(`Request timed out after ${ms}ms`, 'TimeoutError')), ms);
|
|
26
32
|
return { signal: controller.signal, clear: () => clearTimeout(timer) };
|
|
27
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Turn an aborted request into a NetworkError. A timeout abort carries a
|
|
36
|
+
* `TimeoutError` reason naming the real budget; any other abort (e.g. a bare
|
|
37
|
+
* `controller.abort()` on user-stop) falls back to a sensible timeout message
|
|
38
|
+
* rather than surfacing the platform's "The operation was aborted." string.
|
|
39
|
+
*/
|
|
40
|
+
timeoutError(signal) {
|
|
41
|
+
const reason = signal?.reason;
|
|
42
|
+
return new NetworkError(reason?.name === 'TimeoutError' && typeof reason.message === 'string'
|
|
43
|
+
? reason.message
|
|
44
|
+
: `Request timed out after ${this.requestTimeout}ms`);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build a sanitized T2VError from a failed response.
|
|
48
|
+
*
|
|
49
|
+
* Only the structured, user-safe fields (`error.type` + `error.message`) and
|
|
50
|
+
* the HTTP status reach the thrown error's user-facing message. The server's
|
|
51
|
+
* raw `detail` (stack traces, DB errors, file paths) is kept on the separate
|
|
52
|
+
* `detail` property for debugging but never folded into `message`, so opaque
|
|
53
|
+
* HTML/text bodies or internal exception text cannot leak to end users.
|
|
54
|
+
*/
|
|
55
|
+
async errorFromResponse(response) {
|
|
56
|
+
const body = await response.json().catch(() => ({}));
|
|
57
|
+
// Server may wrap in { detail: { error: { ... } } } or { error: { ... } }.
|
|
58
|
+
const err = body?.detail?.error ?? body?.error ?? {};
|
|
59
|
+
const type = typeof err.type === 'string' ? err.type : undefined;
|
|
60
|
+
const safeMessage = typeof err.message === 'string' && err.message
|
|
61
|
+
? err.message
|
|
62
|
+
: `Request failed (HTTP ${response.status})`;
|
|
63
|
+
const code = typeof err.code === 'string' ? err.code : undefined;
|
|
64
|
+
// Keep the raw detail for debugging only — out of the user-facing message.
|
|
65
|
+
const detail = typeof err.detail === 'string' ? err.detail : undefined;
|
|
66
|
+
return new T2VError(safeMessage, type, response.status, code, detail);
|
|
67
|
+
}
|
|
28
68
|
/**
|
|
29
69
|
* Execute a fetch with network-error wrapping, 401 refresh/retry, and error parsing.
|
|
30
70
|
*/
|
|
@@ -35,8 +75,10 @@ export class T2VClient {
|
|
|
35
75
|
response = await fetch(`${this.baseUrl}${endpoint}`, fetchInit);
|
|
36
76
|
}
|
|
37
77
|
catch (err) {
|
|
38
|
-
|
|
39
|
-
|
|
78
|
+
// An abort (with a custom reason) rejects with the reason, not a plain
|
|
79
|
+
// AbortError — so key off signal.aborted rather than the caught value.
|
|
80
|
+
if (signal?.aborted) {
|
|
81
|
+
throw this.timeoutError(signal);
|
|
40
82
|
}
|
|
41
83
|
throw new NetworkError(`Request failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
42
84
|
}
|
|
@@ -50,15 +92,13 @@ export class T2VClient {
|
|
|
50
92
|
retryResponse = await fetch(`${this.baseUrl}${endpoint}`, retryInit);
|
|
51
93
|
}
|
|
52
94
|
catch (retryErr) {
|
|
53
|
-
if (
|
|
54
|
-
throw
|
|
95
|
+
if (signal?.aborted) {
|
|
96
|
+
throw this.timeoutError(signal);
|
|
55
97
|
}
|
|
56
98
|
throw new NetworkError(`Request failed: ${retryErr instanceof Error ? retryErr.message : 'Unknown error'}`);
|
|
57
99
|
}
|
|
58
100
|
if (!retryResponse.ok) {
|
|
59
|
-
|
|
60
|
-
const retryErr = retryBody?.detail?.error ?? retryBody?.error ?? {};
|
|
61
|
-
throw new T2VError(retryErr.message ?? 'Request failed', retryErr.type, retryResponse.status, retryErr.code);
|
|
101
|
+
throw await this.errorFromResponse(retryResponse);
|
|
62
102
|
}
|
|
63
103
|
return retryResponse;
|
|
64
104
|
}
|
|
@@ -72,10 +112,7 @@ export class T2VClient {
|
|
|
72
112
|
throw new NetworkError('Token refresh temporarily unavailable; please retry.');
|
|
73
113
|
}
|
|
74
114
|
if (!response.ok) {
|
|
75
|
-
|
|
76
|
-
// Server may wrap in { detail: { error: { ... } } } or { error: { ... } }
|
|
77
|
-
const err = body?.detail?.error ?? body?.error ?? {};
|
|
78
|
-
throw new T2VError(err.message ?? 'Request failed', err.type, response.status, err.code);
|
|
115
|
+
throw await this.errorFromResponse(response);
|
|
79
116
|
}
|
|
80
117
|
return response;
|
|
81
118
|
}
|
|
@@ -124,9 +161,9 @@ export class T2VClient {
|
|
|
124
161
|
* Make an authenticated multipart upload request (e.g. audio files).
|
|
125
162
|
* Does NOT set Content-Type — the browser sets it with the correct boundary.
|
|
126
163
|
*/
|
|
127
|
-
async uploadRequest(endpoint, formData, requiresAuth = true) {
|
|
164
|
+
async uploadRequest(endpoint, formData, requiresAuth = true, timeout = DEFAULT_UPLOAD_TIMEOUT) {
|
|
128
165
|
const headers = this.buildHeaders(requiresAuth);
|
|
129
|
-
const { signal, clear } = this.makeTimeoutSignal();
|
|
166
|
+
const { signal, clear } = this.makeTimeoutSignal(timeout);
|
|
130
167
|
try {
|
|
131
168
|
const response = await this.fetchWithAuth(endpoint, { method: 'POST', body: formData }, headers, requiresAuth, signal);
|
|
132
169
|
return response.json();
|
|
@@ -149,9 +186,11 @@ export class T2VClient {
|
|
|
149
186
|
// One controller drives the fetch. It aborts on connection timeout OR when
|
|
150
187
|
// the caller's external signal fires (user pressed "stop"). The timeout is
|
|
151
188
|
// cleared once the response arrives, leaving the external signal to abort the
|
|
152
|
-
// long-lived SSE body.
|
|
189
|
+
// long-lived SSE body. The timeout aborts with a TimeoutError reason so a
|
|
190
|
+
// connect-timeout surfaces "Request timed out after Nms", not the platform's
|
|
191
|
+
// opaque "The operation was aborted." default.
|
|
153
192
|
const controller = new AbortController();
|
|
154
|
-
const timer = setTimeout(() => controller.abort(), this.requestTimeout);
|
|
193
|
+
const timer = setTimeout(() => controller.abort(new DOMException(`Request timed out after ${this.requestTimeout}ms`, 'TimeoutError')), this.requestTimeout);
|
|
155
194
|
const onExternalAbort = () => controller.abort();
|
|
156
195
|
if (externalSignal) {
|
|
157
196
|
if (externalSignal.aborted)
|
|
@@ -176,6 +215,18 @@ export class T2VClient {
|
|
|
176
215
|
externalSignal?.removeEventListener('abort', onExternalAbort);
|
|
177
216
|
}
|
|
178
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* Force a token refresh, deduped with in-flight 401-triggered refreshes.
|
|
220
|
+
*
|
|
221
|
+
* Exposed so that DIRECT (non-SDK-transport) callers — a frontend streaming
|
|
222
|
+
* straight to a third party, or a self-hosted backend on another origin that
|
|
223
|
+
* this client doesn't proxy — can share this client's single refresh authority
|
|
224
|
+
* instead of POSTing `/v1/auth/refresh` themselves and racing the rotation.
|
|
225
|
+
* Prefer {@link T2VAuth.getValidAccessToken} over calling this directly.
|
|
226
|
+
*/
|
|
227
|
+
async refreshTokens() {
|
|
228
|
+
return this.tryRefreshToken();
|
|
229
|
+
}
|
|
179
230
|
async tryRefreshToken() {
|
|
180
231
|
if (this.isRefreshing) {
|
|
181
232
|
return this.refreshPromise;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +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;AACxD,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAUvC,MAAM,OAAO,SAAS;IACH,OAAO,CAAS;IAChB,UAAU,CAAS;IACnB,cAAc,CAAS;IAChC,YAAY,GAAG,KAAK,CAAC;IACrB,cAAc,GAAkC,IAAI,CAAC;IAE7D,YAAY,MAAiB;QAC3B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACzE,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAgB;QACxC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared attachment constraints — the single source of truth for which file
|
|
3
|
+
* types the SDK will upload. Both the public `Talk2View.uploadAttachment()`
|
|
4
|
+
* guard and the bundled Composer derive from these, so partners with their own
|
|
5
|
+
* composer get the same client-side validation as the built-in UI.
|
|
6
|
+
*/
|
|
7
|
+
/** MIME whitelist (mirrors the server). Also drives the file input's `accept`. */
|
|
8
|
+
export declare const ATTACHMENT_ACCEPT = "image/png,image/jpeg,image/webp,image/gif,application/pdf";
|
|
9
|
+
/** The same whitelist as a Set, for O(1) membership checks. */
|
|
10
|
+
export declare const ALLOWED_ATTACHMENT_MIME: Set<string>;
|
|
11
|
+
/** Human-readable form of the whitelist, shown in hints and error messages. */
|
|
12
|
+
export declare const ATTACHMENT_TYPES_LABEL = "PNG, JPEG, WebP, GIF, or PDF";
|
|
13
|
+
/** True when `type` is an attachment MIME type the SDK (and server) accepts. */
|
|
14
|
+
export declare function isAllowedAttachmentType(type: string): boolean;
|
|
15
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,8DAA8D,CAAC;AAE7F,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,aAAwC,CAAC;AAE7E,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AAErE,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared attachment constraints — the single source of truth for which file
|
|
3
|
+
* types the SDK will upload. Both the public `Talk2View.uploadAttachment()`
|
|
4
|
+
* guard and the bundled Composer derive from these, so partners with their own
|
|
5
|
+
* composer get the same client-side validation as the built-in UI.
|
|
6
|
+
*/
|
|
7
|
+
/** MIME whitelist (mirrors the server). Also drives the file input's `accept`. */
|
|
8
|
+
export const ATTACHMENT_ACCEPT = 'image/png,image/jpeg,image/webp,image/gif,application/pdf';
|
|
9
|
+
/** The same whitelist as a Set, for O(1) membership checks. */
|
|
10
|
+
export const ALLOWED_ATTACHMENT_MIME = new Set(ATTACHMENT_ACCEPT.split(','));
|
|
11
|
+
/** Human-readable form of the whitelist, shown in hints and error messages. */
|
|
12
|
+
export const ATTACHMENT_TYPES_LABEL = 'PNG, JPEG, WebP, GIF, or PDF';
|
|
13
|
+
/** True when `type` is an attachment MIME type the SDK (and server) accepts. */
|
|
14
|
+
export function isAllowedAttachmentType(type) {
|
|
15
|
+
return ALLOWED_ATTACHMENT_MIME.has(type);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,2DAA2D,CAAC;AAE7F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAE7E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,8BAA8B,CAAC;AAErE,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Base error class for Talk2View SDK errors.
|
|
3
|
+
*
|
|
4
|
+
* `message` is always the user-safe summary (the server's structured
|
|
5
|
+
* `error.message` plus the HTTP status). The server's raw `detail` (stack
|
|
6
|
+
* traces, DB errors, file paths, library versions) is kept on the separate
|
|
7
|
+
* `detail` property for debugging and is NEVER folded into `message`, so it
|
|
8
|
+
* cannot leak to end users by default.
|
|
3
9
|
*/
|
|
4
10
|
export declare class T2VError extends Error {
|
|
5
11
|
readonly type: string;
|
|
6
12
|
readonly statusCode?: number | undefined;
|
|
7
13
|
readonly code?: string | undefined;
|
|
8
|
-
|
|
14
|
+
readonly detail?: string | undefined;
|
|
15
|
+
constructor(message: string, type?: string, statusCode?: number | undefined, code?: string | undefined, detail?: string | undefined);
|
|
9
16
|
}
|
|
10
17
|
export declare class AuthenticationError extends T2VError {
|
|
11
18
|
constructor(message: string);
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,EAAE,MAAM;aACZ,UAAU,CAAC,EAAE,MAAM;aACnB,IAAI,CAAC,EAAE,MAAM;aACb,MAAM,CAAC,EAAE,MAAM;gBAJ/B,OAAO,EAAE,MAAM,EACC,IAAI,GAAE,MAAoB,EAC1B,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,MAAM,CAAC,EAAE,MAAM,YAAA;CAKlC;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"}
|