equalweb-sdk 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -197,7 +197,7 @@ var InfoApi = class {
197
197
  * @returns The current credit balance
198
198
  */
199
199
  async getBalance() {
200
- const response = await this.client.get("info/balance");
200
+ const response = await this.client.get("docs/info/balance");
201
201
  return response.results;
202
202
  }
203
203
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types.ts","../src/client.ts","../src/api/info.ts","../src/api/documents.ts","../src/api/groups.ts","../src/api/audit.ts","../src/api/reports.ts","../src/api/downloads.ts","../src/api/convert.ts","../src/api/manual.ts","../src/api/settings.ts","../src/equalweb.ts"],"sourcesContent":["// Main client\nexport { EqualWeb } from \"./equalweb\";\n\n// Types\nexport type {\n // Config\n EqualWebConfig,\n\n // Common\n DocumentStatus,\n AuditType,\n ReportType,\n DownloadFileType,\n\n // Info\n BalanceResponse,\n\n // Documents\n Document,\n GetDocumentsParams,\n DocumentStatusResponse,\n UploadResponse,\n DeleteDocumentsParams,\n DeleteDocumentsResponse,\n ArchiveDocumentsParams,\n ArchiveDocumentsResponse,\n\n // Groups\n DocumentGroup,\n GroupDocumentsParams,\n GroupDocumentsResponse,\n RenameGroupParams,\n RenameGroupResponse,\n\n // Audit\n AuditDocumentsOptions,\n AuditDocumentsParams,\n AuditDocumentsResponse,\n\n // Reports\n ReportRule,\n ReportSummary,\n DetailedReport,\n ReportCustomData,\n AuditedReport,\n OriginalReport,\n GetReportParams,\n ReportResponse,\n\n // Downloads\n DownloadFileParams,\n DownloadZippedParams,\n\n // Convert HTML\n ConvertHtmlParams,\n ConvertHtmlResponse,\n\n // Manual Remediation\n CancelManualParams,\n CancelManualResponse,\n\n // PDF Settings\n PdfSettingsParams,\n PdfSettingsResponse,\n\n // Errors\n EqualWebErrorResponse,\n} from \"./types\";\n\n// Error classes\nexport { EqualWebError, RateLimitError, AuthenticationError } from \"./types\";\n\n// API classes (for advanced usage)\nexport { InfoApi } from \"./api/info\";\nexport { DocumentsApi } from \"./api/documents\";\nexport { GroupsApi } from \"./api/groups\";\nexport { AuditApi } from \"./api/audit\";\nexport { ReportsApi } from \"./api/reports\";\nexport { DownloadsApi } from \"./api/downloads\";\nexport { ConvertApi } from \"./api/convert\";\nexport { ManualApi } from \"./api/manual\";\nexport { SettingsApi } from \"./api/settings\";\n","// ============================================================================\r\n// Configuration Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebConfig {\r\n apiKey: string;\r\n baseUrl?: string;\r\n timeout?: number;\r\n}\r\n\r\n// ============================================================================\r\n// Common Types\r\n// ============================================================================\r\n\r\nexport type DocumentStatus = \"done\" | \"pending\" | \"processing\" | string;\r\n\r\nexport type AuditType = \"audit\" | \"tag\" | \"ocr\" | \"check\" | \"manual\" | \"sign\";\r\n\r\nexport type ReportType = \"audited\" | \"original\" | \"both\";\r\n\r\nexport type DownloadFileType = \"pdf\" | \"xlsx\";\r\n\r\n// ============================================================================\r\n// Info Types\r\n// ============================================================================\r\n\r\nexport interface BalanceResponse {\r\n results: number;\r\n}\r\n\r\n// ============================================================================\r\n// Document Types\r\n// ============================================================================\r\n\r\nexport interface Document {\r\n numberOfPages: number;\r\n createdAt: string;\r\n group: number | null;\r\n archived: boolean;\r\n reportID: string;\r\n /** Client-system id linked at upload time, null when not set */\r\n externalID: string | null;\r\n /** Accessibility score of the uploaded document, null until checked */\r\n originalScore: number | null;\r\n /** Accessibility score of the remediated document, null until audited */\r\n auditedScore: number | null;\r\n /** Client metadata attached at upload time, null when not set */\r\n metadata: Record<string, unknown> | null;\r\n status: DocumentStatus;\r\n}\r\n\r\nexport interface GetDocumentsParams {\r\n groupID?: string;\r\n archived?: boolean;\r\n type?: string;\r\n}\r\n\r\n/** Opt-in pagination: passing page switches the response to an envelope */\r\nexport interface GetDocumentsPagedParams extends GetDocumentsParams {\r\n page: number;\r\n /** 1-200, defaults to 50 */\r\n pageSize?: number;\r\n}\r\n\r\nexport interface PagedDocumentsResponse {\r\n results: Document[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n totalPages: number;\r\n}\r\n\r\nexport interface DocumentStatusResponse {\r\n status: DocumentStatus;\r\n id?: string;\r\n externalID?: string | null;\r\n originalScore?: number | null;\r\n auditedScore?: number | null;\r\n metadata?: Record<string, unknown> | null;\r\n}\r\n\r\nexport interface UploadOptions {\r\n /**\r\n * Your system's id for this document (1-100 chars: letters, digits,\r\n * - _ . :). Afterwards every endpoint that takes a reportID also accepts\r\n * this externalID. A taken externalID rejects the upload with 409.\r\n */\r\n externalID?: string;\r\n /** Metadata to store on the document (JSON object, max 8KB) */\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface UploadResponse {\r\n id: string;\r\n createdAt: string;\r\n numberOfPages: number;\r\n externalID?: string;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface DeleteDocumentsParams {\r\n files: string[];\r\n}\r\n\r\nexport interface DeleteDocumentsResponse {\r\n results: Record<string, boolean | { error: string }>;\r\n}\r\n\r\nexport interface ArchiveDocumentsParams {\r\n files: string[];\r\n archive?: boolean;\r\n}\r\n\r\nexport interface ArchiveDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Group Types\r\n// ============================================================================\r\n\r\nexport interface DocumentGroup {\r\n id: number;\r\n name: string;\r\n createdAt: string;\r\n}\r\n\r\nexport interface GroupDocumentsParams {\r\n files: string[];\r\n newGroup?: string;\r\n selectedGroup?: string;\r\n}\r\n\r\nexport interface GroupDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\nexport interface RenameGroupParams {\r\n groupID: string;\r\n groupName: string;\r\n}\r\n\r\nexport interface RenameGroupResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Audit Types\r\n// ============================================================================\r\n\r\nexport interface AuditDocumentsOptions {\r\n engine?: string;\r\n addSignature?: boolean;\r\n fixContrast?: boolean;\r\n autoRemove?: number;\r\n deleteAfterAudit?: boolean;\r\n /**\r\n * For `check` runs only: delete the stored file once the check finishes.\r\n * The report and score are kept. Per-request only — there is no saved default.\r\n */\r\n deleteFileAfterCheck?: boolean;\r\n}\r\n\r\nexport interface AuditDocumentsParams extends AuditDocumentsOptions {\r\n files: string[];\r\n type?: AuditType;\r\n}\r\n\r\nexport interface AuditDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Report Types\r\n// ============================================================================\r\n\r\nexport interface ReportRule {\r\n Rule: string;\r\n Status: \"Passed\" | \"Failed\" | \"Needs manual check\" | string;\r\n Description: string;\r\n}\r\n\r\nexport interface ReportSummary {\r\n \"Passed\"?: number;\r\n \"Failed\"?: number;\r\n \"Needs manual check\"?: number;\r\n Description?: string;\r\n}\r\n\r\nexport interface DetailedReport {\r\n Document?: ReportRule[];\r\n \"Page Content\"?: ReportRule[];\r\n Forms?: ReportRule[];\r\n \"Alternate Text\"?: ReportRule[];\r\n Tables?: ReportRule[];\r\n Lists?: ReportRule[];\r\n Headings?: ReportRule[];\r\n}\r\n\r\nexport interface ReportCustomData {\r\n fileName?: string;\r\n fileSize?: number;\r\n numberOfPages?: number;\r\n tags?: Record<string, number>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface AuditedReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface OriginalReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface GetReportParams {\r\n type?: ReportType;\r\n}\r\n\r\nexport interface ReportResponse {\r\n original?: OriginalReport;\r\n audited?: AuditedReport;\r\n}\r\n\r\n// ============================================================================\r\n// Download Types\r\n// ============================================================================\r\n\r\nexport interface DownloadFileParams {\r\n original?: boolean;\r\n type?: DownloadFileType;\r\n}\r\n\r\nexport interface DownloadZippedParams {\r\n files: string[];\r\n}\r\n\r\n// ============================================================================\r\n// Convert HTML Types\r\n// ============================================================================\r\n\r\nexport interface ConvertHtmlParams {\r\n files: string[];\r\n autoConvert?: boolean;\r\n auditHtml?: boolean;\r\n}\r\n\r\nexport interface ConvertHtmlResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Manual Remediation Types\r\n// ============================================================================\r\n\r\nexport interface CancelManualParams {\r\n files: string[];\r\n}\r\n\r\nexport interface CancelManualResponse {\r\n data: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// PDF Settings Types\r\n// ============================================================================\r\n\r\nexport interface PdfSettingsParams {\r\n autoConvert: boolean;\r\n}\r\n\r\nexport interface PdfSettingsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Error Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebErrorResponse {\r\n error?: string;\r\n message?: string;\r\n statusCode?: number;\r\n}\r\n\r\nexport class EqualWebError extends Error {\r\n public readonly statusCode: number;\r\n public readonly response?: EqualWebErrorResponse;\r\n\r\n constructor(message: string, statusCode: number, response?: EqualWebErrorResponse) {\r\n super(message);\r\n this.name = \"EqualWebError\";\r\n this.statusCode = statusCode;\r\n this.response = response;\r\n }\r\n}\r\n\r\nexport class RateLimitError extends EqualWebError {\r\n public readonly retryAfter?: number;\r\n\r\n constructor(message: string, retryAfter?: number) {\r\n super(message, 429);\r\n this.name = \"RateLimitError\";\r\n this.retryAfter = retryAfter;\r\n }\r\n}\r\n\r\nexport class AuthenticationError extends EqualWebError {\r\n constructor(message: string = \"Invalid or missing API key\") {\r\n super(message, 401);\r\n this.name = \"AuthenticationError\";\r\n }\r\n}\r\n","import {\r\n EqualWebConfig,\r\n EqualWebError,\r\n EqualWebErrorResponse,\r\n RateLimitError,\r\n AuthenticationError,\r\n} from \"./types\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://login.equalweb.com/api/v2\";\r\nconst DEFAULT_TIMEOUT = 30000;\r\n\r\nexport interface RequestOptions {\r\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\r\n path: string;\r\n query?: Record<string, string | boolean | undefined>;\r\n body?: unknown;\r\n isFormData?: boolean;\r\n responseType?: \"json\" | \"blob\";\r\n}\r\n\r\nexport class HttpClient {\r\n private readonly apiKey: string;\r\n private readonly baseUrl: string;\r\n private readonly timeout: number;\r\n\r\n constructor(config: EqualWebConfig) {\r\n if (!config.apiKey || config.apiKey.trim().length === 0) {\r\n throw new Error(\"API key is required and cannot be empty\");\r\n }\r\n\r\n if (config.timeout !== undefined && config.timeout < 0) {\r\n throw new Error(\"timeout must be a positive number\");\r\n }\r\n\r\n if (config.baseUrl) {\r\n try {\r\n new URL(config.baseUrl);\r\n } catch {\r\n throw new Error(\"baseUrl must be a valid URL\");\r\n }\r\n }\r\n\r\n this.apiKey = config.apiKey;\r\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") ?? DEFAULT_BASE_URL;\r\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\r\n }\r\n\r\n async request<T>(options: RequestOptions): Promise<T> {\r\n const { method, path, query, body, isFormData, responseType = \"json\" } = options;\r\n\r\n const url = new URL(path, this.baseUrl + \"/\");\r\n\r\n if (query) {\r\n Object.entries(query).forEach(([key, value]) => {\r\n if (value !== undefined) {\r\n url.searchParams.set(key, String(value));\r\n }\r\n });\r\n }\r\n\r\n const headers: Record<string, string> = {\r\n \"x-a11y-api-key\": this.apiKey,\r\n };\r\n\r\n if (!isFormData && body) {\r\n headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(url.toString(), {\r\n method,\r\n headers,\r\n body: isFormData ? (body as FormData) : body ? JSON.stringify(body) : undefined,\r\n signal: controller.signal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n await this.handleErrorResponse(response);\r\n }\r\n\r\n if (responseType === \"blob\") {\r\n return response.blob() as Promise<T>;\r\n }\r\n\r\n const text = await response.text();\r\n if (!text) {\r\n return {} as T;\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T;\r\n } catch (parseError) {\r\n const preview = text.length > 100 ? text.substring(0, 100) + \"...\" : text;\r\n throw new EqualWebError(`Failed to parse JSON response: ${preview}`, 0);\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof EqualWebError) {\r\n throw error;\r\n }\r\n\r\n if (error instanceof Error) {\r\n if (error.name === \"AbortError\") {\r\n throw new EqualWebError(\"Request timeout\", 408);\r\n }\r\n throw new EqualWebError(error.message, 0);\r\n }\r\n\r\n throw new EqualWebError(\"Unknown error occurred\", 0);\r\n }\r\n }\r\n\r\n private async handleErrorResponse(response: Response): Promise<never> {\r\n let errorData: EqualWebErrorResponse | undefined;\r\n\r\n try {\r\n const text = await response.text();\r\n if (text) {\r\n errorData = JSON.parse(text);\r\n }\r\n } catch {\r\n // Response body is not JSON\r\n }\r\n\r\n const message = errorData?.error ?? errorData?.message ?? response.statusText;\r\n\r\n switch (response.status) {\r\n case 401:\r\n throw new AuthenticationError(message);\r\n case 429: {\r\n const retryAfter = response.headers.get(\"Retry-After\");\r\n throw new RateLimitError(\r\n message || \"Rate limit exceeded\",\r\n retryAfter ? parseInt(retryAfter, 10) : undefined\r\n );\r\n }\r\n default:\r\n throw new EqualWebError(message, response.status, errorData);\r\n }\r\n }\r\n\r\n get<T>(path: string, query?: Record<string, string | boolean | undefined>): Promise<T> {\r\n return this.request<T>({ method: \"GET\", path, query });\r\n }\r\n\r\n post<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"POST\", path, body });\r\n }\r\n\r\n put<T>(path: string, body?: unknown, isFormData = false): Promise<T> {\r\n return this.request<T>({ method: \"PUT\", path, body, isFormData });\r\n }\r\n\r\n delete<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"DELETE\", path, body });\r\n }\r\n\r\n getBlob(path: string, query?: Record<string, string | boolean | undefined>): Promise<Blob> {\r\n return this.request<Blob>({ method: \"GET\", path, query, responseType: \"blob\" });\r\n }\r\n\r\n postBlob(path: string, body?: unknown): Promise<Blob> {\r\n return this.request<Blob>({ method: \"POST\", path, body, responseType: \"blob\" });\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { BalanceResponse } from \"../types\";\r\n\r\nexport class InfoApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the current credit balance for your account\r\n * @returns The current credit balance\r\n */\r\n async getBalance(): Promise<number> {\r\n const response = await this.client.get<BalanceResponse>(\"info/balance\");\r\n return response.results;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n Document,\r\n GetDocumentsParams,\r\n GetDocumentsPagedParams,\r\n PagedDocumentsResponse,\r\n DocumentStatusResponse,\r\n UploadOptions,\r\n UploadResponse,\r\n DeleteDocumentsParams,\r\n DeleteDocumentsResponse,\r\n ArchiveDocumentsParams,\r\n ArchiveDocumentsResponse,\r\n} from \"../types\";\r\n\r\nexport class DocumentsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all documents\r\n * @param params - Optional filters for groupID, archived status, and\r\n * document type. Passing `page` (and optionally `pageSize`) opts in to\r\n * pagination and switches the return value to a paged envelope; without it\r\n * the full array is returned as before.\r\n * @returns Array of documents, or a paged envelope when `page` is passed\r\n */\r\n async getAll(params?: GetDocumentsParams): Promise<Document[]>;\r\n async getAll(params: GetDocumentsPagedParams): Promise<PagedDocumentsResponse>;\r\n async getAll(\r\n params?: GetDocumentsParams | GetDocumentsPagedParams\r\n ): Promise<Document[] | PagedDocumentsResponse> {\r\n const paged = params as GetDocumentsPagedParams | undefined;\r\n return this.client.get<Document[] | PagedDocumentsResponse>(\"docs\", {\r\n groupID: params?.groupID,\r\n archived: params?.archived,\r\n type: params?.type,\r\n page: paged?.page !== undefined ? String(paged.page) : undefined,\r\n pageSize: paged?.pageSize !== undefined ? String(paged.pageSize) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Get the status of a specific document\r\n * @param reportID - The report ID of the document, or the externalID your\r\n * system linked at upload time\r\n * @returns The document status\r\n */\r\n async getStatus(reportID: string): Promise<string> {\r\n if (!reportID || reportID.trim().length === 0) {\r\n throw new Error(\"reportID cannot be empty\");\r\n }\r\n const response = await this.client.get<DocumentStatusResponse>(`docs/status/${reportID}`);\r\n return response.status;\r\n }\r\n\r\n /**\r\n * Upload a document for processing\r\n * Supported formats: PDF, XLSX, DOCX, PPTX\r\n * @param file - The file to upload (File, Blob, ArrayBuffer, or Uint8Array)\r\n * @param filename - Optional filename (required if file is an ArrayBuffer or Uint8Array)\r\n * @param options - Optional externalID (links the doc to your own system;\r\n * rejected with 409 if already in use) and metadata (JSON object stored on\r\n * the document, max 8KB)\r\n * @returns Upload response with document ID and metadata\r\n */\r\n async upload(\r\n file: File | Blob | ArrayBuffer | Uint8Array,\r\n filename?: string,\r\n options?: UploadOptions\r\n ): Promise<UploadResponse> {\r\n if (!file) {\r\n throw new Error(\"file cannot be null or undefined\");\r\n }\r\n\r\n // Validate file size\r\n let sizeInBytes = 0;\r\n if (file instanceof ArrayBuffer) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Uint8Array) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Blob) {\r\n sizeInBytes = file.size;\r\n }\r\n\r\n if (sizeInBytes === 0) {\r\n throw new Error(\"file is empty\");\r\n }\r\n\r\n const formData = new FormData();\r\n\r\n if (file instanceof ArrayBuffer || file instanceof Uint8Array) {\r\n const blob = new Blob([file as BlobPart]);\r\n formData.append(\"file\", blob, filename ?? \"document.pdf\");\r\n } else if (file instanceof Blob) {\r\n // Use optional chaining for safer property access\r\n const defaultFilename = (file as any)?.name ?? \"document.pdf\";\r\n formData.append(\"file\", file, filename ?? defaultFilename);\r\n } else {\r\n formData.append(\"file\", file);\r\n }\r\n\r\n if (options?.metadata) {\r\n formData.append(\"metadata\", JSON.stringify(options.metadata));\r\n }\r\n\r\n // Per-document field — travels in the form data next to the file.\r\n if (options?.externalID) {\r\n formData.append(\"externalID\", options.externalID);\r\n }\r\n\r\n return this.client.put<UploadResponse>(\"docs/upload\", formData, true);\r\n }\r\n\r\n /**\r\n * Delete multiple documents\r\n * @param files - Array of document IDs to delete\r\n * @returns Results indicating success/failure for each document\r\n */\r\n async delete(files: string[]): Promise<DeleteDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: DeleteDocumentsParams = { files };\r\n return this.client.delete<DeleteDocumentsResponse>(\"docs\", params);\r\n }\r\n\r\n /**\r\n * Archive documents\r\n * @param files - Array of document IDs to archive\r\n * @returns Result of the operation\r\n */\r\n async archive(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: true };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n\r\n /**\r\n * Restore archived documents\r\n * @param files - Array of document IDs to restore\r\n * @returns Result of the operation\r\n */\r\n async restore(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: false };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n DocumentGroup,\r\n GroupDocumentsParams,\r\n GroupDocumentsResponse,\r\n RenameGroupParams,\r\n RenameGroupResponse,\r\n} from \"../types\";\r\n\r\nexport class GroupsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all document groups\r\n * @returns Array of document groups\r\n */\r\n async getAll(): Promise<DocumentGroup[]> {\r\n return this.client.get<DocumentGroup[]>(\"docs/groups\");\r\n }\r\n\r\n /**\r\n * Add documents to a new group\r\n * @param files - Array of document IDs to group\r\n * @param groupName - Name of the new group to create\r\n * @returns Result of the operation\r\n */\r\n async createGroup(files: string[], groupName: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, newGroup: groupName };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Add documents to an existing group\r\n * @param files - Array of document IDs to group\r\n * @param groupID - ID of the existing group\r\n * @returns Result of the operation\r\n */\r\n async addToGroup(files: string[], groupID: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, selectedGroup: groupID };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Rename a document group\r\n * @param groupID - ID of the group to rename\r\n * @param groupName - New name for the group\r\n * @returns Result of the operation\r\n */\r\n async rename(groupID: string, groupName: string): Promise<RenameGroupResponse> {\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: RenameGroupParams = { groupID, groupName };\r\n return this.client.post<RenameGroupResponse>(\"group-name\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { AuditDocumentsOptions, AuditDocumentsParams, AuditDocumentsResponse, AuditType } from \"../types\";\n\nexport class AuditApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Start a full audit on documents\n * This performs accessibility remediation and generates detailed reports\n * @param files - Array of document IDs to audit\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async audit(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"audit\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Perform a quick check on documents without full remediation\n * @param files - Array of document IDs to check\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit, deleteFileAfterCheck)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async check(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"check\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Start an audit with custom type\n * @param files - Array of document IDs to process\n * @param type - Type of audit: \"audit\", \"tag\", \"ocr\", \"check\", \"manual\", or \"sign\"\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async process(files: string[], type: AuditType, options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n if (!type || type.trim().length === 0) {\n throw new Error(\"type cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type, ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n private validateOptions(options?: AuditDocumentsOptions): void {\n if (options?.autoRemove !== undefined) {\n if (!Number.isInteger(options.autoRemove) || options.autoRemove < 1 || options.autoRemove > 365) {\n throw new Error(\"autoRemove must be an integer between 1 and 365\");\n }\n }\n }\n}\n","import { HttpClient } from \"../client\";\r\nimport { ReportResponse, ReportType, GetReportParams } from \"../types\";\r\n\r\nconst REPORTS_BASE_URL = \"https://login.equalweb.com/reports/pdf\";\r\n\r\nexport class ReportsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the JSON report for a document\r\n * @param reportID - The report ID\r\n * @param type - Which report to retrieve: \"audited\", \"original\", or \"both\"\r\n * @returns The report data\r\n */\r\n async get(reportID: string, type: ReportType = \"audited\"): Promise<ReportResponse> {\r\n const params: GetReportParams = { type };\r\n return this.client.get<ReportResponse>(`docs/report/${reportID}`, {\r\n type: params.type,\r\n });\r\n }\r\n\r\n /**\r\n * Get the audited report for a document\r\n * @param reportID - The report ID\r\n * @returns The audited report data\r\n */\r\n async getAudited(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"audited\");\r\n }\r\n\r\n /**\r\n * Get the original report for a document\r\n * @param reportID - The report ID\r\n * @returns The original report data\r\n */\r\n async getOriginal(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"original\");\r\n }\r\n\r\n /**\r\n * Get both audited and original reports for a document\r\n * @param reportID - The report ID\r\n * @returns Both report data\r\n */\r\n async getBoth(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"both\");\r\n }\r\n\r\n /**\r\n * Get the URL to view the report in a browser\r\n * Note: This URL does not require authentication\r\n * @param reportID - The report ID\r\n * @returns The browser-viewable URL\r\n */\r\n getBrowserUrl(reportID: string): string {\r\n return `${REPORTS_BASE_URL}/${reportID}`;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { DownloadFileParams, DownloadZippedParams, DownloadFileType } from \"../types\";\r\n\r\nexport class DownloadsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Download a single document file\r\n * @param reportID - The report ID of the document\r\n * @param options - Download options (original file, file type)\r\n * @returns The file as a Blob\r\n */\r\n async file(reportID: string, options?: DownloadFileParams): Promise<Blob> {\r\n return this.client.getBlob(`docs/download/file/${reportID}`, {\r\n original: options?.original,\r\n type: options?.type,\r\n });\r\n }\r\n\r\n /**\r\n * Download the audited/processed version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The processed file as a Blob\r\n */\r\n async audited(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: false, type });\r\n }\r\n\r\n /**\r\n * Download the original version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The original file as a Blob\r\n */\r\n async original(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: true, type });\r\n }\r\n\r\n /**\r\n * Download multiple documents as a ZIP file\r\n * @param files - Array of document IDs to include in the ZIP\r\n * @returns The ZIP file as a Blob\r\n */\r\n async zipped(files: string[]): Promise<Blob> {\r\n const params: DownloadZippedParams = { files };\r\n return this.client.postBlob(\"docs/download/zipped\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { ConvertHtmlParams, ConvertHtmlResponse } from \"../types\";\n\nexport class ConvertApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Convert PDF documents to HTML\n * @param files - Array of document IDs to convert\n * @param options - Optional conversion settings\n * @param sitekey - Optional site key for site-specific conversion\n * @returns Result of the operation\n */\n async html(\n files: string[],\n options?: Omit<ConvertHtmlParams, \"files\">,\n sitekey?: string\n ): Promise<ConvertHtmlResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const path = sitekey ? `docs/convert/html/${sitekey}` : \"docs/convert/html\";\n const body: ConvertHtmlParams = { files, ...options };\n return this.client.post<ConvertHtmlResponse>(path, body);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { CancelManualParams, CancelManualResponse } from \"../types\";\n\nexport class ManualApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Cancel manual remediation for documents\n * @param files - Array of document IDs to cancel manual remediation for\n * @returns Result of the operation\n */\n async cancel(files: string[]): Promise<CancelManualResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const params: CancelManualParams = { files };\n return this.client.post<CancelManualResponse>(\"docs/manual/cancel\", params);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { PdfSettingsParams, PdfSettingsResponse } from \"../types\";\n\nexport class SettingsApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Update PDF settings for a site\n * @param siteKey - The site key to update settings for\n * @param params - Settings to update\n * @returns Result of the operation\n */\n async update(siteKey: string, params: PdfSettingsParams): Promise<PdfSettingsResponse> {\n if (!siteKey || siteKey.trim().length === 0) {\n throw new Error(\"siteKey is required and cannot be empty\");\n }\n return this.client.post<PdfSettingsResponse>(`docs/settings/${siteKey}`, params);\n }\n}\n","import { HttpClient } from \"./client\";\nimport { InfoApi, DocumentsApi, GroupsApi, AuditApi, ReportsApi, DownloadsApi, ConvertApi, ManualApi, SettingsApi } from \"./api\";\nimport { EqualWebConfig } from \"./types\";\n\nexport class EqualWeb {\n private readonly client: HttpClient;\n\n public readonly info: InfoApi;\n public readonly documents: DocumentsApi;\n public readonly groups: GroupsApi;\n public readonly audit: AuditApi;\n public readonly reports: ReportsApi;\n public readonly downloads: DownloadsApi;\n public readonly convert: ConvertApi;\n public readonly manual: ManualApi;\n public readonly settings: SettingsApi;\n\n /**\n * Create a new EqualWeb API client\n * @param config - Configuration object with API key and optional settings\n * @example\n * ```typescript\n * const client = new EqualWeb({ apiKey: 'your-api-key' });\n *\n * // Get credit balance\n * const balance = await client.info.getBalance();\n *\n * // Upload a document\n * const file = new File([...], 'document.pdf');\n * const upload = await client.documents.upload(file);\n *\n * // Start an audit\n * await client.audit.audit([upload.id]);\n *\n * // Check status\n * const status = await client.documents.getStatus(upload.id);\n *\n * // Download the audited file\n * const blob = await client.downloads.audited(upload.id);\n * ```\n */\n constructor(config: EqualWebConfig) {\n this.client = new HttpClient(config);\n\n this.info = new InfoApi(this.client);\n this.documents = new DocumentsApi(this.client);\n this.groups = new GroupsApi(this.client);\n this.audit = new AuditApi(this.client);\n this.reports = new ReportsApi(this.client);\n this.downloads = new DownloadsApi(this.client);\n this.convert = new ConvertApi(this.client);\n this.manual = new ManualApi(this.client);\n this.settings = new SettingsApi(this.client);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACiSO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvB;AAAA,EACA;AAAA,EAEhB,YAAY,SAAiB,YAAoB,UAAkC;AACjF,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,WAAW;AAAA,EAClB;AACF;AAEO,IAAM,iBAAN,cAA6B,cAAc;AAAA,EAChC;AAAA,EAEhB,YAAY,SAAiB,YAAqB;AAChD,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,IAAM,sBAAN,cAAkC,cAAc;AAAA,EACrD,YAAY,UAAkB,8BAA8B;AAC1D,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;;;ACpTA,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AAWjB,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,QAAwB;AAClC,QAAI,CAAC,OAAO,UAAU,OAAO,OAAO,KAAK,EAAE,WAAW,GAAG;AACvD,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAEA,QAAI,OAAO,YAAY,UAAa,OAAO,UAAU,GAAG;AACtD,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAEA,QAAI,OAAO,SAAS;AAClB,UAAI;AACF,YAAI,IAAI,OAAO,OAAO;AAAA,MACxB,QAAQ;AACN,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAAA,IACF;AAEA,SAAK,SAAS,OAAO;AACrB,SAAK,UAAU,OAAO,SAAS,QAAQ,OAAO,EAAE,KAAK;AACrD,SAAK,UAAU,OAAO,WAAW;AAAA,EACnC;AAAA,EAEA,MAAM,QAAW,SAAqC;AACpD,UAAM,EAAE,QAAQ,MAAM,OAAO,MAAM,YAAY,eAAe,OAAO,IAAI;AAEzE,UAAM,MAAM,IAAI,IAAI,MAAM,KAAK,UAAU,GAAG;AAE5C,QAAI,OAAO;AACT,aAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC9C,YAAI,UAAU,QAAW;AACvB,cAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,UAAkC;AAAA,MACtC,kBAAkB,KAAK;AAAA,IACzB;AAEA,QAAI,CAAC,cAAc,MAAM;AACvB,cAAQ,cAAc,IAAI;AAAA,IAC5B;AAEA,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,OAAO;AAEnE,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,MAAM,aAAc,OAAoB,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,QACtE,QAAQ,WAAW;AAAA,MACrB,CAAC;AAED,mBAAa,SAAS;AAEtB,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,KAAK,oBAAoB,QAAQ;AAAA,MACzC;AAEA,UAAI,iBAAiB,QAAQ;AAC3B,eAAO,SAAS,KAAK;AAAA,MACvB;AAEA,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAI,CAAC,MAAM;AACT,eAAO,CAAC;AAAA,MACV;AAEA,UAAI;AACF,eAAO,KAAK,MAAM,IAAI;AAAA,MACxB,SAAS,YAAY;AACnB,cAAM,UAAU,KAAK,SAAS,MAAM,KAAK,UAAU,GAAG,GAAG,IAAI,QAAQ;AACrE,cAAM,IAAI,cAAc,kCAAkC,OAAO,IAAI,CAAC;AAAA,MACxE;AAAA,IACF,SAAS,OAAO;AACd,mBAAa,SAAS;AAEtB,UAAI,iBAAiB,eAAe;AAClC,cAAM;AAAA,MACR;AAEA,UAAI,iBAAiB,OAAO;AAC1B,YAAI,MAAM,SAAS,cAAc;AAC/B,gBAAM,IAAI,cAAc,mBAAmB,GAAG;AAAA,QAChD;AACA,cAAM,IAAI,cAAc,MAAM,SAAS,CAAC;AAAA,MAC1C;AAEA,YAAM,IAAI,cAAc,0BAA0B,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAc,oBAAoB,UAAoC;AACpE,QAAI;AAEJ,QAAI;AACF,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAI,MAAM;AACR,oBAAY,KAAK,MAAM,IAAI;AAAA,MAC7B;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,UAAM,UAAU,WAAW,SAAS,WAAW,WAAW,SAAS;AAEnE,YAAQ,SAAS,QAAQ;AAAA,MACvB,KAAK;AACH,cAAM,IAAI,oBAAoB,OAAO;AAAA,MACvC,KAAK,KAAK;AACR,cAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AACrD,cAAM,IAAI;AAAA,UACR,WAAW;AAAA,UACX,aAAa,SAAS,YAAY,EAAE,IAAI;AAAA,QAC1C;AAAA,MACF;AAAA,MACA;AACE,cAAM,IAAI,cAAc,SAAS,SAAS,QAAQ,SAAS;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,IAAO,MAAc,OAAkE;AACrF,WAAO,KAAK,QAAW,EAAE,QAAQ,OAAO,MAAM,MAAM,CAAC;AAAA,EACvD;AAAA,EAEA,KAAQ,MAAc,MAA4B;AAChD,WAAO,KAAK,QAAW,EAAE,QAAQ,QAAQ,MAAM,KAAK,CAAC;AAAA,EACvD;AAAA,EAEA,IAAO,MAAc,MAAgB,aAAa,OAAmB;AACnE,WAAO,KAAK,QAAW,EAAE,QAAQ,OAAO,MAAM,MAAM,WAAW,CAAC;AAAA,EAClE;AAAA,EAEA,OAAU,MAAc,MAA4B;AAClD,WAAO,KAAK,QAAW,EAAE,QAAQ,UAAU,MAAM,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,QAAQ,MAAc,OAAqE;AACzF,WAAO,KAAK,QAAc,EAAE,QAAQ,OAAO,MAAM,OAAO,cAAc,OAAO,CAAC;AAAA,EAChF;AAAA,EAEA,SAAS,MAAc,MAA+B;AACpD,WAAO,KAAK,QAAc,EAAE,QAAQ,QAAQ,MAAM,MAAM,cAAc,OAAO,CAAC;AAAA,EAChF;AACF;;;ACvKO,IAAM,UAAN,MAAc;AAAA,EACnB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlD,MAAM,aAA8B;AAClC,UAAM,WAAW,MAAM,KAAK,OAAO,IAAqB,cAAc;AACtE,WAAO,SAAS;AAAA,EAClB;AACF;;;ACCO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAYlD,MAAM,OACJ,QAC8C;AAC9C,UAAM,QAAQ;AACd,WAAO,KAAK,OAAO,IAAyC,QAAQ;AAAA,MAClE,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,MAAM,QAAQ;AAAA,MACd,MAAM,OAAO,SAAS,SAAY,OAAO,MAAM,IAAI,IAAI;AAAA,MACvD,UAAU,OAAO,aAAa,SAAY,OAAO,MAAM,QAAQ,IAAI;AAAA,IACrE,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,UAAmC;AACjD,QAAI,CAAC,YAAY,SAAS,KAAK,EAAE,WAAW,GAAG;AAC7C,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,UAAM,WAAW,MAAM,KAAK,OAAO,IAA4B,eAAe,QAAQ,EAAE;AACxF,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,OACJ,MACA,UACA,SACyB;AACzB,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAGA,QAAI,cAAc;AAClB,QAAI,gBAAgB,aAAa;AAC/B,oBAAc,KAAK;AAAA,IACrB,WAAW,gBAAgB,YAAY;AACrC,oBAAc,KAAK;AAAA,IACrB,WAAW,gBAAgB,MAAM;AAC/B,oBAAc,KAAK;AAAA,IACrB;AAEA,QAAI,gBAAgB,GAAG;AACrB,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAEA,UAAM,WAAW,IAAI,SAAS;AAE9B,QAAI,gBAAgB,eAAe,gBAAgB,YAAY;AAC7D,YAAM,OAAO,IAAI,KAAK,CAAC,IAAgB,CAAC;AACxC,eAAS,OAAO,QAAQ,MAAM,YAAY,cAAc;AAAA,IAC1D,WAAW,gBAAgB,MAAM;AAE/B,YAAM,kBAAmB,MAAc,QAAQ;AAC/C,eAAS,OAAO,QAAQ,MAAM,YAAY,eAAe;AAAA,IAC3D,OAAO;AACL,eAAS,OAAO,QAAQ,IAAI;AAAA,IAC9B;AAEA,QAAI,SAAS,UAAU;AACrB,eAAS,OAAO,YAAY,KAAK,UAAU,QAAQ,QAAQ,CAAC;AAAA,IAC9D;AAGA,QAAI,SAAS,YAAY;AACvB,eAAS,OAAO,cAAc,QAAQ,UAAU;AAAA,IAClD;AAEA,WAAO,KAAK,OAAO,IAAoB,eAAe,UAAU,IAAI;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,OAAmD;AAC9D,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAAgC,EAAE,MAAM;AAC9C,WAAO,KAAK,OAAO,OAAgC,QAAQ,MAAM;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,OAAoD;AAChE,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAAiC,EAAE,OAAO,SAAS,KAAK;AAC9D,WAAO,KAAK,OAAO,KAA+B,gBAAgB,MAAM;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,OAAoD;AAChE,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAAiC,EAAE,OAAO,SAAS,MAAM;AAC/D,WAAO,KAAK,OAAO,KAA+B,gBAAgB,MAAM;AAAA,EAC1E;AACF;;;AC9IO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlD,MAAM,SAAmC;AACvC,WAAO,KAAK,OAAO,IAAqB,aAAa;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,OAAiB,WAAoD;AACrF,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,QAAI,CAAC,aAAa,UAAU,KAAK,EAAE,WAAW,GAAG;AAC/C,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AACA,UAAM,SAA+B,EAAE,OAAO,UAAU,UAAU;AAClE,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAW,OAAiB,SAAkD;AAClF,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,QAAI,CAAC,WAAW,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC3C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AACA,UAAM,SAA+B,EAAE,OAAO,eAAe,QAAQ;AACrE,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,SAAiB,WAAiD;AAC7E,QAAI,CAAC,WAAW,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC3C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AACA,QAAI,CAAC,aAAa,UAAU,KAAK,EAAE,WAAW,GAAG;AAC/C,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AACA,UAAM,SAA4B,EAAE,SAAS,UAAU;AACvD,WAAO,KAAK,OAAO,KAA0B,cAAc,MAAM;AAAA,EACnE;AACF;;;ACnEO,IAAM,WAAN,MAAe;AAAA,EACpB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASlD,MAAM,MAAM,OAAiB,SAAkE;AAC7F,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,SAAK,gBAAgB,OAAO;AAC5B,UAAM,SAA+B,EAAE,OAAO,MAAM,SAAS,GAAG,QAAQ;AACxE,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAM,OAAiB,SAAkE;AAC7F,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,SAAK,gBAAgB,OAAO;AAC5B,UAAM,SAA+B,EAAE,OAAO,MAAM,SAAS,GAAG,QAAQ;AACxE,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAQ,OAAiB,MAAiB,SAAkE;AAChH,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,QAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,WAAW,GAAG;AACrC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,SAAK,gBAAgB,OAAO;AAC5B,UAAM,SAA+B,EAAE,OAAO,MAAM,GAAG,QAAQ;AAC/D,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AAAA,EAEQ,gBAAgB,SAAuC;AAC7D,QAAI,SAAS,eAAe,QAAW;AACrC,UAAI,CAAC,OAAO,UAAU,QAAQ,UAAU,KAAK,QAAQ,aAAa,KAAK,QAAQ,aAAa,KAAK;AAC/F,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AACF;;;AC5DA,IAAM,mBAAmB;AAElB,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlD,MAAM,IAAI,UAAkB,OAAmB,WAAoC;AACjF,UAAM,SAA0B,EAAE,KAAK;AACvC,WAAO,KAAK,OAAO,IAAoB,eAAe,QAAQ,IAAI;AAAA,MAChE,MAAM,OAAO;AAAA,IACf,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,UAA2C;AAC1D,WAAO,KAAK,IAAI,UAAU,SAAS;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY,UAA2C;AAC3D,WAAO,KAAK,IAAI,UAAU,UAAU;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,UAA2C;AACvD,WAAO,KAAK,IAAI,UAAU,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,UAA0B;AACtC,WAAO,GAAG,gBAAgB,IAAI,QAAQ;AAAA,EACxC;AACF;;;ACtDO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlD,MAAM,KAAK,UAAkB,SAA6C;AACxE,WAAO,KAAK,OAAO,QAAQ,sBAAsB,QAAQ,IAAI;AAAA,MAC3D,UAAU,SAAS;AAAA,MACnB,MAAM,SAAS;AAAA,IACjB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,QAAQ,UAAkB,OAAyB,OAAsB;AAC7E,WAAO,KAAK,KAAK,UAAU,EAAE,UAAU,OAAO,KAAK,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAS,UAAkB,OAAyB,OAAsB;AAC9E,WAAO,KAAK,KAAK,UAAU,EAAE,UAAU,MAAM,KAAK,CAAC;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,OAAgC;AAC3C,UAAM,SAA+B,EAAE,MAAM;AAC7C,WAAO,KAAK,OAAO,SAAS,wBAAwB,MAAM;AAAA,EAC5D;AACF;;;AC7CO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASlD,MAAM,KACJ,OACA,SACA,SAC8B;AAC9B,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,OAAO,UAAU,qBAAqB,OAAO,KAAK;AACxD,UAAM,OAA0B,EAAE,OAAO,GAAG,QAAQ;AACpD,WAAO,KAAK,OAAO,KAA0B,MAAM,IAAI;AAAA,EACzD;AACF;;;ACtBO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlD,MAAM,OAAO,OAAgD;AAC3D,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAA6B,EAAE,MAAM;AAC3C,WAAO,KAAK,OAAO,KAA2B,sBAAsB,MAAM;AAAA,EAC5E;AACF;;;ACfO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlD,MAAM,OAAO,SAAiB,QAAyD;AACrF,QAAI,CAAC,WAAW,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC3C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,WAAO,KAAK,OAAO,KAA0B,iBAAiB,OAAO,IAAI,MAAM;AAAA,EACjF;AACF;;;ACdO,IAAM,WAAN,MAAe;AAAA,EACH;AAAA,EAED;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BhB,YAAY,QAAwB;AAClC,SAAK,SAAS,IAAI,WAAW,MAAM;AAEnC,SAAK,OAAO,IAAI,QAAQ,KAAK,MAAM;AACnC,SAAK,YAAY,IAAI,aAAa,KAAK,MAAM;AAC7C,SAAK,SAAS,IAAI,UAAU,KAAK,MAAM;AACvC,SAAK,QAAQ,IAAI,SAAS,KAAK,MAAM;AACrC,SAAK,UAAU,IAAI,WAAW,KAAK,MAAM;AACzC,SAAK,YAAY,IAAI,aAAa,KAAK,MAAM;AAC7C,SAAK,UAAU,IAAI,WAAW,KAAK,MAAM;AACzC,SAAK,SAAS,IAAI,UAAU,KAAK,MAAM;AACvC,SAAK,WAAW,IAAI,YAAY,KAAK,MAAM;AAAA,EAC7C;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types.ts","../src/client.ts","../src/api/info.ts","../src/api/documents.ts","../src/api/groups.ts","../src/api/audit.ts","../src/api/reports.ts","../src/api/downloads.ts","../src/api/convert.ts","../src/api/manual.ts","../src/api/settings.ts","../src/equalweb.ts"],"sourcesContent":["// Main client\nexport { EqualWeb } from \"./equalweb\";\n\n// Types\nexport type {\n // Config\n EqualWebConfig,\n\n // Common\n DocumentStatus,\n AuditType,\n ReportType,\n DownloadFileType,\n\n // Info\n BalanceResponse,\n\n // Documents\n Document,\n GetDocumentsParams,\n DocumentStatusResponse,\n UploadResponse,\n DeleteDocumentsParams,\n DeleteDocumentsResponse,\n ArchiveDocumentsParams,\n ArchiveDocumentsResponse,\n\n // Groups\n DocumentGroup,\n GroupDocumentsParams,\n GroupDocumentsResponse,\n RenameGroupParams,\n RenameGroupResponse,\n\n // Audit\n AuditDocumentsOptions,\n AuditDocumentsParams,\n AuditDocumentsResponse,\n\n // Reports\n ReportRule,\n ReportSummary,\n DetailedReport,\n ReportCustomData,\n AuditedReport,\n OriginalReport,\n GetReportParams,\n ReportResponse,\n\n // Downloads\n DownloadFileParams,\n DownloadZippedParams,\n\n // Convert HTML\n ConvertHtmlParams,\n ConvertHtmlResponse,\n\n // Manual Remediation\n CancelManualParams,\n CancelManualResponse,\n\n // PDF Settings\n PdfSettingsParams,\n PdfSettingsResponse,\n\n // Errors\n EqualWebErrorResponse,\n} from \"./types\";\n\n// Error classes\nexport { EqualWebError, RateLimitError, AuthenticationError } from \"./types\";\n\n// API classes (for advanced usage)\nexport { InfoApi } from \"./api/info\";\nexport { DocumentsApi } from \"./api/documents\";\nexport { GroupsApi } from \"./api/groups\";\nexport { AuditApi } from \"./api/audit\";\nexport { ReportsApi } from \"./api/reports\";\nexport { DownloadsApi } from \"./api/downloads\";\nexport { ConvertApi } from \"./api/convert\";\nexport { ManualApi } from \"./api/manual\";\nexport { SettingsApi } from \"./api/settings\";\n","// ============================================================================\r\n// Configuration Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebConfig {\r\n apiKey: string;\r\n baseUrl?: string;\r\n timeout?: number;\r\n}\r\n\r\n// ============================================================================\r\n// Common Types\r\n// ============================================================================\r\n\r\nexport type DocumentStatus = \"done\" | \"pending\" | \"processing\" | string;\r\n\r\nexport type AuditType = \"audit\" | \"tag\" | \"ocr\" | \"check\" | \"manual\" | \"sign\";\r\n\r\nexport type ReportType = \"audited\" | \"original\" | \"both\";\r\n\r\nexport type DownloadFileType = \"pdf\" | \"xlsx\";\r\n\r\n// ============================================================================\r\n// Info Types\r\n// ============================================================================\r\n\r\nexport interface BalanceResponse {\r\n results: number;\r\n}\r\n\r\n// ============================================================================\r\n// Document Types\r\n// ============================================================================\r\n\r\nexport interface Document {\r\n numberOfPages: number;\r\n createdAt: string;\r\n group: number | null;\r\n archived: boolean;\r\n reportID: string;\r\n /** Client-system id linked at upload time, null when not set */\r\n externalID: string | null;\r\n /** Accessibility score of the uploaded document, null until checked */\r\n originalScore: number | null;\r\n /** Accessibility score of the remediated document, null until audited */\r\n auditedScore: number | null;\r\n /** Client metadata attached at upload time, null when not set */\r\n metadata: Record<string, unknown> | null;\r\n status: DocumentStatus;\r\n}\r\n\r\nexport interface GetDocumentsParams {\r\n groupID?: string;\r\n archived?: boolean;\r\n type?: string;\r\n}\r\n\r\n/** Opt-in pagination: passing page switches the response to an envelope */\r\nexport interface GetDocumentsPagedParams extends GetDocumentsParams {\r\n page: number;\r\n /** 1-200, defaults to 50 */\r\n pageSize?: number;\r\n}\r\n\r\nexport interface PagedDocumentsResponse {\r\n results: Document[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n totalPages: number;\r\n}\r\n\r\nexport interface DocumentStatusResponse {\r\n status: DocumentStatus;\r\n id?: string;\r\n externalID?: string | null;\r\n originalScore?: number | null;\r\n auditedScore?: number | null;\r\n metadata?: Record<string, unknown> | null;\r\n}\r\n\r\nexport interface UploadOptions {\r\n /**\r\n * Your system's id for this document (1-100 chars: letters, digits,\r\n * - _ . :). Afterwards every endpoint that takes a reportID also accepts\r\n * this externalID. A taken externalID rejects the upload with 409.\r\n */\r\n externalID?: string;\r\n /** Metadata to store on the document (JSON object, max 8KB) */\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface UploadResponse {\r\n id: string;\r\n createdAt: string;\r\n numberOfPages: number;\r\n externalID?: string;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface DeleteDocumentsParams {\r\n files: string[];\r\n}\r\n\r\nexport interface DeleteDocumentsResponse {\r\n results: Record<string, boolean | { error: string }>;\r\n}\r\n\r\nexport interface ArchiveDocumentsParams {\r\n files: string[];\r\n archive?: boolean;\r\n}\r\n\r\nexport interface ArchiveDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Group Types\r\n// ============================================================================\r\n\r\nexport interface DocumentGroup {\r\n id: number;\r\n name: string;\r\n createdAt: string;\r\n}\r\n\r\nexport interface GroupDocumentsParams {\r\n files: string[];\r\n newGroup?: string;\r\n selectedGroup?: string;\r\n}\r\n\r\nexport interface GroupDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\nexport interface RenameGroupParams {\r\n groupID: string;\r\n groupName: string;\r\n}\r\n\r\nexport interface RenameGroupResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Audit Types\r\n// ============================================================================\r\n\r\nexport interface AuditDocumentsOptions {\r\n engine?: string;\r\n addSignature?: boolean;\r\n fixContrast?: boolean;\r\n autoRemove?: number;\r\n deleteAfterAudit?: boolean;\r\n /**\r\n * For `check` runs only: delete the stored file once the check finishes.\r\n * The report and score are kept. Per-request only — there is no saved default.\r\n */\r\n deleteFileAfterCheck?: boolean;\r\n}\r\n\r\nexport interface AuditDocumentsParams extends AuditDocumentsOptions {\r\n files: string[];\r\n type?: AuditType;\r\n}\r\n\r\nexport interface AuditDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Report Types\r\n// ============================================================================\r\n\r\nexport interface ReportRule {\r\n Rule: string;\r\n Status: \"Passed\" | \"Failed\" | \"Needs manual check\" | string;\r\n Description: string;\r\n}\r\n\r\nexport interface ReportSummary {\r\n \"Passed\"?: number;\r\n \"Failed\"?: number;\r\n \"Needs manual check\"?: number;\r\n Description?: string;\r\n}\r\n\r\nexport interface DetailedReport {\r\n Document?: ReportRule[];\r\n \"Page Content\"?: ReportRule[];\r\n Forms?: ReportRule[];\r\n \"Alternate Text\"?: ReportRule[];\r\n Tables?: ReportRule[];\r\n Lists?: ReportRule[];\r\n Headings?: ReportRule[];\r\n}\r\n\r\nexport interface ReportCustomData {\r\n fileName?: string;\r\n fileSize?: number;\r\n numberOfPages?: number;\r\n tags?: Record<string, number>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface AuditedReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface OriginalReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface GetReportParams {\r\n type?: ReportType;\r\n}\r\n\r\nexport interface ReportResponse {\r\n original?: OriginalReport;\r\n audited?: AuditedReport;\r\n}\r\n\r\n// ============================================================================\r\n// Download Types\r\n// ============================================================================\r\n\r\nexport interface DownloadFileParams {\r\n original?: boolean;\r\n type?: DownloadFileType;\r\n}\r\n\r\nexport interface DownloadZippedParams {\r\n files: string[];\r\n}\r\n\r\n// ============================================================================\r\n// Convert HTML Types\r\n// ============================================================================\r\n\r\nexport interface ConvertHtmlParams {\r\n files: string[];\r\n autoConvert?: boolean;\r\n auditHtml?: boolean;\r\n}\r\n\r\nexport interface ConvertHtmlResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Manual Remediation Types\r\n// ============================================================================\r\n\r\nexport interface CancelManualParams {\r\n files: string[];\r\n}\r\n\r\nexport interface CancelManualResponse {\r\n data: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// PDF Settings Types\r\n// ============================================================================\r\n\r\nexport interface PdfSettingsParams {\r\n autoConvert: boolean;\r\n}\r\n\r\nexport interface PdfSettingsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Error Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebErrorResponse {\r\n error?: string;\r\n message?: string;\r\n statusCode?: number;\r\n}\r\n\r\nexport class EqualWebError extends Error {\r\n public readonly statusCode: number;\r\n public readonly response?: EqualWebErrorResponse;\r\n\r\n constructor(message: string, statusCode: number, response?: EqualWebErrorResponse) {\r\n super(message);\r\n this.name = \"EqualWebError\";\r\n this.statusCode = statusCode;\r\n this.response = response;\r\n }\r\n}\r\n\r\nexport class RateLimitError extends EqualWebError {\r\n public readonly retryAfter?: number;\r\n\r\n constructor(message: string, retryAfter?: number) {\r\n super(message, 429);\r\n this.name = \"RateLimitError\";\r\n this.retryAfter = retryAfter;\r\n }\r\n}\r\n\r\nexport class AuthenticationError extends EqualWebError {\r\n constructor(message: string = \"Invalid or missing API key\") {\r\n super(message, 401);\r\n this.name = \"AuthenticationError\";\r\n }\r\n}\r\n","import {\r\n EqualWebConfig,\r\n EqualWebError,\r\n EqualWebErrorResponse,\r\n RateLimitError,\r\n AuthenticationError,\r\n} from \"./types\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://login.equalweb.com/api/v2\";\r\nconst DEFAULT_TIMEOUT = 30000;\r\n\r\nexport interface RequestOptions {\r\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\r\n path: string;\r\n query?: Record<string, string | boolean | undefined>;\r\n body?: unknown;\r\n isFormData?: boolean;\r\n responseType?: \"json\" | \"blob\";\r\n}\r\n\r\nexport class HttpClient {\r\n private readonly apiKey: string;\r\n private readonly baseUrl: string;\r\n private readonly timeout: number;\r\n\r\n constructor(config: EqualWebConfig) {\r\n if (!config.apiKey || config.apiKey.trim().length === 0) {\r\n throw new Error(\"API key is required and cannot be empty\");\r\n }\r\n\r\n if (config.timeout !== undefined && config.timeout < 0) {\r\n throw new Error(\"timeout must be a positive number\");\r\n }\r\n\r\n if (config.baseUrl) {\r\n try {\r\n new URL(config.baseUrl);\r\n } catch {\r\n throw new Error(\"baseUrl must be a valid URL\");\r\n }\r\n }\r\n\r\n this.apiKey = config.apiKey;\r\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") ?? DEFAULT_BASE_URL;\r\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\r\n }\r\n\r\n async request<T>(options: RequestOptions): Promise<T> {\r\n const { method, path, query, body, isFormData, responseType = \"json\" } = options;\r\n\r\n const url = new URL(path, this.baseUrl + \"/\");\r\n\r\n if (query) {\r\n Object.entries(query).forEach(([key, value]) => {\r\n if (value !== undefined) {\r\n url.searchParams.set(key, String(value));\r\n }\r\n });\r\n }\r\n\r\n const headers: Record<string, string> = {\r\n \"x-a11y-api-key\": this.apiKey,\r\n };\r\n\r\n if (!isFormData && body) {\r\n headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(url.toString(), {\r\n method,\r\n headers,\r\n body: isFormData ? (body as FormData) : body ? JSON.stringify(body) : undefined,\r\n signal: controller.signal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n await this.handleErrorResponse(response);\r\n }\r\n\r\n if (responseType === \"blob\") {\r\n return response.blob() as Promise<T>;\r\n }\r\n\r\n const text = await response.text();\r\n if (!text) {\r\n return {} as T;\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T;\r\n } catch (parseError) {\r\n const preview = text.length > 100 ? text.substring(0, 100) + \"...\" : text;\r\n throw new EqualWebError(`Failed to parse JSON response: ${preview}`, 0);\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof EqualWebError) {\r\n throw error;\r\n }\r\n\r\n if (error instanceof Error) {\r\n if (error.name === \"AbortError\") {\r\n throw new EqualWebError(\"Request timeout\", 408);\r\n }\r\n throw new EqualWebError(error.message, 0);\r\n }\r\n\r\n throw new EqualWebError(\"Unknown error occurred\", 0);\r\n }\r\n }\r\n\r\n private async handleErrorResponse(response: Response): Promise<never> {\r\n let errorData: EqualWebErrorResponse | undefined;\r\n\r\n try {\r\n const text = await response.text();\r\n if (text) {\r\n errorData = JSON.parse(text);\r\n }\r\n } catch {\r\n // Response body is not JSON\r\n }\r\n\r\n const message = errorData?.error ?? errorData?.message ?? response.statusText;\r\n\r\n switch (response.status) {\r\n case 401:\r\n throw new AuthenticationError(message);\r\n case 429: {\r\n const retryAfter = response.headers.get(\"Retry-After\");\r\n throw new RateLimitError(\r\n message || \"Rate limit exceeded\",\r\n retryAfter ? parseInt(retryAfter, 10) : undefined\r\n );\r\n }\r\n default:\r\n throw new EqualWebError(message, response.status, errorData);\r\n }\r\n }\r\n\r\n get<T>(path: string, query?: Record<string, string | boolean | undefined>): Promise<T> {\r\n return this.request<T>({ method: \"GET\", path, query });\r\n }\r\n\r\n post<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"POST\", path, body });\r\n }\r\n\r\n put<T>(path: string, body?: unknown, isFormData = false): Promise<T> {\r\n return this.request<T>({ method: \"PUT\", path, body, isFormData });\r\n }\r\n\r\n delete<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"DELETE\", path, body });\r\n }\r\n\r\n getBlob(path: string, query?: Record<string, string | boolean | undefined>): Promise<Blob> {\r\n return this.request<Blob>({ method: \"GET\", path, query, responseType: \"blob\" });\r\n }\r\n\r\n postBlob(path: string, body?: unknown): Promise<Blob> {\r\n return this.request<Blob>({ method: \"POST\", path, body, responseType: \"blob\" });\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { BalanceResponse } from \"../types\";\r\n\r\nexport class InfoApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the current credit balance for your account\r\n * @returns The current credit balance\r\n */\r\n async getBalance(): Promise<number> {\r\n const response = await this.client.get<BalanceResponse>(\"docs/info/balance\");\r\n return response.results;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n Document,\r\n GetDocumentsParams,\r\n GetDocumentsPagedParams,\r\n PagedDocumentsResponse,\r\n DocumentStatusResponse,\r\n UploadOptions,\r\n UploadResponse,\r\n DeleteDocumentsParams,\r\n DeleteDocumentsResponse,\r\n ArchiveDocumentsParams,\r\n ArchiveDocumentsResponse,\r\n} from \"../types\";\r\n\r\nexport class DocumentsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all documents\r\n * @param params - Optional filters for groupID, archived status, and\r\n * document type. Passing `page` (and optionally `pageSize`) opts in to\r\n * pagination and switches the return value to a paged envelope; without it\r\n * the full array is returned as before.\r\n * @returns Array of documents, or a paged envelope when `page` is passed\r\n */\r\n async getAll(params?: GetDocumentsParams): Promise<Document[]>;\r\n async getAll(params: GetDocumentsPagedParams): Promise<PagedDocumentsResponse>;\r\n async getAll(\r\n params?: GetDocumentsParams | GetDocumentsPagedParams\r\n ): Promise<Document[] | PagedDocumentsResponse> {\r\n const paged = params as GetDocumentsPagedParams | undefined;\r\n return this.client.get<Document[] | PagedDocumentsResponse>(\"docs\", {\r\n groupID: params?.groupID,\r\n archived: params?.archived,\r\n type: params?.type,\r\n page: paged?.page !== undefined ? String(paged.page) : undefined,\r\n pageSize: paged?.pageSize !== undefined ? String(paged.pageSize) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Get the status of a specific document\r\n * @param reportID - The report ID of the document, or the externalID your\r\n * system linked at upload time\r\n * @returns The document status\r\n */\r\n async getStatus(reportID: string): Promise<string> {\r\n if (!reportID || reportID.trim().length === 0) {\r\n throw new Error(\"reportID cannot be empty\");\r\n }\r\n const response = await this.client.get<DocumentStatusResponse>(`docs/status/${reportID}`);\r\n return response.status;\r\n }\r\n\r\n /**\r\n * Upload a document for processing\r\n * Supported formats: PDF, XLSX, DOCX, PPTX\r\n * @param file - The file to upload (File, Blob, ArrayBuffer, or Uint8Array)\r\n * @param filename - Optional filename (required if file is an ArrayBuffer or Uint8Array)\r\n * @param options - Optional externalID (links the doc to your own system;\r\n * rejected with 409 if already in use) and metadata (JSON object stored on\r\n * the document, max 8KB)\r\n * @returns Upload response with document ID and metadata\r\n */\r\n async upload(\r\n file: File | Blob | ArrayBuffer | Uint8Array,\r\n filename?: string,\r\n options?: UploadOptions\r\n ): Promise<UploadResponse> {\r\n if (!file) {\r\n throw new Error(\"file cannot be null or undefined\");\r\n }\r\n\r\n // Validate file size\r\n let sizeInBytes = 0;\r\n if (file instanceof ArrayBuffer) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Uint8Array) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Blob) {\r\n sizeInBytes = file.size;\r\n }\r\n\r\n if (sizeInBytes === 0) {\r\n throw new Error(\"file is empty\");\r\n }\r\n\r\n const formData = new FormData();\r\n\r\n if (file instanceof ArrayBuffer || file instanceof Uint8Array) {\r\n const blob = new Blob([file as BlobPart]);\r\n formData.append(\"file\", blob, filename ?? \"document.pdf\");\r\n } else if (file instanceof Blob) {\r\n // Use optional chaining for safer property access\r\n const defaultFilename = (file as any)?.name ?? \"document.pdf\";\r\n formData.append(\"file\", file, filename ?? defaultFilename);\r\n } else {\r\n formData.append(\"file\", file);\r\n }\r\n\r\n if (options?.metadata) {\r\n formData.append(\"metadata\", JSON.stringify(options.metadata));\r\n }\r\n\r\n // Per-document field — travels in the form data next to the file.\r\n if (options?.externalID) {\r\n formData.append(\"externalID\", options.externalID);\r\n }\r\n\r\n return this.client.put<UploadResponse>(\"docs/upload\", formData, true);\r\n }\r\n\r\n /**\r\n * Delete multiple documents\r\n * @param files - Array of document IDs to delete\r\n * @returns Results indicating success/failure for each document\r\n */\r\n async delete(files: string[]): Promise<DeleteDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: DeleteDocumentsParams = { files };\r\n return this.client.delete<DeleteDocumentsResponse>(\"docs\", params);\r\n }\r\n\r\n /**\r\n * Archive documents\r\n * @param files - Array of document IDs to archive\r\n * @returns Result of the operation\r\n */\r\n async archive(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: true };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n\r\n /**\r\n * Restore archived documents\r\n * @param files - Array of document IDs to restore\r\n * @returns Result of the operation\r\n */\r\n async restore(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: false };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n DocumentGroup,\r\n GroupDocumentsParams,\r\n GroupDocumentsResponse,\r\n RenameGroupParams,\r\n RenameGroupResponse,\r\n} from \"../types\";\r\n\r\nexport class GroupsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all document groups\r\n * @returns Array of document groups\r\n */\r\n async getAll(): Promise<DocumentGroup[]> {\r\n return this.client.get<DocumentGroup[]>(\"docs/groups\");\r\n }\r\n\r\n /**\r\n * Add documents to a new group\r\n * @param files - Array of document IDs to group\r\n * @param groupName - Name of the new group to create\r\n * @returns Result of the operation\r\n */\r\n async createGroup(files: string[], groupName: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, newGroup: groupName };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Add documents to an existing group\r\n * @param files - Array of document IDs to group\r\n * @param groupID - ID of the existing group\r\n * @returns Result of the operation\r\n */\r\n async addToGroup(files: string[], groupID: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, selectedGroup: groupID };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Rename a document group\r\n * @param groupID - ID of the group to rename\r\n * @param groupName - New name for the group\r\n * @returns Result of the operation\r\n */\r\n async rename(groupID: string, groupName: string): Promise<RenameGroupResponse> {\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: RenameGroupParams = { groupID, groupName };\r\n return this.client.post<RenameGroupResponse>(\"group-name\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { AuditDocumentsOptions, AuditDocumentsParams, AuditDocumentsResponse, AuditType } from \"../types\";\n\nexport class AuditApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Start a full audit on documents\n * This performs accessibility remediation and generates detailed reports\n * @param files - Array of document IDs to audit\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async audit(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"audit\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Perform a quick check on documents without full remediation\n * @param files - Array of document IDs to check\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit, deleteFileAfterCheck)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async check(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"check\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Start an audit with custom type\n * @param files - Array of document IDs to process\n * @param type - Type of audit: \"audit\", \"tag\", \"ocr\", \"check\", \"manual\", or \"sign\"\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async process(files: string[], type: AuditType, options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n if (!type || type.trim().length === 0) {\n throw new Error(\"type cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type, ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n private validateOptions(options?: AuditDocumentsOptions): void {\n if (options?.autoRemove !== undefined) {\n if (!Number.isInteger(options.autoRemove) || options.autoRemove < 1 || options.autoRemove > 365) {\n throw new Error(\"autoRemove must be an integer between 1 and 365\");\n }\n }\n }\n}\n","import { HttpClient } from \"../client\";\r\nimport { ReportResponse, ReportType, GetReportParams } from \"../types\";\r\n\r\nconst REPORTS_BASE_URL = \"https://login.equalweb.com/reports/pdf\";\r\n\r\nexport class ReportsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the JSON report for a document\r\n * @param reportID - The report ID\r\n * @param type - Which report to retrieve: \"audited\", \"original\", or \"both\"\r\n * @returns The report data\r\n */\r\n async get(reportID: string, type: ReportType = \"audited\"): Promise<ReportResponse> {\r\n const params: GetReportParams = { type };\r\n return this.client.get<ReportResponse>(`docs/report/${reportID}`, {\r\n type: params.type,\r\n });\r\n }\r\n\r\n /**\r\n * Get the audited report for a document\r\n * @param reportID - The report ID\r\n * @returns The audited report data\r\n */\r\n async getAudited(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"audited\");\r\n }\r\n\r\n /**\r\n * Get the original report for a document\r\n * @param reportID - The report ID\r\n * @returns The original report data\r\n */\r\n async getOriginal(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"original\");\r\n }\r\n\r\n /**\r\n * Get both audited and original reports for a document\r\n * @param reportID - The report ID\r\n * @returns Both report data\r\n */\r\n async getBoth(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"both\");\r\n }\r\n\r\n /**\r\n * Get the URL to view the report in a browser\r\n * Note: This URL does not require authentication\r\n * @param reportID - The report ID\r\n * @returns The browser-viewable URL\r\n */\r\n getBrowserUrl(reportID: string): string {\r\n return `${REPORTS_BASE_URL}/${reportID}`;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { DownloadFileParams, DownloadZippedParams, DownloadFileType } from \"../types\";\r\n\r\nexport class DownloadsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Download a single document file\r\n * @param reportID - The report ID of the document\r\n * @param options - Download options (original file, file type)\r\n * @returns The file as a Blob\r\n */\r\n async file(reportID: string, options?: DownloadFileParams): Promise<Blob> {\r\n return this.client.getBlob(`docs/download/file/${reportID}`, {\r\n original: options?.original,\r\n type: options?.type,\r\n });\r\n }\r\n\r\n /**\r\n * Download the audited/processed version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The processed file as a Blob\r\n */\r\n async audited(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: false, type });\r\n }\r\n\r\n /**\r\n * Download the original version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The original file as a Blob\r\n */\r\n async original(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: true, type });\r\n }\r\n\r\n /**\r\n * Download multiple documents as a ZIP file\r\n * @param files - Array of document IDs to include in the ZIP\r\n * @returns The ZIP file as a Blob\r\n */\r\n async zipped(files: string[]): Promise<Blob> {\r\n const params: DownloadZippedParams = { files };\r\n return this.client.postBlob(\"docs/download/zipped\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { ConvertHtmlParams, ConvertHtmlResponse } from \"../types\";\n\nexport class ConvertApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Convert PDF documents to HTML\n * @param files - Array of document IDs to convert\n * @param options - Optional conversion settings\n * @param sitekey - Optional site key for site-specific conversion\n * @returns Result of the operation\n */\n async html(\n files: string[],\n options?: Omit<ConvertHtmlParams, \"files\">,\n sitekey?: string\n ): Promise<ConvertHtmlResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const path = sitekey ? `docs/convert/html/${sitekey}` : \"docs/convert/html\";\n const body: ConvertHtmlParams = { files, ...options };\n return this.client.post<ConvertHtmlResponse>(path, body);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { CancelManualParams, CancelManualResponse } from \"../types\";\n\nexport class ManualApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Cancel manual remediation for documents\n * @param files - Array of document IDs to cancel manual remediation for\n * @returns Result of the operation\n */\n async cancel(files: string[]): Promise<CancelManualResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const params: CancelManualParams = { files };\n return this.client.post<CancelManualResponse>(\"docs/manual/cancel\", params);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { PdfSettingsParams, PdfSettingsResponse } from \"../types\";\n\nexport class SettingsApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Update PDF settings for a site\n * @param siteKey - The site key to update settings for\n * @param params - Settings to update\n * @returns Result of the operation\n */\n async update(siteKey: string, params: PdfSettingsParams): Promise<PdfSettingsResponse> {\n if (!siteKey || siteKey.trim().length === 0) {\n throw new Error(\"siteKey is required and cannot be empty\");\n }\n return this.client.post<PdfSettingsResponse>(`docs/settings/${siteKey}`, params);\n }\n}\n","import { HttpClient } from \"./client\";\nimport { InfoApi, DocumentsApi, GroupsApi, AuditApi, ReportsApi, DownloadsApi, ConvertApi, ManualApi, SettingsApi } from \"./api\";\nimport { EqualWebConfig } from \"./types\";\n\nexport class EqualWeb {\n private readonly client: HttpClient;\n\n public readonly info: InfoApi;\n public readonly documents: DocumentsApi;\n public readonly groups: GroupsApi;\n public readonly audit: AuditApi;\n public readonly reports: ReportsApi;\n public readonly downloads: DownloadsApi;\n public readonly convert: ConvertApi;\n public readonly manual: ManualApi;\n public readonly settings: SettingsApi;\n\n /**\n * Create a new EqualWeb API client\n * @param config - Configuration object with API key and optional settings\n * @example\n * ```typescript\n * const client = new EqualWeb({ apiKey: 'your-api-key' });\n *\n * // Get credit balance\n * const balance = await client.info.getBalance();\n *\n * // Upload a document\n * const file = new File([...], 'document.pdf');\n * const upload = await client.documents.upload(file);\n *\n * // Start an audit\n * await client.audit.audit([upload.id]);\n *\n * // Check status\n * const status = await client.documents.getStatus(upload.id);\n *\n * // Download the audited file\n * const blob = await client.downloads.audited(upload.id);\n * ```\n */\n constructor(config: EqualWebConfig) {\n this.client = new HttpClient(config);\n\n this.info = new InfoApi(this.client);\n this.documents = new DocumentsApi(this.client);\n this.groups = new GroupsApi(this.client);\n this.audit = new AuditApi(this.client);\n this.reports = new ReportsApi(this.client);\n this.downloads = new DownloadsApi(this.client);\n this.convert = new ConvertApi(this.client);\n this.manual = new ManualApi(this.client);\n this.settings = new SettingsApi(this.client);\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -159,7 +159,7 @@ var InfoApi = class {
159
159
  * @returns The current credit balance
160
160
  */
161
161
  async getBalance() {
162
- const response = await this.client.get("info/balance");
162
+ const response = await this.client.get("docs/info/balance");
163
163
  return response.results;
164
164
  }
165
165
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/client.ts","../src/api/info.ts","../src/api/documents.ts","../src/api/groups.ts","../src/api/audit.ts","../src/api/reports.ts","../src/api/downloads.ts","../src/api/convert.ts","../src/api/manual.ts","../src/api/settings.ts","../src/equalweb.ts"],"sourcesContent":["// ============================================================================\r\n// Configuration Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebConfig {\r\n apiKey: string;\r\n baseUrl?: string;\r\n timeout?: number;\r\n}\r\n\r\n// ============================================================================\r\n// Common Types\r\n// ============================================================================\r\n\r\nexport type DocumentStatus = \"done\" | \"pending\" | \"processing\" | string;\r\n\r\nexport type AuditType = \"audit\" | \"tag\" | \"ocr\" | \"check\" | \"manual\" | \"sign\";\r\n\r\nexport type ReportType = \"audited\" | \"original\" | \"both\";\r\n\r\nexport type DownloadFileType = \"pdf\" | \"xlsx\";\r\n\r\n// ============================================================================\r\n// Info Types\r\n// ============================================================================\r\n\r\nexport interface BalanceResponse {\r\n results: number;\r\n}\r\n\r\n// ============================================================================\r\n// Document Types\r\n// ============================================================================\r\n\r\nexport interface Document {\r\n numberOfPages: number;\r\n createdAt: string;\r\n group: number | null;\r\n archived: boolean;\r\n reportID: string;\r\n /** Client-system id linked at upload time, null when not set */\r\n externalID: string | null;\r\n /** Accessibility score of the uploaded document, null until checked */\r\n originalScore: number | null;\r\n /** Accessibility score of the remediated document, null until audited */\r\n auditedScore: number | null;\r\n /** Client metadata attached at upload time, null when not set */\r\n metadata: Record<string, unknown> | null;\r\n status: DocumentStatus;\r\n}\r\n\r\nexport interface GetDocumentsParams {\r\n groupID?: string;\r\n archived?: boolean;\r\n type?: string;\r\n}\r\n\r\n/** Opt-in pagination: passing page switches the response to an envelope */\r\nexport interface GetDocumentsPagedParams extends GetDocumentsParams {\r\n page: number;\r\n /** 1-200, defaults to 50 */\r\n pageSize?: number;\r\n}\r\n\r\nexport interface PagedDocumentsResponse {\r\n results: Document[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n totalPages: number;\r\n}\r\n\r\nexport interface DocumentStatusResponse {\r\n status: DocumentStatus;\r\n id?: string;\r\n externalID?: string | null;\r\n originalScore?: number | null;\r\n auditedScore?: number | null;\r\n metadata?: Record<string, unknown> | null;\r\n}\r\n\r\nexport interface UploadOptions {\r\n /**\r\n * Your system's id for this document (1-100 chars: letters, digits,\r\n * - _ . :). Afterwards every endpoint that takes a reportID also accepts\r\n * this externalID. A taken externalID rejects the upload with 409.\r\n */\r\n externalID?: string;\r\n /** Metadata to store on the document (JSON object, max 8KB) */\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface UploadResponse {\r\n id: string;\r\n createdAt: string;\r\n numberOfPages: number;\r\n externalID?: string;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface DeleteDocumentsParams {\r\n files: string[];\r\n}\r\n\r\nexport interface DeleteDocumentsResponse {\r\n results: Record<string, boolean | { error: string }>;\r\n}\r\n\r\nexport interface ArchiveDocumentsParams {\r\n files: string[];\r\n archive?: boolean;\r\n}\r\n\r\nexport interface ArchiveDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Group Types\r\n// ============================================================================\r\n\r\nexport interface DocumentGroup {\r\n id: number;\r\n name: string;\r\n createdAt: string;\r\n}\r\n\r\nexport interface GroupDocumentsParams {\r\n files: string[];\r\n newGroup?: string;\r\n selectedGroup?: string;\r\n}\r\n\r\nexport interface GroupDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\nexport interface RenameGroupParams {\r\n groupID: string;\r\n groupName: string;\r\n}\r\n\r\nexport interface RenameGroupResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Audit Types\r\n// ============================================================================\r\n\r\nexport interface AuditDocumentsOptions {\r\n engine?: string;\r\n addSignature?: boolean;\r\n fixContrast?: boolean;\r\n autoRemove?: number;\r\n deleteAfterAudit?: boolean;\r\n /**\r\n * For `check` runs only: delete the stored file once the check finishes.\r\n * The report and score are kept. Per-request only — there is no saved default.\r\n */\r\n deleteFileAfterCheck?: boolean;\r\n}\r\n\r\nexport interface AuditDocumentsParams extends AuditDocumentsOptions {\r\n files: string[];\r\n type?: AuditType;\r\n}\r\n\r\nexport interface AuditDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Report Types\r\n// ============================================================================\r\n\r\nexport interface ReportRule {\r\n Rule: string;\r\n Status: \"Passed\" | \"Failed\" | \"Needs manual check\" | string;\r\n Description: string;\r\n}\r\n\r\nexport interface ReportSummary {\r\n \"Passed\"?: number;\r\n \"Failed\"?: number;\r\n \"Needs manual check\"?: number;\r\n Description?: string;\r\n}\r\n\r\nexport interface DetailedReport {\r\n Document?: ReportRule[];\r\n \"Page Content\"?: ReportRule[];\r\n Forms?: ReportRule[];\r\n \"Alternate Text\"?: ReportRule[];\r\n Tables?: ReportRule[];\r\n Lists?: ReportRule[];\r\n Headings?: ReportRule[];\r\n}\r\n\r\nexport interface ReportCustomData {\r\n fileName?: string;\r\n fileSize?: number;\r\n numberOfPages?: number;\r\n tags?: Record<string, number>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface AuditedReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface OriginalReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface GetReportParams {\r\n type?: ReportType;\r\n}\r\n\r\nexport interface ReportResponse {\r\n original?: OriginalReport;\r\n audited?: AuditedReport;\r\n}\r\n\r\n// ============================================================================\r\n// Download Types\r\n// ============================================================================\r\n\r\nexport interface DownloadFileParams {\r\n original?: boolean;\r\n type?: DownloadFileType;\r\n}\r\n\r\nexport interface DownloadZippedParams {\r\n files: string[];\r\n}\r\n\r\n// ============================================================================\r\n// Convert HTML Types\r\n// ============================================================================\r\n\r\nexport interface ConvertHtmlParams {\r\n files: string[];\r\n autoConvert?: boolean;\r\n auditHtml?: boolean;\r\n}\r\n\r\nexport interface ConvertHtmlResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Manual Remediation Types\r\n// ============================================================================\r\n\r\nexport interface CancelManualParams {\r\n files: string[];\r\n}\r\n\r\nexport interface CancelManualResponse {\r\n data: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// PDF Settings Types\r\n// ============================================================================\r\n\r\nexport interface PdfSettingsParams {\r\n autoConvert: boolean;\r\n}\r\n\r\nexport interface PdfSettingsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Error Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebErrorResponse {\r\n error?: string;\r\n message?: string;\r\n statusCode?: number;\r\n}\r\n\r\nexport class EqualWebError extends Error {\r\n public readonly statusCode: number;\r\n public readonly response?: EqualWebErrorResponse;\r\n\r\n constructor(message: string, statusCode: number, response?: EqualWebErrorResponse) {\r\n super(message);\r\n this.name = \"EqualWebError\";\r\n this.statusCode = statusCode;\r\n this.response = response;\r\n }\r\n}\r\n\r\nexport class RateLimitError extends EqualWebError {\r\n public readonly retryAfter?: number;\r\n\r\n constructor(message: string, retryAfter?: number) {\r\n super(message, 429);\r\n this.name = \"RateLimitError\";\r\n this.retryAfter = retryAfter;\r\n }\r\n}\r\n\r\nexport class AuthenticationError extends EqualWebError {\r\n constructor(message: string = \"Invalid or missing API key\") {\r\n super(message, 401);\r\n this.name = \"AuthenticationError\";\r\n }\r\n}\r\n","import {\r\n EqualWebConfig,\r\n EqualWebError,\r\n EqualWebErrorResponse,\r\n RateLimitError,\r\n AuthenticationError,\r\n} from \"./types\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://login.equalweb.com/api/v2\";\r\nconst DEFAULT_TIMEOUT = 30000;\r\n\r\nexport interface RequestOptions {\r\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\r\n path: string;\r\n query?: Record<string, string | boolean | undefined>;\r\n body?: unknown;\r\n isFormData?: boolean;\r\n responseType?: \"json\" | \"blob\";\r\n}\r\n\r\nexport class HttpClient {\r\n private readonly apiKey: string;\r\n private readonly baseUrl: string;\r\n private readonly timeout: number;\r\n\r\n constructor(config: EqualWebConfig) {\r\n if (!config.apiKey || config.apiKey.trim().length === 0) {\r\n throw new Error(\"API key is required and cannot be empty\");\r\n }\r\n\r\n if (config.timeout !== undefined && config.timeout < 0) {\r\n throw new Error(\"timeout must be a positive number\");\r\n }\r\n\r\n if (config.baseUrl) {\r\n try {\r\n new URL(config.baseUrl);\r\n } catch {\r\n throw new Error(\"baseUrl must be a valid URL\");\r\n }\r\n }\r\n\r\n this.apiKey = config.apiKey;\r\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") ?? DEFAULT_BASE_URL;\r\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\r\n }\r\n\r\n async request<T>(options: RequestOptions): Promise<T> {\r\n const { method, path, query, body, isFormData, responseType = \"json\" } = options;\r\n\r\n const url = new URL(path, this.baseUrl + \"/\");\r\n\r\n if (query) {\r\n Object.entries(query).forEach(([key, value]) => {\r\n if (value !== undefined) {\r\n url.searchParams.set(key, String(value));\r\n }\r\n });\r\n }\r\n\r\n const headers: Record<string, string> = {\r\n \"x-a11y-api-key\": this.apiKey,\r\n };\r\n\r\n if (!isFormData && body) {\r\n headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(url.toString(), {\r\n method,\r\n headers,\r\n body: isFormData ? (body as FormData) : body ? JSON.stringify(body) : undefined,\r\n signal: controller.signal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n await this.handleErrorResponse(response);\r\n }\r\n\r\n if (responseType === \"blob\") {\r\n return response.blob() as Promise<T>;\r\n }\r\n\r\n const text = await response.text();\r\n if (!text) {\r\n return {} as T;\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T;\r\n } catch (parseError) {\r\n const preview = text.length > 100 ? text.substring(0, 100) + \"...\" : text;\r\n throw new EqualWebError(`Failed to parse JSON response: ${preview}`, 0);\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof EqualWebError) {\r\n throw error;\r\n }\r\n\r\n if (error instanceof Error) {\r\n if (error.name === \"AbortError\") {\r\n throw new EqualWebError(\"Request timeout\", 408);\r\n }\r\n throw new EqualWebError(error.message, 0);\r\n }\r\n\r\n throw new EqualWebError(\"Unknown error occurred\", 0);\r\n }\r\n }\r\n\r\n private async handleErrorResponse(response: Response): Promise<never> {\r\n let errorData: EqualWebErrorResponse | undefined;\r\n\r\n try {\r\n const text = await response.text();\r\n if (text) {\r\n errorData = JSON.parse(text);\r\n }\r\n } catch {\r\n // Response body is not JSON\r\n }\r\n\r\n const message = errorData?.error ?? errorData?.message ?? response.statusText;\r\n\r\n switch (response.status) {\r\n case 401:\r\n throw new AuthenticationError(message);\r\n case 429: {\r\n const retryAfter = response.headers.get(\"Retry-After\");\r\n throw new RateLimitError(\r\n message || \"Rate limit exceeded\",\r\n retryAfter ? parseInt(retryAfter, 10) : undefined\r\n );\r\n }\r\n default:\r\n throw new EqualWebError(message, response.status, errorData);\r\n }\r\n }\r\n\r\n get<T>(path: string, query?: Record<string, string | boolean | undefined>): Promise<T> {\r\n return this.request<T>({ method: \"GET\", path, query });\r\n }\r\n\r\n post<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"POST\", path, body });\r\n }\r\n\r\n put<T>(path: string, body?: unknown, isFormData = false): Promise<T> {\r\n return this.request<T>({ method: \"PUT\", path, body, isFormData });\r\n }\r\n\r\n delete<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"DELETE\", path, body });\r\n }\r\n\r\n getBlob(path: string, query?: Record<string, string | boolean | undefined>): Promise<Blob> {\r\n return this.request<Blob>({ method: \"GET\", path, query, responseType: \"blob\" });\r\n }\r\n\r\n postBlob(path: string, body?: unknown): Promise<Blob> {\r\n return this.request<Blob>({ method: \"POST\", path, body, responseType: \"blob\" });\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { BalanceResponse } from \"../types\";\r\n\r\nexport class InfoApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the current credit balance for your account\r\n * @returns The current credit balance\r\n */\r\n async getBalance(): Promise<number> {\r\n const response = await this.client.get<BalanceResponse>(\"info/balance\");\r\n return response.results;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n Document,\r\n GetDocumentsParams,\r\n GetDocumentsPagedParams,\r\n PagedDocumentsResponse,\r\n DocumentStatusResponse,\r\n UploadOptions,\r\n UploadResponse,\r\n DeleteDocumentsParams,\r\n DeleteDocumentsResponse,\r\n ArchiveDocumentsParams,\r\n ArchiveDocumentsResponse,\r\n} from \"../types\";\r\n\r\nexport class DocumentsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all documents\r\n * @param params - Optional filters for groupID, archived status, and\r\n * document type. Passing `page` (and optionally `pageSize`) opts in to\r\n * pagination and switches the return value to a paged envelope; without it\r\n * the full array is returned as before.\r\n * @returns Array of documents, or a paged envelope when `page` is passed\r\n */\r\n async getAll(params?: GetDocumentsParams): Promise<Document[]>;\r\n async getAll(params: GetDocumentsPagedParams): Promise<PagedDocumentsResponse>;\r\n async getAll(\r\n params?: GetDocumentsParams | GetDocumentsPagedParams\r\n ): Promise<Document[] | PagedDocumentsResponse> {\r\n const paged = params as GetDocumentsPagedParams | undefined;\r\n return this.client.get<Document[] | PagedDocumentsResponse>(\"docs\", {\r\n groupID: params?.groupID,\r\n archived: params?.archived,\r\n type: params?.type,\r\n page: paged?.page !== undefined ? String(paged.page) : undefined,\r\n pageSize: paged?.pageSize !== undefined ? String(paged.pageSize) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Get the status of a specific document\r\n * @param reportID - The report ID of the document, or the externalID your\r\n * system linked at upload time\r\n * @returns The document status\r\n */\r\n async getStatus(reportID: string): Promise<string> {\r\n if (!reportID || reportID.trim().length === 0) {\r\n throw new Error(\"reportID cannot be empty\");\r\n }\r\n const response = await this.client.get<DocumentStatusResponse>(`docs/status/${reportID}`);\r\n return response.status;\r\n }\r\n\r\n /**\r\n * Upload a document for processing\r\n * Supported formats: PDF, XLSX, DOCX, PPTX\r\n * @param file - The file to upload (File, Blob, ArrayBuffer, or Uint8Array)\r\n * @param filename - Optional filename (required if file is an ArrayBuffer or Uint8Array)\r\n * @param options - Optional externalID (links the doc to your own system;\r\n * rejected with 409 if already in use) and metadata (JSON object stored on\r\n * the document, max 8KB)\r\n * @returns Upload response with document ID and metadata\r\n */\r\n async upload(\r\n file: File | Blob | ArrayBuffer | Uint8Array,\r\n filename?: string,\r\n options?: UploadOptions\r\n ): Promise<UploadResponse> {\r\n if (!file) {\r\n throw new Error(\"file cannot be null or undefined\");\r\n }\r\n\r\n // Validate file size\r\n let sizeInBytes = 0;\r\n if (file instanceof ArrayBuffer) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Uint8Array) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Blob) {\r\n sizeInBytes = file.size;\r\n }\r\n\r\n if (sizeInBytes === 0) {\r\n throw new Error(\"file is empty\");\r\n }\r\n\r\n const formData = new FormData();\r\n\r\n if (file instanceof ArrayBuffer || file instanceof Uint8Array) {\r\n const blob = new Blob([file as BlobPart]);\r\n formData.append(\"file\", blob, filename ?? \"document.pdf\");\r\n } else if (file instanceof Blob) {\r\n // Use optional chaining for safer property access\r\n const defaultFilename = (file as any)?.name ?? \"document.pdf\";\r\n formData.append(\"file\", file, filename ?? defaultFilename);\r\n } else {\r\n formData.append(\"file\", file);\r\n }\r\n\r\n if (options?.metadata) {\r\n formData.append(\"metadata\", JSON.stringify(options.metadata));\r\n }\r\n\r\n // Per-document field — travels in the form data next to the file.\r\n if (options?.externalID) {\r\n formData.append(\"externalID\", options.externalID);\r\n }\r\n\r\n return this.client.put<UploadResponse>(\"docs/upload\", formData, true);\r\n }\r\n\r\n /**\r\n * Delete multiple documents\r\n * @param files - Array of document IDs to delete\r\n * @returns Results indicating success/failure for each document\r\n */\r\n async delete(files: string[]): Promise<DeleteDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: DeleteDocumentsParams = { files };\r\n return this.client.delete<DeleteDocumentsResponse>(\"docs\", params);\r\n }\r\n\r\n /**\r\n * Archive documents\r\n * @param files - Array of document IDs to archive\r\n * @returns Result of the operation\r\n */\r\n async archive(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: true };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n\r\n /**\r\n * Restore archived documents\r\n * @param files - Array of document IDs to restore\r\n * @returns Result of the operation\r\n */\r\n async restore(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: false };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n DocumentGroup,\r\n GroupDocumentsParams,\r\n GroupDocumentsResponse,\r\n RenameGroupParams,\r\n RenameGroupResponse,\r\n} from \"../types\";\r\n\r\nexport class GroupsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all document groups\r\n * @returns Array of document groups\r\n */\r\n async getAll(): Promise<DocumentGroup[]> {\r\n return this.client.get<DocumentGroup[]>(\"docs/groups\");\r\n }\r\n\r\n /**\r\n * Add documents to a new group\r\n * @param files - Array of document IDs to group\r\n * @param groupName - Name of the new group to create\r\n * @returns Result of the operation\r\n */\r\n async createGroup(files: string[], groupName: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, newGroup: groupName };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Add documents to an existing group\r\n * @param files - Array of document IDs to group\r\n * @param groupID - ID of the existing group\r\n * @returns Result of the operation\r\n */\r\n async addToGroup(files: string[], groupID: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, selectedGroup: groupID };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Rename a document group\r\n * @param groupID - ID of the group to rename\r\n * @param groupName - New name for the group\r\n * @returns Result of the operation\r\n */\r\n async rename(groupID: string, groupName: string): Promise<RenameGroupResponse> {\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: RenameGroupParams = { groupID, groupName };\r\n return this.client.post<RenameGroupResponse>(\"group-name\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { AuditDocumentsOptions, AuditDocumentsParams, AuditDocumentsResponse, AuditType } from \"../types\";\n\nexport class AuditApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Start a full audit on documents\n * This performs accessibility remediation and generates detailed reports\n * @param files - Array of document IDs to audit\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async audit(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"audit\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Perform a quick check on documents without full remediation\n * @param files - Array of document IDs to check\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit, deleteFileAfterCheck)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async check(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"check\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Start an audit with custom type\n * @param files - Array of document IDs to process\n * @param type - Type of audit: \"audit\", \"tag\", \"ocr\", \"check\", \"manual\", or \"sign\"\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async process(files: string[], type: AuditType, options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n if (!type || type.trim().length === 0) {\n throw new Error(\"type cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type, ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n private validateOptions(options?: AuditDocumentsOptions): void {\n if (options?.autoRemove !== undefined) {\n if (!Number.isInteger(options.autoRemove) || options.autoRemove < 1 || options.autoRemove > 365) {\n throw new Error(\"autoRemove must be an integer between 1 and 365\");\n }\n }\n }\n}\n","import { HttpClient } from \"../client\";\r\nimport { ReportResponse, ReportType, GetReportParams } from \"../types\";\r\n\r\nconst REPORTS_BASE_URL = \"https://login.equalweb.com/reports/pdf\";\r\n\r\nexport class ReportsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the JSON report for a document\r\n * @param reportID - The report ID\r\n * @param type - Which report to retrieve: \"audited\", \"original\", or \"both\"\r\n * @returns The report data\r\n */\r\n async get(reportID: string, type: ReportType = \"audited\"): Promise<ReportResponse> {\r\n const params: GetReportParams = { type };\r\n return this.client.get<ReportResponse>(`docs/report/${reportID}`, {\r\n type: params.type,\r\n });\r\n }\r\n\r\n /**\r\n * Get the audited report for a document\r\n * @param reportID - The report ID\r\n * @returns The audited report data\r\n */\r\n async getAudited(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"audited\");\r\n }\r\n\r\n /**\r\n * Get the original report for a document\r\n * @param reportID - The report ID\r\n * @returns The original report data\r\n */\r\n async getOriginal(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"original\");\r\n }\r\n\r\n /**\r\n * Get both audited and original reports for a document\r\n * @param reportID - The report ID\r\n * @returns Both report data\r\n */\r\n async getBoth(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"both\");\r\n }\r\n\r\n /**\r\n * Get the URL to view the report in a browser\r\n * Note: This URL does not require authentication\r\n * @param reportID - The report ID\r\n * @returns The browser-viewable URL\r\n */\r\n getBrowserUrl(reportID: string): string {\r\n return `${REPORTS_BASE_URL}/${reportID}`;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { DownloadFileParams, DownloadZippedParams, DownloadFileType } from \"../types\";\r\n\r\nexport class DownloadsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Download a single document file\r\n * @param reportID - The report ID of the document\r\n * @param options - Download options (original file, file type)\r\n * @returns The file as a Blob\r\n */\r\n async file(reportID: string, options?: DownloadFileParams): Promise<Blob> {\r\n return this.client.getBlob(`docs/download/file/${reportID}`, {\r\n original: options?.original,\r\n type: options?.type,\r\n });\r\n }\r\n\r\n /**\r\n * Download the audited/processed version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The processed file as a Blob\r\n */\r\n async audited(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: false, type });\r\n }\r\n\r\n /**\r\n * Download the original version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The original file as a Blob\r\n */\r\n async original(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: true, type });\r\n }\r\n\r\n /**\r\n * Download multiple documents as a ZIP file\r\n * @param files - Array of document IDs to include in the ZIP\r\n * @returns The ZIP file as a Blob\r\n */\r\n async zipped(files: string[]): Promise<Blob> {\r\n const params: DownloadZippedParams = { files };\r\n return this.client.postBlob(\"docs/download/zipped\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { ConvertHtmlParams, ConvertHtmlResponse } from \"../types\";\n\nexport class ConvertApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Convert PDF documents to HTML\n * @param files - Array of document IDs to convert\n * @param options - Optional conversion settings\n * @param sitekey - Optional site key for site-specific conversion\n * @returns Result of the operation\n */\n async html(\n files: string[],\n options?: Omit<ConvertHtmlParams, \"files\">,\n sitekey?: string\n ): Promise<ConvertHtmlResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const path = sitekey ? `docs/convert/html/${sitekey}` : \"docs/convert/html\";\n const body: ConvertHtmlParams = { files, ...options };\n return this.client.post<ConvertHtmlResponse>(path, body);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { CancelManualParams, CancelManualResponse } from \"../types\";\n\nexport class ManualApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Cancel manual remediation for documents\n * @param files - Array of document IDs to cancel manual remediation for\n * @returns Result of the operation\n */\n async cancel(files: string[]): Promise<CancelManualResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const params: CancelManualParams = { files };\n return this.client.post<CancelManualResponse>(\"docs/manual/cancel\", params);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { PdfSettingsParams, PdfSettingsResponse } from \"../types\";\n\nexport class SettingsApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Update PDF settings for a site\n * @param siteKey - The site key to update settings for\n * @param params - Settings to update\n * @returns Result of the operation\n */\n async update(siteKey: string, params: PdfSettingsParams): Promise<PdfSettingsResponse> {\n if (!siteKey || siteKey.trim().length === 0) {\n throw new Error(\"siteKey is required and cannot be empty\");\n }\n return this.client.post<PdfSettingsResponse>(`docs/settings/${siteKey}`, params);\n }\n}\n","import { HttpClient } from \"./client\";\nimport { InfoApi, DocumentsApi, GroupsApi, AuditApi, ReportsApi, DownloadsApi, ConvertApi, ManualApi, SettingsApi } from \"./api\";\nimport { EqualWebConfig } from \"./types\";\n\nexport class EqualWeb {\n private readonly client: HttpClient;\n\n public readonly info: InfoApi;\n public readonly documents: DocumentsApi;\n public readonly groups: GroupsApi;\n public readonly audit: AuditApi;\n public readonly reports: ReportsApi;\n public readonly downloads: DownloadsApi;\n public readonly convert: ConvertApi;\n public readonly manual: ManualApi;\n public readonly settings: SettingsApi;\n\n /**\n * Create a new EqualWeb API client\n * @param config - Configuration object with API key and optional settings\n * @example\n * ```typescript\n * const client = new EqualWeb({ apiKey: 'your-api-key' });\n *\n * // Get credit balance\n * const balance = await client.info.getBalance();\n *\n * // Upload a document\n * const file = new File([...], 'document.pdf');\n * const upload = await client.documents.upload(file);\n *\n * // Start an audit\n * await client.audit.audit([upload.id]);\n *\n * // Check status\n * const status = await client.documents.getStatus(upload.id);\n *\n * // Download the audited file\n * const blob = await client.downloads.audited(upload.id);\n * ```\n */\n constructor(config: EqualWebConfig) {\n this.client = new HttpClient(config);\n\n this.info = new InfoApi(this.client);\n this.documents = new DocumentsApi(this.client);\n this.groups = new GroupsApi(this.client);\n this.audit = new AuditApi(this.client);\n this.reports = new ReportsApi(this.client);\n this.downloads = new DownloadsApi(this.client);\n this.convert = new ConvertApi(this.client);\n this.manual = new ManualApi(this.client);\n this.settings = new SettingsApi(this.client);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/types.ts","../src/client.ts","../src/api/info.ts","../src/api/documents.ts","../src/api/groups.ts","../src/api/audit.ts","../src/api/reports.ts","../src/api/downloads.ts","../src/api/convert.ts","../src/api/manual.ts","../src/api/settings.ts","../src/equalweb.ts"],"sourcesContent":["// ============================================================================\r\n// Configuration Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebConfig {\r\n apiKey: string;\r\n baseUrl?: string;\r\n timeout?: number;\r\n}\r\n\r\n// ============================================================================\r\n// Common Types\r\n// ============================================================================\r\n\r\nexport type DocumentStatus = \"done\" | \"pending\" | \"processing\" | string;\r\n\r\nexport type AuditType = \"audit\" | \"tag\" | \"ocr\" | \"check\" | \"manual\" | \"sign\";\r\n\r\nexport type ReportType = \"audited\" | \"original\" | \"both\";\r\n\r\nexport type DownloadFileType = \"pdf\" | \"xlsx\";\r\n\r\n// ============================================================================\r\n// Info Types\r\n// ============================================================================\r\n\r\nexport interface BalanceResponse {\r\n results: number;\r\n}\r\n\r\n// ============================================================================\r\n// Document Types\r\n// ============================================================================\r\n\r\nexport interface Document {\r\n numberOfPages: number;\r\n createdAt: string;\r\n group: number | null;\r\n archived: boolean;\r\n reportID: string;\r\n /** Client-system id linked at upload time, null when not set */\r\n externalID: string | null;\r\n /** Accessibility score of the uploaded document, null until checked */\r\n originalScore: number | null;\r\n /** Accessibility score of the remediated document, null until audited */\r\n auditedScore: number | null;\r\n /** Client metadata attached at upload time, null when not set */\r\n metadata: Record<string, unknown> | null;\r\n status: DocumentStatus;\r\n}\r\n\r\nexport interface GetDocumentsParams {\r\n groupID?: string;\r\n archived?: boolean;\r\n type?: string;\r\n}\r\n\r\n/** Opt-in pagination: passing page switches the response to an envelope */\r\nexport interface GetDocumentsPagedParams extends GetDocumentsParams {\r\n page: number;\r\n /** 1-200, defaults to 50 */\r\n pageSize?: number;\r\n}\r\n\r\nexport interface PagedDocumentsResponse {\r\n results: Document[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n totalPages: number;\r\n}\r\n\r\nexport interface DocumentStatusResponse {\r\n status: DocumentStatus;\r\n id?: string;\r\n externalID?: string | null;\r\n originalScore?: number | null;\r\n auditedScore?: number | null;\r\n metadata?: Record<string, unknown> | null;\r\n}\r\n\r\nexport interface UploadOptions {\r\n /**\r\n * Your system's id for this document (1-100 chars: letters, digits,\r\n * - _ . :). Afterwards every endpoint that takes a reportID also accepts\r\n * this externalID. A taken externalID rejects the upload with 409.\r\n */\r\n externalID?: string;\r\n /** Metadata to store on the document (JSON object, max 8KB) */\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface UploadResponse {\r\n id: string;\r\n createdAt: string;\r\n numberOfPages: number;\r\n externalID?: string;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface DeleteDocumentsParams {\r\n files: string[];\r\n}\r\n\r\nexport interface DeleteDocumentsResponse {\r\n results: Record<string, boolean | { error: string }>;\r\n}\r\n\r\nexport interface ArchiveDocumentsParams {\r\n files: string[];\r\n archive?: boolean;\r\n}\r\n\r\nexport interface ArchiveDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Group Types\r\n// ============================================================================\r\n\r\nexport interface DocumentGroup {\r\n id: number;\r\n name: string;\r\n createdAt: string;\r\n}\r\n\r\nexport interface GroupDocumentsParams {\r\n files: string[];\r\n newGroup?: string;\r\n selectedGroup?: string;\r\n}\r\n\r\nexport interface GroupDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\nexport interface RenameGroupParams {\r\n groupID: string;\r\n groupName: string;\r\n}\r\n\r\nexport interface RenameGroupResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Audit Types\r\n// ============================================================================\r\n\r\nexport interface AuditDocumentsOptions {\r\n engine?: string;\r\n addSignature?: boolean;\r\n fixContrast?: boolean;\r\n autoRemove?: number;\r\n deleteAfterAudit?: boolean;\r\n /**\r\n * For `check` runs only: delete the stored file once the check finishes.\r\n * The report and score are kept. Per-request only — there is no saved default.\r\n */\r\n deleteFileAfterCheck?: boolean;\r\n}\r\n\r\nexport interface AuditDocumentsParams extends AuditDocumentsOptions {\r\n files: string[];\r\n type?: AuditType;\r\n}\r\n\r\nexport interface AuditDocumentsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Report Types\r\n// ============================================================================\r\n\r\nexport interface ReportRule {\r\n Rule: string;\r\n Status: \"Passed\" | \"Failed\" | \"Needs manual check\" | string;\r\n Description: string;\r\n}\r\n\r\nexport interface ReportSummary {\r\n \"Passed\"?: number;\r\n \"Failed\"?: number;\r\n \"Needs manual check\"?: number;\r\n Description?: string;\r\n}\r\n\r\nexport interface DetailedReport {\r\n Document?: ReportRule[];\r\n \"Page Content\"?: ReportRule[];\r\n Forms?: ReportRule[];\r\n \"Alternate Text\"?: ReportRule[];\r\n Tables?: ReportRule[];\r\n Lists?: ReportRule[];\r\n Headings?: ReportRule[];\r\n}\r\n\r\nexport interface ReportCustomData {\r\n fileName?: string;\r\n fileSize?: number;\r\n numberOfPages?: number;\r\n tags?: Record<string, number>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface AuditedReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface OriginalReport {\r\n Summary?: ReportSummary;\r\n \"Detailed Report\"?: DetailedReport;\r\n customData?: ReportCustomData;\r\n}\r\n\r\nexport interface GetReportParams {\r\n type?: ReportType;\r\n}\r\n\r\nexport interface ReportResponse {\r\n original?: OriginalReport;\r\n audited?: AuditedReport;\r\n}\r\n\r\n// ============================================================================\r\n// Download Types\r\n// ============================================================================\r\n\r\nexport interface DownloadFileParams {\r\n original?: boolean;\r\n type?: DownloadFileType;\r\n}\r\n\r\nexport interface DownloadZippedParams {\r\n files: string[];\r\n}\r\n\r\n// ============================================================================\r\n// Convert HTML Types\r\n// ============================================================================\r\n\r\nexport interface ConvertHtmlParams {\r\n files: string[];\r\n autoConvert?: boolean;\r\n auditHtml?: boolean;\r\n}\r\n\r\nexport interface ConvertHtmlResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Manual Remediation Types\r\n// ============================================================================\r\n\r\nexport interface CancelManualParams {\r\n files: string[];\r\n}\r\n\r\nexport interface CancelManualResponse {\r\n data: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// PDF Settings Types\r\n// ============================================================================\r\n\r\nexport interface PdfSettingsParams {\r\n autoConvert: boolean;\r\n}\r\n\r\nexport interface PdfSettingsResponse {\r\n results: \"ok\";\r\n}\r\n\r\n// ============================================================================\r\n// Error Types\r\n// ============================================================================\r\n\r\nexport interface EqualWebErrorResponse {\r\n error?: string;\r\n message?: string;\r\n statusCode?: number;\r\n}\r\n\r\nexport class EqualWebError extends Error {\r\n public readonly statusCode: number;\r\n public readonly response?: EqualWebErrorResponse;\r\n\r\n constructor(message: string, statusCode: number, response?: EqualWebErrorResponse) {\r\n super(message);\r\n this.name = \"EqualWebError\";\r\n this.statusCode = statusCode;\r\n this.response = response;\r\n }\r\n}\r\n\r\nexport class RateLimitError extends EqualWebError {\r\n public readonly retryAfter?: number;\r\n\r\n constructor(message: string, retryAfter?: number) {\r\n super(message, 429);\r\n this.name = \"RateLimitError\";\r\n this.retryAfter = retryAfter;\r\n }\r\n}\r\n\r\nexport class AuthenticationError extends EqualWebError {\r\n constructor(message: string = \"Invalid or missing API key\") {\r\n super(message, 401);\r\n this.name = \"AuthenticationError\";\r\n }\r\n}\r\n","import {\r\n EqualWebConfig,\r\n EqualWebError,\r\n EqualWebErrorResponse,\r\n RateLimitError,\r\n AuthenticationError,\r\n} from \"./types\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://login.equalweb.com/api/v2\";\r\nconst DEFAULT_TIMEOUT = 30000;\r\n\r\nexport interface RequestOptions {\r\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\r\n path: string;\r\n query?: Record<string, string | boolean | undefined>;\r\n body?: unknown;\r\n isFormData?: boolean;\r\n responseType?: \"json\" | \"blob\";\r\n}\r\n\r\nexport class HttpClient {\r\n private readonly apiKey: string;\r\n private readonly baseUrl: string;\r\n private readonly timeout: number;\r\n\r\n constructor(config: EqualWebConfig) {\r\n if (!config.apiKey || config.apiKey.trim().length === 0) {\r\n throw new Error(\"API key is required and cannot be empty\");\r\n }\r\n\r\n if (config.timeout !== undefined && config.timeout < 0) {\r\n throw new Error(\"timeout must be a positive number\");\r\n }\r\n\r\n if (config.baseUrl) {\r\n try {\r\n new URL(config.baseUrl);\r\n } catch {\r\n throw new Error(\"baseUrl must be a valid URL\");\r\n }\r\n }\r\n\r\n this.apiKey = config.apiKey;\r\n this.baseUrl = config.baseUrl?.replace(/\\/$/, \"\") ?? DEFAULT_BASE_URL;\r\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\r\n }\r\n\r\n async request<T>(options: RequestOptions): Promise<T> {\r\n const { method, path, query, body, isFormData, responseType = \"json\" } = options;\r\n\r\n const url = new URL(path, this.baseUrl + \"/\");\r\n\r\n if (query) {\r\n Object.entries(query).forEach(([key, value]) => {\r\n if (value !== undefined) {\r\n url.searchParams.set(key, String(value));\r\n }\r\n });\r\n }\r\n\r\n const headers: Record<string, string> = {\r\n \"x-a11y-api-key\": this.apiKey,\r\n };\r\n\r\n if (!isFormData && body) {\r\n headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(url.toString(), {\r\n method,\r\n headers,\r\n body: isFormData ? (body as FormData) : body ? JSON.stringify(body) : undefined,\r\n signal: controller.signal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n await this.handleErrorResponse(response);\r\n }\r\n\r\n if (responseType === \"blob\") {\r\n return response.blob() as Promise<T>;\r\n }\r\n\r\n const text = await response.text();\r\n if (!text) {\r\n return {} as T;\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T;\r\n } catch (parseError) {\r\n const preview = text.length > 100 ? text.substring(0, 100) + \"...\" : text;\r\n throw new EqualWebError(`Failed to parse JSON response: ${preview}`, 0);\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof EqualWebError) {\r\n throw error;\r\n }\r\n\r\n if (error instanceof Error) {\r\n if (error.name === \"AbortError\") {\r\n throw new EqualWebError(\"Request timeout\", 408);\r\n }\r\n throw new EqualWebError(error.message, 0);\r\n }\r\n\r\n throw new EqualWebError(\"Unknown error occurred\", 0);\r\n }\r\n }\r\n\r\n private async handleErrorResponse(response: Response): Promise<never> {\r\n let errorData: EqualWebErrorResponse | undefined;\r\n\r\n try {\r\n const text = await response.text();\r\n if (text) {\r\n errorData = JSON.parse(text);\r\n }\r\n } catch {\r\n // Response body is not JSON\r\n }\r\n\r\n const message = errorData?.error ?? errorData?.message ?? response.statusText;\r\n\r\n switch (response.status) {\r\n case 401:\r\n throw new AuthenticationError(message);\r\n case 429: {\r\n const retryAfter = response.headers.get(\"Retry-After\");\r\n throw new RateLimitError(\r\n message || \"Rate limit exceeded\",\r\n retryAfter ? parseInt(retryAfter, 10) : undefined\r\n );\r\n }\r\n default:\r\n throw new EqualWebError(message, response.status, errorData);\r\n }\r\n }\r\n\r\n get<T>(path: string, query?: Record<string, string | boolean | undefined>): Promise<T> {\r\n return this.request<T>({ method: \"GET\", path, query });\r\n }\r\n\r\n post<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"POST\", path, body });\r\n }\r\n\r\n put<T>(path: string, body?: unknown, isFormData = false): Promise<T> {\r\n return this.request<T>({ method: \"PUT\", path, body, isFormData });\r\n }\r\n\r\n delete<T>(path: string, body?: unknown): Promise<T> {\r\n return this.request<T>({ method: \"DELETE\", path, body });\r\n }\r\n\r\n getBlob(path: string, query?: Record<string, string | boolean | undefined>): Promise<Blob> {\r\n return this.request<Blob>({ method: \"GET\", path, query, responseType: \"blob\" });\r\n }\r\n\r\n postBlob(path: string, body?: unknown): Promise<Blob> {\r\n return this.request<Blob>({ method: \"POST\", path, body, responseType: \"blob\" });\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { BalanceResponse } from \"../types\";\r\n\r\nexport class InfoApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the current credit balance for your account\r\n * @returns The current credit balance\r\n */\r\n async getBalance(): Promise<number> {\r\n const response = await this.client.get<BalanceResponse>(\"docs/info/balance\");\r\n return response.results;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n Document,\r\n GetDocumentsParams,\r\n GetDocumentsPagedParams,\r\n PagedDocumentsResponse,\r\n DocumentStatusResponse,\r\n UploadOptions,\r\n UploadResponse,\r\n DeleteDocumentsParams,\r\n DeleteDocumentsResponse,\r\n ArchiveDocumentsParams,\r\n ArchiveDocumentsResponse,\r\n} from \"../types\";\r\n\r\nexport class DocumentsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all documents\r\n * @param params - Optional filters for groupID, archived status, and\r\n * document type. Passing `page` (and optionally `pageSize`) opts in to\r\n * pagination and switches the return value to a paged envelope; without it\r\n * the full array is returned as before.\r\n * @returns Array of documents, or a paged envelope when `page` is passed\r\n */\r\n async getAll(params?: GetDocumentsParams): Promise<Document[]>;\r\n async getAll(params: GetDocumentsPagedParams): Promise<PagedDocumentsResponse>;\r\n async getAll(\r\n params?: GetDocumentsParams | GetDocumentsPagedParams\r\n ): Promise<Document[] | PagedDocumentsResponse> {\r\n const paged = params as GetDocumentsPagedParams | undefined;\r\n return this.client.get<Document[] | PagedDocumentsResponse>(\"docs\", {\r\n groupID: params?.groupID,\r\n archived: params?.archived,\r\n type: params?.type,\r\n page: paged?.page !== undefined ? String(paged.page) : undefined,\r\n pageSize: paged?.pageSize !== undefined ? String(paged.pageSize) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Get the status of a specific document\r\n * @param reportID - The report ID of the document, or the externalID your\r\n * system linked at upload time\r\n * @returns The document status\r\n */\r\n async getStatus(reportID: string): Promise<string> {\r\n if (!reportID || reportID.trim().length === 0) {\r\n throw new Error(\"reportID cannot be empty\");\r\n }\r\n const response = await this.client.get<DocumentStatusResponse>(`docs/status/${reportID}`);\r\n return response.status;\r\n }\r\n\r\n /**\r\n * Upload a document for processing\r\n * Supported formats: PDF, XLSX, DOCX, PPTX\r\n * @param file - The file to upload (File, Blob, ArrayBuffer, or Uint8Array)\r\n * @param filename - Optional filename (required if file is an ArrayBuffer or Uint8Array)\r\n * @param options - Optional externalID (links the doc to your own system;\r\n * rejected with 409 if already in use) and metadata (JSON object stored on\r\n * the document, max 8KB)\r\n * @returns Upload response with document ID and metadata\r\n */\r\n async upload(\r\n file: File | Blob | ArrayBuffer | Uint8Array,\r\n filename?: string,\r\n options?: UploadOptions\r\n ): Promise<UploadResponse> {\r\n if (!file) {\r\n throw new Error(\"file cannot be null or undefined\");\r\n }\r\n\r\n // Validate file size\r\n let sizeInBytes = 0;\r\n if (file instanceof ArrayBuffer) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Uint8Array) {\r\n sizeInBytes = file.byteLength;\r\n } else if (file instanceof Blob) {\r\n sizeInBytes = file.size;\r\n }\r\n\r\n if (sizeInBytes === 0) {\r\n throw new Error(\"file is empty\");\r\n }\r\n\r\n const formData = new FormData();\r\n\r\n if (file instanceof ArrayBuffer || file instanceof Uint8Array) {\r\n const blob = new Blob([file as BlobPart]);\r\n formData.append(\"file\", blob, filename ?? \"document.pdf\");\r\n } else if (file instanceof Blob) {\r\n // Use optional chaining for safer property access\r\n const defaultFilename = (file as any)?.name ?? \"document.pdf\";\r\n formData.append(\"file\", file, filename ?? defaultFilename);\r\n } else {\r\n formData.append(\"file\", file);\r\n }\r\n\r\n if (options?.metadata) {\r\n formData.append(\"metadata\", JSON.stringify(options.metadata));\r\n }\r\n\r\n // Per-document field — travels in the form data next to the file.\r\n if (options?.externalID) {\r\n formData.append(\"externalID\", options.externalID);\r\n }\r\n\r\n return this.client.put<UploadResponse>(\"docs/upload\", formData, true);\r\n }\r\n\r\n /**\r\n * Delete multiple documents\r\n * @param files - Array of document IDs to delete\r\n * @returns Results indicating success/failure for each document\r\n */\r\n async delete(files: string[]): Promise<DeleteDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: DeleteDocumentsParams = { files };\r\n return this.client.delete<DeleteDocumentsResponse>(\"docs\", params);\r\n }\r\n\r\n /**\r\n * Archive documents\r\n * @param files - Array of document IDs to archive\r\n * @returns Result of the operation\r\n */\r\n async archive(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: true };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n\r\n /**\r\n * Restore archived documents\r\n * @param files - Array of document IDs to restore\r\n * @returns Result of the operation\r\n */\r\n async restore(files: string[]): Promise<ArchiveDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: ArchiveDocumentsParams = { files, archive: false };\r\n return this.client.post<ArchiveDocumentsResponse>(\"docs/archive\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport {\r\n DocumentGroup,\r\n GroupDocumentsParams,\r\n GroupDocumentsResponse,\r\n RenameGroupParams,\r\n RenameGroupResponse,\r\n} from \"../types\";\r\n\r\nexport class GroupsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get all document groups\r\n * @returns Array of document groups\r\n */\r\n async getAll(): Promise<DocumentGroup[]> {\r\n return this.client.get<DocumentGroup[]>(\"docs/groups\");\r\n }\r\n\r\n /**\r\n * Add documents to a new group\r\n * @param files - Array of document IDs to group\r\n * @param groupName - Name of the new group to create\r\n * @returns Result of the operation\r\n */\r\n async createGroup(files: string[], groupName: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, newGroup: groupName };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Add documents to an existing group\r\n * @param files - Array of document IDs to group\r\n * @param groupID - ID of the existing group\r\n * @returns Result of the operation\r\n */\r\n async addToGroup(files: string[], groupID: string): Promise<GroupDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n const params: GroupDocumentsParams = { files, selectedGroup: groupID };\r\n return this.client.post<GroupDocumentsResponse>(\"docs/group\", params);\r\n }\r\n\r\n /**\r\n * Rename a document group\r\n * @param groupID - ID of the group to rename\r\n * @param groupName - New name for the group\r\n * @returns Result of the operation\r\n */\r\n async rename(groupID: string, groupName: string): Promise<RenameGroupResponse> {\r\n if (!groupID || groupID.trim().length === 0) {\r\n throw new Error(\"groupID cannot be empty\");\r\n }\r\n if (!groupName || groupName.trim().length === 0) {\r\n throw new Error(\"groupName cannot be empty\");\r\n }\r\n const params: RenameGroupParams = { groupID, groupName };\r\n return this.client.post<RenameGroupResponse>(\"group-name\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { AuditDocumentsOptions, AuditDocumentsParams, AuditDocumentsResponse, AuditType } from \"../types\";\n\nexport class AuditApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Start a full audit on documents\n * This performs accessibility remediation and generates detailed reports\n * @param files - Array of document IDs to audit\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async audit(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"audit\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Perform a quick check on documents without full remediation\n * @param files - Array of document IDs to check\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit, deleteFileAfterCheck)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async check(files: string[], options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type: \"check\", ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n /**\n * Start an audit with custom type\n * @param files - Array of document IDs to process\n * @param type - Type of audit: \"audit\", \"tag\", \"ocr\", \"check\", \"manual\", or \"sign\"\n * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)\n * @returns Result of the operation (202 Accepted - processing is async)\n */\n async process(files: string[], type: AuditType, options?: AuditDocumentsOptions): Promise<AuditDocumentsResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n if (!type || type.trim().length === 0) {\n throw new Error(\"type cannot be empty\");\n }\n this.validateOptions(options);\n const params: AuditDocumentsParams = { files, type, ...options };\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\n }\n\n private validateOptions(options?: AuditDocumentsOptions): void {\n if (options?.autoRemove !== undefined) {\n if (!Number.isInteger(options.autoRemove) || options.autoRemove < 1 || options.autoRemove > 365) {\n throw new Error(\"autoRemove must be an integer between 1 and 365\");\n }\n }\n }\n}\n","import { HttpClient } from \"../client\";\r\nimport { ReportResponse, ReportType, GetReportParams } from \"../types\";\r\n\r\nconst REPORTS_BASE_URL = \"https://login.equalweb.com/reports/pdf\";\r\n\r\nexport class ReportsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Get the JSON report for a document\r\n * @param reportID - The report ID\r\n * @param type - Which report to retrieve: \"audited\", \"original\", or \"both\"\r\n * @returns The report data\r\n */\r\n async get(reportID: string, type: ReportType = \"audited\"): Promise<ReportResponse> {\r\n const params: GetReportParams = { type };\r\n return this.client.get<ReportResponse>(`docs/report/${reportID}`, {\r\n type: params.type,\r\n });\r\n }\r\n\r\n /**\r\n * Get the audited report for a document\r\n * @param reportID - The report ID\r\n * @returns The audited report data\r\n */\r\n async getAudited(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"audited\");\r\n }\r\n\r\n /**\r\n * Get the original report for a document\r\n * @param reportID - The report ID\r\n * @returns The original report data\r\n */\r\n async getOriginal(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"original\");\r\n }\r\n\r\n /**\r\n * Get both audited and original reports for a document\r\n * @param reportID - The report ID\r\n * @returns Both report data\r\n */\r\n async getBoth(reportID: string): Promise<ReportResponse> {\r\n return this.get(reportID, \"both\");\r\n }\r\n\r\n /**\r\n * Get the URL to view the report in a browser\r\n * Note: This URL does not require authentication\r\n * @param reportID - The report ID\r\n * @returns The browser-viewable URL\r\n */\r\n getBrowserUrl(reportID: string): string {\r\n return `${REPORTS_BASE_URL}/${reportID}`;\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\r\nimport { DownloadFileParams, DownloadZippedParams, DownloadFileType } from \"../types\";\r\n\r\nexport class DownloadsApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Download a single document file\r\n * @param reportID - The report ID of the document\r\n * @param options - Download options (original file, file type)\r\n * @returns The file as a Blob\r\n */\r\n async file(reportID: string, options?: DownloadFileParams): Promise<Blob> {\r\n return this.client.getBlob(`docs/download/file/${reportID}`, {\r\n original: options?.original,\r\n type: options?.type,\r\n });\r\n }\r\n\r\n /**\r\n * Download the audited/processed version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The processed file as a Blob\r\n */\r\n async audited(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: false, type });\r\n }\r\n\r\n /**\r\n * Download the original version of a document\r\n * @param reportID - The report ID of the document\r\n * @param type - File type to download (pdf or xlsx)\r\n * @returns The original file as a Blob\r\n */\r\n async original(reportID: string, type: DownloadFileType = \"pdf\"): Promise<Blob> {\r\n return this.file(reportID, { original: true, type });\r\n }\r\n\r\n /**\r\n * Download multiple documents as a ZIP file\r\n * @param files - Array of document IDs to include in the ZIP\r\n * @returns The ZIP file as a Blob\r\n */\r\n async zipped(files: string[]): Promise<Blob> {\r\n const params: DownloadZippedParams = { files };\r\n return this.client.postBlob(\"docs/download/zipped\", params);\r\n }\r\n}\r\n","import { HttpClient } from \"../client\";\nimport { ConvertHtmlParams, ConvertHtmlResponse } from \"../types\";\n\nexport class ConvertApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Convert PDF documents to HTML\n * @param files - Array of document IDs to convert\n * @param options - Optional conversion settings\n * @param sitekey - Optional site key for site-specific conversion\n * @returns Result of the operation\n */\n async html(\n files: string[],\n options?: Omit<ConvertHtmlParams, \"files\">,\n sitekey?: string\n ): Promise<ConvertHtmlResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const path = sitekey ? `docs/convert/html/${sitekey}` : \"docs/convert/html\";\n const body: ConvertHtmlParams = { files, ...options };\n return this.client.post<ConvertHtmlResponse>(path, body);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { CancelManualParams, CancelManualResponse } from \"../types\";\n\nexport class ManualApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Cancel manual remediation for documents\n * @param files - Array of document IDs to cancel manual remediation for\n * @returns Result of the operation\n */\n async cancel(files: string[]): Promise<CancelManualResponse> {\n if (!files || files.length === 0) {\n throw new Error(\"files array cannot be empty\");\n }\n const params: CancelManualParams = { files };\n return this.client.post<CancelManualResponse>(\"docs/manual/cancel\", params);\n }\n}\n","import { HttpClient } from \"../client\";\nimport { PdfSettingsParams, PdfSettingsResponse } from \"../types\";\n\nexport class SettingsApi {\n constructor(private readonly client: HttpClient) {}\n\n /**\n * Update PDF settings for a site\n * @param siteKey - The site key to update settings for\n * @param params - Settings to update\n * @returns Result of the operation\n */\n async update(siteKey: string, params: PdfSettingsParams): Promise<PdfSettingsResponse> {\n if (!siteKey || siteKey.trim().length === 0) {\n throw new Error(\"siteKey is required and cannot be empty\");\n }\n return this.client.post<PdfSettingsResponse>(`docs/settings/${siteKey}`, params);\n }\n}\n","import { HttpClient } from \"./client\";\nimport { InfoApi, DocumentsApi, GroupsApi, AuditApi, ReportsApi, DownloadsApi, ConvertApi, ManualApi, SettingsApi } from \"./api\";\nimport { EqualWebConfig } from \"./types\";\n\nexport class EqualWeb {\n private readonly client: HttpClient;\n\n public readonly info: InfoApi;\n public readonly documents: DocumentsApi;\n public readonly groups: GroupsApi;\n public readonly audit: AuditApi;\n public readonly reports: ReportsApi;\n public readonly downloads: DownloadsApi;\n public readonly convert: ConvertApi;\n public readonly manual: ManualApi;\n public readonly settings: SettingsApi;\n\n /**\n * Create a new EqualWeb API client\n * @param config - Configuration object with API key and optional settings\n * @example\n * ```typescript\n * const client = new EqualWeb({ apiKey: 'your-api-key' });\n *\n * // Get credit balance\n * const balance = await client.info.getBalance();\n *\n * // Upload a document\n * const file = new File([...], 'document.pdf');\n * const upload = await client.documents.upload(file);\n *\n * // Start an audit\n * await client.audit.audit([upload.id]);\n *\n * // Check status\n * const status = await client.documents.getStatus(upload.id);\n *\n * // Download the audited file\n * const blob = await client.downloads.audited(upload.id);\n * ```\n */\n constructor(config: EqualWebConfig) {\n this.client = new HttpClient(config);\n\n this.info = new InfoApi(this.client);\n this.documents = new DocumentsApi(this.client);\n this.groups = new GroupsApi(this.client);\n this.audit = new AuditApi(this.client);\n this.reports = new ReportsApi(this.client);\n this.downloads = new DownloadsApi(this.client);\n this.convert = new ConvertApi(this.client);\n this.manual = new ManualApi(this.client);\n this.settings = new SettingsApi(this.client);\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "equalweb-sdk",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Official SDK for the EqualWeb V2 API - Accessibility as a Service platform.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",