equalweb-sdk 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -169,21 +169,20 @@ var DocumentsApi = class {
169
169
  constructor(client) {
170
170
  this.client = client;
171
171
  }
172
- /**
173
- * Get all documents
174
- * @param params - Optional filters for groupID, archived status, and document type
175
- * @returns Array of documents
176
- */
177
172
  async getAll(params) {
173
+ const paged = params;
178
174
  return this.client.get("docs", {
179
175
  groupID: params?.groupID,
180
176
  archived: params?.archived,
181
- type: params?.type
177
+ type: params?.type,
178
+ page: paged?.page !== void 0 ? String(paged.page) : void 0,
179
+ pageSize: paged?.pageSize !== void 0 ? String(paged.pageSize) : void 0
182
180
  });
183
181
  }
184
182
  /**
185
183
  * Get the status of a specific document
186
- * @param reportID - The report ID of the document
184
+ * @param reportID - The report ID of the document, or the externalID your
185
+ * system linked at upload time
187
186
  * @returns The document status
188
187
  */
189
188
  async getStatus(reportID) {
@@ -198,9 +197,12 @@ var DocumentsApi = class {
198
197
  * Supported formats: PDF, XLSX, DOCX, PPTX
199
198
  * @param file - The file to upload (File, Blob, ArrayBuffer, or Uint8Array)
200
199
  * @param filename - Optional filename (required if file is an ArrayBuffer or Uint8Array)
200
+ * @param options - Optional externalID (links the doc to your own system;
201
+ * rejected with 409 if already in use) and metadata (JSON object stored on
202
+ * the document, max 8KB)
201
203
  * @returns Upload response with document ID and metadata
202
204
  */
203
- async upload(file, filename) {
205
+ async upload(file, filename, options) {
204
206
  if (!file) {
205
207
  throw new Error("file cannot be null or undefined");
206
208
  }
@@ -225,6 +227,12 @@ var DocumentsApi = class {
225
227
  } else {
226
228
  formData.append("file", file);
227
229
  }
230
+ if (options?.metadata) {
231
+ formData.append("metadata", JSON.stringify(options.metadata));
232
+ }
233
+ if (options?.externalID) {
234
+ formData.append("externalID", options.externalID);
235
+ }
228
236
  return this.client.put("docs/upload", formData, true);
229
237
  }
230
238
  /**
@@ -336,43 +344,56 @@ var AuditApi = class {
336
344
  * Start a full audit on documents
337
345
  * This performs accessibility remediation and generates detailed reports
338
346
  * @param files - Array of document IDs to audit
347
+ * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)
339
348
  * @returns Result of the operation (202 Accepted - processing is async)
340
349
  */
341
- async audit(files) {
350
+ async audit(files, options) {
342
351
  if (!files || files.length === 0) {
343
352
  throw new Error("files array cannot be empty");
344
353
  }
345
- const params = { files, type: "audit" };
354
+ this.validateOptions(options);
355
+ const params = { files, type: "audit", ...options };
346
356
  return this.client.post("docs/audit", params);
347
357
  }
348
358
  /**
349
359
  * Perform a quick check on documents without full remediation
350
360
  * @param files - Array of document IDs to check
361
+ * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit, deleteFileAfterCheck)
351
362
  * @returns Result of the operation (202 Accepted - processing is async)
352
363
  */
353
- async check(files) {
364
+ async check(files, options) {
354
365
  if (!files || files.length === 0) {
355
366
  throw new Error("files array cannot be empty");
356
367
  }
357
- const params = { files, type: "check" };
368
+ this.validateOptions(options);
369
+ const params = { files, type: "check", ...options };
358
370
  return this.client.post("docs/audit", params);
359
371
  }
360
372
  /**
361
373
  * Start an audit with custom type
362
374
  * @param files - Array of document IDs to process
363
- * @param type - Type of audit: "audit" for full audit, "check" for quick check
375
+ * @param type - Type of audit: "audit", "tag", "ocr", "check", "manual", or "sign"
376
+ * @param options - Optional audit settings (engine, addSignature, fixContrast, autoRemove, deleteAfterAudit)
364
377
  * @returns Result of the operation (202 Accepted - processing is async)
365
378
  */
366
- async process(files, type) {
379
+ async process(files, type, options) {
367
380
  if (!files || files.length === 0) {
368
381
  throw new Error("files array cannot be empty");
369
382
  }
370
383
  if (!type || type.trim().length === 0) {
371
384
  throw new Error("type cannot be empty");
372
385
  }
373
- const params = { files, type };
386
+ this.validateOptions(options);
387
+ const params = { files, type, ...options };
374
388
  return this.client.post("docs/audit", params);
375
389
  }
390
+ validateOptions(options) {
391
+ if (options?.autoRemove !== void 0) {
392
+ if (!Number.isInteger(options.autoRemove) || options.autoRemove < 1 || options.autoRemove > 365) {
393
+ throw new Error("autoRemove must be an integer between 1 and 365");
394
+ }
395
+ }
396
+ }
376
397
  };
377
398
 
378
399
  // src/api/reports.ts
@@ -474,6 +495,66 @@ var DownloadsApi = class {
474
495
  }
475
496
  };
476
497
 
498
+ // src/api/convert.ts
499
+ var ConvertApi = class {
500
+ constructor(client) {
501
+ this.client = client;
502
+ }
503
+ /**
504
+ * Convert PDF documents to HTML
505
+ * @param files - Array of document IDs to convert
506
+ * @param options - Optional conversion settings
507
+ * @param sitekey - Optional site key for site-specific conversion
508
+ * @returns Result of the operation
509
+ */
510
+ async html(files, options, sitekey) {
511
+ if (!files || files.length === 0) {
512
+ throw new Error("files array cannot be empty");
513
+ }
514
+ const path = sitekey ? `docs/convert/html/${sitekey}` : "docs/convert/html";
515
+ const body = { files, ...options };
516
+ return this.client.post(path, body);
517
+ }
518
+ };
519
+
520
+ // src/api/manual.ts
521
+ var ManualApi = class {
522
+ constructor(client) {
523
+ this.client = client;
524
+ }
525
+ /**
526
+ * Cancel manual remediation for documents
527
+ * @param files - Array of document IDs to cancel manual remediation for
528
+ * @returns Result of the operation
529
+ */
530
+ async cancel(files) {
531
+ if (!files || files.length === 0) {
532
+ throw new Error("files array cannot be empty");
533
+ }
534
+ const params = { files };
535
+ return this.client.post("docs/manual/cancel", params);
536
+ }
537
+ };
538
+
539
+ // src/api/settings.ts
540
+ var SettingsApi = class {
541
+ constructor(client) {
542
+ this.client = client;
543
+ }
544
+ /**
545
+ * Update PDF settings for a site
546
+ * @param siteKey - The site key to update settings for
547
+ * @param params - Settings to update
548
+ * @returns Result of the operation
549
+ */
550
+ async update(siteKey, params) {
551
+ if (!siteKey || siteKey.trim().length === 0) {
552
+ throw new Error("siteKey is required and cannot be empty");
553
+ }
554
+ return this.client.post(`docs/settings/${siteKey}`, params);
555
+ }
556
+ };
557
+
477
558
  // src/equalweb.ts
478
559
  var EqualWeb = class {
479
560
  client;
@@ -483,6 +564,9 @@ var EqualWeb = class {
483
564
  audit;
484
565
  reports;
485
566
  downloads;
567
+ convert;
568
+ manual;
569
+ settings;
486
570
  /**
487
571
  * Create a new EqualWeb API client
488
572
  * @param config - Configuration object with API key and optional settings
@@ -515,18 +599,24 @@ var EqualWeb = class {
515
599
  this.audit = new AuditApi(this.client);
516
600
  this.reports = new ReportsApi(this.client);
517
601
  this.downloads = new DownloadsApi(this.client);
602
+ this.convert = new ConvertApi(this.client);
603
+ this.manual = new ManualApi(this.client);
604
+ this.settings = new SettingsApi(this.client);
518
605
  }
519
606
  };
520
607
  export {
521
608
  AuditApi,
522
609
  AuthenticationError,
610
+ ConvertApi,
523
611
  DocumentsApi,
524
612
  DownloadsApi,
525
613
  EqualWeb,
526
614
  EqualWebError,
527
615
  GroupsApi,
528
616
  InfoApi,
617
+ ManualApi,
529
618
  RateLimitError,
530
- ReportsApi
619
+ ReportsApi,
620
+ SettingsApi
531
621
  };
532
622
  //# sourceMappingURL=index.mjs.map
@@ -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/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\" | \"check\";\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 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\nexport interface DocumentStatusResponse {\r\n status: DocumentStatus;\r\n}\r\n\r\nexport interface UploadResponse {\r\n id: string;\r\n createdAt: string;\r\n numberOfPages: number;\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 AuditDocumentsParams {\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// 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 DocumentStatusResponse,\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 document type\r\n * @returns Array of documents\r\n */\r\n async getAll(params?: GetDocumentsParams): Promise<Document[]> {\r\n return this.client.get<Document[]>(\"docs\", {\r\n groupID: params?.groupID,\r\n archived: params?.archived,\r\n type: params?.type,\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\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 * @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 ): 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 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\";\r\nimport { AuditDocumentsParams, AuditDocumentsResponse, AuditType } from \"../types\";\r\n\r\nexport class AuditApi {\r\n constructor(private readonly client: HttpClient) {}\r\n\r\n /**\r\n * Start a full audit on documents\r\n * This performs accessibility remediation and generates detailed reports\r\n * @param files - Array of document IDs to audit\r\n * @returns Result of the operation (202 Accepted - processing is async)\r\n */\r\n async audit(files: string[]): Promise<AuditDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: AuditDocumentsParams = { files, type: \"audit\" };\r\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\r\n }\r\n\r\n /**\r\n * Perform a quick check on documents without full remediation\r\n * @param files - Array of document IDs to check\r\n * @returns Result of the operation (202 Accepted - processing is async)\r\n */\r\n async check(files: string[]): Promise<AuditDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n const params: AuditDocumentsParams = { files, type: \"check\" };\r\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\r\n }\r\n\r\n /**\r\n * Start an audit with custom type\r\n * @param files - Array of document IDs to process\r\n * @param type - Type of audit: \"audit\" for full audit, \"check\" for quick check\r\n * @returns Result of the operation (202 Accepted - processing is async)\r\n */\r\n async process(files: string[], type: AuditType): Promise<AuditDocumentsResponse> {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"files array cannot be empty\");\r\n }\r\n if (!type || type.trim().length === 0) {\r\n throw new Error(\"type cannot be empty\");\r\n }\r\n const params: AuditDocumentsParams = { files, type };\r\n return this.client.post<AuditDocumentsResponse>(\"docs/audit\", params);\r\n }\r\n}\r\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\";\r\nimport { InfoApi, DocumentsApi, GroupsApi, AuditApi, ReportsApi, DownloadsApi } from \"./api\";\r\nimport { EqualWebConfig } from \"./types\";\r\n\r\nexport class EqualWeb {\r\n private readonly client: HttpClient;\r\n\r\n public readonly info: InfoApi;\r\n public readonly documents: DocumentsApi;\r\n public readonly groups: GroupsApi;\r\n public readonly audit: AuditApi;\r\n public readonly reports: ReportsApi;\r\n public readonly downloads: DownloadsApi;\r\n\r\n /**\r\n * Create a new EqualWeb API client\r\n * @param config - Configuration object with API key and optional settings\r\n * @example\r\n * ```typescript\r\n * const client = new EqualWeb({ apiKey: 'your-api-key' });\r\n *\r\n * // Get credit balance\r\n * const balance = await client.info.getBalance();\r\n *\r\n * // Upload a document\r\n * const file = new File([...], 'document.pdf');\r\n * const upload = await client.documents.upload(file);\r\n *\r\n * // Start an audit\r\n * await client.audit.audit([upload.id]);\r\n *\r\n * // Check status\r\n * const status = await client.documents.getStatus(upload.id);\r\n *\r\n * // Download the audited file\r\n * const blob = await client.downloads.audited(upload.id);\r\n * ```\r\n */\r\n constructor(config: EqualWebConfig) {\r\n this.client = new HttpClient(config);\r\n\r\n this.info = new InfoApi(this.client);\r\n this.documents = new DocumentsApi(this.client);\r\n this.groups = new GroupsApi(this.client);\r\n this.audit = new AuditApi(this.client);\r\n this.reports = new ReportsApi(this.client);\r\n this.downloads = new DownloadsApi(this.client);\r\n }\r\n}\r\n"],"mappings":";AAqMO,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;;;ACxNA,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;;;ACFO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlD,MAAM,OAAO,QAAkD;AAC7D,WAAO,KAAK,OAAO,IAAgB,QAAQ;AAAA,MACzC,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,MAAM,QAAQ;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,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,EASA,MAAM,OACJ,MACA,UACyB;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,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;;;ACnHO,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,EAQlD,MAAM,MAAM,OAAkD;AAC5D,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAA+B,EAAE,OAAO,MAAM,QAAQ;AAC5D,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAM,OAAkD;AAC5D,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAA+B,EAAE,OAAO,MAAM,QAAQ;AAC5D,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,QAAQ,OAAiB,MAAkD;AAC/E,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,UAAM,SAA+B,EAAE,OAAO,KAAK;AACnD,WAAO,KAAK,OAAO,KAA6B,cAAc,MAAM;AAAA,EACtE;AACF;;;AC9CA,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;;;AC5CO,IAAM,WAAN,MAAe;AAAA,EACH;AAAA,EAED;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;AAAA,EAC/C;AACF;","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>(\"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.0.1",
3
+ "version": "1.1.0",
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",
@@ -19,7 +19,10 @@
19
19
  "build": "tsup",
20
20
  "dev": "tsup --watch",
21
21
  "typecheck": "tsc --noEmit",
22
- "prepublishOnly": "npm run build"
22
+ "prepublishOnly": "npm run build",
23
+ "p_patch": "npm version patch && npm publish",
24
+ "p_minor": "npm version minor && npm publish",
25
+ "p_major": "npm version major && npm publish"
23
26
  },
24
27
  "keywords": [
25
28
  "equalweb",
@@ -33,7 +36,11 @@
33
36
  ],
34
37
  "author": "EqualWeb Team <support@equalweb.com>",
35
38
  "license": "MIT",
36
- "homepage": "https://login.equalweb.com/api/v2/documentation/index.html",
39
+ "homepage": "https://equalweb.com",
40
+ "bugs": {
41
+ "url": "https://login.equalweb.com"
42
+ },
43
+ "documentation": "https://login.equalweb.com/api/v2/documentation",
37
44
  "devDependencies": {
38
45
  "@types/node": "^25.0.3",
39
46
  "tsup": "^8.0.0",
@@ -42,4 +49,4 @@
42
49
  "engines": {
43
50
  "node": ">=18.0.0"
44
51
  }
45
- }
52
+ }