extractia-sdk 1.0.6 → 1.2.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.
@@ -73,6 +73,7 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
73
73
  // src/auth.js
74
74
  var auth_exports = {};
75
75
  __export(auth_exports, {
76
+ configure: () => configure,
76
77
  getMyProfile: () => getMyProfile,
77
78
  setToken: () => setToken,
78
79
  updateWebhook: () => updateWebhook
@@ -2590,22 +2591,93 @@ var {
2590
2591
  mergeConfig: mergeConfig2
2591
2592
  } = axios_default;
2592
2593
 
2594
+ // src/errors.js
2595
+ var ExtractiaError = class extends Error {
2596
+ /** @param {string} message @param {number} status */
2597
+ constructor(message, status) {
2598
+ super(message);
2599
+ this.name = "ExtractiaError";
2600
+ this.status = status;
2601
+ }
2602
+ };
2603
+ var AuthError = class extends ExtractiaError {
2604
+ constructor(message = "Unauthorized. Check your API token.") {
2605
+ super(message, 401);
2606
+ this.name = "AuthError";
2607
+ }
2608
+ };
2609
+ var ForbiddenError = class extends ExtractiaError {
2610
+ constructor(message = "Forbidden. Insufficient permissions.") {
2611
+ super(message, 403);
2612
+ this.name = "ForbiddenError";
2613
+ }
2614
+ };
2615
+ var TierError = class extends ExtractiaError {
2616
+ constructor(message = "Tier limit reached. Upgrade your plan.", status = 402) {
2617
+ super(message, status);
2618
+ this.name = "TierError";
2619
+ }
2620
+ };
2621
+ var RateLimitError = class extends ExtractiaError {
2622
+ constructor(message = "Too many requests. Please slow down.") {
2623
+ super(message, 429);
2624
+ this.name = "RateLimitError";
2625
+ }
2626
+ };
2627
+ var NotFoundError = class extends ExtractiaError {
2628
+ constructor(message = "Resource not found.") {
2629
+ super(message, 404);
2630
+ this.name = "NotFoundError";
2631
+ }
2632
+ };
2633
+ function mapAxiosError(err) {
2634
+ var _a, _b;
2635
+ const status = (_a = err.response) == null ? void 0 : _a.status;
2636
+ const serverMessage = (_b = err.response) == null ? void 0 : _b.data;
2637
+ const detail = typeof serverMessage === "string" ? serverMessage : void 0;
2638
+ switch (status) {
2639
+ case 401:
2640
+ return new AuthError(detail);
2641
+ case 402:
2642
+ return new TierError(detail);
2643
+ case 403:
2644
+ return new ForbiddenError(detail);
2645
+ case 404:
2646
+ return new NotFoundError(detail);
2647
+ case 429:
2648
+ return new RateLimitError(detail);
2649
+ default:
2650
+ return new ExtractiaError(detail != null ? detail : err.message, status != null ? status : 0);
2651
+ }
2652
+ }
2653
+
2593
2654
  // src/apiClient.js
2594
2655
  var token = null;
2656
+ var DEFAULT_BASE_URL = "https://api.extractia.info/api/public";
2595
2657
  var api = axios_default.create({
2596
- baseURL: "https://www.extractia-api.cat/api/public",
2597
- timeout: 1e4
2658
+ baseURL: DEFAULT_BASE_URL,
2659
+ timeout: 6e4
2660
+ // 60s — AI processing can take 10–30s
2598
2661
  });
2599
2662
  api.interceptors.request.use((config) => {
2600
2663
  if (!token) {
2601
- throw new Error("API token is required");
2664
+ throw new Error(
2665
+ "API token is required. Call setToken(yourApiToken) before making requests."
2666
+ );
2602
2667
  }
2603
2668
  config.headers.Authorization = `Bearer ${token}`;
2604
2669
  return config;
2605
2670
  });
2671
+ api.interceptors.response.use(
2672
+ (response) => response,
2673
+ (err) => Promise.reject(mapAxiosError(err))
2674
+ );
2606
2675
  function setToken(newToken) {
2607
2676
  token = newToken;
2608
2677
  }
2678
+ function configure({ baseURL } = {}) {
2679
+ if (baseURL) api.defaults.baseURL = baseURL;
2680
+ }
2609
2681
  var apiClient_default = api;
2610
2682
 
2611
2683
  // src/auth.js
@@ -2629,6 +2701,7 @@ __export(templates_exports, {
2629
2701
  getTemplateById: () => getTemplateById,
2630
2702
  getTemplateByName: () => getTemplateByName,
2631
2703
  getTemplates: () => getTemplates,
2704
+ suggestFields: () => suggestFields,
2632
2705
  updateTemplate: () => updateTemplate
2633
2706
  });
2634
2707
  async function getTemplates() {
@@ -2661,60 +2734,243 @@ async function deleteAllTemplateDocuments(id) {
2661
2734
  const res = await apiClient_default.delete(`/templates/${id}/documents`);
2662
2735
  return res.data;
2663
2736
  }
2737
+ async function suggestFields(templateName, extractionContext = "") {
2738
+ const res = await apiClient_default.post("/templates/suggest-fields", {
2739
+ templateName,
2740
+ extractionContext
2741
+ });
2742
+ return res.data;
2743
+ }
2664
2744
 
2665
2745
  // src/documents.js
2666
2746
  var documents_exports = {};
2667
2747
  __export(documents_exports, {
2748
+ bulkPreconform: () => bulkPreconform,
2668
2749
  deleteDocument: () => deleteDocument,
2750
+ exportDocumentsCsv: () => exportDocumentsCsv,
2751
+ exportDocumentsJson: () => exportDocumentsJson,
2752
+ generateDocumentSummary: () => generateDocumentSummary,
2753
+ getDocumentById: () => getDocumentById,
2669
2754
  getDocumentsByTemplateId: () => getDocumentsByTemplateId,
2755
+ getRecentDocuments: () => getRecentDocuments,
2670
2756
  processImage: () => processImage,
2671
- processImagesMultipage: () => processImagesMultipage
2757
+ processImagesMultipage: () => processImagesMultipage,
2758
+ updateDocumentData: () => updateDocumentData,
2759
+ updateDocumentNotes: () => updateDocumentNotes,
2760
+ updateDocumentStatus: () => updateDocumentStatus
2672
2761
  });
2673
2762
  async function getDocumentsByTemplateId(templateId, options = {}) {
2674
- var _a, _b, _c;
2675
- const params = {
2676
- preconformed: (_a = options.preconformed) != null ? _a : null,
2677
- index: (_b = options.index) != null ? _b : 0,
2678
- sort: (_c = options.sort) != null ? _c : -1,
2679
- includeImage: options.includeImage ? 1 : 0
2680
- };
2763
+ const params = {};
2764
+ if (options.preconformed != null) params.preconformed = options.preconformed;
2765
+ if (options.index != null) params.index = options.index;
2766
+ if (options.sort != null) params.sort = options.sort;
2767
+ params.includeImage = options.includeImage ? 1 : 0;
2681
2768
  const res = await apiClient_default.get(`/templates/${templateId}/documents`, { params });
2682
2769
  return res.data;
2683
2770
  }
2771
+ async function getDocumentById(templateId, docId, options = {}) {
2772
+ const params = { includeImage: options.includeImage ? 1 : 0 };
2773
+ const res = await apiClient_default.get(`/templates/${templateId}/documents/${docId}`, {
2774
+ params
2775
+ });
2776
+ return res.data;
2777
+ }
2778
+ async function getRecentDocuments(size = 10) {
2779
+ const res = await apiClient_default.get("/documents/recent", {
2780
+ params: { size: Math.min(size, 50) }
2781
+ });
2782
+ return res.data;
2783
+ }
2684
2784
  async function deleteDocument(documentId) {
2685
2785
  const res = await apiClient_default.delete(`/documents/${documentId}`);
2686
2786
  return res.data;
2687
2787
  }
2688
2788
  async function processImage(templateId, base64Image) {
2689
- const res = await apiClient_default.post(`/public/templates/${templateId}/process`, {
2789
+ const res = await apiClient_default.post(`/templates/${templateId}/process`, {
2690
2790
  image: base64Image
2691
2791
  });
2692
2792
  return res.data;
2693
2793
  }
2694
2794
  async function processImagesMultipage(templateId, base64ImagesArray) {
2695
- const res = await apiClient_default.post(`/public/templates/${templateId}/process-multipage`, {
2795
+ const res = await apiClient_default.post(`/templates/${templateId}/process-multipage`, {
2696
2796
  images: base64ImagesArray
2697
2797
  });
2698
2798
  return res.data;
2699
2799
  }
2800
+ async function generateDocumentSummary(docId) {
2801
+ const res = await apiClient_default.post(`/documents/${docId}/summary`);
2802
+ return res.data;
2803
+ }
2804
+ async function updateDocumentStatus(docId, status) {
2805
+ const res = await apiClient_default.put(`/documents/${docId}/status`, { status });
2806
+ return res.data;
2807
+ }
2808
+ async function updateDocumentNotes(docId, notes) {
2809
+ const res = await apiClient_default.put(`/documents/${docId}/notes`, { notes });
2810
+ return res.data;
2811
+ }
2812
+ async function updateDocumentData(docId, data, options = {}) {
2813
+ var _a;
2814
+ const res = await apiClient_default.put(`/documents/${docId}/data`, {
2815
+ data,
2816
+ preconformed: (_a = options.preconformed) != null ? _a : false
2817
+ });
2818
+ return res.data;
2819
+ }
2820
+ async function bulkPreconform(ids) {
2821
+ const res = await apiClient_default.post("/documents/bulk-preconform", { ids });
2822
+ return res.data;
2823
+ }
2824
+ async function exportDocumentsCsv(templateId, options = {}) {
2825
+ const params = {};
2826
+ if (options.fields && options.fields.length > 0)
2827
+ params.fields = options.fields.join(",");
2828
+ const res = await apiClient_default.get(`/templates/${templateId}/documents/export/csv`, {
2829
+ params,
2830
+ responseType: "text"
2831
+ });
2832
+ return res.data;
2833
+ }
2834
+ async function exportDocumentsJson(templateId) {
2835
+ const res = await apiClient_default.get(`/templates/${templateId}/documents/export/json`);
2836
+ return res.data;
2837
+ }
2838
+
2839
+ // src/analytics.js
2840
+ var analytics_exports = {};
2841
+ __export(analytics_exports, {
2842
+ getCreditsBalance: () => getCreditsBalance,
2843
+ getCreditsHistory: () => getCreditsHistory,
2844
+ getDocumentHistory: () => getDocumentHistory
2845
+ });
2846
+ async function getCreditsBalance() {
2847
+ const res = await apiClient_default.get("/me/credits");
2848
+ return res.data;
2849
+ }
2850
+ async function getCreditsHistory({ page = 0, size = 20 } = {}) {
2851
+ const res = await apiClient_default.get("/me/credits/history", {
2852
+ params: { page, size: Math.min(size, 100) }
2853
+ });
2854
+ return res.data;
2855
+ }
2856
+ async function getDocumentHistory({ page = 0, size = 20 } = {}) {
2857
+ const res = await apiClient_default.get("/me/documents/history", {
2858
+ params: { page, size: Math.min(size, 100) }
2859
+ });
2860
+ return res.data;
2861
+ }
2862
+
2863
+ // src/ocrTools.js
2864
+ var ocrTools_exports = {};
2865
+ __export(ocrTools_exports, {
2866
+ createOcrTool: () => createOcrTool,
2867
+ deleteOcrTool: () => deleteOcrTool,
2868
+ getOcrTools: () => getOcrTools,
2869
+ runOcrTool: () => runOcrTool,
2870
+ updateOcrTool: () => updateOcrTool
2871
+ });
2872
+ async function getOcrTools() {
2873
+ const res = await apiClient_default.get("/ocr-tools");
2874
+ return res.data;
2875
+ }
2876
+ async function createOcrTool(config) {
2877
+ const res = await apiClient_default.post("/ocr-tools", config);
2878
+ return res.data;
2879
+ }
2880
+ async function updateOcrTool(id, config) {
2881
+ const res = await apiClient_default.put(`/ocr-tools/${id}`, config);
2882
+ return res.data;
2883
+ }
2884
+ async function deleteOcrTool(id) {
2885
+ const res = await apiClient_default.delete(`/ocr-tools/${id}`);
2886
+ return res.data;
2887
+ }
2888
+ async function runOcrTool(id, base64Image, options = {}) {
2889
+ const body = { image: base64Image };
2890
+ if (options.params && Object.keys(options.params).length > 0) {
2891
+ body.params = options.params;
2892
+ }
2893
+ const res = await apiClient_default.post(`/ocr-tools/${id}/run`, body);
2894
+ return res.data;
2895
+ }
2896
+
2897
+ // src/subusers.js
2898
+ var subusers_exports = {};
2899
+ __export(subusers_exports, {
2900
+ createSubUser: () => createSubUser,
2901
+ deleteSubUser: () => deleteSubUser,
2902
+ getSubUsers: () => getSubUsers,
2903
+ toggleSuspendSubUser: () => toggleSuspendSubUser,
2904
+ updateSubUser: () => updateSubUser
2905
+ });
2906
+ async function getSubUsers() {
2907
+ const res = await apiClient_default.get("/me/subusers");
2908
+ return res.data;
2909
+ }
2910
+ async function createSubUser({ username, password, permissions }) {
2911
+ const res = await apiClient_default.post("/me/subusers", { username, password, permissions });
2912
+ return res.data;
2913
+ }
2914
+ async function deleteSubUser(username) {
2915
+ const res = await apiClient_default.delete(`/me/subusers/${encodeURIComponent(username)}`);
2916
+ return res.data;
2917
+ }
2918
+ async function updateSubUser(username, updates = {}) {
2919
+ const res = await apiClient_default.put(`/me/subusers/${encodeURIComponent(username)}`, updates);
2920
+ return res.data;
2921
+ }
2922
+ async function toggleSuspendSubUser(username) {
2923
+ const res = await apiClient_default.put(`/me/subusers/${encodeURIComponent(username)}/suspend`);
2924
+ return res.data;
2925
+ }
2700
2926
 
2701
2927
  // src/index.js
2702
- var extractia = __spreadValues(__spreadValues(__spreadValues({}, auth_exports), templates_exports), documents_exports);
2928
+ var extractia = __spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, auth_exports), templates_exports), documents_exports), analytics_exports), ocrTools_exports), subusers_exports);
2703
2929
  var index_default = extractia;
2704
2930
  export {
2931
+ AuthError,
2932
+ ExtractiaError,
2933
+ ForbiddenError,
2934
+ NotFoundError,
2935
+ RateLimitError,
2936
+ TierError,
2937
+ bulkPreconform,
2938
+ configure,
2939
+ createOcrTool,
2940
+ createSubUser,
2705
2941
  createTemplate,
2706
2942
  index_default as default,
2707
2943
  deleteAllTemplateDocuments,
2708
2944
  deleteDocument,
2945
+ deleteOcrTool,
2946
+ deleteSubUser,
2709
2947
  deleteTemplate,
2948
+ exportDocumentsCsv,
2949
+ exportDocumentsJson,
2950
+ generateDocumentSummary,
2951
+ getCreditsBalance,
2952
+ getCreditsHistory,
2953
+ getDocumentById,
2954
+ getDocumentHistory,
2710
2955
  getDocumentsByTemplateId,
2711
2956
  getMyProfile,
2957
+ getOcrTools,
2958
+ getRecentDocuments,
2959
+ getSubUsers,
2712
2960
  getTemplateById,
2713
2961
  getTemplateByName,
2714
2962
  getTemplates,
2715
2963
  processImage,
2716
2964
  processImagesMultipage,
2965
+ runOcrTool,
2717
2966
  setToken,
2967
+ suggestFields,
2968
+ toggleSuspendSubUser,
2969
+ updateDocumentData,
2970
+ updateDocumentNotes,
2971
+ updateDocumentStatus,
2972
+ updateOcrTool,
2973
+ updateSubUser,
2718
2974
  updateTemplate,
2719
2975
  updateWebhook
2720
2976
  };