@pageindex/sdk 0.5.0 → 0.6.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/README.md CHANGED
@@ -49,25 +49,27 @@ const recent = await client.tools.recentDocuments();
49
49
  ```typescript
50
50
  const client = new PageIndexClient({
51
51
  apiKey: 'your-api-key',
52
- apiUrl: 'https://api.pageindex.ai', // optional, this is the default
53
- folderScope: 'folder-id', // optional
52
+ folderScope: 'folder-id', // optional, restricts all operations to this folder
54
53
  });
55
54
  ```
56
55
 
56
+ When `folderScope` is set, all operations are restricted to the specified folder and its descendants. Per-call `folderId` can narrow within the scope (e.g. target a subfolder) but cannot access folders outside the boundary. Change it at runtime via `client.setFolderScope(id)`.
57
+
57
58
  ### Tools
58
59
 
59
60
  All methods via `client.tools`:
60
61
 
61
- | Method | Description |
62
- | -------------------------------------------------------------- | ----------------------------------- |
63
- | `recentDocuments()` | List recent uploads |
64
- | `findRelevantDocuments({ nameOrDescriptionFilter?, limit? })` | Search documents |
65
- | `getDocument({ docName, waitForCompletion? })` | Get document details |
66
- | `getDocumentStructure({ docName, part?, waitForCompletion? })` | Extract document outline |
67
- | `getPageContent({ docName, pages, waitForCompletion? })` | Extract page content |
68
- | `removeDocument({ docNames })` | Delete documents |
69
- | `createFolder({ name, description?, parentFolderId? })` | Create folder |
70
- | `listFolders({ parentFolderId? })` | List folders |
62
+ | Method | Description |
63
+ | ------------------------------------------------------------------------- | ------------------------ |
64
+ | `recentDocuments({ folderId?, cursor?, limit? })` | List recent uploads |
65
+ | `findRelevantDocuments({ query?, limit?, folderId?, cursor? })` | Search documents |
66
+ | `getDocument({ docName, waitForCompletion?, folderId? })` | Get document details |
67
+ | `getDocumentStructure({ docName, part?, waitForCompletion?, folderId? })` | Extract document outline |
68
+ | `getPageContent({ docName, pages, waitForCompletion?, folderId? })` | Extract page content |
69
+ | `getDocumentImage({ imagePath })` | Retrieve embedded image |
70
+ | `removeDocument({ docNames, folderId? })` | Delete documents |
71
+ | `createFolder({ name, description?, parentFolderId? })` | Create folder |
72
+ | `listFolders({ parentFolderId? })` | List folders |
71
73
 
72
74
  Page specification formats: `"5"`, `"3,7,10"`, `"5-10"`, `"1-3,7,9-12"`
73
75
 
package/dist/index.cjs CHANGED
@@ -117,19 +117,31 @@ async function createFolder(transport, params) {
117
117
  //#region src/tools/find-relevant-documents.ts
118
118
  async function findRelevantDocuments(transport, params) {
119
119
  return transport.callTool("find_relevant_documents", {
120
- name_or_description_filter: params?.nameOrDescriptionFilter,
120
+ query: params?.query ?? params?.nameOrDescriptionFilter,
121
121
  cursor: params?.cursor,
122
- limit: params?.limit
122
+ limit: params?.limit,
123
+ folder_id: params?.folderId
123
124
  });
124
125
  }
125
126
 
127
+ //#endregion
128
+ //#region src/tools/get-document-image.ts
129
+ async function getDocumentImage(transport, params) {
130
+ const imageContent = await transport.callToolForImage("get_document_image", { image_path: params.imagePath });
131
+ return {
132
+ data: imageContent.data,
133
+ mimeType: imageContent.mimeType
134
+ };
135
+ }
136
+
126
137
  //#endregion
127
138
  //#region src/tools/get-document-structure.ts
128
139
  async function getDocumentStructure(transport, params) {
129
140
  return transport.callTool("get_document_structure", {
130
141
  doc_name: params.docName,
131
142
  part: params.part,
132
- wait_for_completion: params.waitForCompletion
143
+ wait_for_completion: params.waitForCompletion,
144
+ folder_id: params.folderId
133
145
  });
134
146
  }
135
147
 
@@ -138,7 +150,8 @@ async function getDocumentStructure(transport, params) {
138
150
  async function getDocument(transport, params) {
139
151
  return transport.callTool("get_document", {
140
152
  doc_name: params.docName,
141
- wait_for_completion: params.waitForCompletion
153
+ wait_for_completion: params.waitForCompletion,
154
+ folder_id: params.folderId
142
155
  });
143
156
  }
144
157
 
@@ -148,7 +161,8 @@ async function getPageContent(transport, params) {
148
161
  return transport.callTool("get_page_content", {
149
162
  doc_name: params.docName,
150
163
  pages: params.pages,
151
- wait_for_completion: params.waitForCompletion
164
+ wait_for_completion: params.waitForCompletion,
165
+ folder_id: params.folderId
152
166
  });
153
167
  }
154
168
 
@@ -160,14 +174,21 @@ async function listFolders(transport, params) {
160
174
 
161
175
  //#endregion
162
176
  //#region src/tools/recent-documents.ts
163
- async function recentDocuments(transport) {
164
- return transport.callTool("recent_documents", {});
177
+ async function recentDocuments(transport, params) {
178
+ return transport.callTool("recent_documents", {
179
+ folder_id: params?.folderId,
180
+ cursor: params?.cursor,
181
+ limit: params?.limit
182
+ });
165
183
  }
166
184
 
167
185
  //#endregion
168
186
  //#region src/tools/remove-document.ts
169
187
  async function removeDocument(transport, params) {
170
- return transport.callTool("remove_document", { doc_names: params.docNames });
188
+ return transport.callTool("remove_document", {
189
+ doc_names: params.docNames,
190
+ folder_id: params.folderId
191
+ });
171
192
  }
172
193
 
173
194
  //#endregion
@@ -176,11 +197,12 @@ var PageIndexTools = class {
176
197
  constructor(transport) {
177
198
  this.transport = transport;
178
199
  }
179
- recentDocuments = () => recentDocuments(this.transport);
200
+ recentDocuments = (params) => recentDocuments(this.transport, params);
180
201
  findRelevantDocuments = (params) => findRelevantDocuments(this.transport, params);
181
202
  createFolder = (params) => createFolder(this.transport, params);
182
203
  listFolders = (params) => listFolders(this.transport, params);
183
204
  getDocument = (params) => getDocument(this.transport, params);
205
+ getDocumentImage = (params) => getDocumentImage(this.transport, params);
184
206
  getDocumentStructure = (params) => getDocumentStructure(this.transport, params);
185
207
  getPageContent = (params) => getPageContent(this.transport, params);
186
208
  removeDocument = (params) => removeDocument(this.transport, params);
@@ -189,7 +211,7 @@ var PageIndexTools = class {
189
211
  //#endregion
190
212
  //#region package.json
191
213
  var name = "@pageindex/sdk";
192
- var version = "0.5.0";
214
+ var version = "0.6.0";
193
215
 
194
216
  //#endregion
195
217
  //#region src/transport.ts
@@ -259,6 +281,32 @@ var McpTransport = class {
259
281
  }
260
282
  return data;
261
283
  }
284
+ async callToolForImage(name$1, args) {
285
+ if (!this.connected) await this.connect();
286
+ this.resetIdleTimer();
287
+ const r = await this.client.callTool({
288
+ name: name$1,
289
+ arguments: args
290
+ });
291
+ if (r.isError) {
292
+ const textContent = r.content.find((c) => c.type === "text");
293
+ const text = textContent?.type === "text" ? textContent.text : void 0;
294
+ if (text) {
295
+ let data;
296
+ try {
297
+ data = JSON.parse(text);
298
+ } catch {
299
+ throw new PageIndexError(text, "INTERNAL_ERROR");
300
+ }
301
+ const { error, errorCode, ...details } = data;
302
+ throw new PageIndexError(error, errorCode, details);
303
+ }
304
+ throw new PageIndexError("Image retrieval failed", "INTERNAL_ERROR");
305
+ }
306
+ const imageContent = r.content.find((c) => c.type === "image");
307
+ if (!imageContent) throw new PageIndexError("No image content in response", "INTERNAL_ERROR");
308
+ return imageContent;
309
+ }
262
310
  async close() {
263
311
  this.clearIdleTimer();
264
312
  if (this.connected) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Client","pkg.name","pkg.version","StreamableHTTPClientTransport"],"sources":["../src/errors.ts","../src/api/client.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../package.json","../src/transport.ts","../src/client.ts"],"sourcesContent":["export type PageIndexErrorCode =\n | \"USAGE_LIMIT_REACHED\"\n | \"INVALID_INPUT\"\n | \"NOT_FOUND\"\n | \"UNAUTHORIZED\"\n | \"RATE_LIMITED\"\n | \"SERVICE_UNAVAILABLE\"\n | \"INTERNAL_ERROR\";\n\nexport class PageIndexError extends Error {\n constructor(\n message: string,\n public readonly code?: PageIndexErrorCode,\n public readonly details?: Record<string, unknown>,\n public readonly statusCode?: number,\n ) {\n super(message);\n this.name = \"PageIndexError\";\n }\n}\n","import { PageIndexError } from \"../errors.js\";\nimport type {\n ChatCompletionsParams,\n ChatCompletionsResponse,\n DeleteDocumentResponse,\n GetDocumentMetadataResponse,\n ListDocumentsOptions,\n ListDocumentsResponse,\n SubmitDocumentOptions,\n SubmitDocumentResponse,\n} from \"./types.js\";\n\nexport interface PageIndexApiConfig {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n}\n\nexport class PageIndexApi {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly folderScope?: string;\n\n constructor(config: PageIndexApiConfig) {\n this.baseUrl = config.apiUrl.replace(/\\/$/, \"\");\n this.apiKey = config.apiKey;\n this.folderScope = config.folderScope;\n }\n\n async submitDocument(\n file: Blob | Buffer | ArrayBuffer,\n fileName: string,\n options?: SubmitDocumentOptions,\n ): Promise<SubmitDocumentResponse> {\n const formData = new FormData();\n const blob =\n file instanceof Blob\n ? file\n : new Blob([file], { type: \"application/octet-stream\" });\n formData.append(\"file\", blob, fileName);\n if (options?.mode) {\n formData.append(\"mode\", options.mode);\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n formData.append(\"folder_id\", folderId);\n }\n return this.requestMultipart<SubmitDocumentResponse>(\"/doc/\", formData);\n }\n\n async getDocument(docId: string): Promise<GetDocumentMetadataResponse> {\n return this.request<GetDocumentMetadataResponse>(\n `/doc/${encodeURIComponent(docId)}/metadata`,\n );\n }\n\n async listDocuments(\n options?: ListDocumentsOptions,\n ): Promise<ListDocumentsResponse> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", String(options.limit));\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", String(options.offset));\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n params.set(\"folder_id\", folderId);\n }\n const qs = params.toString();\n return this.request<ListDocumentsResponse>(`/docs${qs ? `?${qs}` : \"\"}`);\n }\n\n async deleteDocument(docId: string): Promise<DeleteDocumentResponse> {\n return this.request<DeleteDocumentResponse>(\n `/doc/${encodeURIComponent(docId)}/`,\n { method: \"DELETE\" },\n );\n }\n\n async chatCompletions(\n params: ChatCompletionsParams,\n ): Promise<ChatCompletionsResponse> {\n return this.request<ChatCompletionsResponse>(\"/chat/completions\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params),\n });\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n ...init,\n headers: {\n api_key: this.apiKey,\n ...init?.headers,\n },\n });\n return this.handleResponse<T>(response);\n }\n\n private async requestMultipart<T>(\n path: string,\n formData: FormData,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { api_key: this.apiKey },\n body: formData,\n });\n return this.handleResponse<T>(response);\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n let message = `API request failed with status ${response.status}`;\n let errorCode = this.mapStatusToErrorCode(response.status);\n let details: Record<string, unknown> | undefined;\n\n try {\n const json = JSON.parse(text) as Record<string, unknown>;\n if (json.error && typeof json.error === \"string\") {\n message = json.error;\n }\n if (json.errorCode && typeof json.errorCode === \"string\") {\n errorCode = json.errorCode as typeof errorCode;\n }\n details = json;\n } catch {\n if (text) message = text;\n }\n\n throw new PageIndexError(message, errorCode, details, response.status);\n }\n\n return response.json() as Promise<T>;\n }\n\n private mapStatusToErrorCode(status: number) {\n switch (status) {\n case 401:\n return \"UNAUTHORIZED\" as const;\n case 404:\n return \"NOT_FOUND\" as const;\n case 429:\n return \"RATE_LIMITED\" as const;\n case 503:\n return \"SERVICE_UNAVAILABLE\" as const;\n default:\n return \"INTERNAL_ERROR\" as const;\n }\n }\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface CreateFolderParams {\n name: string;\n description?: string;\n parentFolderId?: string;\n}\n\nexport interface FolderItem {\n id: string;\n name: string;\n description: string | null;\n parent_folder_id: string | null;\n created_at: string;\n file_count: number;\n children_count: number;\n}\n\nexport interface CreateFolderResult {\n folder: FolderItem;\n next_steps: NextSteps;\n}\n\nexport async function createFolder(\n transport: McpTransport,\n params: CreateFolderParams,\n): Promise<CreateFolderResult> {\n return transport.callTool<CreateFolderResult>(\"create_folder\", {\n name: params.name,\n description: params.description,\n parent_folder_id: params.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface FindRelevantDocumentsParams {\n nameOrDescriptionFilter?: string;\n cursor?: string;\n limit?: number;\n}\n\nexport interface SearchDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n pageNum: number;\n createdAt: string;\n folderId: string | null;\n}\n\nexport interface FindRelevantDocumentsResult {\n docs: SearchDocumentItem[];\n cursor?: string;\n has_more: boolean;\n next_steps: NextSteps;\n}\n\nexport async function findRelevantDocuments(\n transport: McpTransport,\n params?: FindRelevantDocumentsParams,\n): Promise<FindRelevantDocumentsResult> {\n return transport.callTool<FindRelevantDocumentsResult>(\n \"find_relevant_documents\",\n {\n name_or_description_filter: params?.nameOrDescriptionFilter,\n cursor: params?.cursor,\n limit: params?.limit,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentStructureParams {\n docName: string;\n part?: number;\n waitForCompletion?: boolean;\n}\n\nexport interface GetDocumentStructureResult {\n doc_name: string;\n structure: unknown;\n total_parts?: number;\n next_steps: NextSteps;\n}\n\nexport async function getDocumentStructure(\n transport: McpTransport,\n params: GetDocumentStructureParams,\n): Promise<GetDocumentStructureResult> {\n return transport.callTool<GetDocumentStructureResult>(\n \"get_document_structure\",\n {\n doc_name: params.docName,\n part: params.part,\n wait_for_completion: params.waitForCompletion,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentParams {\n docName: string;\n waitForCompletion?: boolean;\n}\n\nexport interface GetDocumentResult {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n wait_info?: {\n waited: boolean;\n elapsed_seconds?: number;\n final_status?: string;\n };\n next_steps: NextSteps;\n}\n\nexport async function getDocument(\n transport: McpTransport,\n params: GetDocumentParams,\n): Promise<GetDocumentResult> {\n return transport.callTool<GetDocumentResult>(\"get_document\", {\n doc_name: params.docName,\n wait_for_completion: params.waitForCompletion,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetPageContentParams {\n docName: string;\n pages: string;\n waitForCompletion?: boolean;\n}\n\nexport interface PageContentItem {\n page: number;\n text: string;\n block_id?: string;\n image_count?: number;\n image_annotations?: string[];\n}\n\nexport interface GetPageContentResult {\n doc_name: string;\n total_pages: number;\n requested_pages: string;\n returned_pages: string;\n content: PageContentItem[];\n next_steps: NextSteps;\n}\n\nexport async function getPageContent(\n transport: McpTransport,\n params: GetPageContentParams,\n): Promise<GetPageContentResult> {\n return transport.callTool<GetPageContentResult>(\"get_page_content\", {\n doc_name: params.docName,\n pages: params.pages,\n wait_for_completion: params.waitForCompletion,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { FolderItem } from \"./create-folder.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface ListFoldersParams {\n /**\n * Use \"root\" for root-level folders only, a folder ID for subfolders, or omit for all folders\n */\n parentFolderId?: string;\n}\n\nexport interface ListFoldersResult {\n folders: FolderItem[];\n next_steps: NextSteps;\n}\n\nexport async function listFolders(\n transport: McpTransport,\n params?: ListFoldersParams,\n): Promise<ListFoldersResult> {\n return transport.callTool<ListFoldersResult>(\"list_folders\", {\n parent_folder_id: params?.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RecentDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n}\n\nexport interface RecentDocumentsResult {\n docs: RecentDocumentItem[];\n total_shown: number;\n processing_count: number;\n ready_count: number;\n failed_count: number;\n next_steps: NextSteps;\n}\n\nexport async function recentDocuments(\n transport: McpTransport,\n): Promise<RecentDocumentsResult> {\n return transport.callTool<RecentDocumentsResult>(\"recent_documents\", {});\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RemoveDocumentParams {\n docNames: string[];\n}\n\nexport interface RemoveDocumentResult {\n results: {\n successful: number;\n failed: number;\n details: Array<{\n doc_name: string;\n success: boolean;\n error?: string;\n }>;\n };\n next_steps: NextSteps;\n}\n\nexport async function removeDocument(\n transport: McpTransport,\n params: RemoveDocumentParams,\n): Promise<RemoveDocumentResult> {\n return transport.callTool<RemoveDocumentResult>(\"remove_document\", {\n doc_names: params.docNames,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport {\n type CreateFolderParams,\n type CreateFolderResult,\n createFolder,\n} from \"./create-folder.js\";\nimport {\n type FindRelevantDocumentsParams,\n type FindRelevantDocumentsResult,\n findRelevantDocuments,\n} from \"./find-relevant-documents.js\";\nimport {\n type GetDocumentStructureParams,\n type GetDocumentStructureResult,\n getDocumentStructure,\n} from \"./get-document-structure.js\";\nimport {\n type GetDocumentParams,\n type GetDocumentResult,\n getDocument,\n} from \"./get-document.js\";\nimport {\n type GetPageContentParams,\n type GetPageContentResult,\n getPageContent,\n} from \"./get-page-content.js\";\nimport {\n type ListFoldersParams,\n type ListFoldersResult,\n listFolders,\n} from \"./list-folders.js\";\nimport {\n type RecentDocumentsResult,\n recentDocuments,\n} from \"./recent-documents.js\";\nimport {\n type RemoveDocumentParams,\n type RemoveDocumentResult,\n removeDocument,\n} from \"./remove-document.js\";\n\nexport type { NextSteps } from \"./types.js\";\nexport type {\n CreateFolderParams,\n CreateFolderResult,\n FolderItem,\n} from \"./create-folder.js\";\nexport type { ListFoldersParams, ListFoldersResult } from \"./list-folders.js\";\nexport type {\n RecentDocumentItem,\n RecentDocumentsResult,\n} from \"./recent-documents.js\";\nexport type {\n FindRelevantDocumentsParams,\n FindRelevantDocumentsResult,\n SearchDocumentItem,\n} from \"./find-relevant-documents.js\";\nexport type { GetDocumentParams, GetDocumentResult } from \"./get-document.js\";\nexport type {\n GetDocumentStructureParams,\n GetDocumentStructureResult,\n} from \"./get-document-structure.js\";\nexport type {\n GetPageContentParams,\n GetPageContentResult,\n PageContentItem,\n} from \"./get-page-content.js\";\nexport type {\n RemoveDocumentParams,\n RemoveDocumentResult,\n} from \"./remove-document.js\";\n\nexport class PageIndexTools {\n constructor(private transport: McpTransport) {}\n\n recentDocuments = (): Promise<RecentDocumentsResult> =>\n recentDocuments(this.transport);\n\n findRelevantDocuments = (\n params?: FindRelevantDocumentsParams,\n ): Promise<FindRelevantDocumentsResult> =>\n findRelevantDocuments(this.transport, params);\n\n createFolder = (params: CreateFolderParams): Promise<CreateFolderResult> =>\n createFolder(this.transport, params);\n\n listFolders = (params?: ListFoldersParams): Promise<ListFoldersResult> =>\n listFolders(this.transport, params);\n\n getDocument = (params: GetDocumentParams): Promise<GetDocumentResult> =>\n getDocument(this.transport, params);\n\n getDocumentStructure = (\n params: GetDocumentStructureParams,\n ): Promise<GetDocumentStructureResult> =>\n getDocumentStructure(this.transport, params);\n\n getPageContent = (\n params: GetPageContentParams,\n ): Promise<GetPageContentResult> => getPageContent(this.transport, params);\n\n removeDocument = (\n params: RemoveDocumentParams,\n ): Promise<RemoveDocumentResult> => removeDocument(this.transport, params);\n}\n","","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport pkg from \"../package.json\" assert { type: \"json\" };\nimport { PageIndexError, type PageIndexErrorCode } from \"./errors.js\";\n\nexport class McpTransport {\n private client = new Client(\n { name: pkg.name, version: pkg.version },\n { capabilities: {} },\n );\n private transport: StreamableHTTPClientTransport | null = null;\n private connected = false;\n private folderScope: string | undefined;\n private idleTimeout: number;\n private idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private config: {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n idleTimeout?: number;\n },\n ) {\n this.folderScope = config.folderScope;\n this.idleTimeout = config.idleTimeout ?? 60_000;\n }\n\n private resetIdleTimer(): void {\n if (this.idleTimer) clearTimeout(this.idleTimer);\n if (this.idleTimeout > 0) {\n this.idleTimer = setTimeout(() => this.close(), this.idleTimeout);\n }\n }\n\n private clearIdleTimer(): void {\n if (this.idleTimer) {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n }\n\n async setFolderScope(scope: string | undefined): Promise<void> {\n if (this.folderScope === scope) return;\n this.folderScope = scope;\n if (this.connected) {\n await this.close();\n await this.connect();\n }\n }\n\n isConnected = () => this.connected;\n\n async connect(): Promise<void> {\n if (this.connected) return;\n const url = new URL(\"/mcp\", this.config.apiUrl);\n url.searchParams.set(\"folder\", \"1\");\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n };\n if (this.folderScope) {\n headers[\"X-Folder-Scope\"] = this.folderScope;\n }\n this.transport = new StreamableHTTPClientTransport(url, {\n requestInit: { headers },\n });\n await this.client.connect(this.transport);\n this.connected = true;\n }\n\n async callTool<T = unknown>(\n name: string,\n args: Record<string, unknown>,\n ): Promise<T> {\n if (!this.connected) await this.connect();\n this.resetIdleTimer();\n\n const r = (await this.client.callTool({\n name,\n arguments: args,\n })) as CallToolResult;\n\n const textContent = r.content.find((c) => c.type === \"text\");\n const text = textContent?.type === \"text\" ? textContent.text : undefined;\n\n if (!text) {\n throw new PageIndexError(\"Empty response from server\", \"INTERNAL_ERROR\");\n }\n\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch {\n // Response is not JSON - treat it as a plain text error\n throw new PageIndexError(text, \"INTERNAL_ERROR\");\n }\n\n if (r.isError) {\n const { error, errorCode, ...details } = data as {\n error: string;\n errorCode?: PageIndexErrorCode;\n [key: string]: unknown;\n };\n throw new PageIndexError(error, errorCode, details);\n }\n\n return data as T;\n }\n\n async close(): Promise<void> {\n this.clearIdleTimer();\n if (this.connected) {\n await this.client.close().catch(() => {});\n this.transport = null;\n this.connected = false;\n }\n }\n}\n","import { PageIndexApi } from \"./api/client.js\";\nimport { PageIndexTools } from \"./tools/index.js\";\nimport { McpTransport } from \"./transport.js\";\n\nexport interface PageIndexClientConfig {\n apiKey: string;\n apiUrl?: string;\n folderScope?: string;\n /** MCP connection idle timeout in ms. Set 0 to disable. Default: 60000 (60s) */\n idleTimeout?: number;\n}\n\nconst DEFAULT_API_URL = \"https://api.pageindex.ai\";\n\nexport class PageIndexClient {\n private transport: McpTransport;\n private _api: PageIndexApi;\n private _tools: PageIndexTools | null = null;\n\n constructor(config: PageIndexClientConfig) {\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, \"\");\n\n this.transport = new McpTransport({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n idleTimeout: config.idleTimeout,\n });\n\n this._api = new PageIndexApi({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n });\n }\n\n get api(): PageIndexApi {\n return this._api;\n }\n\n get tools(): PageIndexTools {\n if (!this._tools) {\n this._tools = new PageIndexTools(this.transport);\n }\n return this._tools;\n }\n\n setFolderScope(scope: string | undefined): Promise<void> {\n return this.transport.setFolderScope(scope);\n }\n\n connect = () => this.transport.connect();\n isConnected = () => this.transport.isConnected();\n close = () => this.transport.close();\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.close();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["Client","pkg.name","pkg.version","StreamableHTTPClientTransport"],"sources":["../src/errors.ts","../src/api/client.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-image.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../package.json","../src/transport.ts","../src/client.ts"],"sourcesContent":["export type PageIndexErrorCode =\n | \"USAGE_LIMIT_REACHED\"\n | \"INVALID_INPUT\"\n | \"NOT_FOUND\"\n | \"UNAUTHORIZED\"\n | \"RATE_LIMITED\"\n | \"SERVICE_UNAVAILABLE\"\n | \"INTERNAL_ERROR\";\n\nexport class PageIndexError extends Error {\n constructor(\n message: string,\n public readonly code?: PageIndexErrorCode,\n public readonly details?: Record<string, unknown>,\n public readonly statusCode?: number,\n ) {\n super(message);\n this.name = \"PageIndexError\";\n }\n}\n","import { PageIndexError } from \"../errors.js\";\nimport type {\n ChatCompletionsParams,\n ChatCompletionsResponse,\n DeleteDocumentResponse,\n GetDocumentMetadataResponse,\n ListDocumentsOptions,\n ListDocumentsResponse,\n SubmitDocumentOptions,\n SubmitDocumentResponse,\n} from \"./types.js\";\n\nexport interface PageIndexApiConfig {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n}\n\nexport class PageIndexApi {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly folderScope?: string;\n\n constructor(config: PageIndexApiConfig) {\n this.baseUrl = config.apiUrl.replace(/\\/$/, \"\");\n this.apiKey = config.apiKey;\n this.folderScope = config.folderScope;\n }\n\n async submitDocument(\n file: Blob | Buffer | ArrayBuffer,\n fileName: string,\n options?: SubmitDocumentOptions,\n ): Promise<SubmitDocumentResponse> {\n const formData = new FormData();\n const blob =\n file instanceof Blob\n ? file\n : new Blob([file], { type: \"application/octet-stream\" });\n formData.append(\"file\", blob, fileName);\n if (options?.mode) {\n formData.append(\"mode\", options.mode);\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n formData.append(\"folder_id\", folderId);\n }\n return this.requestMultipart<SubmitDocumentResponse>(\"/doc/\", formData);\n }\n\n async getDocument(docId: string): Promise<GetDocumentMetadataResponse> {\n return this.request<GetDocumentMetadataResponse>(\n `/doc/${encodeURIComponent(docId)}/metadata`,\n );\n }\n\n async listDocuments(\n options?: ListDocumentsOptions,\n ): Promise<ListDocumentsResponse> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", String(options.limit));\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", String(options.offset));\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n params.set(\"folder_id\", folderId);\n }\n const qs = params.toString();\n return this.request<ListDocumentsResponse>(`/docs${qs ? `?${qs}` : \"\"}`);\n }\n\n async deleteDocument(docId: string): Promise<DeleteDocumentResponse> {\n return this.request<DeleteDocumentResponse>(\n `/doc/${encodeURIComponent(docId)}/`,\n { method: \"DELETE\" },\n );\n }\n\n async chatCompletions(\n params: ChatCompletionsParams,\n ): Promise<ChatCompletionsResponse> {\n return this.request<ChatCompletionsResponse>(\"/chat/completions\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params),\n });\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n ...init,\n headers: {\n api_key: this.apiKey,\n ...init?.headers,\n },\n });\n return this.handleResponse<T>(response);\n }\n\n private async requestMultipart<T>(\n path: string,\n formData: FormData,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { api_key: this.apiKey },\n body: formData,\n });\n return this.handleResponse<T>(response);\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n let message = `API request failed with status ${response.status}`;\n let errorCode = this.mapStatusToErrorCode(response.status);\n let details: Record<string, unknown> | undefined;\n\n try {\n const json = JSON.parse(text) as Record<string, unknown>;\n if (json.error && typeof json.error === \"string\") {\n message = json.error;\n }\n if (json.errorCode && typeof json.errorCode === \"string\") {\n errorCode = json.errorCode as typeof errorCode;\n }\n details = json;\n } catch {\n if (text) message = text;\n }\n\n throw new PageIndexError(message, errorCode, details, response.status);\n }\n\n return response.json() as Promise<T>;\n }\n\n private mapStatusToErrorCode(status: number) {\n switch (status) {\n case 401:\n return \"UNAUTHORIZED\" as const;\n case 404:\n return \"NOT_FOUND\" as const;\n case 429:\n return \"RATE_LIMITED\" as const;\n case 503:\n return \"SERVICE_UNAVAILABLE\" as const;\n default:\n return \"INTERNAL_ERROR\" as const;\n }\n }\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface CreateFolderParams {\n name: string;\n description?: string;\n parentFolderId?: string;\n}\n\nexport interface FolderItem {\n id: string;\n name: string;\n description: string | null;\n parent_folder_id: string | null;\n created_at: string;\n updated_at: string;\n file_count: number;\n children_count: number;\n}\n\nexport interface CreateFolderResult {\n folder: FolderItem;\n next_steps: NextSteps;\n}\n\nexport async function createFolder(\n transport: McpTransport,\n params: CreateFolderParams,\n): Promise<CreateFolderResult> {\n return transport.callTool<CreateFolderResult>(\"create_folder\", {\n name: params.name,\n description: params.description,\n parent_folder_id: params.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface FindRelevantDocumentsParams {\n query?: string;\n /** @deprecated Use `query` instead. */\n nameOrDescriptionFilter?: string;\n cursor?: string;\n limit?: number;\n folderId?: string | null;\n}\n\nexport interface SearchDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n pageNum: number;\n createdAt: string;\n folderId: string | null;\n}\n\nexport interface FindRelevantDocumentsResult {\n docs: SearchDocumentItem[];\n search_mode: \"keyword\" | \"smart\";\n next_cursor?: string;\n total_returned: number;\n has_more: boolean;\n next_steps: NextSteps;\n}\n\nexport async function findRelevantDocuments(\n transport: McpTransport,\n params?: FindRelevantDocumentsParams,\n): Promise<FindRelevantDocumentsResult> {\n return transport.callTool<FindRelevantDocumentsResult>(\n \"find_relevant_documents\",\n {\n query: params?.query ?? params?.nameOrDescriptionFilter,\n cursor: params?.cursor,\n limit: params?.limit,\n folder_id: params?.folderId,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\n\nexport interface GetDocumentImageParams {\n /**\n * Image path from get_page_content() response, format: <docName>/<imagePath>\n */\n imagePath: string;\n}\n\nexport interface GetDocumentImageResult {\n data: string;\n mimeType: string;\n}\n\nexport async function getDocumentImage(\n transport: McpTransport,\n params: GetDocumentImageParams,\n): Promise<GetDocumentImageResult> {\n const imageContent = await transport.callToolForImage(\"get_document_image\", {\n image_path: params.imagePath,\n });\n return {\n data: imageContent.data,\n mimeType: imageContent.mimeType,\n };\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentStructureParams {\n docName: string;\n part?: number;\n waitForCompletion?: boolean;\n folderId?: string | null;\n}\n\nexport interface GetDocumentStructureResult {\n doc_name: string;\n structure: unknown;\n total_parts?: number;\n next_steps: NextSteps;\n}\n\nexport async function getDocumentStructure(\n transport: McpTransport,\n params: GetDocumentStructureParams,\n): Promise<GetDocumentStructureResult> {\n return transport.callTool<GetDocumentStructureResult>(\n \"get_document_structure\",\n {\n doc_name: params.docName,\n part: params.part,\n wait_for_completion: params.waitForCompletion,\n folder_id: params.folderId,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentParams {\n docName: string;\n waitForCompletion?: boolean;\n folderId?: string | null;\n}\n\nexport interface GetDocumentResult {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n wait_info?: {\n waited: boolean;\n elapsed_seconds?: number;\n final_status?: string;\n };\n next_steps: NextSteps;\n}\n\nexport async function getDocument(\n transport: McpTransport,\n params: GetDocumentParams,\n): Promise<GetDocumentResult> {\n return transport.callTool<GetDocumentResult>(\"get_document\", {\n doc_name: params.docName,\n wait_for_completion: params.waitForCompletion,\n folder_id: params.folderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetPageContentParams {\n docName: string;\n pages: string;\n waitForCompletion?: boolean;\n folderId?: string | null;\n}\n\nexport interface PageContentItem {\n page: number;\n text: string;\n block_id?: string;\n image_count?: number;\n image_annotations?: string[];\n}\n\nexport interface GetPageContentResult {\n doc_name: string;\n total_pages: number;\n requested_pages: string;\n returned_pages: string;\n content: PageContentItem[];\n next_steps: NextSteps;\n}\n\nexport async function getPageContent(\n transport: McpTransport,\n params: GetPageContentParams,\n): Promise<GetPageContentResult> {\n return transport.callTool<GetPageContentResult>(\"get_page_content\", {\n doc_name: params.docName,\n pages: params.pages,\n wait_for_completion: params.waitForCompletion,\n folder_id: params.folderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { FolderItem } from \"./create-folder.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface ListFoldersParams {\n /**\n * Use \"root\" for root-level folders only, a folder ID for subfolders, or omit for all folders\n */\n parentFolderId?: string;\n}\n\nexport interface ListFoldersResult {\n folders: FolderItem[];\n total: number;\n filter: {\n parent_folder_id?: string;\n scope: string;\n };\n next_steps: NextSteps;\n}\n\nexport async function listFolders(\n transport: McpTransport,\n params?: ListFoldersParams,\n): Promise<ListFoldersResult> {\n return transport.callTool<ListFoldersResult>(\"list_folders\", {\n parent_folder_id: params?.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RecentDocumentsParams {\n folderId?: string | null;\n cursor?: string;\n limit?: number;\n}\n\nexport interface RecentDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n}\n\nexport interface RecentDocumentsResult {\n docs: RecentDocumentItem[];\n total_shown: number;\n next_cursor?: string;\n has_more: boolean;\n processing_count: number;\n ready_count: number;\n failed_count: number;\n next_steps: NextSteps;\n}\n\nexport async function recentDocuments(\n transport: McpTransport,\n params?: RecentDocumentsParams,\n): Promise<RecentDocumentsResult> {\n return transport.callTool<RecentDocumentsResult>(\"recent_documents\", {\n folder_id: params?.folderId,\n cursor: params?.cursor,\n limit: params?.limit,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RemoveDocumentParams {\n docNames: string[];\n folderId?: string | null;\n}\n\nexport interface RemoveDocumentResult {\n results: {\n successful: number;\n failed: number;\n details: Array<{\n doc_name: string;\n success: boolean;\n error?: string;\n }>;\n };\n next_steps: NextSteps;\n}\n\nexport async function removeDocument(\n transport: McpTransport,\n params: RemoveDocumentParams,\n): Promise<RemoveDocumentResult> {\n return transport.callTool<RemoveDocumentResult>(\"remove_document\", {\n doc_names: params.docNames,\n folder_id: params.folderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport {\n type CreateFolderParams,\n type CreateFolderResult,\n createFolder,\n} from \"./create-folder.js\";\nimport {\n type FindRelevantDocumentsParams,\n type FindRelevantDocumentsResult,\n findRelevantDocuments,\n} from \"./find-relevant-documents.js\";\nimport {\n type GetDocumentImageParams,\n type GetDocumentImageResult,\n getDocumentImage,\n} from \"./get-document-image.js\";\nimport {\n type GetDocumentStructureParams,\n type GetDocumentStructureResult,\n getDocumentStructure,\n} from \"./get-document-structure.js\";\nimport {\n type GetDocumentParams,\n type GetDocumentResult,\n getDocument,\n} from \"./get-document.js\";\nimport {\n type GetPageContentParams,\n type GetPageContentResult,\n getPageContent,\n} from \"./get-page-content.js\";\nimport {\n type ListFoldersParams,\n type ListFoldersResult,\n listFolders,\n} from \"./list-folders.js\";\nimport {\n type RecentDocumentsParams,\n type RecentDocumentsResult,\n recentDocuments,\n} from \"./recent-documents.js\";\nimport {\n type RemoveDocumentParams,\n type RemoveDocumentResult,\n removeDocument,\n} from \"./remove-document.js\";\n\nexport type { NextSteps } from \"./types.js\";\nexport type {\n CreateFolderParams,\n CreateFolderResult,\n FolderItem,\n} from \"./create-folder.js\";\nexport type { ListFoldersParams, ListFoldersResult } from \"./list-folders.js\";\nexport type {\n RecentDocumentItem,\n RecentDocumentsParams,\n RecentDocumentsResult,\n} from \"./recent-documents.js\";\nexport type {\n FindRelevantDocumentsParams,\n FindRelevantDocumentsResult,\n SearchDocumentItem,\n} from \"./find-relevant-documents.js\";\nexport type { GetDocumentParams, GetDocumentResult } from \"./get-document.js\";\nexport type {\n GetDocumentImageParams,\n GetDocumentImageResult,\n} from \"./get-document-image.js\";\nexport type {\n GetDocumentStructureParams,\n GetDocumentStructureResult,\n} from \"./get-document-structure.js\";\nexport type {\n GetPageContentParams,\n GetPageContentResult,\n PageContentItem,\n} from \"./get-page-content.js\";\nexport type {\n RemoveDocumentParams,\n RemoveDocumentResult,\n} from \"./remove-document.js\";\n\nexport class PageIndexTools {\n constructor(private transport: McpTransport) {}\n\n recentDocuments = (\n params?: RecentDocumentsParams,\n ): Promise<RecentDocumentsResult> => recentDocuments(this.transport, params);\n\n findRelevantDocuments = (\n params?: FindRelevantDocumentsParams,\n ): Promise<FindRelevantDocumentsResult> =>\n findRelevantDocuments(this.transport, params);\n\n createFolder = (params: CreateFolderParams): Promise<CreateFolderResult> =>\n createFolder(this.transport, params);\n\n listFolders = (params?: ListFoldersParams): Promise<ListFoldersResult> =>\n listFolders(this.transport, params);\n\n getDocument = (params: GetDocumentParams): Promise<GetDocumentResult> =>\n getDocument(this.transport, params);\n\n getDocumentImage = (\n params: GetDocumentImageParams,\n ): Promise<GetDocumentImageResult> =>\n getDocumentImage(this.transport, params);\n\n getDocumentStructure = (\n params: GetDocumentStructureParams,\n ): Promise<GetDocumentStructureResult> =>\n getDocumentStructure(this.transport, params);\n\n getPageContent = (\n params: GetPageContentParams,\n ): Promise<GetPageContentResult> => getPageContent(this.transport, params);\n\n removeDocument = (\n params: RemoveDocumentParams,\n ): Promise<RemoveDocumentResult> => removeDocument(this.transport, params);\n}\n","","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type {\n CallToolResult,\n ImageContent,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport pkg from \"../package.json\" assert { type: \"json\" };\nimport { PageIndexError, type PageIndexErrorCode } from \"./errors.js\";\n\nexport class McpTransport {\n private client = new Client(\n { name: pkg.name, version: pkg.version },\n { capabilities: {} },\n );\n private transport: StreamableHTTPClientTransport | null = null;\n private connected = false;\n private folderScope: string | undefined;\n private idleTimeout: number;\n private idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private config: {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n idleTimeout?: number;\n },\n ) {\n this.folderScope = config.folderScope;\n this.idleTimeout = config.idleTimeout ?? 60_000;\n }\n\n private resetIdleTimer(): void {\n if (this.idleTimer) clearTimeout(this.idleTimer);\n if (this.idleTimeout > 0) {\n this.idleTimer = setTimeout(() => this.close(), this.idleTimeout);\n }\n }\n\n private clearIdleTimer(): void {\n if (this.idleTimer) {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n }\n\n async setFolderScope(scope: string | undefined): Promise<void> {\n if (this.folderScope === scope) return;\n this.folderScope = scope;\n if (this.connected) {\n await this.close();\n await this.connect();\n }\n }\n\n isConnected = () => this.connected;\n\n async connect(): Promise<void> {\n if (this.connected) return;\n const url = new URL(\"/mcp\", this.config.apiUrl);\n url.searchParams.set(\"folder\", \"1\");\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n };\n if (this.folderScope) {\n headers[\"X-Folder-Scope\"] = this.folderScope;\n }\n this.transport = new StreamableHTTPClientTransport(url, {\n requestInit: { headers },\n });\n await this.client.connect(this.transport);\n this.connected = true;\n }\n\n async callTool<T = unknown>(\n name: string,\n args: Record<string, unknown>,\n ): Promise<T> {\n if (!this.connected) await this.connect();\n this.resetIdleTimer();\n\n const r = (await this.client.callTool({\n name,\n arguments: args,\n })) as CallToolResult;\n\n const textContent = r.content.find((c) => c.type === \"text\");\n const text = textContent?.type === \"text\" ? textContent.text : undefined;\n\n if (!text) {\n throw new PageIndexError(\"Empty response from server\", \"INTERNAL_ERROR\");\n }\n\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch {\n // Response is not JSON - treat it as a plain text error\n throw new PageIndexError(text, \"INTERNAL_ERROR\");\n }\n\n if (r.isError) {\n const { error, errorCode, ...details } = data as {\n error: string;\n errorCode?: PageIndexErrorCode;\n [key: string]: unknown;\n };\n throw new PageIndexError(error, errorCode, details);\n }\n\n return data as T;\n }\n\n async callToolForImage(\n name: string,\n args: Record<string, unknown>,\n ): Promise<ImageContent> {\n if (!this.connected) await this.connect();\n this.resetIdleTimer();\n\n const r = (await this.client.callTool({\n name,\n arguments: args,\n })) as CallToolResult;\n\n if (r.isError) {\n const textContent = r.content.find((c) => c.type === \"text\");\n const text = textContent?.type === \"text\" ? textContent.text : undefined;\n if (text) {\n let data: Record<string, unknown>;\n try {\n data = JSON.parse(text) as Record<string, unknown>;\n } catch {\n throw new PageIndexError(text, \"INTERNAL_ERROR\");\n }\n const { error, errorCode, ...details } = data as {\n error: string;\n errorCode?: PageIndexErrorCode;\n [key: string]: unknown;\n };\n throw new PageIndexError(error, errorCode, details);\n }\n throw new PageIndexError(\"Image retrieval failed\", \"INTERNAL_ERROR\");\n }\n\n const imageContent = r.content.find(\n (c): c is ImageContent => c.type === \"image\",\n );\n if (!imageContent) {\n throw new PageIndexError(\n \"No image content in response\",\n \"INTERNAL_ERROR\",\n );\n }\n\n return imageContent;\n }\n\n async close(): Promise<void> {\n this.clearIdleTimer();\n if (this.connected) {\n await this.client.close().catch(() => {});\n this.transport = null;\n this.connected = false;\n }\n }\n}\n","import { PageIndexApi } from \"./api/client.js\";\nimport { PageIndexTools } from \"./tools/index.js\";\nimport { McpTransport } from \"./transport.js\";\n\nexport interface PageIndexClientConfig {\n apiKey: string;\n apiUrl?: string;\n folderScope?: string;\n /** MCP connection idle timeout in ms. Set 0 to disable. Default: 60000 (60s) */\n idleTimeout?: number;\n}\n\nconst DEFAULT_API_URL = \"https://api.pageindex.ai\";\n\nexport class PageIndexClient {\n private transport: McpTransport;\n private _api: PageIndexApi;\n private _tools: PageIndexTools | null = null;\n\n constructor(config: PageIndexClientConfig) {\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, \"\");\n\n this.transport = new McpTransport({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n idleTimeout: config.idleTimeout,\n });\n\n this._api = new PageIndexApi({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n });\n }\n\n get api(): PageIndexApi {\n return this._api;\n }\n\n get tools(): PageIndexTools {\n if (!this._tools) {\n this._tools = new PageIndexTools(this.transport);\n }\n return this._tools;\n }\n\n setFolderScope(scope: string | undefined): Promise<void> {\n return this.transport.setFolderScope(scope);\n }\n\n connect = () => this.transport.connect();\n isConnected = () => this.transport.isConnected();\n close = () => this.transport.close();\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.close();\n }\n}\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -1,3 +1,5 @@
1
+ import { ImageContent } from "@modelcontextprotocol/sdk/types.js";
2
+
1
3
  //#region src/api/types.d.ts
2
4
  interface SubmitDocumentOptions {
3
5
  mode?: string;
@@ -111,6 +113,7 @@ declare class McpTransport {
111
113
  isConnected: () => boolean;
112
114
  connect(): Promise<void>;
113
115
  callTool<T = unknown>(name: string, args: Record<string, unknown>): Promise<T>;
116
+ callToolForImage(name: string, args: Record<string, unknown>): Promise<ImageContent>;
114
117
  close(): Promise<void>;
115
118
  }
116
119
  //#endregion
@@ -133,6 +136,7 @@ interface FolderItem {
133
136
  description: string | null;
134
137
  parent_folder_id: string | null;
135
138
  created_at: string;
139
+ updated_at: string;
136
140
  file_count: number;
137
141
  children_count: number;
138
142
  }
@@ -143,9 +147,12 @@ interface CreateFolderResult {
143
147
  //#endregion
144
148
  //#region src/tools/find-relevant-documents.d.ts
145
149
  interface FindRelevantDocumentsParams {
150
+ query?: string;
151
+ /** @deprecated Use `query` instead. */
146
152
  nameOrDescriptionFilter?: string;
147
153
  cursor?: string;
148
154
  limit?: number;
155
+ folderId?: string | null;
149
156
  }
150
157
  interface SearchDocumentItem {
151
158
  id: string;
@@ -158,16 +165,31 @@ interface SearchDocumentItem {
158
165
  }
159
166
  interface FindRelevantDocumentsResult {
160
167
  docs: SearchDocumentItem[];
161
- cursor?: string;
168
+ search_mode: "keyword" | "smart";
169
+ next_cursor?: string;
170
+ total_returned: number;
162
171
  has_more: boolean;
163
172
  next_steps: NextSteps;
164
173
  }
165
174
  //#endregion
175
+ //#region src/tools/get-document-image.d.ts
176
+ interface GetDocumentImageParams {
177
+ /**
178
+ * Image path from get_page_content() response, format: <docName>/<imagePath>
179
+ */
180
+ imagePath: string;
181
+ }
182
+ interface GetDocumentImageResult {
183
+ data: string;
184
+ mimeType: string;
185
+ }
186
+ //#endregion
166
187
  //#region src/tools/get-document-structure.d.ts
167
188
  interface GetDocumentStructureParams {
168
189
  docName: string;
169
190
  part?: number;
170
191
  waitForCompletion?: boolean;
192
+ folderId?: string | null;
171
193
  }
172
194
  interface GetDocumentStructureResult {
173
195
  doc_name: string;
@@ -180,6 +202,7 @@ interface GetDocumentStructureResult {
180
202
  interface GetDocumentParams {
181
203
  docName: string;
182
204
  waitForCompletion?: boolean;
205
+ folderId?: string | null;
183
206
  }
184
207
  interface GetDocumentResult {
185
208
  id: string;
@@ -201,6 +224,7 @@ interface GetPageContentParams {
201
224
  docName: string;
202
225
  pages: string;
203
226
  waitForCompletion?: boolean;
227
+ folderId?: string | null;
204
228
  }
205
229
  interface PageContentItem {
206
230
  page: number;
@@ -227,10 +251,20 @@ interface ListFoldersParams {
227
251
  }
228
252
  interface ListFoldersResult {
229
253
  folders: FolderItem[];
254
+ total: number;
255
+ filter: {
256
+ parent_folder_id?: string;
257
+ scope: string;
258
+ };
230
259
  next_steps: NextSteps;
231
260
  }
232
261
  //#endregion
233
262
  //#region src/tools/recent-documents.d.ts
263
+ interface RecentDocumentsParams {
264
+ folderId?: string | null;
265
+ cursor?: string;
266
+ limit?: number;
267
+ }
234
268
  interface RecentDocumentItem {
235
269
  id: string;
236
270
  name: string;
@@ -242,6 +276,8 @@ interface RecentDocumentItem {
242
276
  interface RecentDocumentsResult {
243
277
  docs: RecentDocumentItem[];
244
278
  total_shown: number;
279
+ next_cursor?: string;
280
+ has_more: boolean;
245
281
  processing_count: number;
246
282
  ready_count: number;
247
283
  failed_count: number;
@@ -251,6 +287,7 @@ interface RecentDocumentsResult {
251
287
  //#region src/tools/remove-document.d.ts
252
288
  interface RemoveDocumentParams {
253
289
  docNames: string[];
290
+ folderId?: string | null;
254
291
  }
255
292
  interface RemoveDocumentResult {
256
293
  results: {
@@ -269,11 +306,12 @@ interface RemoveDocumentResult {
269
306
  declare class PageIndexTools {
270
307
  private transport;
271
308
  constructor(transport: McpTransport);
272
- recentDocuments: () => Promise<RecentDocumentsResult>;
309
+ recentDocuments: (params?: RecentDocumentsParams) => Promise<RecentDocumentsResult>;
273
310
  findRelevantDocuments: (params?: FindRelevantDocumentsParams) => Promise<FindRelevantDocumentsResult>;
274
311
  createFolder: (params: CreateFolderParams) => Promise<CreateFolderResult>;
275
312
  listFolders: (params?: ListFoldersParams) => Promise<ListFoldersResult>;
276
313
  getDocument: (params: GetDocumentParams) => Promise<GetDocumentResult>;
314
+ getDocumentImage: (params: GetDocumentImageParams) => Promise<GetDocumentImageResult>;
277
315
  getDocumentStructure: (params: GetDocumentStructureParams) => Promise<GetDocumentStructureResult>;
278
316
  getPageContent: (params: GetPageContentParams) => Promise<GetPageContentResult>;
279
317
  removeDocument: (params: RemoveDocumentParams) => Promise<RemoveDocumentResult>;
@@ -310,5 +348,5 @@ declare class PageIndexError extends Error {
310
348
  constructor(message: string, code?: PageIndexErrorCode | undefined, details?: Record<string, unknown> | undefined, statusCode?: number | undefined);
311
349
  }
312
350
  //#endregion
313
- export { ChatCompletionsParams, ChatCompletionsResponse, type CreateFolderParams, type CreateFolderResult, DeleteDocumentResponse, DocumentItem, type FindRelevantDocumentsParams, type FindRelevantDocumentsResult, type FolderItem, GetDocumentMetadataResponse, type GetDocumentParams, type GetDocumentResult, type GetDocumentStructureParams, type GetDocumentStructureResult, type GetPageContentParams, type GetPageContentResult, ListDocumentsOptions, ListDocumentsResponse, type ListFoldersParams, type ListFoldersResult, type NextSteps, type PageContentItem, PageIndexApi, type PageIndexApiConfig, PageIndexClient, type PageIndexClientConfig, PageIndexError, type PageIndexErrorCode, PageIndexTools, type RecentDocumentItem, type RecentDocumentsResult, type RemoveDocumentParams, type RemoveDocumentResult, type SearchDocumentItem, SubmitDocumentOptions, SubmitDocumentResponse };
351
+ export { ChatCompletionsParams, ChatCompletionsResponse, type CreateFolderParams, type CreateFolderResult, DeleteDocumentResponse, DocumentItem, type FindRelevantDocumentsParams, type FindRelevantDocumentsResult, type FolderItem, type GetDocumentImageParams, type GetDocumentImageResult, GetDocumentMetadataResponse, type GetDocumentParams, type GetDocumentResult, type GetDocumentStructureParams, type GetDocumentStructureResult, type GetPageContentParams, type GetPageContentResult, ListDocumentsOptions, ListDocumentsResponse, type ListFoldersParams, type ListFoldersResult, type NextSteps, type PageContentItem, PageIndexApi, type PageIndexApiConfig, PageIndexClient, type PageIndexClientConfig, PageIndexError, type PageIndexErrorCode, PageIndexTools, type RecentDocumentItem, type RecentDocumentsParams, type RecentDocumentsResult, type RemoveDocumentParams, type RemoveDocumentResult, type SearchDocumentItem, SubmitDocumentOptions, SubmitDocumentResponse };
314
352
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/api/types.ts","../src/api/client.ts","../src/transport.ts","../src/tools/types.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../src/client.ts","../src/errors.ts"],"mappings":";UAEiB,qBAAA;EAAA,IAAA;EAAA,QAAA;AAAA;AAAA,UAKA,sBAAA;EAAA,MAAA;AAAA;AAAA,UAIA,2BAAA;EAAA,EAAA;EAAA,IAAA;EAAA,WAAA;EAAA,MAAA;EAAA,SAAA;EAAA,OAAA;EAAA,QAAA;AAAA;AAAA,UAUA,oBAAA;EAAA,KAAA;EAAA,MAAA;EAAA,QAAA;AAAA;AAAA,UAMA,YAAA;EAAA,EAAA;EAAA,IAAA;EAAA,WAAA;EAAA,MAAA;EAAA,SAAA;EAAA,OAAA;EAAA,QAAA;AAAA;AAAA,UAUA,qBAAA;EAAA,SAAA,EACJ,YAAA;EAAA,KAAA;EAAA,KAAA;EAAA,MAAA;AAAA;AAAA,UAMI,sBAAA;EAAA,OAAA;AAAA;AAAA,UAIA,qBAAA;EAAA,QAAA,EACL,KAAA;IAAA,IAAA;IAAA,OAAA;EAAA;EAAA,MAAA;EAAA,OAAA;EAAA,KAAA;EAAA,MAAA;EAAA,WAAA;EAAA,gBAAA;EAAA,eAAA;AAAA;AAAA,UAaK,uBAAA;EAAA,EAAA;EAAA,OAAA,EAEN,KAAA;IAAA,KAAA;IAAA,OAAA;MAAA,IAAA;MAAA,OAAA;IAAA;IAAA,aAAA;EAAA;EAAA,KAAA;IAAA,aAAA;IAAA,iBAAA;IAAA,YAAA;EAAA;AAAA;;;UCpDM,kBAAA;EAAA,MAAA;EAAA,MAAA;EAAA,WAAA;AAAA;AAAA,cAMJ,YAAA;EAAA,iBAAA,OAAA;EAAA,iBAAA,MAAA;EAAA,iBAAA,WAAA;EAAA,YAAA,MAAA,EAKS,kBAAA;EAAA,eAAA,IAAA,EAOZ,IAAA,GAAO,MAAA,GAAS,WAAA,EAAA,QAAA,UAAA,OAAA,GAEZ,qBAAA,GACT,OAAA,CAAQ,sBAAA;EAAA,YAAA,KAAA,WAiBuB,OAAA,CAAQ,2BAAA;EAAA,cAAA,OAAA,GAO9B,oBAAA,GACT,OAAA,CAAQ,qBAAA;EAAA,eAAA,KAAA,WAgB0B,OAAA,CAAQ,sBAAA;EAAA,gBAAA,MAAA,EAQnC,qBAAA,GACP,OAAA,CAAQ,uBAAA;EAAA,QAAA,OAAA;EAAA,QAAA,gBAAA;EAAA,QAAA,cAAA;EAAA,QAAA,oBAAA;AAAA;;;cC7EA,YAAA;EAAA,QAAA,MAAA;EAAA,QAAA,MAAA;EAAA,QAAA,SAAA;EAAA,QAAA,SAAA;EAAA,QAAA,WAAA;EAAA,QAAA,WAAA;EAAA,QAAA,SAAA;EAAA,YAAA,MAAA;IAAA,MAAA;IAAA,MAAA;IAAA,WAAA;IAAA,WAAA;EAAA;EAAA,QAAA,cAAA;EAAA,QAAA,cAAA;EAAA,eAAA,KAAA,uBAqCsC,OAAA;EAAA,WAAA;EAAA,QAAA,GAWhC,OAAA;EAAA,QAAA,aAAA,CAAA,IAAA,UAAA,IAAA,EAmBT,MAAA,oBACL,OAAA,CAAQ,CAAA;EAAA,MAAA,GAoCI,OAAA;AAAA;;;UC9GA,SAAA;EAAA,OAAA;EAAA,OAAA;EAAA,UAAA;AAAA;;;UCGA,kBAAA;EAAA,IAAA;EAAA,WAAA;EAAA,cAAA;AAAA;AAAA,UAMA,UAAA;EAAA,EAAA;EAAA,IAAA;EAAA,WAAA;EAAA,gBAAA;EAAA,UAAA;EAAA,UAAA;EAAA,cAAA;AAAA;AAAA,UAUA,kBAAA;EAAA,MAAA,EACP,UAAA;EAAA,UAAA,EACI,SAAA;AAAA;;;UClBG,2BAAA;EAAA,uBAAA;EAAA,MAAA;EAAA,KAAA;AAAA;AAAA,UAMA,kBAAA;EAAA,EAAA;EAAA,IAAA;EAAA,WAAA;EAAA,MAAA;EAAA,OAAA;EAAA,SAAA;EAAA,QAAA;AAAA;AAAA,UAUA,2BAAA;EAAA,IAAA,EACT,kBAAA;EAAA,MAAA;EAAA,QAAA;EAAA,UAAA,EAGM,SAAA;AAAA;;;UCpBG,0BAAA;EAAA,OAAA;EAAA,IAAA;EAAA,iBAAA;AAAA;AAAA,UAMA,0BAAA;EAAA,QAAA;EAAA,SAAA;EAAA,WAAA;EAAA,UAAA,EAIH,SAAA;AAAA;;;UCVG,iBAAA;EAAA,OAAA;EAAA,iBAAA;AAAA;AAAA,UAKA,iBAAA;EAAA,EAAA;EAAA,IAAA;EAAA,WAAA;EAAA,MAAA;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;IAAA,MAAA;IAAA,eAAA;IAAA,YAAA;EAAA;EAAA,UAAA,EAYH,SAAA;AAAA;;;UCjBG,oBAAA;EAAA,OAAA;EAAA,KAAA;EAAA,iBAAA;AAAA;AAAA,UAMA,eAAA;EAAA,IAAA;EAAA,IAAA;EAAA,QAAA;EAAA,WAAA;EAAA,iBAAA;AAAA;AAAA,UAQA,oBAAA;EAAA,QAAA;EAAA,WAAA;EAAA,eAAA;EAAA,cAAA;EAAA,OAAA,EAKN,eAAA;EAAA,UAAA,EACG,SAAA;AAAA;;;UCnBG,iBAAA;EAAA;AAOjB;;EAPiB,cAAA;AAAA;AAAA,UAOA,iBAAA;EAAA,OAAA,EACN,UAAA;EAAA,UAAA,EACG,SAAA;AAAA;;;UCVG,kBAAA;EAAA,EAAA;EAAA,IAAA;EAAA,WAAA;EAAA,MAAA;EAAA,SAAA;EAAA,OAAA;AAAA;AAAA,UASA,qBAAA;EAAA,IAAA,EACT,kBAAA;EAAA,WAAA;EAAA,gBAAA;EAAA,WAAA;EAAA,YAAA;EAAA,UAAA,EAKM,SAAA;AAAA;;;UCfG,oBAAA;EAAA,QAAA;AAAA;AAAA,UAIA,oBAAA;EAAA,OAAA;IAAA,UAAA;IAAA,MAAA;IAAA,OAAA,EAIJ,KAAA;MAAA,QAAA;MAAA,OAAA;MAAA,KAAA;IAAA;EAAA;EAAA,UAAA,EAMC,SAAA;AAAA;;;cCuDD,cAAA;EAAA,QAAA,SAAA;EAAA,YAAA,SAAA,EACoB,YAAA;EAAA,eAAA,QAET,OAAA,CAAQ,qBAAA;EAAA,qBAAA,GAAA,MAAA,GAInB,2BAAA,KACR,OAAA,CAAQ,2BAAA;EAAA,YAAA,GAAA,MAAA,EAGa,kBAAA,KAAqB,OAAA,CAAQ,kBAAA;EAAA,WAAA,GAAA,MAAA,GAG7B,iBAAA,KAAoB,OAAA,CAAQ,iBAAA;EAAA,WAAA,GAAA,MAAA,EAG7B,iBAAA,KAAoB,OAAA,CAAQ,iBAAA;EAAA,oBAAA,GAAA,MAAA,EAIzC,0BAAA,KACP,OAAA,CAAQ,0BAAA;EAAA,cAAA,GAAA,MAAA,EAID,oBAAA,KACP,OAAA,CAAQ,oBAAA;EAAA,cAAA,GAAA,MAAA,EAGD,oBAAA,KACP,OAAA,CAAQ,oBAAA;AAAA;;;UCnGI,qBAAA;EAAA,MAAA;EAAA,MAAA;EAAA,WAAA;EAAA;EAAA,WAAA;AAAA;AAAA,cAUJ,eAAA;EAAA,QAAA,SAAA;EAAA,QAAA,IAAA;EAAA,QAAA,MAAA;EAAA,YAAA,MAAA,EAKS,qBAAA;EAAA,IAAA,IAAA,GAiBT,YAAA;EAAA,IAAA,MAAA,GAIE,cAAA;EAAA,eAAA,KAAA,uBAO8B,OAAA;EAAA,OAAA,QAIpC,OAAA;EAAA,WAAA;EAAA,KAAA,QAEF,OAAA;EAAA,CAEE,MAAA,CAAO,YAAA,KAAiB,OAAA;AAAA;;;KCvDrB,kBAAA;AAAA,cASC,cAAA,SAAuB,KAAA;EAAA,SAAA,IAAA,GAGT,kBAAA;EAAA,SAAA,OAAA,GACG,MAAA;EAAA,SAAA,UAAA;EAAA,YAAA,OAAA,UAAA,IAAA,GADH,kBAAA,cAAA,OAAA,GACG,MAAA,+BAAA,UAAA;AAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/api/types.ts","../src/api/client.ts","../src/transport.ts","../src/tools/types.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-image.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../src/client.ts","../src/errors.ts"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,3 +1,5 @@
1
+ import { ImageContent } from "@modelcontextprotocol/sdk/types.js";
2
+
1
3
  //#region src/api/types.d.ts
2
4
  interface SubmitDocumentOptions {
3
5
  mode?: string;
@@ -111,6 +113,7 @@ declare class McpTransport {
111
113
  isConnected: () => boolean;
112
114
  connect(): Promise<void>;
113
115
  callTool<T = unknown>(name: string, args: Record<string, unknown>): Promise<T>;
116
+ callToolForImage(name: string, args: Record<string, unknown>): Promise<ImageContent>;
114
117
  close(): Promise<void>;
115
118
  }
116
119
  //#endregion
@@ -133,6 +136,7 @@ interface FolderItem {
133
136
  description: string | null;
134
137
  parent_folder_id: string | null;
135
138
  created_at: string;
139
+ updated_at: string;
136
140
  file_count: number;
137
141
  children_count: number;
138
142
  }
@@ -143,9 +147,12 @@ interface CreateFolderResult {
143
147
  //#endregion
144
148
  //#region src/tools/find-relevant-documents.d.ts
145
149
  interface FindRelevantDocumentsParams {
150
+ query?: string;
151
+ /** @deprecated Use `query` instead. */
146
152
  nameOrDescriptionFilter?: string;
147
153
  cursor?: string;
148
154
  limit?: number;
155
+ folderId?: string | null;
149
156
  }
150
157
  interface SearchDocumentItem {
151
158
  id: string;
@@ -158,16 +165,31 @@ interface SearchDocumentItem {
158
165
  }
159
166
  interface FindRelevantDocumentsResult {
160
167
  docs: SearchDocumentItem[];
161
- cursor?: string;
168
+ search_mode: "keyword" | "smart";
169
+ next_cursor?: string;
170
+ total_returned: number;
162
171
  has_more: boolean;
163
172
  next_steps: NextSteps;
164
173
  }
165
174
  //#endregion
175
+ //#region src/tools/get-document-image.d.ts
176
+ interface GetDocumentImageParams {
177
+ /**
178
+ * Image path from get_page_content() response, format: <docName>/<imagePath>
179
+ */
180
+ imagePath: string;
181
+ }
182
+ interface GetDocumentImageResult {
183
+ data: string;
184
+ mimeType: string;
185
+ }
186
+ //#endregion
166
187
  //#region src/tools/get-document-structure.d.ts
167
188
  interface GetDocumentStructureParams {
168
189
  docName: string;
169
190
  part?: number;
170
191
  waitForCompletion?: boolean;
192
+ folderId?: string | null;
171
193
  }
172
194
  interface GetDocumentStructureResult {
173
195
  doc_name: string;
@@ -180,6 +202,7 @@ interface GetDocumentStructureResult {
180
202
  interface GetDocumentParams {
181
203
  docName: string;
182
204
  waitForCompletion?: boolean;
205
+ folderId?: string | null;
183
206
  }
184
207
  interface GetDocumentResult {
185
208
  id: string;
@@ -201,6 +224,7 @@ interface GetPageContentParams {
201
224
  docName: string;
202
225
  pages: string;
203
226
  waitForCompletion?: boolean;
227
+ folderId?: string | null;
204
228
  }
205
229
  interface PageContentItem {
206
230
  page: number;
@@ -227,10 +251,20 @@ interface ListFoldersParams {
227
251
  }
228
252
  interface ListFoldersResult {
229
253
  folders: FolderItem[];
254
+ total: number;
255
+ filter: {
256
+ parent_folder_id?: string;
257
+ scope: string;
258
+ };
230
259
  next_steps: NextSteps;
231
260
  }
232
261
  //#endregion
233
262
  //#region src/tools/recent-documents.d.ts
263
+ interface RecentDocumentsParams {
264
+ folderId?: string | null;
265
+ cursor?: string;
266
+ limit?: number;
267
+ }
234
268
  interface RecentDocumentItem {
235
269
  id: string;
236
270
  name: string;
@@ -242,6 +276,8 @@ interface RecentDocumentItem {
242
276
  interface RecentDocumentsResult {
243
277
  docs: RecentDocumentItem[];
244
278
  total_shown: number;
279
+ next_cursor?: string;
280
+ has_more: boolean;
245
281
  processing_count: number;
246
282
  ready_count: number;
247
283
  failed_count: number;
@@ -251,6 +287,7 @@ interface RecentDocumentsResult {
251
287
  //#region src/tools/remove-document.d.ts
252
288
  interface RemoveDocumentParams {
253
289
  docNames: string[];
290
+ folderId?: string | null;
254
291
  }
255
292
  interface RemoveDocumentResult {
256
293
  results: {
@@ -269,11 +306,12 @@ interface RemoveDocumentResult {
269
306
  declare class PageIndexTools {
270
307
  private transport;
271
308
  constructor(transport: McpTransport);
272
- recentDocuments: () => Promise<RecentDocumentsResult>;
309
+ recentDocuments: (params?: RecentDocumentsParams) => Promise<RecentDocumentsResult>;
273
310
  findRelevantDocuments: (params?: FindRelevantDocumentsParams) => Promise<FindRelevantDocumentsResult>;
274
311
  createFolder: (params: CreateFolderParams) => Promise<CreateFolderResult>;
275
312
  listFolders: (params?: ListFoldersParams) => Promise<ListFoldersResult>;
276
313
  getDocument: (params: GetDocumentParams) => Promise<GetDocumentResult>;
314
+ getDocumentImage: (params: GetDocumentImageParams) => Promise<GetDocumentImageResult>;
277
315
  getDocumentStructure: (params: GetDocumentStructureParams) => Promise<GetDocumentStructureResult>;
278
316
  getPageContent: (params: GetPageContentParams) => Promise<GetPageContentResult>;
279
317
  removeDocument: (params: RemoveDocumentParams) => Promise<RemoveDocumentResult>;
@@ -310,5 +348,5 @@ declare class PageIndexError extends Error {
310
348
  constructor(message: string, code?: PageIndexErrorCode | undefined, details?: Record<string, unknown> | undefined, statusCode?: number | undefined);
311
349
  }
312
350
  //#endregion
313
- export { ChatCompletionsParams, ChatCompletionsResponse, type CreateFolderParams, type CreateFolderResult, DeleteDocumentResponse, DocumentItem, type FindRelevantDocumentsParams, type FindRelevantDocumentsResult, type FolderItem, GetDocumentMetadataResponse, type GetDocumentParams, type GetDocumentResult, type GetDocumentStructureParams, type GetDocumentStructureResult, type GetPageContentParams, type GetPageContentResult, ListDocumentsOptions, ListDocumentsResponse, type ListFoldersParams, type ListFoldersResult, type NextSteps, type PageContentItem, PageIndexApi, type PageIndexApiConfig, PageIndexClient, type PageIndexClientConfig, PageIndexError, type PageIndexErrorCode, PageIndexTools, type RecentDocumentItem, type RecentDocumentsResult, type RemoveDocumentParams, type RemoveDocumentResult, type SearchDocumentItem, SubmitDocumentOptions, SubmitDocumentResponse };
351
+ export { ChatCompletionsParams, ChatCompletionsResponse, type CreateFolderParams, type CreateFolderResult, DeleteDocumentResponse, DocumentItem, type FindRelevantDocumentsParams, type FindRelevantDocumentsResult, type FolderItem, type GetDocumentImageParams, type GetDocumentImageResult, GetDocumentMetadataResponse, type GetDocumentParams, type GetDocumentResult, type GetDocumentStructureParams, type GetDocumentStructureResult, type GetPageContentParams, type GetPageContentResult, ListDocumentsOptions, ListDocumentsResponse, type ListFoldersParams, type ListFoldersResult, type NextSteps, type PageContentItem, PageIndexApi, type PageIndexApiConfig, PageIndexClient, type PageIndexClientConfig, PageIndexError, type PageIndexErrorCode, PageIndexTools, type RecentDocumentItem, type RecentDocumentsParams, type RecentDocumentsResult, type RemoveDocumentParams, type RemoveDocumentResult, type SearchDocumentItem, SubmitDocumentOptions, SubmitDocumentResponse };
314
352
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/api/types.ts","../src/api/client.ts","../src/transport.ts","../src/tools/types.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../src/client.ts","../src/errors.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/api/types.ts","../src/api/client.ts","../src/transport.ts","../src/tools/types.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-image.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../src/client.ts","../src/errors.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -117,19 +117,31 @@ async function createFolder(transport, params) {
117
117
  //#region src/tools/find-relevant-documents.ts
118
118
  async function findRelevantDocuments(transport, params) {
119
119
  return transport.callTool("find_relevant_documents", {
120
- name_or_description_filter: params?.nameOrDescriptionFilter,
120
+ query: params?.query ?? params?.nameOrDescriptionFilter,
121
121
  cursor: params?.cursor,
122
- limit: params?.limit
122
+ limit: params?.limit,
123
+ folder_id: params?.folderId
123
124
  });
124
125
  }
125
126
 
127
+ //#endregion
128
+ //#region src/tools/get-document-image.ts
129
+ async function getDocumentImage(transport, params) {
130
+ const imageContent = await transport.callToolForImage("get_document_image", { image_path: params.imagePath });
131
+ return {
132
+ data: imageContent.data,
133
+ mimeType: imageContent.mimeType
134
+ };
135
+ }
136
+
126
137
  //#endregion
127
138
  //#region src/tools/get-document-structure.ts
128
139
  async function getDocumentStructure(transport, params) {
129
140
  return transport.callTool("get_document_structure", {
130
141
  doc_name: params.docName,
131
142
  part: params.part,
132
- wait_for_completion: params.waitForCompletion
143
+ wait_for_completion: params.waitForCompletion,
144
+ folder_id: params.folderId
133
145
  });
134
146
  }
135
147
 
@@ -138,7 +150,8 @@ async function getDocumentStructure(transport, params) {
138
150
  async function getDocument(transport, params) {
139
151
  return transport.callTool("get_document", {
140
152
  doc_name: params.docName,
141
- wait_for_completion: params.waitForCompletion
153
+ wait_for_completion: params.waitForCompletion,
154
+ folder_id: params.folderId
142
155
  });
143
156
  }
144
157
 
@@ -148,7 +161,8 @@ async function getPageContent(transport, params) {
148
161
  return transport.callTool("get_page_content", {
149
162
  doc_name: params.docName,
150
163
  pages: params.pages,
151
- wait_for_completion: params.waitForCompletion
164
+ wait_for_completion: params.waitForCompletion,
165
+ folder_id: params.folderId
152
166
  });
153
167
  }
154
168
 
@@ -160,14 +174,21 @@ async function listFolders(transport, params) {
160
174
 
161
175
  //#endregion
162
176
  //#region src/tools/recent-documents.ts
163
- async function recentDocuments(transport) {
164
- return transport.callTool("recent_documents", {});
177
+ async function recentDocuments(transport, params) {
178
+ return transport.callTool("recent_documents", {
179
+ folder_id: params?.folderId,
180
+ cursor: params?.cursor,
181
+ limit: params?.limit
182
+ });
165
183
  }
166
184
 
167
185
  //#endregion
168
186
  //#region src/tools/remove-document.ts
169
187
  async function removeDocument(transport, params) {
170
- return transport.callTool("remove_document", { doc_names: params.docNames });
188
+ return transport.callTool("remove_document", {
189
+ doc_names: params.docNames,
190
+ folder_id: params.folderId
191
+ });
171
192
  }
172
193
 
173
194
  //#endregion
@@ -176,11 +197,12 @@ var PageIndexTools = class {
176
197
  constructor(transport) {
177
198
  this.transport = transport;
178
199
  }
179
- recentDocuments = () => recentDocuments(this.transport);
200
+ recentDocuments = (params) => recentDocuments(this.transport, params);
180
201
  findRelevantDocuments = (params) => findRelevantDocuments(this.transport, params);
181
202
  createFolder = (params) => createFolder(this.transport, params);
182
203
  listFolders = (params) => listFolders(this.transport, params);
183
204
  getDocument = (params) => getDocument(this.transport, params);
205
+ getDocumentImage = (params) => getDocumentImage(this.transport, params);
184
206
  getDocumentStructure = (params) => getDocumentStructure(this.transport, params);
185
207
  getPageContent = (params) => getPageContent(this.transport, params);
186
208
  removeDocument = (params) => removeDocument(this.transport, params);
@@ -189,7 +211,7 @@ var PageIndexTools = class {
189
211
  //#endregion
190
212
  //#region package.json
191
213
  var name = "@pageindex/sdk";
192
- var version = "0.5.0";
214
+ var version = "0.6.0";
193
215
 
194
216
  //#endregion
195
217
  //#region src/transport.ts
@@ -259,6 +281,32 @@ var McpTransport = class {
259
281
  }
260
282
  return data;
261
283
  }
284
+ async callToolForImage(name$1, args) {
285
+ if (!this.connected) await this.connect();
286
+ this.resetIdleTimer();
287
+ const r = await this.client.callTool({
288
+ name: name$1,
289
+ arguments: args
290
+ });
291
+ if (r.isError) {
292
+ const textContent = r.content.find((c) => c.type === "text");
293
+ const text = textContent?.type === "text" ? textContent.text : void 0;
294
+ if (text) {
295
+ let data;
296
+ try {
297
+ data = JSON.parse(text);
298
+ } catch {
299
+ throw new PageIndexError(text, "INTERNAL_ERROR");
300
+ }
301
+ const { error, errorCode, ...details } = data;
302
+ throw new PageIndexError(error, errorCode, details);
303
+ }
304
+ throw new PageIndexError("Image retrieval failed", "INTERNAL_ERROR");
305
+ }
306
+ const imageContent = r.content.find((c) => c.type === "image");
307
+ if (!imageContent) throw new PageIndexError("No image content in response", "INTERNAL_ERROR");
308
+ return imageContent;
309
+ }
262
310
  async close() {
263
311
  this.clearIdleTimer();
264
312
  if (this.connected) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["pkg.name","pkg.version"],"sources":["../src/errors.ts","../src/api/client.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../package.json","../src/transport.ts","../src/client.ts"],"sourcesContent":["export type PageIndexErrorCode =\n | \"USAGE_LIMIT_REACHED\"\n | \"INVALID_INPUT\"\n | \"NOT_FOUND\"\n | \"UNAUTHORIZED\"\n | \"RATE_LIMITED\"\n | \"SERVICE_UNAVAILABLE\"\n | \"INTERNAL_ERROR\";\n\nexport class PageIndexError extends Error {\n constructor(\n message: string,\n public readonly code?: PageIndexErrorCode,\n public readonly details?: Record<string, unknown>,\n public readonly statusCode?: number,\n ) {\n super(message);\n this.name = \"PageIndexError\";\n }\n}\n","import { PageIndexError } from \"../errors.js\";\nimport type {\n ChatCompletionsParams,\n ChatCompletionsResponse,\n DeleteDocumentResponse,\n GetDocumentMetadataResponse,\n ListDocumentsOptions,\n ListDocumentsResponse,\n SubmitDocumentOptions,\n SubmitDocumentResponse,\n} from \"./types.js\";\n\nexport interface PageIndexApiConfig {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n}\n\nexport class PageIndexApi {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly folderScope?: string;\n\n constructor(config: PageIndexApiConfig) {\n this.baseUrl = config.apiUrl.replace(/\\/$/, \"\");\n this.apiKey = config.apiKey;\n this.folderScope = config.folderScope;\n }\n\n async submitDocument(\n file: Blob | Buffer | ArrayBuffer,\n fileName: string,\n options?: SubmitDocumentOptions,\n ): Promise<SubmitDocumentResponse> {\n const formData = new FormData();\n const blob =\n file instanceof Blob\n ? file\n : new Blob([file], { type: \"application/octet-stream\" });\n formData.append(\"file\", blob, fileName);\n if (options?.mode) {\n formData.append(\"mode\", options.mode);\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n formData.append(\"folder_id\", folderId);\n }\n return this.requestMultipart<SubmitDocumentResponse>(\"/doc/\", formData);\n }\n\n async getDocument(docId: string): Promise<GetDocumentMetadataResponse> {\n return this.request<GetDocumentMetadataResponse>(\n `/doc/${encodeURIComponent(docId)}/metadata`,\n );\n }\n\n async listDocuments(\n options?: ListDocumentsOptions,\n ): Promise<ListDocumentsResponse> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", String(options.limit));\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", String(options.offset));\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n params.set(\"folder_id\", folderId);\n }\n const qs = params.toString();\n return this.request<ListDocumentsResponse>(`/docs${qs ? `?${qs}` : \"\"}`);\n }\n\n async deleteDocument(docId: string): Promise<DeleteDocumentResponse> {\n return this.request<DeleteDocumentResponse>(\n `/doc/${encodeURIComponent(docId)}/`,\n { method: \"DELETE\" },\n );\n }\n\n async chatCompletions(\n params: ChatCompletionsParams,\n ): Promise<ChatCompletionsResponse> {\n return this.request<ChatCompletionsResponse>(\"/chat/completions\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params),\n });\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n ...init,\n headers: {\n api_key: this.apiKey,\n ...init?.headers,\n },\n });\n return this.handleResponse<T>(response);\n }\n\n private async requestMultipart<T>(\n path: string,\n formData: FormData,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { api_key: this.apiKey },\n body: formData,\n });\n return this.handleResponse<T>(response);\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n let message = `API request failed with status ${response.status}`;\n let errorCode = this.mapStatusToErrorCode(response.status);\n let details: Record<string, unknown> | undefined;\n\n try {\n const json = JSON.parse(text) as Record<string, unknown>;\n if (json.error && typeof json.error === \"string\") {\n message = json.error;\n }\n if (json.errorCode && typeof json.errorCode === \"string\") {\n errorCode = json.errorCode as typeof errorCode;\n }\n details = json;\n } catch {\n if (text) message = text;\n }\n\n throw new PageIndexError(message, errorCode, details, response.status);\n }\n\n return response.json() as Promise<T>;\n }\n\n private mapStatusToErrorCode(status: number) {\n switch (status) {\n case 401:\n return \"UNAUTHORIZED\" as const;\n case 404:\n return \"NOT_FOUND\" as const;\n case 429:\n return \"RATE_LIMITED\" as const;\n case 503:\n return \"SERVICE_UNAVAILABLE\" as const;\n default:\n return \"INTERNAL_ERROR\" as const;\n }\n }\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface CreateFolderParams {\n name: string;\n description?: string;\n parentFolderId?: string;\n}\n\nexport interface FolderItem {\n id: string;\n name: string;\n description: string | null;\n parent_folder_id: string | null;\n created_at: string;\n file_count: number;\n children_count: number;\n}\n\nexport interface CreateFolderResult {\n folder: FolderItem;\n next_steps: NextSteps;\n}\n\nexport async function createFolder(\n transport: McpTransport,\n params: CreateFolderParams,\n): Promise<CreateFolderResult> {\n return transport.callTool<CreateFolderResult>(\"create_folder\", {\n name: params.name,\n description: params.description,\n parent_folder_id: params.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface FindRelevantDocumentsParams {\n nameOrDescriptionFilter?: string;\n cursor?: string;\n limit?: number;\n}\n\nexport interface SearchDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n pageNum: number;\n createdAt: string;\n folderId: string | null;\n}\n\nexport interface FindRelevantDocumentsResult {\n docs: SearchDocumentItem[];\n cursor?: string;\n has_more: boolean;\n next_steps: NextSteps;\n}\n\nexport async function findRelevantDocuments(\n transport: McpTransport,\n params?: FindRelevantDocumentsParams,\n): Promise<FindRelevantDocumentsResult> {\n return transport.callTool<FindRelevantDocumentsResult>(\n \"find_relevant_documents\",\n {\n name_or_description_filter: params?.nameOrDescriptionFilter,\n cursor: params?.cursor,\n limit: params?.limit,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentStructureParams {\n docName: string;\n part?: number;\n waitForCompletion?: boolean;\n}\n\nexport interface GetDocumentStructureResult {\n doc_name: string;\n structure: unknown;\n total_parts?: number;\n next_steps: NextSteps;\n}\n\nexport async function getDocumentStructure(\n transport: McpTransport,\n params: GetDocumentStructureParams,\n): Promise<GetDocumentStructureResult> {\n return transport.callTool<GetDocumentStructureResult>(\n \"get_document_structure\",\n {\n doc_name: params.docName,\n part: params.part,\n wait_for_completion: params.waitForCompletion,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentParams {\n docName: string;\n waitForCompletion?: boolean;\n}\n\nexport interface GetDocumentResult {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n wait_info?: {\n waited: boolean;\n elapsed_seconds?: number;\n final_status?: string;\n };\n next_steps: NextSteps;\n}\n\nexport async function getDocument(\n transport: McpTransport,\n params: GetDocumentParams,\n): Promise<GetDocumentResult> {\n return transport.callTool<GetDocumentResult>(\"get_document\", {\n doc_name: params.docName,\n wait_for_completion: params.waitForCompletion,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetPageContentParams {\n docName: string;\n pages: string;\n waitForCompletion?: boolean;\n}\n\nexport interface PageContentItem {\n page: number;\n text: string;\n block_id?: string;\n image_count?: number;\n image_annotations?: string[];\n}\n\nexport interface GetPageContentResult {\n doc_name: string;\n total_pages: number;\n requested_pages: string;\n returned_pages: string;\n content: PageContentItem[];\n next_steps: NextSteps;\n}\n\nexport async function getPageContent(\n transport: McpTransport,\n params: GetPageContentParams,\n): Promise<GetPageContentResult> {\n return transport.callTool<GetPageContentResult>(\"get_page_content\", {\n doc_name: params.docName,\n pages: params.pages,\n wait_for_completion: params.waitForCompletion,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { FolderItem } from \"./create-folder.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface ListFoldersParams {\n /**\n * Use \"root\" for root-level folders only, a folder ID for subfolders, or omit for all folders\n */\n parentFolderId?: string;\n}\n\nexport interface ListFoldersResult {\n folders: FolderItem[];\n next_steps: NextSteps;\n}\n\nexport async function listFolders(\n transport: McpTransport,\n params?: ListFoldersParams,\n): Promise<ListFoldersResult> {\n return transport.callTool<ListFoldersResult>(\"list_folders\", {\n parent_folder_id: params?.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RecentDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n}\n\nexport interface RecentDocumentsResult {\n docs: RecentDocumentItem[];\n total_shown: number;\n processing_count: number;\n ready_count: number;\n failed_count: number;\n next_steps: NextSteps;\n}\n\nexport async function recentDocuments(\n transport: McpTransport,\n): Promise<RecentDocumentsResult> {\n return transport.callTool<RecentDocumentsResult>(\"recent_documents\", {});\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RemoveDocumentParams {\n docNames: string[];\n}\n\nexport interface RemoveDocumentResult {\n results: {\n successful: number;\n failed: number;\n details: Array<{\n doc_name: string;\n success: boolean;\n error?: string;\n }>;\n };\n next_steps: NextSteps;\n}\n\nexport async function removeDocument(\n transport: McpTransport,\n params: RemoveDocumentParams,\n): Promise<RemoveDocumentResult> {\n return transport.callTool<RemoveDocumentResult>(\"remove_document\", {\n doc_names: params.docNames,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport {\n type CreateFolderParams,\n type CreateFolderResult,\n createFolder,\n} from \"./create-folder.js\";\nimport {\n type FindRelevantDocumentsParams,\n type FindRelevantDocumentsResult,\n findRelevantDocuments,\n} from \"./find-relevant-documents.js\";\nimport {\n type GetDocumentStructureParams,\n type GetDocumentStructureResult,\n getDocumentStructure,\n} from \"./get-document-structure.js\";\nimport {\n type GetDocumentParams,\n type GetDocumentResult,\n getDocument,\n} from \"./get-document.js\";\nimport {\n type GetPageContentParams,\n type GetPageContentResult,\n getPageContent,\n} from \"./get-page-content.js\";\nimport {\n type ListFoldersParams,\n type ListFoldersResult,\n listFolders,\n} from \"./list-folders.js\";\nimport {\n type RecentDocumentsResult,\n recentDocuments,\n} from \"./recent-documents.js\";\nimport {\n type RemoveDocumentParams,\n type RemoveDocumentResult,\n removeDocument,\n} from \"./remove-document.js\";\n\nexport type { NextSteps } from \"./types.js\";\nexport type {\n CreateFolderParams,\n CreateFolderResult,\n FolderItem,\n} from \"./create-folder.js\";\nexport type { ListFoldersParams, ListFoldersResult } from \"./list-folders.js\";\nexport type {\n RecentDocumentItem,\n RecentDocumentsResult,\n} from \"./recent-documents.js\";\nexport type {\n FindRelevantDocumentsParams,\n FindRelevantDocumentsResult,\n SearchDocumentItem,\n} from \"./find-relevant-documents.js\";\nexport type { GetDocumentParams, GetDocumentResult } from \"./get-document.js\";\nexport type {\n GetDocumentStructureParams,\n GetDocumentStructureResult,\n} from \"./get-document-structure.js\";\nexport type {\n GetPageContentParams,\n GetPageContentResult,\n PageContentItem,\n} from \"./get-page-content.js\";\nexport type {\n RemoveDocumentParams,\n RemoveDocumentResult,\n} from \"./remove-document.js\";\n\nexport class PageIndexTools {\n constructor(private transport: McpTransport) {}\n\n recentDocuments = (): Promise<RecentDocumentsResult> =>\n recentDocuments(this.transport);\n\n findRelevantDocuments = (\n params?: FindRelevantDocumentsParams,\n ): Promise<FindRelevantDocumentsResult> =>\n findRelevantDocuments(this.transport, params);\n\n createFolder = (params: CreateFolderParams): Promise<CreateFolderResult> =>\n createFolder(this.transport, params);\n\n listFolders = (params?: ListFoldersParams): Promise<ListFoldersResult> =>\n listFolders(this.transport, params);\n\n getDocument = (params: GetDocumentParams): Promise<GetDocumentResult> =>\n getDocument(this.transport, params);\n\n getDocumentStructure = (\n params: GetDocumentStructureParams,\n ): Promise<GetDocumentStructureResult> =>\n getDocumentStructure(this.transport, params);\n\n getPageContent = (\n params: GetPageContentParams,\n ): Promise<GetPageContentResult> => getPageContent(this.transport, params);\n\n removeDocument = (\n params: RemoveDocumentParams,\n ): Promise<RemoveDocumentResult> => removeDocument(this.transport, params);\n}\n","","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport pkg from \"../package.json\" assert { type: \"json\" };\nimport { PageIndexError, type PageIndexErrorCode } from \"./errors.js\";\n\nexport class McpTransport {\n private client = new Client(\n { name: pkg.name, version: pkg.version },\n { capabilities: {} },\n );\n private transport: StreamableHTTPClientTransport | null = null;\n private connected = false;\n private folderScope: string | undefined;\n private idleTimeout: number;\n private idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private config: {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n idleTimeout?: number;\n },\n ) {\n this.folderScope = config.folderScope;\n this.idleTimeout = config.idleTimeout ?? 60_000;\n }\n\n private resetIdleTimer(): void {\n if (this.idleTimer) clearTimeout(this.idleTimer);\n if (this.idleTimeout > 0) {\n this.idleTimer = setTimeout(() => this.close(), this.idleTimeout);\n }\n }\n\n private clearIdleTimer(): void {\n if (this.idleTimer) {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n }\n\n async setFolderScope(scope: string | undefined): Promise<void> {\n if (this.folderScope === scope) return;\n this.folderScope = scope;\n if (this.connected) {\n await this.close();\n await this.connect();\n }\n }\n\n isConnected = () => this.connected;\n\n async connect(): Promise<void> {\n if (this.connected) return;\n const url = new URL(\"/mcp\", this.config.apiUrl);\n url.searchParams.set(\"folder\", \"1\");\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n };\n if (this.folderScope) {\n headers[\"X-Folder-Scope\"] = this.folderScope;\n }\n this.transport = new StreamableHTTPClientTransport(url, {\n requestInit: { headers },\n });\n await this.client.connect(this.transport);\n this.connected = true;\n }\n\n async callTool<T = unknown>(\n name: string,\n args: Record<string, unknown>,\n ): Promise<T> {\n if (!this.connected) await this.connect();\n this.resetIdleTimer();\n\n const r = (await this.client.callTool({\n name,\n arguments: args,\n })) as CallToolResult;\n\n const textContent = r.content.find((c) => c.type === \"text\");\n const text = textContent?.type === \"text\" ? textContent.text : undefined;\n\n if (!text) {\n throw new PageIndexError(\"Empty response from server\", \"INTERNAL_ERROR\");\n }\n\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch {\n // Response is not JSON - treat it as a plain text error\n throw new PageIndexError(text, \"INTERNAL_ERROR\");\n }\n\n if (r.isError) {\n const { error, errorCode, ...details } = data as {\n error: string;\n errorCode?: PageIndexErrorCode;\n [key: string]: unknown;\n };\n throw new PageIndexError(error, errorCode, details);\n }\n\n return data as T;\n }\n\n async close(): Promise<void> {\n this.clearIdleTimer();\n if (this.connected) {\n await this.client.close().catch(() => {});\n this.transport = null;\n this.connected = false;\n }\n }\n}\n","import { PageIndexApi } from \"./api/client.js\";\nimport { PageIndexTools } from \"./tools/index.js\";\nimport { McpTransport } from \"./transport.js\";\n\nexport interface PageIndexClientConfig {\n apiKey: string;\n apiUrl?: string;\n folderScope?: string;\n /** MCP connection idle timeout in ms. Set 0 to disable. Default: 60000 (60s) */\n idleTimeout?: number;\n}\n\nconst DEFAULT_API_URL = \"https://api.pageindex.ai\";\n\nexport class PageIndexClient {\n private transport: McpTransport;\n private _api: PageIndexApi;\n private _tools: PageIndexTools | null = null;\n\n constructor(config: PageIndexClientConfig) {\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, \"\");\n\n this.transport = new McpTransport({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n idleTimeout: config.idleTimeout,\n });\n\n this._api = new PageIndexApi({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n });\n }\n\n get api(): PageIndexApi {\n return this._api;\n }\n\n get tools(): PageIndexTools {\n if (!this._tools) {\n this._tools = new PageIndexTools(this.transport);\n }\n return this._tools;\n }\n\n setFolderScope(scope: string | undefined): Promise<void> {\n return this.transport.setFolderScope(scope);\n }\n\n connect = () => this.transport.connect();\n isConnected = () => this.transport.isConnected();\n close = () => this.transport.close();\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.close();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["pkg.name","pkg.version"],"sources":["../src/errors.ts","../src/api/client.ts","../src/tools/create-folder.ts","../src/tools/find-relevant-documents.ts","../src/tools/get-document-image.ts","../src/tools/get-document-structure.ts","../src/tools/get-document.ts","../src/tools/get-page-content.ts","../src/tools/list-folders.ts","../src/tools/recent-documents.ts","../src/tools/remove-document.ts","../src/tools/index.ts","../package.json","../src/transport.ts","../src/client.ts"],"sourcesContent":["export type PageIndexErrorCode =\n | \"USAGE_LIMIT_REACHED\"\n | \"INVALID_INPUT\"\n | \"NOT_FOUND\"\n | \"UNAUTHORIZED\"\n | \"RATE_LIMITED\"\n | \"SERVICE_UNAVAILABLE\"\n | \"INTERNAL_ERROR\";\n\nexport class PageIndexError extends Error {\n constructor(\n message: string,\n public readonly code?: PageIndexErrorCode,\n public readonly details?: Record<string, unknown>,\n public readonly statusCode?: number,\n ) {\n super(message);\n this.name = \"PageIndexError\";\n }\n}\n","import { PageIndexError } from \"../errors.js\";\nimport type {\n ChatCompletionsParams,\n ChatCompletionsResponse,\n DeleteDocumentResponse,\n GetDocumentMetadataResponse,\n ListDocumentsOptions,\n ListDocumentsResponse,\n SubmitDocumentOptions,\n SubmitDocumentResponse,\n} from \"./types.js\";\n\nexport interface PageIndexApiConfig {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n}\n\nexport class PageIndexApi {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly folderScope?: string;\n\n constructor(config: PageIndexApiConfig) {\n this.baseUrl = config.apiUrl.replace(/\\/$/, \"\");\n this.apiKey = config.apiKey;\n this.folderScope = config.folderScope;\n }\n\n async submitDocument(\n file: Blob | Buffer | ArrayBuffer,\n fileName: string,\n options?: SubmitDocumentOptions,\n ): Promise<SubmitDocumentResponse> {\n const formData = new FormData();\n const blob =\n file instanceof Blob\n ? file\n : new Blob([file], { type: \"application/octet-stream\" });\n formData.append(\"file\", blob, fileName);\n if (options?.mode) {\n formData.append(\"mode\", options.mode);\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n formData.append(\"folder_id\", folderId);\n }\n return this.requestMultipart<SubmitDocumentResponse>(\"/doc/\", formData);\n }\n\n async getDocument(docId: string): Promise<GetDocumentMetadataResponse> {\n return this.request<GetDocumentMetadataResponse>(\n `/doc/${encodeURIComponent(docId)}/metadata`,\n );\n }\n\n async listDocuments(\n options?: ListDocumentsOptions,\n ): Promise<ListDocumentsResponse> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", String(options.limit));\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", String(options.offset));\n }\n const folderId = options?.folderId ?? this.folderScope;\n if (folderId) {\n params.set(\"folder_id\", folderId);\n }\n const qs = params.toString();\n return this.request<ListDocumentsResponse>(`/docs${qs ? `?${qs}` : \"\"}`);\n }\n\n async deleteDocument(docId: string): Promise<DeleteDocumentResponse> {\n return this.request<DeleteDocumentResponse>(\n `/doc/${encodeURIComponent(docId)}/`,\n { method: \"DELETE\" },\n );\n }\n\n async chatCompletions(\n params: ChatCompletionsParams,\n ): Promise<ChatCompletionsResponse> {\n return this.request<ChatCompletionsResponse>(\"/chat/completions\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params),\n });\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n ...init,\n headers: {\n api_key: this.apiKey,\n ...init?.headers,\n },\n });\n return this.handleResponse<T>(response);\n }\n\n private async requestMultipart<T>(\n path: string,\n formData: FormData,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { api_key: this.apiKey },\n body: formData,\n });\n return this.handleResponse<T>(response);\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n let message = `API request failed with status ${response.status}`;\n let errorCode = this.mapStatusToErrorCode(response.status);\n let details: Record<string, unknown> | undefined;\n\n try {\n const json = JSON.parse(text) as Record<string, unknown>;\n if (json.error && typeof json.error === \"string\") {\n message = json.error;\n }\n if (json.errorCode && typeof json.errorCode === \"string\") {\n errorCode = json.errorCode as typeof errorCode;\n }\n details = json;\n } catch {\n if (text) message = text;\n }\n\n throw new PageIndexError(message, errorCode, details, response.status);\n }\n\n return response.json() as Promise<T>;\n }\n\n private mapStatusToErrorCode(status: number) {\n switch (status) {\n case 401:\n return \"UNAUTHORIZED\" as const;\n case 404:\n return \"NOT_FOUND\" as const;\n case 429:\n return \"RATE_LIMITED\" as const;\n case 503:\n return \"SERVICE_UNAVAILABLE\" as const;\n default:\n return \"INTERNAL_ERROR\" as const;\n }\n }\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface CreateFolderParams {\n name: string;\n description?: string;\n parentFolderId?: string;\n}\n\nexport interface FolderItem {\n id: string;\n name: string;\n description: string | null;\n parent_folder_id: string | null;\n created_at: string;\n updated_at: string;\n file_count: number;\n children_count: number;\n}\n\nexport interface CreateFolderResult {\n folder: FolderItem;\n next_steps: NextSteps;\n}\n\nexport async function createFolder(\n transport: McpTransport,\n params: CreateFolderParams,\n): Promise<CreateFolderResult> {\n return transport.callTool<CreateFolderResult>(\"create_folder\", {\n name: params.name,\n description: params.description,\n parent_folder_id: params.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface FindRelevantDocumentsParams {\n query?: string;\n /** @deprecated Use `query` instead. */\n nameOrDescriptionFilter?: string;\n cursor?: string;\n limit?: number;\n folderId?: string | null;\n}\n\nexport interface SearchDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n pageNum: number;\n createdAt: string;\n folderId: string | null;\n}\n\nexport interface FindRelevantDocumentsResult {\n docs: SearchDocumentItem[];\n search_mode: \"keyword\" | \"smart\";\n next_cursor?: string;\n total_returned: number;\n has_more: boolean;\n next_steps: NextSteps;\n}\n\nexport async function findRelevantDocuments(\n transport: McpTransport,\n params?: FindRelevantDocumentsParams,\n): Promise<FindRelevantDocumentsResult> {\n return transport.callTool<FindRelevantDocumentsResult>(\n \"find_relevant_documents\",\n {\n query: params?.query ?? params?.nameOrDescriptionFilter,\n cursor: params?.cursor,\n limit: params?.limit,\n folder_id: params?.folderId,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\n\nexport interface GetDocumentImageParams {\n /**\n * Image path from get_page_content() response, format: <docName>/<imagePath>\n */\n imagePath: string;\n}\n\nexport interface GetDocumentImageResult {\n data: string;\n mimeType: string;\n}\n\nexport async function getDocumentImage(\n transport: McpTransport,\n params: GetDocumentImageParams,\n): Promise<GetDocumentImageResult> {\n const imageContent = await transport.callToolForImage(\"get_document_image\", {\n image_path: params.imagePath,\n });\n return {\n data: imageContent.data,\n mimeType: imageContent.mimeType,\n };\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentStructureParams {\n docName: string;\n part?: number;\n waitForCompletion?: boolean;\n folderId?: string | null;\n}\n\nexport interface GetDocumentStructureResult {\n doc_name: string;\n structure: unknown;\n total_parts?: number;\n next_steps: NextSteps;\n}\n\nexport async function getDocumentStructure(\n transport: McpTransport,\n params: GetDocumentStructureParams,\n): Promise<GetDocumentStructureResult> {\n return transport.callTool<GetDocumentStructureResult>(\n \"get_document_structure\",\n {\n doc_name: params.docName,\n part: params.part,\n wait_for_completion: params.waitForCompletion,\n folder_id: params.folderId,\n },\n );\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetDocumentParams {\n docName: string;\n waitForCompletion?: boolean;\n folderId?: string | null;\n}\n\nexport interface GetDocumentResult {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n wait_info?: {\n waited: boolean;\n elapsed_seconds?: number;\n final_status?: string;\n };\n next_steps: NextSteps;\n}\n\nexport async function getDocument(\n transport: McpTransport,\n params: GetDocumentParams,\n): Promise<GetDocumentResult> {\n return transport.callTool<GetDocumentResult>(\"get_document\", {\n doc_name: params.docName,\n wait_for_completion: params.waitForCompletion,\n folder_id: params.folderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface GetPageContentParams {\n docName: string;\n pages: string;\n waitForCompletion?: boolean;\n folderId?: string | null;\n}\n\nexport interface PageContentItem {\n page: number;\n text: string;\n block_id?: string;\n image_count?: number;\n image_annotations?: string[];\n}\n\nexport interface GetPageContentResult {\n doc_name: string;\n total_pages: number;\n requested_pages: string;\n returned_pages: string;\n content: PageContentItem[];\n next_steps: NextSteps;\n}\n\nexport async function getPageContent(\n transport: McpTransport,\n params: GetPageContentParams,\n): Promise<GetPageContentResult> {\n return transport.callTool<GetPageContentResult>(\"get_page_content\", {\n doc_name: params.docName,\n pages: params.pages,\n wait_for_completion: params.waitForCompletion,\n folder_id: params.folderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { FolderItem } from \"./create-folder.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface ListFoldersParams {\n /**\n * Use \"root\" for root-level folders only, a folder ID for subfolders, or omit for all folders\n */\n parentFolderId?: string;\n}\n\nexport interface ListFoldersResult {\n folders: FolderItem[];\n total: number;\n filter: {\n parent_folder_id?: string;\n scope: string;\n };\n next_steps: NextSteps;\n}\n\nexport async function listFolders(\n transport: McpTransport,\n params?: ListFoldersParams,\n): Promise<ListFoldersResult> {\n return transport.callTool<ListFoldersResult>(\"list_folders\", {\n parent_folder_id: params?.parentFolderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RecentDocumentsParams {\n folderId?: string | null;\n cursor?: string;\n limit?: number;\n}\n\nexport interface RecentDocumentItem {\n id: string;\n name: string;\n description: string;\n status: string;\n createdAt: string;\n pageNum?: number;\n}\n\nexport interface RecentDocumentsResult {\n docs: RecentDocumentItem[];\n total_shown: number;\n next_cursor?: string;\n has_more: boolean;\n processing_count: number;\n ready_count: number;\n failed_count: number;\n next_steps: NextSteps;\n}\n\nexport async function recentDocuments(\n transport: McpTransport,\n params?: RecentDocumentsParams,\n): Promise<RecentDocumentsResult> {\n return transport.callTool<RecentDocumentsResult>(\"recent_documents\", {\n folder_id: params?.folderId,\n cursor: params?.cursor,\n limit: params?.limit,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport type { NextSteps } from \"./types.js\";\n\nexport interface RemoveDocumentParams {\n docNames: string[];\n folderId?: string | null;\n}\n\nexport interface RemoveDocumentResult {\n results: {\n successful: number;\n failed: number;\n details: Array<{\n doc_name: string;\n success: boolean;\n error?: string;\n }>;\n };\n next_steps: NextSteps;\n}\n\nexport async function removeDocument(\n transport: McpTransport,\n params: RemoveDocumentParams,\n): Promise<RemoveDocumentResult> {\n return transport.callTool<RemoveDocumentResult>(\"remove_document\", {\n doc_names: params.docNames,\n folder_id: params.folderId,\n });\n}\n","import type { McpTransport } from \"../transport.js\";\nimport {\n type CreateFolderParams,\n type CreateFolderResult,\n createFolder,\n} from \"./create-folder.js\";\nimport {\n type FindRelevantDocumentsParams,\n type FindRelevantDocumentsResult,\n findRelevantDocuments,\n} from \"./find-relevant-documents.js\";\nimport {\n type GetDocumentImageParams,\n type GetDocumentImageResult,\n getDocumentImage,\n} from \"./get-document-image.js\";\nimport {\n type GetDocumentStructureParams,\n type GetDocumentStructureResult,\n getDocumentStructure,\n} from \"./get-document-structure.js\";\nimport {\n type GetDocumentParams,\n type GetDocumentResult,\n getDocument,\n} from \"./get-document.js\";\nimport {\n type GetPageContentParams,\n type GetPageContentResult,\n getPageContent,\n} from \"./get-page-content.js\";\nimport {\n type ListFoldersParams,\n type ListFoldersResult,\n listFolders,\n} from \"./list-folders.js\";\nimport {\n type RecentDocumentsParams,\n type RecentDocumentsResult,\n recentDocuments,\n} from \"./recent-documents.js\";\nimport {\n type RemoveDocumentParams,\n type RemoveDocumentResult,\n removeDocument,\n} from \"./remove-document.js\";\n\nexport type { NextSteps } from \"./types.js\";\nexport type {\n CreateFolderParams,\n CreateFolderResult,\n FolderItem,\n} from \"./create-folder.js\";\nexport type { ListFoldersParams, ListFoldersResult } from \"./list-folders.js\";\nexport type {\n RecentDocumentItem,\n RecentDocumentsParams,\n RecentDocumentsResult,\n} from \"./recent-documents.js\";\nexport type {\n FindRelevantDocumentsParams,\n FindRelevantDocumentsResult,\n SearchDocumentItem,\n} from \"./find-relevant-documents.js\";\nexport type { GetDocumentParams, GetDocumentResult } from \"./get-document.js\";\nexport type {\n GetDocumentImageParams,\n GetDocumentImageResult,\n} from \"./get-document-image.js\";\nexport type {\n GetDocumentStructureParams,\n GetDocumentStructureResult,\n} from \"./get-document-structure.js\";\nexport type {\n GetPageContentParams,\n GetPageContentResult,\n PageContentItem,\n} from \"./get-page-content.js\";\nexport type {\n RemoveDocumentParams,\n RemoveDocumentResult,\n} from \"./remove-document.js\";\n\nexport class PageIndexTools {\n constructor(private transport: McpTransport) {}\n\n recentDocuments = (\n params?: RecentDocumentsParams,\n ): Promise<RecentDocumentsResult> => recentDocuments(this.transport, params);\n\n findRelevantDocuments = (\n params?: FindRelevantDocumentsParams,\n ): Promise<FindRelevantDocumentsResult> =>\n findRelevantDocuments(this.transport, params);\n\n createFolder = (params: CreateFolderParams): Promise<CreateFolderResult> =>\n createFolder(this.transport, params);\n\n listFolders = (params?: ListFoldersParams): Promise<ListFoldersResult> =>\n listFolders(this.transport, params);\n\n getDocument = (params: GetDocumentParams): Promise<GetDocumentResult> =>\n getDocument(this.transport, params);\n\n getDocumentImage = (\n params: GetDocumentImageParams,\n ): Promise<GetDocumentImageResult> =>\n getDocumentImage(this.transport, params);\n\n getDocumentStructure = (\n params: GetDocumentStructureParams,\n ): Promise<GetDocumentStructureResult> =>\n getDocumentStructure(this.transport, params);\n\n getPageContent = (\n params: GetPageContentParams,\n ): Promise<GetPageContentResult> => getPageContent(this.transport, params);\n\n removeDocument = (\n params: RemoveDocumentParams,\n ): Promise<RemoveDocumentResult> => removeDocument(this.transport, params);\n}\n","","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type {\n CallToolResult,\n ImageContent,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport pkg from \"../package.json\" assert { type: \"json\" };\nimport { PageIndexError, type PageIndexErrorCode } from \"./errors.js\";\n\nexport class McpTransport {\n private client = new Client(\n { name: pkg.name, version: pkg.version },\n { capabilities: {} },\n );\n private transport: StreamableHTTPClientTransport | null = null;\n private connected = false;\n private folderScope: string | undefined;\n private idleTimeout: number;\n private idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private config: {\n apiUrl: string;\n apiKey: string;\n folderScope?: string;\n idleTimeout?: number;\n },\n ) {\n this.folderScope = config.folderScope;\n this.idleTimeout = config.idleTimeout ?? 60_000;\n }\n\n private resetIdleTimer(): void {\n if (this.idleTimer) clearTimeout(this.idleTimer);\n if (this.idleTimeout > 0) {\n this.idleTimer = setTimeout(() => this.close(), this.idleTimeout);\n }\n }\n\n private clearIdleTimer(): void {\n if (this.idleTimer) {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n }\n\n async setFolderScope(scope: string | undefined): Promise<void> {\n if (this.folderScope === scope) return;\n this.folderScope = scope;\n if (this.connected) {\n await this.close();\n await this.connect();\n }\n }\n\n isConnected = () => this.connected;\n\n async connect(): Promise<void> {\n if (this.connected) return;\n const url = new URL(\"/mcp\", this.config.apiUrl);\n url.searchParams.set(\"folder\", \"1\");\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n };\n if (this.folderScope) {\n headers[\"X-Folder-Scope\"] = this.folderScope;\n }\n this.transport = new StreamableHTTPClientTransport(url, {\n requestInit: { headers },\n });\n await this.client.connect(this.transport);\n this.connected = true;\n }\n\n async callTool<T = unknown>(\n name: string,\n args: Record<string, unknown>,\n ): Promise<T> {\n if (!this.connected) await this.connect();\n this.resetIdleTimer();\n\n const r = (await this.client.callTool({\n name,\n arguments: args,\n })) as CallToolResult;\n\n const textContent = r.content.find((c) => c.type === \"text\");\n const text = textContent?.type === \"text\" ? textContent.text : undefined;\n\n if (!text) {\n throw new PageIndexError(\"Empty response from server\", \"INTERNAL_ERROR\");\n }\n\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch {\n // Response is not JSON - treat it as a plain text error\n throw new PageIndexError(text, \"INTERNAL_ERROR\");\n }\n\n if (r.isError) {\n const { error, errorCode, ...details } = data as {\n error: string;\n errorCode?: PageIndexErrorCode;\n [key: string]: unknown;\n };\n throw new PageIndexError(error, errorCode, details);\n }\n\n return data as T;\n }\n\n async callToolForImage(\n name: string,\n args: Record<string, unknown>,\n ): Promise<ImageContent> {\n if (!this.connected) await this.connect();\n this.resetIdleTimer();\n\n const r = (await this.client.callTool({\n name,\n arguments: args,\n })) as CallToolResult;\n\n if (r.isError) {\n const textContent = r.content.find((c) => c.type === \"text\");\n const text = textContent?.type === \"text\" ? textContent.text : undefined;\n if (text) {\n let data: Record<string, unknown>;\n try {\n data = JSON.parse(text) as Record<string, unknown>;\n } catch {\n throw new PageIndexError(text, \"INTERNAL_ERROR\");\n }\n const { error, errorCode, ...details } = data as {\n error: string;\n errorCode?: PageIndexErrorCode;\n [key: string]: unknown;\n };\n throw new PageIndexError(error, errorCode, details);\n }\n throw new PageIndexError(\"Image retrieval failed\", \"INTERNAL_ERROR\");\n }\n\n const imageContent = r.content.find(\n (c): c is ImageContent => c.type === \"image\",\n );\n if (!imageContent) {\n throw new PageIndexError(\n \"No image content in response\",\n \"INTERNAL_ERROR\",\n );\n }\n\n return imageContent;\n }\n\n async close(): Promise<void> {\n this.clearIdleTimer();\n if (this.connected) {\n await this.client.close().catch(() => {});\n this.transport = null;\n this.connected = false;\n }\n }\n}\n","import { PageIndexApi } from \"./api/client.js\";\nimport { PageIndexTools } from \"./tools/index.js\";\nimport { McpTransport } from \"./transport.js\";\n\nexport interface PageIndexClientConfig {\n apiKey: string;\n apiUrl?: string;\n folderScope?: string;\n /** MCP connection idle timeout in ms. Set 0 to disable. Default: 60000 (60s) */\n idleTimeout?: number;\n}\n\nconst DEFAULT_API_URL = \"https://api.pageindex.ai\";\n\nexport class PageIndexClient {\n private transport: McpTransport;\n private _api: PageIndexApi;\n private _tools: PageIndexTools | null = null;\n\n constructor(config: PageIndexClientConfig) {\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, \"\");\n\n this.transport = new McpTransport({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n idleTimeout: config.idleTimeout,\n });\n\n this._api = new PageIndexApi({\n apiUrl,\n apiKey: config.apiKey,\n folderScope: config.folderScope,\n });\n }\n\n get api(): PageIndexApi {\n return this._api;\n }\n\n get tools(): PageIndexTools {\n if (!this._tools) {\n this._tools = new PageIndexTools(this.transport);\n }\n return this._tools;\n }\n\n setFolderScope(scope: string | undefined): Promise<void> {\n return this.transport.setFolderScope(scope);\n }\n\n connect = () => this.transport.connect();\n isConnected = () => this.transport.isConnected();\n close = () => this.transport.close();\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.close();\n }\n}\n"],"mappings":";;;;AASA,IAAa,iBAAb,cAAoC,MAAM;CACxC,YACE,SACA,AAAgB,MAChB,AAAgB,SAChB,AAAgB,YAChB;AACA,QAAM,QAAQ;EAJE;EACA;EACA;AAGhB,OAAK,OAAO;;;;;;ACChB,IAAa,eAAb,MAA0B;CACxB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAEjB,YAAY,QAA4B;AACtC,OAAK,UAAU,OAAO,OAAO,QAAQ,OAAO,GAAG;AAC/C,OAAK,SAAS,OAAO;AACrB,OAAK,cAAc,OAAO;;CAG5B,MAAM,eACJ,MACA,UACA,SACiC;EACjC,MAAM,WAAW,IAAI,UAAU;EAC/B,MAAM,OACJ,gBAAgB,OACZ,OACA,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAC5D,WAAS,OAAO,QAAQ,MAAM,SAAS;AACvC,MAAI,SAAS,KACX,UAAS,OAAO,QAAQ,QAAQ,KAAK;EAEvC,MAAM,WAAW,SAAS,YAAY,KAAK;AAC3C,MAAI,SACF,UAAS,OAAO,aAAa,SAAS;AAExC,SAAO,KAAK,iBAAyC,SAAS,SAAS;;CAGzE,MAAM,YAAY,OAAqD;AACrE,SAAO,KAAK,QACV,QAAQ,mBAAmB,MAAM,CAAC,WACnC;;CAGH,MAAM,cACJ,SACgC;EAChC,MAAM,SAAS,IAAI,iBAAiB;AACpC,MAAI,SAAS,UAAU,OACrB,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAE5C,MAAI,SAAS,WAAW,OACtB,QAAO,IAAI,UAAU,OAAO,QAAQ,OAAO,CAAC;EAE9C,MAAM,WAAW,SAAS,YAAY,KAAK;AAC3C,MAAI,SACF,QAAO,IAAI,aAAa,SAAS;EAEnC,MAAM,KAAK,OAAO,UAAU;AAC5B,SAAO,KAAK,QAA+B,QAAQ,KAAK,IAAI,OAAO,KAAK;;CAG1E,MAAM,eAAe,OAAgD;AACnE,SAAO,KAAK,QACV,QAAQ,mBAAmB,MAAM,CAAC,IAClC,EAAE,QAAQ,UAAU,CACrB;;CAGH,MAAM,gBACJ,QACkC;AAClC,SAAO,KAAK,QAAiC,qBAAqB;GAChE,QAAQ;GACR,SAAS,EAAE,gBAAgB,oBAAoB;GAC/C,MAAM,KAAK,UAAU,OAAO;GAC7B,CAAC;;CAGJ,MAAc,QAAW,MAAc,MAAgC;EACrE,MAAM,MAAM,GAAG,KAAK,UAAU;EAC9B,MAAM,WAAW,MAAM,MAAM,KAAK;GAChC,GAAG;GACH,SAAS;IACP,SAAS,KAAK;IACd,GAAG,MAAM;IACV;GACF,CAAC;AACF,SAAO,KAAK,eAAkB,SAAS;;CAGzC,MAAc,iBACZ,MACA,UACY;EACZ,MAAM,MAAM,GAAG,KAAK,UAAU;EAC9B,MAAM,WAAW,MAAM,MAAM,KAAK;GAChC,QAAQ;GACR,SAAS,EAAE,SAAS,KAAK,QAAQ;GACjC,MAAM;GACP,CAAC;AACF,SAAO,KAAK,eAAkB,SAAS;;CAGzC,MAAc,eAAkB,UAAgC;AAC9D,MAAI,CAAC,SAAS,IAAI;GAChB,MAAM,OAAO,MAAM,SAAS,MAAM,CAAC,YAAY,GAAG;GAClD,IAAI,UAAU,kCAAkC,SAAS;GACzD,IAAI,YAAY,KAAK,qBAAqB,SAAS,OAAO;GAC1D,IAAI;AAEJ,OAAI;IACF,MAAM,OAAO,KAAK,MAAM,KAAK;AAC7B,QAAI,KAAK,SAAS,OAAO,KAAK,UAAU,SACtC,WAAU,KAAK;AAEjB,QAAI,KAAK,aAAa,OAAO,KAAK,cAAc,SAC9C,aAAY,KAAK;AAEnB,cAAU;WACJ;AACN,QAAI,KAAM,WAAU;;AAGtB,SAAM,IAAI,eAAe,SAAS,WAAW,SAAS,SAAS,OAAO;;AAGxE,SAAO,SAAS,MAAM;;CAGxB,AAAQ,qBAAqB,QAAgB;AAC3C,UAAQ,QAAR;GACE,KAAK,IACH,QAAO;GACT,KAAK,IACH,QAAO;GACT,KAAK,IACH,QAAO;GACT,KAAK,IACH,QAAO;GACT,QACE,QAAO;;;;;;;AChIf,eAAsB,aACpB,WACA,QAC6B;AAC7B,QAAO,UAAU,SAA6B,iBAAiB;EAC7D,MAAM,OAAO;EACb,aAAa,OAAO;EACpB,kBAAkB,OAAO;EAC1B,CAAC;;;;;ACFJ,eAAsB,sBACpB,WACA,QACsC;AACtC,QAAO,UAAU,SACf,2BACA;EACE,OAAO,QAAQ,SAAS,QAAQ;EAChC,QAAQ,QAAQ;EAChB,OAAO,QAAQ;EACf,WAAW,QAAQ;EACpB,CACF;;;;;AC7BH,eAAsB,iBACpB,WACA,QACiC;CACjC,MAAM,eAAe,MAAM,UAAU,iBAAiB,sBAAsB,EAC1E,YAAY,OAAO,WACpB,CAAC;AACF,QAAO;EACL,MAAM,aAAa;EACnB,UAAU,aAAa;EACxB;;;;;ACPH,eAAsB,qBACpB,WACA,QACqC;AACrC,QAAO,UAAU,SACf,0BACA;EACE,UAAU,OAAO;EACjB,MAAM,OAAO;EACb,qBAAqB,OAAO;EAC5B,WAAW,OAAO;EACnB,CACF;;;;;ACLH,eAAsB,YACpB,WACA,QAC4B;AAC5B,QAAO,UAAU,SAA4B,gBAAgB;EAC3D,UAAU,OAAO;EACjB,qBAAqB,OAAO;EAC5B,WAAW,OAAO;EACnB,CAAC;;;;;ACLJ,eAAsB,eACpB,WACA,QAC+B;AAC/B,QAAO,UAAU,SAA+B,oBAAoB;EAClE,UAAU,OAAO;EACjB,OAAO,OAAO;EACd,qBAAqB,OAAO;EAC5B,WAAW,OAAO;EACnB,CAAC;;;;;ACfJ,eAAsB,YACpB,WACA,QAC4B;AAC5B,QAAO,UAAU,SAA4B,gBAAgB,EAC3D,kBAAkB,QAAQ,gBAC3B,CAAC;;;;;ACEJ,eAAsB,gBACpB,WACA,QACgC;AAChC,QAAO,UAAU,SAAgC,oBAAoB;EACnE,WAAW,QAAQ;EACnB,QAAQ,QAAQ;EAChB,OAAO,QAAQ;EAChB,CAAC;;;;;AChBJ,eAAsB,eACpB,WACA,QAC+B;AAC/B,QAAO,UAAU,SAA+B,mBAAmB;EACjE,WAAW,OAAO;EAClB,WAAW,OAAO;EACnB,CAAC;;;;;ACuDJ,IAAa,iBAAb,MAA4B;CAC1B,YAAY,AAAQ,WAAyB;EAAzB;;CAEpB,mBACE,WACmC,gBAAgB,KAAK,WAAW,OAAO;CAE5E,yBACE,WAEA,sBAAsB,KAAK,WAAW,OAAO;CAE/C,gBAAgB,WACd,aAAa,KAAK,WAAW,OAAO;CAEtC,eAAe,WACb,YAAY,KAAK,WAAW,OAAO;CAErC,eAAe,WACb,YAAY,KAAK,WAAW,OAAO;CAErC,oBACE,WAEA,iBAAiB,KAAK,WAAW,OAAO;CAE1C,wBACE,WAEA,qBAAqB,KAAK,WAAW,OAAO;CAE9C,kBACE,WACkC,eAAe,KAAK,WAAW,OAAO;CAE1E,kBACE,WACkC,eAAe,KAAK,WAAW,OAAO;;;;;;;;;;AE/G5E,IAAa,eAAb,MAA0B;CACxB,AAAQ,SAAS,IAAI,OACnB;EAAQA;EAAmBC;EAAa,EACxC,EAAE,cAAc,EAAE,EAAE,CACrB;CACD,AAAQ,YAAkD;CAC1D,AAAQ,YAAY;CACpB,AAAQ;CACR,AAAQ;CACR,AAAQ,YAAkD;CAE1D,YACE,AAAQ,QAMR;EANQ;AAOR,OAAK,cAAc,OAAO;AAC1B,OAAK,cAAc,OAAO,eAAe;;CAG3C,AAAQ,iBAAuB;AAC7B,MAAI,KAAK,UAAW,cAAa,KAAK,UAAU;AAChD,MAAI,KAAK,cAAc,EACrB,MAAK,YAAY,iBAAiB,KAAK,OAAO,EAAE,KAAK,YAAY;;CAIrE,AAAQ,iBAAuB;AAC7B,MAAI,KAAK,WAAW;AAClB,gBAAa,KAAK,UAAU;AAC5B,QAAK,YAAY;;;CAIrB,MAAM,eAAe,OAA0C;AAC7D,MAAI,KAAK,gBAAgB,MAAO;AAChC,OAAK,cAAc;AACnB,MAAI,KAAK,WAAW;AAClB,SAAM,KAAK,OAAO;AAClB,SAAM,KAAK,SAAS;;;CAIxB,oBAAoB,KAAK;CAEzB,MAAM,UAAyB;AAC7B,MAAI,KAAK,UAAW;EACpB,MAAM,MAAM,IAAI,IAAI,QAAQ,KAAK,OAAO,OAAO;AAC/C,MAAI,aAAa,IAAI,UAAU,IAAI;EACnC,MAAM,UAAkC,EACtC,eAAe,UAAU,KAAK,OAAO,UACtC;AACD,MAAI,KAAK,YACP,SAAQ,oBAAoB,KAAK;AAEnC,OAAK,YAAY,IAAI,8BAA8B,KAAK,EACtD,aAAa,EAAE,SAAS,EACzB,CAAC;AACF,QAAM,KAAK,OAAO,QAAQ,KAAK,UAAU;AACzC,OAAK,YAAY;;CAGnB,MAAM,SACJ,QACA,MACY;AACZ,MAAI,CAAC,KAAK,UAAW,OAAM,KAAK,SAAS;AACzC,OAAK,gBAAgB;EAErB,MAAM,IAAK,MAAM,KAAK,OAAO,SAAS;GACpC;GACA,WAAW;GACZ,CAAC;EAEF,MAAM,cAAc,EAAE,QAAQ,MAAM,MAAM,EAAE,SAAS,OAAO;EAC5D,MAAM,OAAO,aAAa,SAAS,SAAS,YAAY,OAAO;AAE/D,MAAI,CAAC,KACH,OAAM,IAAI,eAAe,8BAA8B,iBAAiB;EAG1E,IAAI;AACJ,MAAI;AACF,UAAO,KAAK,MAAM,KAAK;UACjB;AAEN,SAAM,IAAI,eAAe,MAAM,iBAAiB;;AAGlD,MAAI,EAAE,SAAS;GACb,MAAM,EAAE,OAAO,WAAW,GAAG,YAAY;AAKzC,SAAM,IAAI,eAAe,OAAO,WAAW,QAAQ;;AAGrD,SAAO;;CAGT,MAAM,iBACJ,QACA,MACuB;AACvB,MAAI,CAAC,KAAK,UAAW,OAAM,KAAK,SAAS;AACzC,OAAK,gBAAgB;EAErB,MAAM,IAAK,MAAM,KAAK,OAAO,SAAS;GACpC;GACA,WAAW;GACZ,CAAC;AAEF,MAAI,EAAE,SAAS;GACb,MAAM,cAAc,EAAE,QAAQ,MAAM,MAAM,EAAE,SAAS,OAAO;GAC5D,MAAM,OAAO,aAAa,SAAS,SAAS,YAAY,OAAO;AAC/D,OAAI,MAAM;IACR,IAAI;AACJ,QAAI;AACF,YAAO,KAAK,MAAM,KAAK;YACjB;AACN,WAAM,IAAI,eAAe,MAAM,iBAAiB;;IAElD,MAAM,EAAE,OAAO,WAAW,GAAG,YAAY;AAKzC,UAAM,IAAI,eAAe,OAAO,WAAW,QAAQ;;AAErD,SAAM,IAAI,eAAe,0BAA0B,iBAAiB;;EAGtE,MAAM,eAAe,EAAE,QAAQ,MAC5B,MAAyB,EAAE,SAAS,QACtC;AACD,MAAI,CAAC,aACH,OAAM,IAAI,eACR,gCACA,iBACD;AAGH,SAAO;;CAGT,MAAM,QAAuB;AAC3B,OAAK,gBAAgB;AACrB,MAAI,KAAK,WAAW;AAClB,SAAM,KAAK,OAAO,OAAO,CAAC,YAAY,GAAG;AACzC,QAAK,YAAY;AACjB,QAAK,YAAY;;;;;;;ACvJvB,MAAM,kBAAkB;AAExB,IAAa,kBAAb,MAA6B;CAC3B,AAAQ;CACR,AAAQ;CACR,AAAQ,SAAgC;CAExC,YAAY,QAA+B;EACzC,MAAM,UAAU,OAAO,UAAU,iBAAiB,QAAQ,OAAO,GAAG;AAEpE,OAAK,YAAY,IAAI,aAAa;GAChC;GACA,QAAQ,OAAO;GACf,aAAa,OAAO;GACpB,aAAa,OAAO;GACrB,CAAC;AAEF,OAAK,OAAO,IAAI,aAAa;GAC3B;GACA,QAAQ,OAAO;GACf,aAAa,OAAO;GACrB,CAAC;;CAGJ,IAAI,MAAoB;AACtB,SAAO,KAAK;;CAGd,IAAI,QAAwB;AAC1B,MAAI,CAAC,KAAK,OACR,MAAK,SAAS,IAAI,eAAe,KAAK,UAAU;AAElD,SAAO,KAAK;;CAGd,eAAe,OAA0C;AACvD,SAAO,KAAK,UAAU,eAAe,MAAM;;CAG7C,gBAAgB,KAAK,UAAU,SAAS;CACxC,oBAAoB,KAAK,UAAU,aAAa;CAChD,cAAc,KAAK,UAAU,OAAO;CAEpC,OAAO,OAAO,gBAA+B;AAC3C,QAAM,KAAK,OAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pageindex/sdk",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "PageIndex SDK - Document processing for AI applications via REST API and MCP",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",