@pageindex/sdk 0.4.0 → 0.5.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 +0 -6
- package/dist/index.cjs +1 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -34
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -34
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -82,12 +82,6 @@ const result = await client.api.submitDocument(file, 'document.pdf');
|
|
|
82
82
|
// Get document metadata
|
|
83
83
|
const doc = await client.api.getDocument(docId);
|
|
84
84
|
|
|
85
|
-
// Get document tree structure
|
|
86
|
-
const tree = await client.api.getTree(docId, { summary: true });
|
|
87
|
-
|
|
88
|
-
// Get OCR content
|
|
89
|
-
const ocr = await client.api.getOcr(docId, { format: 'page' });
|
|
90
|
-
|
|
91
85
|
// List all documents
|
|
92
86
|
const docs = await client.api.listDocuments({ limit: 20, offset: 0 });
|
|
93
87
|
|
package/dist/index.cjs
CHANGED
|
@@ -35,16 +35,6 @@ var PageIndexApi = class {
|
|
|
35
35
|
async getDocument(docId) {
|
|
36
36
|
return this.request(`/doc/${encodeURIComponent(docId)}/metadata`);
|
|
37
37
|
}
|
|
38
|
-
async getTree(docId, options) {
|
|
39
|
-
const params = new URLSearchParams({ type: "tree" });
|
|
40
|
-
if (options?.summary !== void 0) params.set("summary", String(options.summary));
|
|
41
|
-
return this.request(`/doc/${encodeURIComponent(docId)}/?${params}`);
|
|
42
|
-
}
|
|
43
|
-
async getOcr(docId, options) {
|
|
44
|
-
const params = new URLSearchParams({ type: "ocr" });
|
|
45
|
-
if (options?.format) params.set("format", options.format);
|
|
46
|
-
return this.request(`/doc/${encodeURIComponent(docId)}/?${params}`);
|
|
47
|
-
}
|
|
48
38
|
async listDocuments(options) {
|
|
49
39
|
const params = new URLSearchParams();
|
|
50
40
|
if (options?.limit !== void 0) params.set("limit", String(options.limit));
|
|
@@ -199,7 +189,7 @@ var PageIndexTools = class {
|
|
|
199
189
|
//#endregion
|
|
200
190
|
//#region package.json
|
|
201
191
|
var name = "@pageindex/sdk";
|
|
202
|
-
var version = "0.
|
|
192
|
+
var version = "0.5.0";
|
|
203
193
|
|
|
204
194
|
//#endregion
|
|
205
195
|
//#region src/transport.ts
|
package/dist/index.cjs.map
CHANGED
|
@@ -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 GetOcrOptions,\n GetOcrResponse,\n GetTreeOptions,\n GetTreeResponse,\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 getTree(\n docId: string,\n options?: GetTreeOptions,\n ): Promise<GetTreeResponse> {\n const params = new URLSearchParams({ type: \"tree\" });\n if (options?.summary !== undefined) {\n params.set(\"summary\", String(options.summary));\n }\n return this.request<GetTreeResponse>(\n `/doc/${encodeURIComponent(docId)}/?${params}`,\n );\n }\n\n async getOcr(\n docId: string,\n options?: GetOcrOptions,\n ): Promise<GetOcrResponse> {\n const params = new URLSearchParams({ type: \"ocr\" });\n if (options?.format) {\n params.set(\"format\", options.format);\n }\n return this.request<GetOcrResponse>(\n `/doc/${encodeURIComponent(docId)}/?${params}`,\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-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":";;;;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;;;;;;;ACjIf,eAAsB,aACpB,WACA,QAC6B;AAC7B,QAAO,UAAU,SAA6B,iBAAiB;EAC7D,MAAM,OAAO;EACb,aAAa,OAAO;EACpB,kBAAkB,OAAO;EAC1B,CAAC;;;;;ACNJ,eAAsB,sBACpB,WACA,QACsC;AACtC,QAAO,UAAU,SACf,2BACA;EACE,4BAA4B,QAAQ;EACpC,QAAQ,QAAQ;EAChB,OAAO,QAAQ;EAChB,CACF;;;;;ACrBH,eAAsB,qBACpB,WACA,QACqC;AACrC,QAAO,UAAU,SACf,0BACA;EACE,UAAU,OAAO;EACjB,MAAM,OAAO;EACb,qBAAqB,OAAO;EAC7B,CACF;;;;;ACJH,eAAsB,YACpB,WACA,QAC4B;AAC5B,QAAO,UAAU,SAA4B,gBAAgB;EAC3D,UAAU,OAAO;EACjB,qBAAqB,OAAO;EAC7B,CAAC;;;;;ACJJ,eAAsB,eACpB,WACA,QAC+B;AAC/B,QAAO,UAAU,SAA+B,oBAAoB;EAClE,UAAU,OAAO;EACjB,OAAO,OAAO;EACd,qBAAqB,OAAO;EAC7B,CAAC;;;;;AClBJ,eAAsB,YACpB,WACA,QAC4B;AAC5B,QAAO,UAAU,SAA4B,gBAAgB,EAC3D,kBAAkB,QAAQ,gBAC3B,CAAC;;;;;ACDJ,eAAsB,gBACpB,WACgC;AAChC,QAAO,UAAU,SAAgC,oBAAoB,EAAE,CAAC;;;;;ACJ1E,eAAsB,eACpB,WACA,QAC+B;AAC/B,QAAO,UAAU,SAA+B,mBAAmB,EACjE,WAAW,OAAO,UACnB,CAAC;;;;;AC8CJ,IAAa,iBAAb,MAA4B;CAC1B,YAAY,AAAQ,WAAyB;EAAzB;;CAEpB,wBACE,gBAAgB,KAAK,UAAU;CAEjC,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,wBACE,WAEA,qBAAqB,KAAK,WAAW,OAAO;CAE9C,kBACE,WACkC,eAAe,KAAK,WAAW,OAAO;CAE1E,kBACE,WACkC,eAAe,KAAK,WAAW,OAAO;;;;;;;;;;AEjG5E,IAAa,eAAb,MAA0B;CACxB,AAAQ,SAAS,IAAIA,iDACnB;EAAQC;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,IAAIC,iFAA8B,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,QAAuB;AAC3B,OAAK,gBAAgB;AACrB,MAAI,KAAK,WAAW;AAClB,SAAM,KAAK,OAAO,OAAO,CAAC,YAAY,GAAG;AACzC,QAAK,YAAY;AACjB,QAAK,YAAY;;;;;;;ACvGvB,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/dist/index.d.cts
CHANGED
|
@@ -15,37 +15,6 @@ interface GetDocumentMetadataResponse {
|
|
|
15
15
|
pageNum?: number;
|
|
16
16
|
folderId?: string | null;
|
|
17
17
|
}
|
|
18
|
-
interface GetTreeOptions {
|
|
19
|
-
summary?: boolean;
|
|
20
|
-
}
|
|
21
|
-
interface TreeNodeContent {
|
|
22
|
-
title: string;
|
|
23
|
-
node_id: string;
|
|
24
|
-
page_index: number;
|
|
25
|
-
text?: string;
|
|
26
|
-
nodes?: TreeNodeContent[];
|
|
27
|
-
}
|
|
28
|
-
interface GetTreeResponse {
|
|
29
|
-
doc_id: string;
|
|
30
|
-
status: string;
|
|
31
|
-
retrieval_ready: boolean;
|
|
32
|
-
result: TreeNodeContent[];
|
|
33
|
-
}
|
|
34
|
-
interface GetOcrOptions {
|
|
35
|
-
format?: "page" | "node" | "raw";
|
|
36
|
-
}
|
|
37
|
-
interface OcrPageContent {
|
|
38
|
-
images: string[];
|
|
39
|
-
markdown: string;
|
|
40
|
-
page_index: number;
|
|
41
|
-
extended_node_candidates?: unknown[];
|
|
42
|
-
}
|
|
43
|
-
interface GetOcrResponse {
|
|
44
|
-
doc_id: string;
|
|
45
|
-
status: string;
|
|
46
|
-
retrieval_ready: boolean;
|
|
47
|
-
result: OcrPageContent[];
|
|
48
|
-
}
|
|
49
18
|
interface ListDocumentsOptions {
|
|
50
19
|
limit?: number;
|
|
51
20
|
offset?: number;
|
|
@@ -112,8 +81,6 @@ declare class PageIndexApi {
|
|
|
112
81
|
constructor(config: PageIndexApiConfig);
|
|
113
82
|
submitDocument(file: Blob | Buffer | ArrayBuffer, fileName: string, options?: SubmitDocumentOptions): Promise<SubmitDocumentResponse>;
|
|
114
83
|
getDocument(docId: string): Promise<GetDocumentMetadataResponse>;
|
|
115
|
-
getTree(docId: string, options?: GetTreeOptions): Promise<GetTreeResponse>;
|
|
116
|
-
getOcr(docId: string, options?: GetOcrOptions): Promise<GetOcrResponse>;
|
|
117
84
|
listDocuments(options?: ListDocumentsOptions): Promise<ListDocumentsResponse>;
|
|
118
85
|
deleteDocument(docId: string): Promise<DeleteDocumentResponse>;
|
|
119
86
|
chatCompletions(params: ChatCompletionsParams): Promise<ChatCompletionsResponse>;
|
|
@@ -343,5 +310,5 @@ declare class PageIndexError extends Error {
|
|
|
343
310
|
constructor(message: string, code?: PageIndexErrorCode | undefined, details?: Record<string, unknown> | undefined, statusCode?: number | undefined);
|
|
344
311
|
}
|
|
345
312
|
//#endregion
|
|
346
|
-
export { ChatCompletionsParams, ChatCompletionsResponse, type CreateFolderParams, type CreateFolderResult, DeleteDocumentResponse, DocumentItem, type FindRelevantDocumentsParams, type FindRelevantDocumentsResult, type FolderItem, GetDocumentMetadataResponse, type GetDocumentParams, type GetDocumentResult, type GetDocumentStructureParams, type GetDocumentStructureResult,
|
|
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 };
|
|
347
314
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -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,
|
|
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":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -15,37 +15,6 @@ interface GetDocumentMetadataResponse {
|
|
|
15
15
|
pageNum?: number;
|
|
16
16
|
folderId?: string | null;
|
|
17
17
|
}
|
|
18
|
-
interface GetTreeOptions {
|
|
19
|
-
summary?: boolean;
|
|
20
|
-
}
|
|
21
|
-
interface TreeNodeContent {
|
|
22
|
-
title: string;
|
|
23
|
-
node_id: string;
|
|
24
|
-
page_index: number;
|
|
25
|
-
text?: string;
|
|
26
|
-
nodes?: TreeNodeContent[];
|
|
27
|
-
}
|
|
28
|
-
interface GetTreeResponse {
|
|
29
|
-
doc_id: string;
|
|
30
|
-
status: string;
|
|
31
|
-
retrieval_ready: boolean;
|
|
32
|
-
result: TreeNodeContent[];
|
|
33
|
-
}
|
|
34
|
-
interface GetOcrOptions {
|
|
35
|
-
format?: "page" | "node" | "raw";
|
|
36
|
-
}
|
|
37
|
-
interface OcrPageContent {
|
|
38
|
-
images: string[];
|
|
39
|
-
markdown: string;
|
|
40
|
-
page_index: number;
|
|
41
|
-
extended_node_candidates?: unknown[];
|
|
42
|
-
}
|
|
43
|
-
interface GetOcrResponse {
|
|
44
|
-
doc_id: string;
|
|
45
|
-
status: string;
|
|
46
|
-
retrieval_ready: boolean;
|
|
47
|
-
result: OcrPageContent[];
|
|
48
|
-
}
|
|
49
18
|
interface ListDocumentsOptions {
|
|
50
19
|
limit?: number;
|
|
51
20
|
offset?: number;
|
|
@@ -112,8 +81,6 @@ declare class PageIndexApi {
|
|
|
112
81
|
constructor(config: PageIndexApiConfig);
|
|
113
82
|
submitDocument(file: Blob | Buffer | ArrayBuffer, fileName: string, options?: SubmitDocumentOptions): Promise<SubmitDocumentResponse>;
|
|
114
83
|
getDocument(docId: string): Promise<GetDocumentMetadataResponse>;
|
|
115
|
-
getTree(docId: string, options?: GetTreeOptions): Promise<GetTreeResponse>;
|
|
116
|
-
getOcr(docId: string, options?: GetOcrOptions): Promise<GetOcrResponse>;
|
|
117
84
|
listDocuments(options?: ListDocumentsOptions): Promise<ListDocumentsResponse>;
|
|
118
85
|
deleteDocument(docId: string): Promise<DeleteDocumentResponse>;
|
|
119
86
|
chatCompletions(params: ChatCompletionsParams): Promise<ChatCompletionsResponse>;
|
|
@@ -343,5 +310,5 @@ declare class PageIndexError extends Error {
|
|
|
343
310
|
constructor(message: string, code?: PageIndexErrorCode | undefined, details?: Record<string, unknown> | undefined, statusCode?: number | undefined);
|
|
344
311
|
}
|
|
345
312
|
//#endregion
|
|
346
|
-
export { ChatCompletionsParams, ChatCompletionsResponse, type CreateFolderParams, type CreateFolderResult, DeleteDocumentResponse, DocumentItem, type FindRelevantDocumentsParams, type FindRelevantDocumentsResult, type FolderItem, GetDocumentMetadataResponse, type GetDocumentParams, type GetDocumentResult, type GetDocumentStructureParams, type GetDocumentStructureResult,
|
|
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 };
|
|
347
314
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -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":";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,
|
|
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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"}
|
package/dist/index.mjs
CHANGED
|
@@ -35,16 +35,6 @@ var PageIndexApi = class {
|
|
|
35
35
|
async getDocument(docId) {
|
|
36
36
|
return this.request(`/doc/${encodeURIComponent(docId)}/metadata`);
|
|
37
37
|
}
|
|
38
|
-
async getTree(docId, options) {
|
|
39
|
-
const params = new URLSearchParams({ type: "tree" });
|
|
40
|
-
if (options?.summary !== void 0) params.set("summary", String(options.summary));
|
|
41
|
-
return this.request(`/doc/${encodeURIComponent(docId)}/?${params}`);
|
|
42
|
-
}
|
|
43
|
-
async getOcr(docId, options) {
|
|
44
|
-
const params = new URLSearchParams({ type: "ocr" });
|
|
45
|
-
if (options?.format) params.set("format", options.format);
|
|
46
|
-
return this.request(`/doc/${encodeURIComponent(docId)}/?${params}`);
|
|
47
|
-
}
|
|
48
38
|
async listDocuments(options) {
|
|
49
39
|
const params = new URLSearchParams();
|
|
50
40
|
if (options?.limit !== void 0) params.set("limit", String(options.limit));
|
|
@@ -199,7 +189,7 @@ var PageIndexTools = class {
|
|
|
199
189
|
//#endregion
|
|
200
190
|
//#region package.json
|
|
201
191
|
var name = "@pageindex/sdk";
|
|
202
|
-
var version = "0.
|
|
192
|
+
var version = "0.5.0";
|
|
203
193
|
|
|
204
194
|
//#endregion
|
|
205
195
|
//#region src/transport.ts
|
package/dist/index.mjs.map
CHANGED
|
@@ -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 GetOcrOptions,\n GetOcrResponse,\n GetTreeOptions,\n GetTreeResponse,\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 getTree(\n docId: string,\n options?: GetTreeOptions,\n ): Promise<GetTreeResponse> {\n const params = new URLSearchParams({ type: \"tree\" });\n if (options?.summary !== undefined) {\n params.set(\"summary\", String(options.summary));\n }\n return this.request<GetTreeResponse>(\n `/doc/${encodeURIComponent(docId)}/?${params}`,\n );\n }\n\n async getOcr(\n docId: string,\n options?: GetOcrOptions,\n ): Promise<GetOcrResponse> {\n const params = new URLSearchParams({ type: \"ocr\" });\n if (options?.format) {\n params.set(\"format\", options.format);\n }\n return this.request<GetOcrResponse>(\n `/doc/${encodeURIComponent(docId)}/?${params}`,\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-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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"}
|