n8n-nodes-deep-ocr 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -8
- package/dist/credentials/DeepOcrApi.credentials.js +1 -1
- package/dist/credentials/DeepOcrApi.credentials.js.map +1 -1
- package/dist/nodes/DeepOcr/DeepOcr.node.d.ts.map +1 -1
- package/dist/nodes/DeepOcr/DeepOcr.node.js +37 -9
- package/dist/nodes/DeepOcr/DeepOcr.node.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ N8N Community Node for the [Deep-OCR Service](https://deep-ocr.com) - Extract st
|
|
|
8
8
|
## 🚀 Features
|
|
9
9
|
|
|
10
10
|
- **Structured Data Extraction**: Receive a structured JSON object with the fields relevant to the document type
|
|
11
|
-
- **
|
|
11
|
+
- **Document Types & Auto Detection**: Invoice, Receipt, Contract, Delivery Note, Bank Statement, Payslip, Purchase Order, ID Document, Handwriting, Generic, and automatic type detection (`auto`)
|
|
12
12
|
- **Multiple Format Support**: PDF, PNG, JPG, JPEG, WebP (up to 10MB)
|
|
13
13
|
- **Secure Authentication**: API key stored securely using n8n credentials
|
|
14
14
|
|
|
@@ -49,13 +49,17 @@ npm install n8n-nodes-deep-ocr
|
|
|
49
49
|
|
|
50
50
|
| Type | Description |
|
|
51
51
|
|---|---|
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
52
|
+
| `auto` | Let the API detect the document type automatically |
|
|
53
|
+
| `invoice` | Vendor, customer, line items, tax breakdown, totals, IBAN, payment terms |
|
|
54
|
+
| `receipt` | Merchant, items, per-item tax rate, tax breakdown, totals, payment method |
|
|
55
|
+
| `contract` | Parties (role/name/address), dates, obligations, governing law, signatures |
|
|
56
|
+
| `delivery_note` | Sender, recipient, items (ordered vs. delivered), tracking, partial delivery info |
|
|
57
|
+
| `bank_statement` | Account holder, IBAN/BIC, opening/closing balance, full transaction list |
|
|
58
|
+
| `payslip` | Employer, employee (incl. IBAN), earnings, deductions, gross/net salary |
|
|
59
|
+
| `purchase_order` | Buyer, supplier, delivery address, line items, totals |
|
|
60
|
+
| `id_document` | Type, document number, personal data, MRZ lines |
|
|
61
|
+
| `handwriting` | Full transcription with unclear-word markers, confidence rating, language |
|
|
62
|
+
| `generic` | Flexible extraction for any document — adapts structure to the content |
|
|
59
63
|
|
|
60
64
|
## 📋 Example Workflow
|
|
61
65
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepOcrApi.credentials.js","sourceRoot":"","sources":["../../src/credentials/DeepOcrApi.credentials.ts"],"names":[],"mappings":";;;AAOA;;;;;GAKG;AACH,MAAa,UAAU;IACrB,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,cAAc,CAAC;IAC7B,IAAI,GAAG,mCAA4C,CAAC;IACpD,gBAAgB,GAAG,sBAAsB,CAAC;IAE1C,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,sDAAsD;SACpE;KACF,CAAC;IAEF,YAAY,GAAyB;QACnC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"DeepOcrApi.credentials.js","sourceRoot":"","sources":["../../src/credentials/DeepOcrApi.credentials.ts"],"names":[],"mappings":";;;AAOA;;;;;GAKG;AACH,MAAa,UAAU;IACrB,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,cAAc,CAAC;IAC7B,IAAI,GAAG,mCAA4C,CAAC;IACpD,gBAAgB,GAAG,sBAAsB,CAAC;IAE1C,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,sDAAsD;SACpE;KACF,CAAC;IAEF,YAAY,GAAyB;QACnC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,aAAa,EAAE,sCAAsC;aACtD;SACF;KACF,CAAC;IAEF,IAAI,GAA2B;QAC7B,OAAO,EAAE;YACP,OAAO,EAAE,0BAA0B;YACnC,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,KAAK;SACd;KACF,CAAC;CACH;AApCD,gCAoCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepOcr.node.d.ts","sourceRoot":"","sources":["../../../src/nodes/DeepOcr/DeepOcr.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAGrB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"DeepOcr.node.d.ts","sourceRoot":"","sources":["../../../src/nodes/DeepOcr/DeepOcr.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAGrB,MAAM,cAAc,CAAC;AAoCtB;;;;;GAKG;AACH,qBAAa,OAAQ,YAAW,SAAS;IACvC,WAAW,EAAE,oBAAoB,CA8F/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CA0HxE"}
|
|
@@ -4,12 +4,16 @@ exports.DeepOcr = void 0;
|
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const errors_1 = require("../../utils/errors");
|
|
6
6
|
const ALLOWED_DOCUMENT_TYPES = [
|
|
7
|
+
'auto',
|
|
8
|
+
'bank_statement',
|
|
7
9
|
'contract',
|
|
8
10
|
'delivery_note',
|
|
9
11
|
'generic',
|
|
10
12
|
'handwriting',
|
|
11
13
|
'id_document',
|
|
12
14
|
'invoice',
|
|
15
|
+
'payslip',
|
|
16
|
+
'purchase_order',
|
|
13
17
|
'receipt',
|
|
14
18
|
];
|
|
15
19
|
/**
|
|
@@ -53,6 +57,16 @@ class DeepOcr {
|
|
|
53
57
|
name: 'documentType',
|
|
54
58
|
type: 'options',
|
|
55
59
|
options: [
|
|
60
|
+
{
|
|
61
|
+
name: 'Auto-Detect',
|
|
62
|
+
value: 'auto',
|
|
63
|
+
description: 'Let the API classify the document automatically (one extra API call)',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'Bank Statement',
|
|
67
|
+
value: 'bank_statement',
|
|
68
|
+
description: 'Extract account info, balances, and transaction list from bank statements',
|
|
69
|
+
},
|
|
56
70
|
{
|
|
57
71
|
name: 'Contract',
|
|
58
72
|
value: 'contract',
|
|
@@ -61,32 +75,42 @@ class DeepOcr {
|
|
|
61
75
|
{
|
|
62
76
|
name: 'Delivery Note',
|
|
63
77
|
value: 'delivery_note',
|
|
64
|
-
description: 'Extract items, quantities, and
|
|
78
|
+
description: 'Extract sender, recipient, items, quantities, and tracking info',
|
|
65
79
|
},
|
|
66
80
|
{
|
|
67
81
|
name: 'Generic',
|
|
68
82
|
value: 'generic',
|
|
69
|
-
description: '
|
|
83
|
+
description: 'Flexible extraction for any document — use when no specific type fits',
|
|
70
84
|
},
|
|
71
85
|
{
|
|
72
86
|
name: 'Handwriting',
|
|
73
87
|
value: 'handwriting',
|
|
74
|
-
description: 'Transcribe handwritten text',
|
|
88
|
+
description: 'Transcribe handwritten text with confidence rating',
|
|
75
89
|
},
|
|
76
90
|
{
|
|
77
91
|
name: 'ID Document',
|
|
78
92
|
value: 'id_document',
|
|
79
|
-
description: 'Extract personal data from passports and
|
|
93
|
+
description: 'Extract personal data from passports, ID cards, and driving licences',
|
|
80
94
|
},
|
|
81
95
|
{
|
|
82
96
|
name: 'Invoice',
|
|
83
97
|
value: 'invoice',
|
|
84
|
-
description: 'Extract vendor, line items, totals, and payment terms
|
|
98
|
+
description: 'Extract vendor, line items, tax breakdown, totals, and payment terms',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'Payslip',
|
|
102
|
+
value: 'payslip',
|
|
103
|
+
description: 'Extract employer, employee, earnings, deductions, and net salary',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'Purchase Order',
|
|
107
|
+
value: 'purchase_order',
|
|
108
|
+
description: 'Extract buyer, supplier, ordered items, and totals from purchase orders',
|
|
85
109
|
},
|
|
86
110
|
{
|
|
87
111
|
name: 'Receipt',
|
|
88
112
|
value: 'receipt',
|
|
89
|
-
description: 'Extract merchant, items,
|
|
113
|
+
description: 'Extract merchant, items, tax breakdown, totals, and payment method',
|
|
90
114
|
},
|
|
91
115
|
],
|
|
92
116
|
default: 'invoice',
|
|
@@ -129,14 +153,16 @@ class DeepOcr {
|
|
|
129
153
|
.replace(/[/\\]/g, '_')
|
|
130
154
|
.replace(/[<>:"|?*\x00-\x1f]/g, '')
|
|
131
155
|
.substring(0, 255) || 'document';
|
|
132
|
-
// Make API request — document_type as query param, file as multipart
|
|
156
|
+
// Make API request — document_type as query param, file as multipart.
|
|
157
|
+
// When documentType is 'auto', omit the parameter entirely so the API
|
|
158
|
+
// classifies the document automatically.
|
|
133
159
|
// requestWithAuthentication (request-library) is used because httpRequestWithAuthentication
|
|
134
160
|
// (IHttpRequestOptions) does not support the formData property for multipart uploads.
|
|
135
161
|
// eslint-disable-next-line @n8n/community-nodes/no-deprecated-workflow-functions -- httpRequestWithAuthentication (IHttpRequestOptions) does not support formData for multipart uploads
|
|
136
162
|
const rawResponse = await this.helpers.requestWithAuthentication.call(this, 'deepOcrApi', {
|
|
137
163
|
method: 'POST',
|
|
138
164
|
url: 'https://api.deep-ocr.com/v1/ocr',
|
|
139
|
-
qs: { document_type: documentType },
|
|
165
|
+
qs: documentType !== 'auto' ? { document_type: documentType } : {},
|
|
140
166
|
formData: {
|
|
141
167
|
file: {
|
|
142
168
|
value: buffer,
|
|
@@ -167,7 +193,9 @@ class DeepOcr {
|
|
|
167
193
|
}
|
|
168
194
|
catch (error) {
|
|
169
195
|
if (this.continueOnFail()) {
|
|
170
|
-
const
|
|
196
|
+
const raw = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
197
|
+
// Truncate to prevent verbose API errors from leaking document content into workflow logs
|
|
198
|
+
const errorMessage = raw.length > 200 ? raw.substring(0, 200) + '…' : raw;
|
|
171
199
|
returnData.push({
|
|
172
200
|
json: { error: errorMessage },
|
|
173
201
|
pairedItem: { item: itemIndex },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepOcr.node.js","sourceRoot":"","sources":["../../../src/nodes/DeepOcr/DeepOcr.node.ts"],"names":[],"mappings":";;;AAQA,+CAAgE;AAChE,+CAK4B;AAE5B,MAAM,sBAAsB,GAAG;IAC7B,UAAU;IACV,eAAe;IACf,SAAS;IACT,aAAa;IACb,aAAa;IACb,SAAS;IACT,SAAS;CACD,CAAC;AAeX;;;;;GAKG;AACH,MAAa,OAAO;IAClB,WAAW,GAAyB;QAClC,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,iCAAiC;QAC3C,WAAW,EAAE,2DAA2D;QACxE,QAAQ,EAAE;YACR,IAAI,EAAE,UAAU;SACjB;QACD,MAAM,EAAE,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE;YACX;gBACE,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,IAAI;aACf;SACF;QACD,UAAU,EAAE;YACV;gBACE,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,gEAAgE;aAC9E;YACD;gBACE,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE,UAAU;wBACjB,WAAW,EAAE,wDAAwD;qBACtE;oBACD;wBACE,IAAI,EAAE,eAAe;wBACrB,KAAK,EAAE,eAAe;wBACtB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"DeepOcr.node.js","sourceRoot":"","sources":["../../../src/nodes/DeepOcr/DeepOcr.node.ts"],"names":[],"mappings":"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"}
|