10x-chat 0.2.3 → 0.3.1
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/core/bundle.d.ts.map +1 -1
- package/dist/core/bundle.js +0 -2
- package/dist/core/bundle.js.map +1 -1
- package/dist/notebooklm/api/artifacts.d.ts +60 -0
- package/dist/notebooklm/api/artifacts.d.ts.map +1 -0
- package/dist/notebooklm/api/artifacts.js +1246 -0
- package/dist/notebooklm/api/artifacts.js.map +1 -0
- package/dist/notebooklm/api/chat.d.ts +21 -0
- package/dist/notebooklm/api/chat.d.ts.map +1 -0
- package/dist/notebooklm/api/chat.js +353 -0
- package/dist/notebooklm/api/chat.js.map +1 -0
- package/dist/notebooklm/api/notebooks.d.ts +22 -0
- package/dist/notebooklm/api/notebooks.d.ts.map +1 -0
- package/dist/notebooklm/api/notebooks.js +109 -0
- package/dist/notebooklm/api/notebooks.js.map +1 -0
- package/dist/notebooklm/api/notes.d.ts +18 -0
- package/dist/notebooklm/api/notes.d.ts.map +1 -0
- package/dist/notebooklm/api/notes.js +140 -0
- package/dist/notebooklm/api/notes.js.map +1 -0
- package/dist/notebooklm/api/research.d.ts +12 -0
- package/dist/notebooklm/api/research.d.ts.map +1 -0
- package/dist/notebooklm/api/research.js +168 -0
- package/dist/notebooklm/api/research.js.map +1 -0
- package/dist/notebooklm/api/settings.d.ts +11 -0
- package/dist/notebooklm/api/settings.d.ts.map +1 -0
- package/dist/notebooklm/api/settings.js +55 -0
- package/dist/notebooklm/api/settings.js.map +1 -0
- package/dist/notebooklm/api/sharing.d.ts +14 -0
- package/dist/notebooklm/api/sharing.d.ts.map +1 -0
- package/dist/notebooklm/api/sharing.js +70 -0
- package/dist/notebooklm/api/sharing.js.map +1 -0
- package/dist/notebooklm/api/sources.d.ts +34 -0
- package/dist/notebooklm/api/sources.d.ts.map +1 -0
- package/dist/notebooklm/api/sources.js +539 -0
- package/dist/notebooklm/api/sources.js.map +1 -0
- package/dist/notebooklm/auth.d.ts +30 -0
- package/dist/notebooklm/auth.d.ts.map +1 -0
- package/dist/notebooklm/auth.js +265 -0
- package/dist/notebooklm/auth.js.map +1 -0
- package/dist/notebooklm/client.d.ts +29 -0
- package/dist/notebooklm/client.d.ts.map +1 -0
- package/dist/notebooklm/client.js +94 -0
- package/dist/notebooklm/client.js.map +1 -0
- package/dist/notebooklm/core.d.ts +52 -0
- package/dist/notebooklm/core.d.ts.map +1 -0
- package/dist/notebooklm/core.js +330 -0
- package/dist/notebooklm/core.js.map +1 -0
- package/dist/notebooklm/errors.d.ts +189 -0
- package/dist/notebooklm/errors.d.ts.map +1 -0
- package/dist/notebooklm/errors.js +325 -0
- package/dist/notebooklm/errors.js.map +1 -0
- package/dist/notebooklm/index.d.ts +16 -0
- package/dist/notebooklm/index.d.ts.map +1 -0
- package/dist/notebooklm/index.js +16 -0
- package/dist/notebooklm/index.js.map +1 -0
- package/dist/notebooklm/paths.d.ts +12 -0
- package/dist/notebooklm/paths.d.ts.map +1 -0
- package/dist/notebooklm/paths.js +49 -0
- package/dist/notebooklm/paths.js.map +1 -0
- package/dist/notebooklm/rpc/decoder.d.ts +8 -0
- package/dist/notebooklm/rpc/decoder.d.ts.map +1 -0
- package/dist/notebooklm/rpc/decoder.js +182 -0
- package/dist/notebooklm/rpc/decoder.js.map +1 -0
- package/dist/notebooklm/rpc/encoder.d.ts +12 -0
- package/dist/notebooklm/rpc/encoder.d.ts.map +1 -0
- package/dist/notebooklm/rpc/encoder.js +36 -0
- package/dist/notebooklm/rpc/encoder.js.map +1 -0
- package/dist/notebooklm/rpc/index.d.ts +4 -0
- package/dist/notebooklm/rpc/index.d.ts.map +1 -0
- package/dist/notebooklm/rpc/index.js +4 -0
- package/dist/notebooklm/rpc/index.js.map +1 -0
- package/dist/notebooklm/rpc/types.d.ts +168 -0
- package/dist/notebooklm/rpc/types.d.ts.map +1 -0
- package/dist/notebooklm/rpc/types.js +206 -0
- package/dist/notebooklm/rpc/types.js.map +1 -0
- package/dist/notebooklm/types.d.ts +220 -0
- package/dist/notebooklm/types.d.ts.map +1 -0
- package/dist/notebooklm/types.js +488 -0
- package/dist/notebooklm/types.js.map +1 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/notebooklm.d.ts +4 -0
- package/dist/providers/notebooklm.d.ts.map +1 -0
- package/dist/providers/notebooklm.js +98 -0
- package/dist/providers/notebooklm.js.map +1 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { setTimeout as sleep } from 'node:timers/promises';
|
|
2
|
+
import { ClientError, NetworkError, RateLimitError, RPCError, RPCTimeoutError, ServerError, } from './errors.js';
|
|
3
|
+
import { BATCHEXECUTE_URL, buildRequestBody, decodeResponse, encodeRpcRequest, RPCMethod, } from './rpc/index.js';
|
|
4
|
+
export const MAX_CONVERSATION_CACHE_SIZE = 100;
|
|
5
|
+
export const DEFAULT_TIMEOUT = 30_000;
|
|
6
|
+
export const DEFAULT_CONNECT_TIMEOUT = 10_000;
|
|
7
|
+
const AUTH_ERROR_PATTERNS = [
|
|
8
|
+
'authentication',
|
|
9
|
+
'expired',
|
|
10
|
+
'unauthorized',
|
|
11
|
+
'login',
|
|
12
|
+
're-authenticate',
|
|
13
|
+
];
|
|
14
|
+
function isAbortError(error) {
|
|
15
|
+
return error instanceof Error && error.name === 'AbortError';
|
|
16
|
+
}
|
|
17
|
+
export function isAuthError(error) {
|
|
18
|
+
if (error instanceof RPCError) {
|
|
19
|
+
const message = error.message.toLowerCase();
|
|
20
|
+
return AUTH_ERROR_PATTERNS.some((pattern) => message.includes(pattern));
|
|
21
|
+
}
|
|
22
|
+
if (error instanceof ClientError) {
|
|
23
|
+
return error.statusCode === 401 || error.statusCode === 403;
|
|
24
|
+
}
|
|
25
|
+
if (error instanceof NetworkError ||
|
|
26
|
+
error instanceof RPCTimeoutError ||
|
|
27
|
+
error instanceof RateLimitError ||
|
|
28
|
+
error instanceof ServerError) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
export class ClientCore {
|
|
34
|
+
auth;
|
|
35
|
+
timeoutMs;
|
|
36
|
+
connectTimeoutMs;
|
|
37
|
+
refreshCallback;
|
|
38
|
+
refreshRetryDelayMs;
|
|
39
|
+
refreshTask = null;
|
|
40
|
+
openState = false;
|
|
41
|
+
reqidCounter = 100_000;
|
|
42
|
+
conversationCache = new Map();
|
|
43
|
+
httpClient;
|
|
44
|
+
constructor(auth, opts = {}) {
|
|
45
|
+
this.auth = auth;
|
|
46
|
+
this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT;
|
|
47
|
+
this.connectTimeoutMs = opts.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT;
|
|
48
|
+
this.refreshCallback = opts.refreshCallback ?? null;
|
|
49
|
+
this.refreshRetryDelayMs = opts.refreshRetryDelayMs ?? 200;
|
|
50
|
+
this.httpClient = {
|
|
51
|
+
fetch: async (url, init) => this.request(url, init),
|
|
52
|
+
get: async (url, init) => this.request(url, {
|
|
53
|
+
...init,
|
|
54
|
+
method: 'GET',
|
|
55
|
+
}),
|
|
56
|
+
post: async (url, body, init) => this.request(url, {
|
|
57
|
+
...init,
|
|
58
|
+
method: 'POST',
|
|
59
|
+
body,
|
|
60
|
+
}),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async open() {
|
|
64
|
+
this.openState = true;
|
|
65
|
+
}
|
|
66
|
+
async close() {
|
|
67
|
+
this.openState = false;
|
|
68
|
+
}
|
|
69
|
+
get isOpen() {
|
|
70
|
+
return this.openState;
|
|
71
|
+
}
|
|
72
|
+
updateAuthHeaders() {
|
|
73
|
+
this.auth.cookieHeader = Object.entries(this.auth.cookies)
|
|
74
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
75
|
+
.join('; ');
|
|
76
|
+
}
|
|
77
|
+
buildUrl(rpcMethod, sourcePath = '/') {
|
|
78
|
+
const params = new URLSearchParams({
|
|
79
|
+
rpcids: rpcMethod,
|
|
80
|
+
'source-path': sourcePath,
|
|
81
|
+
'f.sid': this.auth.sessionId,
|
|
82
|
+
rt: 'c',
|
|
83
|
+
});
|
|
84
|
+
return `${BATCHEXECUTE_URL}?${params.toString()}`;
|
|
85
|
+
}
|
|
86
|
+
async request(url, init = {}, timeoutMs = this.timeoutMs) {
|
|
87
|
+
if (!this.openState) {
|
|
88
|
+
throw new Error("Client not initialized. Use 'await client.open()' or async context manager.");
|
|
89
|
+
}
|
|
90
|
+
const controller = new AbortController();
|
|
91
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
92
|
+
const headers = new Headers(init.headers ?? {});
|
|
93
|
+
if (!headers.has('Cookie')) {
|
|
94
|
+
headers.set('Cookie', this.auth.cookieHeader);
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
return await fetch(url, {
|
|
98
|
+
...init,
|
|
99
|
+
headers,
|
|
100
|
+
signal: controller.signal,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (isAbortError(error)) {
|
|
105
|
+
throw new RPCTimeoutError(`Request timed out after ${timeoutMs / 1000}s`, {
|
|
106
|
+
timeoutSeconds: timeoutMs / 1000,
|
|
107
|
+
originalError: error instanceof Error ? error : null,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
throw new NetworkError(`Request failed: ${String(error)}`, {
|
|
111
|
+
originalError: error instanceof Error ? error : null,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
clearTimeout(timeout);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async rpcCall(method, params, sourcePath = '/', allowNull = false, isRetry = false) {
|
|
119
|
+
if (!this.openState) {
|
|
120
|
+
throw new Error("Client not initialized. Use 'await client.open()' or async context manager.");
|
|
121
|
+
}
|
|
122
|
+
const start = Date.now();
|
|
123
|
+
console.debug(`RPC ${String(method)} starting`);
|
|
124
|
+
const url = this.buildUrl(method, sourcePath);
|
|
125
|
+
const rpcRequest = encodeRpcRequest(method, params);
|
|
126
|
+
const body = buildRequestBody(rpcRequest, this.auth.csrfToken);
|
|
127
|
+
let response;
|
|
128
|
+
try {
|
|
129
|
+
response = await this.request(url, {
|
|
130
|
+
method: 'POST',
|
|
131
|
+
headers: {
|
|
132
|
+
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
|
133
|
+
},
|
|
134
|
+
body,
|
|
135
|
+
}, this.timeoutMs);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (!isRetry && this.refreshCallback && isAuthError(error)) {
|
|
139
|
+
const refreshed = await this.tryRefreshAndRetry(method, params, sourcePath, allowNull, error);
|
|
140
|
+
if (refreshed !== null) {
|
|
141
|
+
return refreshed;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
if (!response.ok) {
|
|
147
|
+
const elapsed = (Date.now() - start) / 1000;
|
|
148
|
+
const status = response.status;
|
|
149
|
+
if (!isRetry && this.refreshCallback && (status === 401 || status === 403)) {
|
|
150
|
+
const refreshed = await this.tryRefreshAndRetry(method, params, sourcePath, allowNull, new RPCError(`HTTP ${status} calling ${String(method)}: ${response.statusText}`, {
|
|
151
|
+
methodId: method,
|
|
152
|
+
}));
|
|
153
|
+
if (refreshed !== null) {
|
|
154
|
+
return refreshed;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
console.error(`RPC ${String(method)} failed after ${elapsed.toFixed(3)}s: HTTP ${status}`);
|
|
158
|
+
if (status === 429) {
|
|
159
|
+
const retryAfterHeader = response.headers.get('retry-after');
|
|
160
|
+
const retryAfter = retryAfterHeader ? Number.parseInt(retryAfterHeader, 10) : null;
|
|
161
|
+
let message = `API rate limit exceeded calling ${String(method)}`;
|
|
162
|
+
if (retryAfter && Number.isFinite(retryAfter)) {
|
|
163
|
+
message += `. Retry after ${retryAfter} seconds`;
|
|
164
|
+
}
|
|
165
|
+
throw new RateLimitError(message, {
|
|
166
|
+
methodId: method,
|
|
167
|
+
retryAfter: retryAfter && Number.isFinite(retryAfter) ? retryAfter : null,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if (status >= 500 && status < 600) {
|
|
171
|
+
throw new ServerError(`Server error ${status} calling ${String(method)}: ${response.statusText}`, {
|
|
172
|
+
methodId: method,
|
|
173
|
+
statusCode: status,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
if (status >= 400 && status < 500 && status !== 401 && status !== 403) {
|
|
177
|
+
throw new ClientError(`Client error ${status} calling ${String(method)}: ${response.statusText}`, {
|
|
178
|
+
methodId: method,
|
|
179
|
+
statusCode: status,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
throw new RPCError(`HTTP ${status} calling ${String(method)}: ${response.statusText}`, {
|
|
183
|
+
methodId: method,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
const text = await response.text();
|
|
187
|
+
try {
|
|
188
|
+
const result = decodeResponse(text, method, allowNull);
|
|
189
|
+
const elapsed = (Date.now() - start) / 1000;
|
|
190
|
+
console.debug(`RPC ${String(method)} completed in ${elapsed.toFixed(3)}s`);
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const elapsed = (Date.now() - start) / 1000;
|
|
195
|
+
if (!isRetry && this.refreshCallback && isAuthError(error)) {
|
|
196
|
+
const refreshed = await this.tryRefreshAndRetry(method, params, sourcePath, allowNull, error);
|
|
197
|
+
if (refreshed !== null) {
|
|
198
|
+
return refreshed;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (error instanceof RPCError) {
|
|
202
|
+
console.error(`RPC ${String(method)} failed after ${elapsed.toFixed(3)}s`);
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
console.error(`RPC ${String(method)} failed after ${elapsed.toFixed(3)}s: ${String(error)}`);
|
|
206
|
+
throw new RPCError(`Failed to decode response for ${String(method)}: ${String(error)}`, {
|
|
207
|
+
methodId: method,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async tryRefreshAndRetry(method, params, sourcePath, allowNull, originalError) {
|
|
212
|
+
if (!this.refreshCallback) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
console.info(`RPC ${String(method)} auth error detected, attempting token refresh`);
|
|
216
|
+
if (!this.refreshTask) {
|
|
217
|
+
this.refreshTask = (async () => {
|
|
218
|
+
const refreshed = await this.refreshCallback?.();
|
|
219
|
+
if (!refreshed) {
|
|
220
|
+
throw new Error('Refresh callback returned no auth tokens');
|
|
221
|
+
}
|
|
222
|
+
return refreshed;
|
|
223
|
+
})();
|
|
224
|
+
this.refreshTask.finally(() => {
|
|
225
|
+
this.refreshTask = null;
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
console.debug(`Waiting on existing refresh task for RPC ${String(method)}`);
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
await this.refreshTask;
|
|
233
|
+
}
|
|
234
|
+
catch (refreshError) {
|
|
235
|
+
console.warn(`Token refresh failed: ${String(refreshError)}`);
|
|
236
|
+
throw originalError;
|
|
237
|
+
}
|
|
238
|
+
if (this.refreshRetryDelayMs > 0) {
|
|
239
|
+
await sleep(this.refreshRetryDelayMs);
|
|
240
|
+
}
|
|
241
|
+
console.info(`Token refresh successful, retrying RPC ${String(method)}`);
|
|
242
|
+
return this.rpcCall(method, params, sourcePath, allowNull, true);
|
|
243
|
+
}
|
|
244
|
+
getHttpClient() {
|
|
245
|
+
if (!this.openState) {
|
|
246
|
+
throw new Error("Client not initialized. Use 'await client.open()' or async context manager.");
|
|
247
|
+
}
|
|
248
|
+
return this.httpClient;
|
|
249
|
+
}
|
|
250
|
+
cacheConversationTurn(conversationId, query, answer, turnNumber) {
|
|
251
|
+
const isNewConversation = !this.conversationCache.has(conversationId);
|
|
252
|
+
if (isNewConversation) {
|
|
253
|
+
while (this.conversationCache.size >= MAX_CONVERSATION_CACHE_SIZE) {
|
|
254
|
+
const oldestKey = this.conversationCache.keys().next().value;
|
|
255
|
+
if (oldestKey) {
|
|
256
|
+
this.conversationCache.delete(oldestKey);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
this.conversationCache.set(conversationId, []);
|
|
263
|
+
}
|
|
264
|
+
const turns = this.conversationCache.get(conversationId);
|
|
265
|
+
if (!turns) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
turns.push({ query, answer, turnNumber });
|
|
269
|
+
}
|
|
270
|
+
getCachedConversation(conversationId) {
|
|
271
|
+
return this.conversationCache.get(conversationId) ?? [];
|
|
272
|
+
}
|
|
273
|
+
clearConversationCache(conversationId) {
|
|
274
|
+
if (conversationId) {
|
|
275
|
+
if (this.conversationCache.has(conversationId)) {
|
|
276
|
+
this.conversationCache.delete(conversationId);
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
this.conversationCache.clear();
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
async getSourceIds(notebookId) {
|
|
285
|
+
const params = [notebookId, null, [2], null, 0];
|
|
286
|
+
const notebookData = await this.rpcCall(RPCMethod.GET_NOTEBOOK, params, `/notebook/${notebookId}`);
|
|
287
|
+
const sourceIds = [];
|
|
288
|
+
if (!Array.isArray(notebookData) || notebookData.length === 0) {
|
|
289
|
+
return sourceIds;
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const notebookInfo = notebookData[0];
|
|
293
|
+
if (!Array.isArray(notebookInfo) || notebookInfo.length <= 1) {
|
|
294
|
+
return sourceIds;
|
|
295
|
+
}
|
|
296
|
+
const sources = notebookInfo[1];
|
|
297
|
+
if (!Array.isArray(sources)) {
|
|
298
|
+
return sourceIds;
|
|
299
|
+
}
|
|
300
|
+
for (const source of sources) {
|
|
301
|
+
if (!Array.isArray(source) || source.length === 0) {
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
const first = source[0];
|
|
305
|
+
if (!Array.isArray(first) || first.length === 0) {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
const sourceId = first[0];
|
|
309
|
+
if (typeof sourceId === 'string') {
|
|
310
|
+
sourceIds.push(sourceId);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return sourceIds;
|
|
316
|
+
}
|
|
317
|
+
return sourceIds;
|
|
318
|
+
}
|
|
319
|
+
nextReqIdStep() {
|
|
320
|
+
this.reqidCounter += 100_000;
|
|
321
|
+
return this.reqidCounter;
|
|
322
|
+
}
|
|
323
|
+
getConnectTimeoutMs() {
|
|
324
|
+
return this.connectTimeoutMs;
|
|
325
|
+
}
|
|
326
|
+
getTimeoutMs() {
|
|
327
|
+
return this.timeoutMs;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/notebooklm/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exceptions for notebooklm.
|
|
3
|
+
*
|
|
4
|
+
* All library exceptions inherit from NotebookLMError.
|
|
5
|
+
*/
|
|
6
|
+
export declare class NotebookLMError extends Error {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class ValidationError extends NotebookLMError {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class ConfigurationError extends NotebookLMError {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class NetworkError extends NotebookLMError {
|
|
16
|
+
readonly methodId: string | null;
|
|
17
|
+
readonly originalError: Error | null;
|
|
18
|
+
constructor(message: string, opts?: {
|
|
19
|
+
methodId?: string | null;
|
|
20
|
+
originalError?: Error | null;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export declare class RPCError extends NotebookLMError {
|
|
24
|
+
readonly methodId: string | null;
|
|
25
|
+
rawResponse: string | null;
|
|
26
|
+
readonly rpcCode: string | number | null;
|
|
27
|
+
foundIds: string[];
|
|
28
|
+
constructor(message: string, opts?: {
|
|
29
|
+
methodId?: string | null;
|
|
30
|
+
rawResponse?: string | null;
|
|
31
|
+
rpcCode?: string | number | null;
|
|
32
|
+
foundIds?: string[];
|
|
33
|
+
});
|
|
34
|
+
get rpcId(): string | null;
|
|
35
|
+
get code(): string | number | null;
|
|
36
|
+
}
|
|
37
|
+
export declare class DecodingError extends RPCError {
|
|
38
|
+
constructor(message: string, opts?: {
|
|
39
|
+
methodId?: string | null;
|
|
40
|
+
rawResponse?: string | null;
|
|
41
|
+
rpcCode?: string | number | null;
|
|
42
|
+
foundIds?: string[];
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
export declare class UnknownRPCMethodError extends DecodingError {
|
|
46
|
+
constructor(message: string, opts?: {
|
|
47
|
+
methodId?: string | null;
|
|
48
|
+
rawResponse?: string | null;
|
|
49
|
+
rpcCode?: string | number | null;
|
|
50
|
+
foundIds?: string[];
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export declare class AuthError extends RPCError {
|
|
54
|
+
readonly recoverable: boolean;
|
|
55
|
+
constructor(message: string, opts?: {
|
|
56
|
+
recoverable?: boolean;
|
|
57
|
+
methodId?: string | null;
|
|
58
|
+
rawResponse?: string | null;
|
|
59
|
+
rpcCode?: string | number | null;
|
|
60
|
+
foundIds?: string[];
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export declare class RateLimitError extends RPCError {
|
|
64
|
+
readonly retryAfter: number | null;
|
|
65
|
+
constructor(message: string, opts?: {
|
|
66
|
+
retryAfter?: number | null;
|
|
67
|
+
methodId?: string | null;
|
|
68
|
+
rawResponse?: string | null;
|
|
69
|
+
rpcCode?: string | number | null;
|
|
70
|
+
foundIds?: string[];
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export declare class ServerError extends RPCError {
|
|
74
|
+
readonly statusCode: number | null;
|
|
75
|
+
constructor(message: string, opts?: {
|
|
76
|
+
statusCode?: number | null;
|
|
77
|
+
methodId?: string | null;
|
|
78
|
+
rawResponse?: string | null;
|
|
79
|
+
rpcCode?: string | number | null;
|
|
80
|
+
foundIds?: string[];
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export declare class ClientError extends RPCError {
|
|
84
|
+
readonly statusCode: number | null;
|
|
85
|
+
constructor(message: string, opts?: {
|
|
86
|
+
statusCode?: number | null;
|
|
87
|
+
methodId?: string | null;
|
|
88
|
+
rawResponse?: string | null;
|
|
89
|
+
rpcCode?: string | number | null;
|
|
90
|
+
foundIds?: string[];
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
export declare class RPCTimeoutError extends NetworkError {
|
|
94
|
+
readonly timeoutSeconds: number | null;
|
|
95
|
+
constructor(message: string, opts?: {
|
|
96
|
+
timeoutSeconds?: number | null;
|
|
97
|
+
methodId?: string | null;
|
|
98
|
+
originalError?: Error | null;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
export declare class NotebookError extends NotebookLMError {
|
|
102
|
+
constructor(message: string);
|
|
103
|
+
}
|
|
104
|
+
export declare class NotebookNotFoundError extends NotebookError {
|
|
105
|
+
readonly notebookId: string;
|
|
106
|
+
constructor(notebookId: string);
|
|
107
|
+
}
|
|
108
|
+
export declare class ChatError extends NotebookLMError {
|
|
109
|
+
constructor(message: string);
|
|
110
|
+
}
|
|
111
|
+
export declare class SourceError extends NotebookLMError {
|
|
112
|
+
constructor(message: string);
|
|
113
|
+
}
|
|
114
|
+
export declare class SourceAddError extends SourceError {
|
|
115
|
+
readonly url: string;
|
|
116
|
+
readonly cause: Error | null;
|
|
117
|
+
constructor(url: string, opts?: {
|
|
118
|
+
cause?: Error | null;
|
|
119
|
+
message?: string;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
export declare class SourceNotFoundError extends SourceError {
|
|
123
|
+
readonly sourceId: string;
|
|
124
|
+
constructor(sourceId: string);
|
|
125
|
+
}
|
|
126
|
+
export declare class SourceProcessingError extends SourceError {
|
|
127
|
+
readonly sourceId: string;
|
|
128
|
+
readonly status: number;
|
|
129
|
+
constructor(sourceId: string, status?: number, message?: string);
|
|
130
|
+
}
|
|
131
|
+
export declare class SourceTimeoutError extends SourceError {
|
|
132
|
+
readonly sourceId: string;
|
|
133
|
+
readonly timeout: number;
|
|
134
|
+
readonly lastStatus: number | null;
|
|
135
|
+
constructor(sourceId: string, timeout: number, lastStatus?: number | null);
|
|
136
|
+
}
|
|
137
|
+
export declare class ArtifactError extends NotebookLMError {
|
|
138
|
+
constructor(message: string);
|
|
139
|
+
}
|
|
140
|
+
export declare class ArtifactNotFoundError extends ArtifactError {
|
|
141
|
+
readonly artifactId: string;
|
|
142
|
+
readonly artifactType: string | null;
|
|
143
|
+
constructor(artifactId: string, artifactType?: string | null);
|
|
144
|
+
}
|
|
145
|
+
export declare class ArtifactNotReadyError extends ArtifactError {
|
|
146
|
+
readonly artifactType: string;
|
|
147
|
+
readonly artifactId: string | null;
|
|
148
|
+
readonly status: string | null;
|
|
149
|
+
constructor(artifactType: string, opts?: {
|
|
150
|
+
artifactId?: string | null;
|
|
151
|
+
status?: string | null;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
export declare class ArtifactParseError extends ArtifactError {
|
|
155
|
+
readonly artifactType: string;
|
|
156
|
+
readonly artifactId: string | null;
|
|
157
|
+
readonly details: string | null;
|
|
158
|
+
readonly cause: Error | null;
|
|
159
|
+
constructor(artifactType: string, opts?: {
|
|
160
|
+
details?: string | null;
|
|
161
|
+
artifactId?: string | null;
|
|
162
|
+
cause?: Error | null;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
export declare class ArtifactDownloadError extends ArtifactError {
|
|
166
|
+
readonly artifactType: string;
|
|
167
|
+
readonly artifactId: string | null;
|
|
168
|
+
readonly details: string | null;
|
|
169
|
+
readonly cause: Error | null;
|
|
170
|
+
constructor(artifactType: string, opts?: {
|
|
171
|
+
details?: string | null;
|
|
172
|
+
artifactId?: string | null;
|
|
173
|
+
cause?: Error | null;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
export declare enum RPCErrorCode {
|
|
177
|
+
UNKNOWN = 0,
|
|
178
|
+
INVALID_REQUEST = 400,
|
|
179
|
+
UNAUTHORIZED = 401,
|
|
180
|
+
FORBIDDEN = 403,
|
|
181
|
+
NOT_FOUND = 404,
|
|
182
|
+
RATE_LIMITED = 429,
|
|
183
|
+
SERVER_ERROR = 500
|
|
184
|
+
}
|
|
185
|
+
export declare function getErrorMessageForCode(code: number | null | undefined): {
|
|
186
|
+
message: string;
|
|
187
|
+
retryable: boolean;
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/notebooklm/errors.ts"],"names":[],"mappings":"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"}
|