@intelligentelectron/pdf-analyzer 0.1.6 → 1.0.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 (50) hide show
  1. package/README.md +4 -9
  2. package/dist/cli/commands.d.ts +9 -1
  3. package/dist/cli/commands.d.ts.map +1 -1
  4. package/dist/cli/commands.js +96 -25
  5. package/dist/cli/commands.js.map +1 -1
  6. package/dist/index.d.ts +2 -3
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +13 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/keychain.d.ts +34 -0
  11. package/dist/keychain.d.ts.map +1 -0
  12. package/dist/keychain.js +208 -0
  13. package/dist/keychain.js.map +1 -0
  14. package/dist/pdf-utils.d.ts +28 -0
  15. package/dist/pdf-utils.d.ts.map +1 -0
  16. package/dist/pdf-utils.js +93 -0
  17. package/dist/pdf-utils.js.map +1 -0
  18. package/dist/providers/anthropic.d.ts +9 -0
  19. package/dist/providers/anthropic.d.ts.map +1 -0
  20. package/dist/providers/anthropic.js +69 -0
  21. package/dist/providers/anthropic.js.map +1 -0
  22. package/dist/providers/google.d.ts +13 -0
  23. package/dist/providers/google.d.ts.map +1 -0
  24. package/dist/providers/google.js +120 -0
  25. package/dist/providers/google.js.map +1 -0
  26. package/dist/providers/openai.d.ts +9 -0
  27. package/dist/providers/openai.d.ts.map +1 -0
  28. package/dist/providers/openai.js +70 -0
  29. package/dist/providers/openai.js.map +1 -0
  30. package/dist/providers/registry.d.ts +23 -0
  31. package/dist/providers/registry.d.ts.map +1 -0
  32. package/dist/providers/registry.js +44 -0
  33. package/dist/providers/registry.js.map +1 -0
  34. package/dist/providers/types.d.ts +70 -0
  35. package/dist/providers/types.d.ts.map +1 -0
  36. package/dist/providers/types.js +2 -0
  37. package/dist/providers/types.js.map +1 -0
  38. package/dist/server.d.ts +2 -1
  39. package/dist/server.d.ts.map +1 -1
  40. package/dist/server.js +27 -35
  41. package/dist/server.js.map +1 -1
  42. package/dist/service.d.ts +7 -35
  43. package/dist/service.d.ts.map +1 -1
  44. package/dist/service.js +99 -302
  45. package/dist/service.js.map +1 -1
  46. package/dist/types.d.ts +20 -12
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +15 -45
  49. package/dist/types.js.map +1 -1
  50. package/package.json +12 -4
package/dist/service.js CHANGED
@@ -1,178 +1,11 @@
1
- import { GoogleGenAI, ApiError, ThinkingLevel } from "@google/genai";
2
- import * as fs from "node:fs";
3
- import * as path from "node:path";
4
- import { ChunkedGeminiResponseSchema, GeminiResponseSchema } from "./types.js";
1
+ import { generateText, Output } from "ai";
2
+ import { ResponseSchema, ChunkedResponseSchema } from "./types.js";
5
3
  import { pdfBytesToChunk, splitPdfInHalf } from "./chunker.js";
6
- /**
7
- * Load environment variables from .env file in current working directory.
8
- * Only sets variables that are not already defined in process.env.
9
- */
10
- function loadEnvFile() {
11
- const envPath = path.join(process.cwd(), ".env");
12
- if (!fs.existsSync(envPath))
13
- return;
14
- const content = fs.readFileSync(envPath, "utf-8");
15
- for (const line of content.split("\n")) {
16
- const trimmed = line.trim();
17
- if (!trimmed || trimmed.startsWith("#"))
18
- continue;
19
- const eqIndex = trimmed.indexOf("=");
20
- if (eqIndex === -1)
21
- continue;
22
- const key = trimmed.slice(0, eqIndex).trim();
23
- const value = trimmed
24
- .slice(eqIndex + 1)
25
- .trim()
26
- .replace(/^["']|["']$/g, "");
27
- if (!process.env[key]) {
28
- process.env[key] = value;
29
- }
30
- }
31
- }
32
- const GEMINI_MODEL = "gemini-3.1-pro-preview";
4
+ import { isGeminiFileUri, isUrl, fetchPdfFromUrl, readPdfBytes } from "./pdf-utils.js";
33
5
  const SYSTEM_INSTRUCTION = `You are a document analysis assistant. Analyze PDF documents and answer questions based on their content.
34
6
  For each question, provide a clear, detailed answer based on the content of the PDF.
35
7
  If the answer cannot be determined from the PDF, say so explicitly.
36
8
  Always respond with accurate information from the document.`;
37
- /** Gemini File API URI prefix */
38
- const GEMINI_FILE_URI_PREFIX = "https://generativelanguage.googleapis.com/";
39
- /**
40
- * Creates and returns a configured GoogleGenAI client.
41
- * Loads GEMINI_API_KEY from .env file if not already set in environment.
42
- */
43
- export function createGeminiClient() {
44
- loadEnvFile();
45
- const apiKey = process.env.GEMINI_API_KEY;
46
- if (!apiKey) {
47
- throw new Error("GEMINI_API_KEY not set. Get your key from https://aistudio.google.com/apikey");
48
- }
49
- return new GoogleGenAI({ apiKey });
50
- }
51
- /**
52
- * Check if a string is a Gemini File API URI.
53
- */
54
- export function isGeminiFileUri(source) {
55
- return source.startsWith(GEMINI_FILE_URI_PREFIX);
56
- }
57
- /**
58
- * Check if a string is a URL (excluding Gemini File API URIs).
59
- */
60
- export function isUrl(source) {
61
- if (isGeminiFileUri(source)) {
62
- return false;
63
- }
64
- try {
65
- const url = new URL(source);
66
- return url.protocol === "http:" || url.protocol === "https:";
67
- }
68
- catch {
69
- return false;
70
- }
71
- }
72
- /**
73
- * Validates a local PDF file path.
74
- * Throws descriptive errors for common issues.
75
- */
76
- export function validateLocalPath(pdfPath) {
77
- const trimmedPath = pdfPath.trim();
78
- if (!path.isAbsolute(trimmedPath)) {
79
- throw new Error(`PDF path must be absolute: ${trimmedPath}`);
80
- }
81
- if (!fs.existsSync(trimmedPath)) {
82
- throw new Error(`PDF file not found: ${trimmedPath}`);
83
- }
84
- const stats = fs.statSync(trimmedPath);
85
- if (stats.isDirectory()) {
86
- throw new Error(`Path is a directory, not a file: ${trimmedPath}`);
87
- }
88
- if (!trimmedPath.toLowerCase().endsWith(".pdf")) {
89
- throw new Error(`File is not a PDF: ${trimmedPath}`);
90
- }
91
- }
92
- /** Timeout for fetching PDFs from URLs (60 seconds) */
93
- const FETCH_TIMEOUT_MS = 60_000;
94
- /**
95
- * Fetch PDF content from a URL with timeout.
96
- */
97
- async function fetchPdfFromUrl(url) {
98
- const controller = new AbortController();
99
- const timeoutId = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
100
- let response;
101
- try {
102
- response = await fetch(url, { signal: controller.signal });
103
- }
104
- catch (error) {
105
- if (error instanceof Error && error.name === "AbortError") {
106
- throw new Error(`Request timed out after ${FETCH_TIMEOUT_MS / 1000}s`);
107
- }
108
- const message = error instanceof Error ? error.message : "Unknown error";
109
- throw new Error(`Failed to fetch URL: ${message}`);
110
- }
111
- finally {
112
- clearTimeout(timeoutId);
113
- }
114
- if (!response.ok) {
115
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
116
- }
117
- const contentType = response.headers.get("content-type");
118
- if (contentType &&
119
- !contentType.includes("application/pdf") &&
120
- !contentType.includes("octet-stream")) {
121
- throw new Error(`URL does not point to a PDF file. Content-Type: ${contentType}`);
122
- }
123
- const arrayBuffer = await response.arrayBuffer();
124
- return Buffer.from(arrayBuffer);
125
- }
126
- /**
127
- * Wait for a file to finish processing.
128
- * Polls the file state until it's no longer PROCESSING.
129
- */
130
- async function waitForFileReady(client, fileName, maxAttempts = 10) {
131
- for (let i = 0; i < maxAttempts; i++) {
132
- const fileInfo = await client.files.get({ name: fileName });
133
- if (fileInfo.state === "FAILED") {
134
- throw new Error(`File processing failed: ${fileInfo.name}`);
135
- }
136
- if (fileInfo.state !== "PROCESSING") {
137
- return; // File is ready (ACTIVE state)
138
- }
139
- await new Promise((resolve) => setTimeout(resolve, 2000));
140
- }
141
- throw new Error("File processing timed out");
142
- }
143
- /**
144
- * Upload a PDF to the Gemini File API, or return the URI if already a Gemini file.
145
- * Accepts local paths, web URLs, or Gemini File API URIs.
146
- * Returns the Gemini URI for use in subsequent calls.
147
- */
148
- async function uploadPdf(client, source) {
149
- // If already a Gemini file URI, return as-is (no upload needed)
150
- if (isGeminiFileUri(source)) {
151
- return source;
152
- }
153
- // Upload the file
154
- let file;
155
- if (isUrl(source)) {
156
- const pdfBuffer = await fetchPdfFromUrl(source);
157
- file = await client.files.upload({
158
- file: new Blob([pdfBuffer], { type: "application/pdf" }),
159
- config: { mimeType: "application/pdf" },
160
- });
161
- }
162
- else {
163
- validateLocalPath(source);
164
- file = await client.files.upload({
165
- file: source,
166
- config: { mimeType: "application/pdf" },
167
- });
168
- }
169
- if (!file.name || !file.uri) {
170
- throw new Error("File upload failed: missing name or URI");
171
- }
172
- // Wait for file to be ready
173
- await waitForFileReady(client, file.name);
174
- return file.uri;
175
- }
176
9
  /**
177
10
  * Build the user prompt with queries.
178
11
  */
@@ -180,7 +13,7 @@ function buildUserPrompt(queries) {
180
13
  const queriesText = queries.map((q, i) => `${i + 1}. ${q}`).join("\n");
181
14
  return `Please analyze the attached PDF and answer these questions:\n\n${queriesText}`;
182
15
  }
183
- /** Maximum chunk size for File API upload: 50MB × 0.85 safety margin */
16
+ /** Maximum chunk size for File API upload: 50MB x 0.85 safety margin. */
184
17
  const MAX_UPLOAD_BYTES = 50 * 1024 * 1024 * 0.85;
185
18
  /**
186
19
  * Ensure every query has an answer, filling gaps if the model missed some.
@@ -200,59 +33,46 @@ function ensureAllQueriesAnswered(queries, parsed) {
200
33
  }
201
34
  /**
202
35
  * Direct single-file analysis path.
203
- * Uploads the PDF via File API and sends it to Gemini in one call.
36
+ * Prepares the PDF via the provider and sends it to the LLM in one call.
204
37
  */
205
- async function analyzePdfDirect(client, source, queries) {
206
- const fileUri = await uploadPdf(client, source);
207
- const response = await client.models.generateContent({
208
- model: GEMINI_MODEL,
209
- contents: [
38
+ async function analyzePdfDirect(provider, apiKey, modelId, source, queries) {
39
+ const prepared = await provider.preparePdf(source, apiKey);
40
+ const model = provider.createModel(apiKey, modelId);
41
+ const { text } = await generateText({
42
+ model,
43
+ system: SYSTEM_INSTRUCTION,
44
+ output: Output.object({ schema: ResponseSchema }),
45
+ providerOptions: provider.providerOptions,
46
+ messages: [
210
47
  {
211
48
  role: "user",
212
- parts: [
213
- { fileData: { fileUri, mimeType: "application/pdf" } },
214
- { text: buildUserPrompt(queries) },
215
- ],
49
+ content: [...prepared.fileParts, { type: "text", text: buildUserPrompt(queries) }],
216
50
  },
217
51
  ],
218
- config: {
219
- systemInstruction: SYSTEM_INSTRUCTION,
220
- responseMimeType: "application/json",
221
- responseSchema: GeminiResponseSchema,
222
- thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
223
- },
224
52
  });
225
- const responseText = response.text || "{}";
53
+ const responseText = text ?? "{}";
226
54
  const parsed = JSON.parse(responseText);
55
+ const pdfSourceValue = source.kind === "cachedUri"
56
+ ? source.uri
57
+ : source.kind === "path"
58
+ ? source.path
59
+ : source.kind === "url"
60
+ ? source.url
61
+ : "bytes";
227
62
  return {
228
- pdf_source: source,
229
- cached_uris: [fileUri],
63
+ model: modelId,
64
+ pdf_source: pdfSourceValue,
65
+ cached_uris: prepared.cachedUri ? [prepared.cachedUri] : [],
230
66
  responses: ensureAllQueriesAnswered(queries, parsed.responses),
231
67
  };
232
68
  }
233
- /**
234
- * Upload raw PDF bytes to the Gemini File API.
235
- * Returns the Gemini URI for use in Gemini calls.
236
- */
237
- async function uploadChunkBytes(client, chunkBytes) {
238
- const file = await client.files.upload({
239
- file: new Blob([chunkBytes], { type: "application/pdf" }),
240
- config: { mimeType: "application/pdf" },
241
- });
242
- if (!file.name || !file.uri) {
243
- throw new Error("Chunk upload failed: missing name or URI");
244
- }
245
- await waitForFileReady(client, file.name);
246
- return file.uri;
247
- }
248
69
  /**
249
70
  * Build system instruction for a chunk at a given position.
250
- * When `chunk` metadata is provided, page range info is included in the position line.
251
71
  */
252
72
  function buildChunkedSystemInstruction(chunkIndex, totalChunks, previousFindings, chunk) {
253
73
  let position = `Processing chunk ${chunkIndex + 1} of ${totalChunks}`;
254
74
  if (chunk) {
255
- const pageRange = `pages ${chunk.startPage + 1}–${chunk.startPage + chunk.pageCount}`;
75
+ const pageRange = `pages ${chunk.startPage + 1}\u2013${chunk.startPage + chunk.pageCount}`;
256
76
  position += ` (${pageRange} of ${chunk.totalPages} total)`;
257
77
  }
258
78
  position += ".";
@@ -267,7 +87,7 @@ In addition to answering the queries, produce a "findings_summary" field that tr
267
87
  - What remains unanswered`;
268
88
  if (chunkIndex === 0) {
269
89
  return `${base}
270
- This is the first chunk. Some answers may be incomplete that's expected.${findingsInstruction}`;
90
+ This is the first chunk. Some answers may be incomplete \u2014 that's expected.${findingsInstruction}`;
271
91
  }
272
92
  const previousContext = `
273
93
  Here are the findings from the previous chunks:
@@ -283,119 +103,98 @@ Provide final, comprehensive answers incorporating all findings across the entir
283
103
  }
284
104
  return `${base}${previousContext}${findingsInstruction}`;
285
105
  }
286
- /**
287
- * Check if an error is a Gemini token limit error (input too large).
288
- */
289
- function isTokenLimitError(error) {
290
- if (!(error instanceof ApiError))
291
- return false;
292
- if (error.status !== 400)
293
- return false;
294
- return error.message.includes("input token count exceeds");
295
- }
296
106
  /**
297
107
  * Process a work queue of PdfChunks, splitting on token limit errors.
298
- *
299
- * Algorithm:
300
- * 1. Shift a chunk from the queue
301
- * 2. Upload it and call Gemini
302
- * 3. On success: accumulate findings, collect cached_uri
303
- * 4. On token limit error: split the chunk in half, unshift both back
304
- * 5. Repeat until queue is empty
305
108
  */
306
- async function processChunkQueue(client, queue, queries, pdfSource) {
109
+ async function processChunkQueue(provider, apiKey, modelId, queue, queries, pdfSource) {
307
110
  let previousFindings = null;
308
- const fileUris = [];
111
+ const cachedUris = [];
309
112
  let processedCount = 0;
310
- // We don't know total chunks upfront (splitting changes it),
311
- // so we track completed chunks and estimate total as completed + remaining.
312
113
  while (queue.length > 0) {
313
114
  const chunk = queue.shift();
314
115
  const totalChunks = processedCount + 1 + queue.length;
315
- // Pre-split chunks that exceed File API upload limit
116
+ // Pre-split chunks that exceed upload limit
316
117
  if (chunk.bytes.byteLength > MAX_UPLOAD_BYTES) {
317
118
  const [firstHalf, secondHalf] = await splitPdfInHalf(chunk);
318
119
  queue.unshift(firstHalf, secondHalf);
319
120
  continue;
320
121
  }
321
- const fileUri = await uploadChunkBytes(client, chunk.bytes);
122
+ const prepared = await provider.preparePdf({ kind: "bytes", bytes: chunk.bytes }, apiKey);
322
123
  const systemInstruction = buildChunkedSystemInstruction(processedCount, totalChunks, previousFindings, chunk);
323
124
  try {
324
- const response = await client.models.generateContent({
325
- model: GEMINI_MODEL,
326
- contents: [
125
+ const model = provider.createModel(apiKey, modelId);
126
+ const { text } = await generateText({
127
+ model,
128
+ system: systemInstruction,
129
+ output: Output.object({ schema: ChunkedResponseSchema }),
130
+ providerOptions: provider.providerOptions,
131
+ messages: [
327
132
  {
328
133
  role: "user",
329
- parts: [
330
- { fileData: { fileUri, mimeType: "application/pdf" } },
331
- { text: buildUserPrompt(queries) },
134
+ content: [
135
+ ...prepared.fileParts,
136
+ { type: "text", text: buildUserPrompt(queries) },
332
137
  ],
333
138
  },
334
139
  ],
335
- config: {
336
- systemInstruction,
337
- responseMimeType: "application/json",
338
- responseSchema: ChunkedGeminiResponseSchema,
339
- thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
340
- },
341
140
  });
342
- const responseText = response.text || "{}";
141
+ const responseText = text ?? "{}";
343
142
  const parsed = JSON.parse(responseText);
344
143
  previousFindings = parsed.findings_summary;
345
- fileUris.push(fileUri);
144
+ if (prepared.cachedUri) {
145
+ cachedUris.push(prepared.cachedUri);
146
+ }
346
147
  processedCount++;
347
- // On the last chunk, return the final responses
348
148
  if (queue.length === 0) {
349
149
  return {
150
+ model: modelId,
350
151
  pdf_source: pdfSource,
351
- cached_uris: fileUris,
152
+ cached_uris: cachedUris,
352
153
  responses: ensureAllQueriesAnswered(queries, parsed.responses),
353
154
  };
354
155
  }
355
156
  }
356
157
  catch (error) {
357
- if (!isTokenLimitError(error))
158
+ if (!provider.isTokenLimitError(error))
358
159
  throw error;
359
- // Token limit hit split this chunk and retry
160
+ // Token limit hit, split this chunk and retry
360
161
  const [firstHalf, secondHalf] = await splitPdfInHalf(chunk);
361
162
  queue.unshift(firstHalf, secondHalf);
362
163
  }
363
164
  }
364
- // Unreachable — loop returns on last successful chunk
365
165
  throw new Error("No chunks to process");
366
166
  }
367
167
  /**
368
168
  * Process an array of cached Gemini file URIs with rolling findings.
369
- * Used for re-analysis of a previously chunked PDF.
169
+ * Used for re-analysis of a previously chunked PDF (Google provider only).
370
170
  */
371
- async function processCachedUris(client, fileUris, queries) {
171
+ async function processCachedUris(provider, apiKey, modelId, fileUris, queries) {
372
172
  let previousFindings = null;
373
173
  for (let i = 0; i < fileUris.length; i++) {
374
- const fileUri = fileUris[i];
174
+ const prepared = await provider.preparePdf({ kind: "cachedUri", uri: fileUris[i] }, apiKey);
375
175
  const systemInstruction = buildChunkedSystemInstruction(i, fileUris.length, previousFindings);
376
- const response = await client.models.generateContent({
377
- model: GEMINI_MODEL,
378
- contents: [
176
+ const model = provider.createModel(apiKey, modelId);
177
+ const { text } = await generateText({
178
+ model,
179
+ system: systemInstruction,
180
+ output: Output.object({ schema: ChunkedResponseSchema }),
181
+ providerOptions: provider.providerOptions,
182
+ messages: [
379
183
  {
380
184
  role: "user",
381
- parts: [
382
- { fileData: { fileUri, mimeType: "application/pdf" } },
383
- { text: buildUserPrompt(queries) },
185
+ content: [
186
+ ...prepared.fileParts,
187
+ { type: "text", text: buildUserPrompt(queries) },
384
188
  ],
385
189
  },
386
190
  ],
387
- config: {
388
- systemInstruction,
389
- responseMimeType: "application/json",
390
- responseSchema: ChunkedGeminiResponseSchema,
391
- thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
392
- },
393
191
  });
394
- const responseText = response.text || "{}";
192
+ const responseText = text ?? "{}";
395
193
  const parsed = JSON.parse(responseText);
396
194
  previousFindings = parsed.findings_summary;
397
195
  if (i === fileUris.length - 1) {
398
196
  return {
197
+ model: modelId,
399
198
  pdf_source: fileUris,
400
199
  cached_uris: fileUris,
401
200
  responses: ensureAllQueriesAnswered(queries, parsed.responses),
@@ -405,60 +204,58 @@ async function processCachedUris(client, fileUris, queries) {
405
204
  throw new Error("No URIs to process");
406
205
  }
407
206
  /**
408
- * Read PDF bytes from a source (URL or local file).
207
+ * Classify the pdf_source input into a PdfSource discriminated union.
409
208
  */
410
- async function readPdfBytes(source) {
209
+ function classifySource(source) {
210
+ if (isGeminiFileUri(source)) {
211
+ return { kind: "cachedUri", uri: source };
212
+ }
411
213
  if (isUrl(source)) {
412
- return fetchPdfFromUrl(source);
214
+ return { kind: "url", url: source };
413
215
  }
414
- validateLocalPath(source);
415
- return fs.readFileSync(source.trim());
216
+ return { kind: "path", path: source };
416
217
  }
417
218
  /**
418
- * Analyzes a PDF document using Gemini.
219
+ * Analyzes a PDF document using the configured provider.
419
220
  *
420
221
  * Routing:
421
- * - string[] cached chunk URIs, sequential processing with rolling findings
422
- * - Gemini URI string direct single-file analysis (no bytes to split)
423
- * - path/URL read bytes, try full PDF first, split on token limit error
222
+ * - string[] -> cached chunk URIs, sequential processing with rolling findings (Google only)
223
+ * - Gemini URI string -> direct single-file analysis via cached URI (Google only)
224
+ * - path/URL -> prepare via provider, try full PDF first, split on token limit error
424
225
  */
425
- export async function analyzePdf(client, input) {
226
+ export async function analyzePdf(provider, apiKey, modelId, input) {
426
227
  const { pdf_source, queries } = input;
427
- // Array of cached Gemini file URIs re-analysis path
228
+ // Array of cached Gemini file URIs, re-analysis path (Google only)
428
229
  if (Array.isArray(pdf_source)) {
429
- return processCachedUris(client, pdf_source, queries);
230
+ if (provider.id !== "google") {
231
+ throw new Error("Cached URIs are only supported with the Google provider.");
232
+ }
233
+ return processCachedUris(provider, apiKey, modelId, pdf_source, queries);
430
234
  }
431
- // Single Gemini file URI — direct path, no splitting possible
432
- if (isGeminiFileUri(pdf_source)) {
433
- return analyzePdfDirect(client, pdf_source, queries);
235
+ const source = classifySource(pdf_source);
236
+ // Cached URI, direct path (Google only)
237
+ if (source.kind === "cachedUri") {
238
+ if (provider.id !== "google") {
239
+ throw new Error("Cached URIs are only supported with the Google provider.");
240
+ }
241
+ return analyzePdfDirect(provider, apiKey, modelId, source, queries);
434
242
  }
435
- // Path or URL try the full PDF first via the direct path
243
+ // Path or URL, try the full PDF first via the direct path
436
244
  try {
437
- return await analyzePdfDirect(client, pdf_source, queries);
245
+ return await analyzePdfDirect(provider, apiKey, modelId, source, queries);
438
246
  }
439
247
  catch (error) {
440
- if (!isTokenLimitError(error))
248
+ if (!provider.isTokenLimitError(error))
441
249
  throw error;
442
250
  }
443
- // Token limit exceeded read bytes, split into chunks, and process via work queue
444
- const pdfBytes = await readPdfBytes(pdf_source);
251
+ // Token limit exceeded, read bytes, split into chunks, and process via work queue
252
+ // At this point source is "path" or "url" (cachedUri was handled above)
253
+ const pdfBytes = source.kind === "url"
254
+ ? await fetchPdfFromUrl(source.url)
255
+ : readPdfBytes(source.path);
445
256
  const initialChunk = await pdfBytesToChunk(new Uint8Array(pdfBytes));
446
- return processChunkQueue(client, [initialChunk], queries, pdf_source);
447
- }
448
- /**
449
- * Check if an error is an ApiError and return typed error info.
450
- */
451
- export function isApiError(error) {
452
- return error instanceof ApiError;
453
- }
454
- /**
455
- * Get error message from ApiError, preserving the actual API response.
456
- */
457
- export function getApiErrorMessage(error) {
458
- return {
459
- message: `Gemini API error (HTTP ${error.status})`,
460
- details: error.message,
461
- };
257
+ return processChunkQueue(provider, apiKey, modelId, [initialChunk], queries, pdf_source);
462
258
  }
463
259
  export { AnalyzePdfInputSchema } from "./types.js";
260
+ export { isGeminiFileUri, isUrl, validateLocalPath } from "./pdf-utils.js";
464
261
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAO1C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEvF,MAAM,kBAAkB,GAAG;;;4DAGiC,CAAC;AAE7D;;GAEG;AACH,SAAS,eAAe,CAAC,OAAiB;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,kEAAkE,WAAW,EAAE,CAAC;AACzF,CAAC;AAED,yEAAyE;AACzE,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD;;GAEG;AACH,SAAS,wBAAwB,CAAC,OAAiB,EAAE,MAAuB;IAC1E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,OAAO;YACL,KAAK;YACL,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,iCAAiC;SACpE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC7B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,MAAiB,EACjB,OAAiB;IAEjB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK;QACL,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACjD,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;aAC5F;SACF;KACF,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAmC,CAAC;IAE1E,MAAM,cAAc,GAClB,MAAM,CAAC,IAAI,KAAK,WAAW;QACzB,CAAC,CAAC,MAAM,CAAC,GAAG;QACZ,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;YACtB,CAAC,CAAC,MAAM,CAAC,IAAI;YACb,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;gBACrB,CAAC,CAAC,MAAM,CAAC,GAAG;gBACZ,CAAC,CAAC,OAAO,CAAC;IAElB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3D,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CACpC,UAAkB,EAClB,WAAmB,EACnB,gBAA+B,EAC/B,KAAgB;IAEhB,IAAI,QAAQ,GAAG,oBAAoB,UAAU,GAAG,CAAC,OAAO,WAAW,EAAE,CAAC;IACtE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,SAAS,KAAK,CAAC,SAAS,GAAG,CAAC,SAAS,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3F,QAAQ,IAAI,KAAK,SAAS,OAAO,KAAK,CAAC,UAAU,SAAS,CAAC;IAC7D,CAAC;IACD,QAAQ,IAAI,GAAG,CAAC;IAEhB,MAAM,IAAI,GAAG,wFAAwF,WAAW;EAChH,QAAQ;;mEAEyD,CAAC;IAElE,MAAM,mBAAmB,GAAG;;;;0BAIJ,CAAC;IAEzB,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,IAAI;iFAC+D,mBAAmB,EAAE,CAAC;IACrG,CAAC;IAED,MAAM,eAAe,GAAG;;;EAGxB,gBAAgB;;;iGAG+E,CAAC;IAEhG,IAAI,UAAU,KAAK,WAAW,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,IAAI;0BACQ,eAAe;6FACoD,mBAAmB,EAAE,CAAC;IACjH,CAAC;IAED,OAAO,GAAG,IAAI,GAAG,eAAe,GAAG,mBAAmB,EAAE,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,KAAiB,EACjB,OAAiB,EACjB,SAA4B;IAE5B,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC7B,MAAM,WAAW,GAAG,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAEtD,4CAA4C;QAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAAC;YAC9C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAC5D,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAE1F,MAAM,iBAAiB,GAAG,6BAA6B,CACrD,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,KAAK,CACN,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;gBAClC,KAAK;gBACL,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;gBACxD,eAAe,EAAE,QAAQ,CAAC,eAAe;gBACzC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,GAAG,QAAQ,CAAC,SAAS;4BACrB,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE;yBAC1D;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAyB,CAAC;YAChE,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAC3C,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YACD,cAAc,EAAE,CAAC;YAEjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,KAAK,EAAE,OAAO;oBACd,UAAU,EAAE,SAAS;oBACrB,WAAW,EAAE,UAAU;oBACvB,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;iBAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAEpD,8CAA8C;YAC9C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAC5D,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,QAAkB,EAClB,OAAiB;IAEjB,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5F,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAE9F,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;YAClC,KAAK;YACL,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;YACxD,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,GAAG,QAAQ,CAAC,SAAS;wBACrB,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE;qBAC1D;iBACF;aACF;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAyB,CAAC;QAChE,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAE3C,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,KAAK,EAAE,OAAO;gBACd,UAAU,EAAE,QAAQ;gBACpB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,KAAsB;IAEtB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtC,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,wCAAwC;IACxC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,0DAA0D;IAC1D,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;IACtD,CAAC;IAED,kFAAkF;IAClF,wEAAwE;IACxE,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,KAAK,KAAK;QACnB,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;QACnC,CAAC,CAAC,YAAY,CAAE,MAAyC,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3F,CAAC;AAID,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { z } from "zod";
2
- import { type Schema } from "@google/genai";
3
2
  /** Schema for the analyze_pdf tool input */
4
3
  export declare const AnalyzePdfInputSchema: z.ZodObject<{
5
4
  pdf_source: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
@@ -14,25 +13,34 @@ export interface QueryResponse {
14
13
  }
15
14
  /** Response from the analyze_pdf tool */
16
15
  export interface AnalyzePdfResponse {
16
+ model: string;
17
17
  pdf_source: string | string[];
18
18
  cached_uris: string[];
19
19
  responses: QueryResponse[];
20
20
  }
21
21
  /**
22
- * Gemini response schema for structured output.
23
- * This ensures the model returns a predictable JSON structure.
22
+ * Zod schema for structured LLM output (single PDF).
23
+ * Used with AI SDK's Output.object().
24
24
  */
25
- export declare const GeminiResponseSchema: Schema;
25
+ export declare const ResponseSchema: z.ZodObject<{
26
+ responses: z.ZodArray<z.ZodObject<{
27
+ query: z.ZodString;
28
+ answer: z.ZodString;
29
+ }, z.core.$strip>>;
30
+ }, z.core.$strip>;
26
31
  /**
27
- * Gemini response schema for chunked PDF processing.
28
- * Extends the base schema with a findings_summary field for rolling context.
32
+ * Zod schema for structured LLM output (chunked PDF).
33
+ * Extends the base schema with rolling findings.
29
34
  */
30
- export declare const ChunkedGeminiResponseSchema: Schema;
31
- /** Response from a chunked Gemini call, including rolling findings */
32
- export interface ChunkedQueryResponse {
33
- responses: QueryResponse[];
34
- findings_summary: string;
35
- }
35
+ export declare const ChunkedResponseSchema: z.ZodObject<{
36
+ responses: z.ZodArray<z.ZodObject<{
37
+ query: z.ZodString;
38
+ answer: z.ZodString;
39
+ }, z.core.$strip>>;
40
+ findings_summary: z.ZodString;
41
+ }, z.core.$strip>;
42
+ /** Inferred type for chunked response */
43
+ export type ChunkedQueryResponse = z.infer<typeof ChunkedResponseSchema>;
36
44
  /** Error response from the tool */
37
45
  export interface ToolError {
38
46
  error: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB;;;iBAOhC,CAAC;AAEH,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAiBlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAsBzC,CAAC;AAEF,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,gEAAgE;AAChE,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB;;;iBAOhC,CAAC;AAEH,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;iBAOzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AAEH,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,gEAAgE;AAChE,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC"}