@arathron/n8n-nodes-zoho-books 1.0.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.
Files changed (40) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +199 -0
  3. package/dist/credentials/ZohoBooksOAuth2.credentials.d.ts +8 -0
  4. package/dist/credentials/ZohoBooksOAuth2.credentials.js +75 -0
  5. package/dist/credentials/ZohoBooksOAuth2.credentials.js.map +1 -0
  6. package/dist/nodes/ZohoBooks.node.d.ts +5 -0
  7. package/dist/nodes/ZohoBooks.node.js +260 -0
  8. package/dist/nodes/ZohoBooks.node.js.map +1 -0
  9. package/dist/nodes/resources/BaseResource.d.ts +16 -0
  10. package/dist/nodes/resources/BaseResource.js +44 -0
  11. package/dist/nodes/resources/BaseResource.js.map +1 -0
  12. package/dist/nodes/resources/CreditNote.resource.d.ts +14 -0
  13. package/dist/nodes/resources/CreditNote.resource.js +291 -0
  14. package/dist/nodes/resources/CreditNote.resource.js.map +1 -0
  15. package/dist/nodes/resources/Invoice.resource.d.ts +14 -0
  16. package/dist/nodes/resources/Invoice.resource.js +251 -0
  17. package/dist/nodes/resources/Invoice.resource.js.map +1 -0
  18. package/dist/nodes/resources/Item.resource.d.ts +14 -0
  19. package/dist/nodes/resources/Item.resource.js +312 -0
  20. package/dist/nodes/resources/Item.resource.js.map +1 -0
  21. package/dist/nodes/resources/Payment.resource.d.ts +14 -0
  22. package/dist/nodes/resources/Payment.resource.js +341 -0
  23. package/dist/nodes/resources/Payment.resource.js.map +1 -0
  24. package/dist/nodes/resources/SalesOrder.resource.d.ts +14 -0
  25. package/dist/nodes/resources/SalesOrder.resource.js +211 -0
  26. package/dist/nodes/resources/SalesOrder.resource.js.map +1 -0
  27. package/dist/nodes/resources/Vendor.resource.d.ts +14 -0
  28. package/dist/nodes/resources/Vendor.resource.js +415 -0
  29. package/dist/nodes/resources/Vendor.resource.js.map +1 -0
  30. package/dist/utils/GenericFunctions.d.ts +6 -0
  31. package/dist/utils/GenericFunctions.js +154 -0
  32. package/dist/utils/GenericFunctions.js.map +1 -0
  33. package/dist/utils/RateLimiter.d.ts +20 -0
  34. package/dist/utils/RateLimiter.js +82 -0
  35. package/dist/utils/RateLimiter.js.map +1 -0
  36. package/dist/utils/Schemas.d.ts +7 -0
  37. package/dist/utils/Schemas.js +207 -0
  38. package/dist/utils/Schemas.js.map +1 -0
  39. package/index.js +4 -0
  40. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vendor.resource.js","sourceRoot":"","sources":["../../../nodes/resources/Vendor.resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { IExecuteFunctions, ILoadOptionsFunctions, IHookFunctions, IWebhookFunctions } from 'n8n-workflow';
2
+ import { IDataObject, IHttpRequestMethods } from 'n8n-workflow';
3
+ export declare function makeApiRequest(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions | IWebhookFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, qs?: IDataObject, options?: IDataObject): Promise<any>;
4
+ export declare function makeApiRequestWithPagination(this: IExecuteFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, qs?: IDataObject, options?: IDataObject): Promise<any[]>;
5
+ export declare function validateOrganizationId(organizationId: string): boolean;
6
+ export declare function getResourceEndpoint(resource: string): string;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeApiRequest = makeApiRequest;
4
+ exports.makeApiRequestWithPagination = makeApiRequestWithPagination;
5
+ exports.validateOrganizationId = validateOrganizationId;
6
+ exports.getResourceEndpoint = getResourceEndpoint;
7
+ const n8n_workflow_1 = require("n8n-workflow");
8
+ let requestCount = 0;
9
+ let windowStart = Date.now();
10
+ let dailyRequestCount = 0;
11
+ let dailyWindowStart = Date.now();
12
+ const DEFAULT_RATE_LIMIT = {
13
+ maxRequests: 100,
14
+ windowMs: 60000, // 1 minute
15
+ dailyCap: 10000, // 10k per day
16
+ };
17
+ async function sleep(ms) {
18
+ return new Promise((resolve) => setTimeout(resolve, ms));
19
+ }
20
+ async function handleRateLimit(config = DEFAULT_RATE_LIMIT) {
21
+ const now = Date.now();
22
+ // Reset daily counter if new day
23
+ if (now - dailyWindowStart > 24 * 60 * 60 * 1000) {
24
+ dailyWindowStart = now;
25
+ dailyRequestCount = 0;
26
+ }
27
+ // Check daily cap
28
+ if (config.dailyCap && dailyRequestCount >= config.dailyCap) {
29
+ const waitTime = 24 * 60 * 60 * 1000 - (now - dailyWindowStart);
30
+ throw new n8n_workflow_1.NodeOperationError({}, `Daily rate limit of ${config.dailyCap} requests exceeded. Wait ${Math.ceil(waitTime / 1000 / 60)} minutes.`);
31
+ }
32
+ // Reset minute counter if new window
33
+ if (now - windowStart > config.windowMs) {
34
+ windowStart = now;
35
+ requestCount = 0;
36
+ }
37
+ // Check minute rate limit
38
+ if (requestCount >= config.maxRequests) {
39
+ const waitTime = config.windowMs - (now - windowStart);
40
+ await sleep(waitTime);
41
+ windowStart = Date.now();
42
+ requestCount = 0;
43
+ }
44
+ requestCount++;
45
+ dailyRequestCount++;
46
+ }
47
+ async function makeApiRequest(method, endpoint, body = {}, qs = {}, options = {}) {
48
+ const credentials = await this.getCredentials('zohoBooksOAuth2');
49
+ const dataCentre = credentials.dataCentre;
50
+ const organizationId = credentials.organizationId;
51
+ // Apply rate limiting
52
+ const rateLimitConfig = options.rateLimitConfig;
53
+ await handleRateLimit(rateLimitConfig);
54
+ const baseUrl = dataCentre === 'CN'
55
+ ? 'https://books.zoho.com.cn/api/v3'
56
+ : `https://books.zoho.${dataCentre === 'US' ? 'com' : dataCentre.toLowerCase()}/api/v3`;
57
+ const requestOptions = {
58
+ method,
59
+ url: `${baseUrl}${endpoint}`,
60
+ qs: {
61
+ organization_id: organizationId,
62
+ ...qs,
63
+ },
64
+ json: true,
65
+ };
66
+ if (method !== 'GET' && method !== 'DELETE') {
67
+ requestOptions.body = body;
68
+ }
69
+ // Add custom headers if needed
70
+ if (organizationId) {
71
+ requestOptions.headers = {
72
+ 'X-com-zoho-books-organizationid': organizationId,
73
+ };
74
+ }
75
+ let attempt = 0;
76
+ const maxRetries = 5;
77
+ let lastError;
78
+ while (attempt < maxRetries) {
79
+ try {
80
+ const response = await this.helpers.requestOAuth2.call(this, 'zohoBooksOAuth2', requestOptions);
81
+ // Check if Zoho returned an error in the response
82
+ if (response.code && response.code !== 0) {
83
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), {
84
+ message: response.message || 'Zoho Books API Error',
85
+ description: response.message,
86
+ httpCode: response.code,
87
+ });
88
+ }
89
+ return response;
90
+ }
91
+ catch (error) {
92
+ lastError = error;
93
+ // Handle rate limiting (429)
94
+ if (error.httpCode === 429 || error.statusCode === 429) {
95
+ attempt++;
96
+ if (attempt < maxRetries) {
97
+ const backoffTime = Math.min(250 * Math.pow(2, attempt - 1), 16000); // Exponential backoff
98
+ await sleep(backoffTime);
99
+ continue;
100
+ }
101
+ }
102
+ // Handle server errors (5xx)
103
+ if (error.httpCode >= 500 && error.httpCode < 600 && attempt < 3) {
104
+ attempt++;
105
+ const backoffTime = 1000 * attempt;
106
+ await sleep(backoffTime);
107
+ continue;
108
+ }
109
+ // For other errors, throw immediately
110
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
111
+ }
112
+ }
113
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), lastError);
114
+ }
115
+ async function makeApiRequestWithPagination(method, endpoint, body = {}, qs = {}, options = {}) {
116
+ const returnData = [];
117
+ let page = 1;
118
+ let hasMorePages = true;
119
+ while (hasMorePages) {
120
+ const response = await makeApiRequest.call(this, method, endpoint, body, {
121
+ ...qs,
122
+ page,
123
+ per_page: 200, // Max allowed by Zoho
124
+ }, options);
125
+ // Extract data from response (the key varies by endpoint)
126
+ const responseKeys = Object.keys(response).filter((key) => key !== 'code' &&
127
+ key !== 'message' &&
128
+ key !== 'page_context' &&
129
+ Array.isArray(response[key]));
130
+ if (responseKeys.length > 0) {
131
+ const data = response[responseKeys[0]];
132
+ returnData.push(...data);
133
+ }
134
+ hasMorePages = response.page_context?.has_more_page || false;
135
+ page++;
136
+ }
137
+ return returnData;
138
+ }
139
+ function validateOrganizationId(organizationId) {
140
+ // Zoho organization IDs are typically numeric strings
141
+ return /^\d+$/.test(organizationId);
142
+ }
143
+ function getResourceEndpoint(resource) {
144
+ const endpoints = {
145
+ salesOrder: '/salesorders',
146
+ invoice: '/invoices',
147
+ item: '/items',
148
+ vendor: '/contacts',
149
+ creditNote: '/creditnotes',
150
+ payment: '/customerpayments',
151
+ };
152
+ return endpoints[resource] || '';
153
+ }
154
+ //# sourceMappingURL=GenericFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../utils/GenericFunctions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare class RateLimiter {
2
+ private queue;
3
+ private processing;
4
+ private requestsInWindow;
5
+ private windowStart;
6
+ private readonly maxRequests;
7
+ private readonly windowMs;
8
+ private dailyRequestCount;
9
+ private dailyWindowStart;
10
+ private readonly dailyCap;
11
+ constructor(maxRequests?: number, windowMs?: number, dailyCap?: number);
12
+ execute<T>(fn: () => Promise<T>): Promise<T>;
13
+ private process;
14
+ reset(): void;
15
+ getStats(): {
16
+ requestsInWindow: number;
17
+ dailyRequestCount: number;
18
+ queueLength: number;
19
+ };
20
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateLimiter = void 0;
4
+ class RateLimiter {
5
+ constructor(maxRequests = 100, windowMs = 60000, dailyCap = 10000) {
6
+ this.queue = [];
7
+ this.processing = false;
8
+ this.requestsInWindow = 0;
9
+ this.windowStart = Date.now();
10
+ this.dailyRequestCount = 0;
11
+ this.dailyWindowStart = Date.now();
12
+ this.maxRequests = maxRequests;
13
+ this.windowMs = windowMs;
14
+ this.dailyCap = dailyCap;
15
+ }
16
+ async execute(fn) {
17
+ return new Promise((resolve, reject) => {
18
+ this.queue.push(async () => {
19
+ try {
20
+ const result = await fn();
21
+ resolve(result);
22
+ }
23
+ catch (error) {
24
+ reject(error);
25
+ }
26
+ });
27
+ if (!this.processing) {
28
+ this.process();
29
+ }
30
+ });
31
+ }
32
+ async process() {
33
+ this.processing = true;
34
+ while (this.queue.length > 0) {
35
+ const now = Date.now();
36
+ // Reset daily counter if new day
37
+ if (now - this.dailyWindowStart > 24 * 60 * 60 * 1000) {
38
+ this.dailyWindowStart = now;
39
+ this.dailyRequestCount = 0;
40
+ }
41
+ // Check daily cap
42
+ if (this.dailyRequestCount >= this.dailyCap) {
43
+ const waitTime = 24 * 60 * 60 * 1000 - (now - this.dailyWindowStart);
44
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
45
+ continue;
46
+ }
47
+ // Reset window counter if needed
48
+ if (now - this.windowStart > this.windowMs) {
49
+ this.windowStart = now;
50
+ this.requestsInWindow = 0;
51
+ }
52
+ // Check rate limit
53
+ if (this.requestsInWindow >= this.maxRequests) {
54
+ const waitTime = this.windowMs - (now - this.windowStart);
55
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
56
+ continue;
57
+ }
58
+ const fn = this.queue.shift();
59
+ if (fn) {
60
+ this.requestsInWindow++;
61
+ this.dailyRequestCount++;
62
+ await fn();
63
+ }
64
+ }
65
+ this.processing = false;
66
+ }
67
+ reset() {
68
+ this.requestsInWindow = 0;
69
+ this.windowStart = Date.now();
70
+ this.dailyRequestCount = 0;
71
+ this.dailyWindowStart = Date.now();
72
+ }
73
+ getStats() {
74
+ return {
75
+ requestsInWindow: this.requestsInWindow,
76
+ dailyRequestCount: this.dailyRequestCount,
77
+ queueLength: this.queue.length,
78
+ };
79
+ }
80
+ }
81
+ exports.RateLimiter = RateLimiter;
82
+ //# sourceMappingURL=RateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../utils/RateLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { INodeProperties } from 'n8n-workflow';
2
+ export declare const commonFields: INodeProperties[];
3
+ export declare const additionalFieldsCollection: INodeProperties;
4
+ export declare const filtersCollection: INodeProperties;
5
+ export declare const lineItemsField: INodeProperties;
6
+ export declare const customFieldsField: INodeProperties;
7
+ export declare function formatDateForZoho(date: string | Date): string;
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.customFieldsField = exports.lineItemsField = exports.filtersCollection = exports.additionalFieldsCollection = exports.commonFields = void 0;
4
+ exports.formatDateForZoho = formatDateForZoho;
5
+ exports.commonFields = [
6
+ {
7
+ displayName: 'Return All',
8
+ name: 'returnAll',
9
+ type: 'boolean',
10
+ default: false,
11
+ description: 'Whether to return all results or only up to a given limit',
12
+ displayOptions: {
13
+ show: {
14
+ operation: ['getAll'],
15
+ },
16
+ },
17
+ },
18
+ {
19
+ displayName: 'Limit',
20
+ name: 'limit',
21
+ type: 'number',
22
+ displayOptions: {
23
+ show: {
24
+ operation: ['getAll'],
25
+ returnAll: [false],
26
+ },
27
+ },
28
+ typeOptions: {
29
+ minValue: 1,
30
+ maxValue: 200,
31
+ },
32
+ default: 50,
33
+ description: 'Max number of results to return',
34
+ },
35
+ ];
36
+ exports.additionalFieldsCollection = {
37
+ displayName: 'Additional Fields',
38
+ name: 'additionalFields',
39
+ type: 'collection',
40
+ placeholder: 'Add Field',
41
+ default: {},
42
+ options: [],
43
+ };
44
+ exports.filtersCollection = {
45
+ displayName: 'Filters',
46
+ name: 'filters',
47
+ type: 'collection',
48
+ placeholder: 'Add Filter',
49
+ default: {},
50
+ options: [
51
+ {
52
+ displayName: 'Status',
53
+ name: 'status',
54
+ type: 'options',
55
+ options: [
56
+ { name: 'All', value: 'all' },
57
+ { name: 'Draft', value: 'draft' },
58
+ { name: 'Confirmed', value: 'confirmed' },
59
+ { name: 'Void', value: 'void' },
60
+ ],
61
+ default: 'all',
62
+ description: 'Filter by status',
63
+ },
64
+ {
65
+ displayName: 'Date From',
66
+ name: 'date_from',
67
+ type: 'dateTime',
68
+ default: '',
69
+ description: 'Filter by date from',
70
+ },
71
+ {
72
+ displayName: 'Date To',
73
+ name: 'date_to',
74
+ type: 'dateTime',
75
+ default: '',
76
+ description: 'Filter by date to',
77
+ },
78
+ {
79
+ displayName: 'Sort Column',
80
+ name: 'sort_column',
81
+ type: 'string',
82
+ default: '',
83
+ description: 'Column to sort by',
84
+ },
85
+ {
86
+ displayName: 'Sort Order',
87
+ name: 'sort_order',
88
+ type: 'options',
89
+ options: [
90
+ { name: 'Ascending', value: 'A' },
91
+ { name: 'Descending', value: 'D' },
92
+ ],
93
+ default: 'A',
94
+ description: 'Sort order',
95
+ },
96
+ ],
97
+ };
98
+ exports.lineItemsField = {
99
+ displayName: 'Line Items',
100
+ name: 'line_items',
101
+ type: 'fixedCollection',
102
+ typeOptions: {
103
+ multipleValues: true,
104
+ },
105
+ placeholder: 'Add Line Item',
106
+ default: {},
107
+ options: [
108
+ {
109
+ name: 'item',
110
+ displayName: 'Item',
111
+ values: [
112
+ {
113
+ displayName: 'Item ID',
114
+ name: 'item_id',
115
+ type: 'string',
116
+ default: '',
117
+ required: true,
118
+ description: 'The ID of the item',
119
+ },
120
+ {
121
+ displayName: 'Quantity',
122
+ name: 'quantity',
123
+ type: 'number',
124
+ default: 1,
125
+ required: true,
126
+ typeOptions: {
127
+ minValue: 0.01,
128
+ },
129
+ description: 'The quantity of the item',
130
+ },
131
+ {
132
+ displayName: 'Rate',
133
+ name: 'rate',
134
+ type: 'number',
135
+ default: 0,
136
+ typeOptions: {
137
+ minValue: 0,
138
+ },
139
+ description: 'The rate of the item',
140
+ },
141
+ {
142
+ displayName: 'Description',
143
+ name: 'description',
144
+ type: 'string',
145
+ default: '',
146
+ description: 'Description of the line item',
147
+ },
148
+ {
149
+ displayName: 'Discount',
150
+ name: 'discount',
151
+ type: 'number',
152
+ default: 0,
153
+ description: 'Discount percentage',
154
+ },
155
+ {
156
+ displayName: 'Tax ID',
157
+ name: 'tax_id',
158
+ type: 'string',
159
+ default: '',
160
+ description: 'Tax ID to apply',
161
+ },
162
+ ],
163
+ },
164
+ ],
165
+ };
166
+ exports.customFieldsField = {
167
+ displayName: 'Custom Fields',
168
+ name: 'custom_fields',
169
+ type: 'fixedCollection',
170
+ typeOptions: {
171
+ multipleValues: true,
172
+ },
173
+ placeholder: 'Add Custom Field',
174
+ default: {},
175
+ options: [
176
+ {
177
+ name: 'customField',
178
+ displayName: 'Custom Field',
179
+ values: [
180
+ {
181
+ displayName: 'Label',
182
+ name: 'label',
183
+ type: 'string',
184
+ default: '',
185
+ description: 'The label of the custom field',
186
+ },
187
+ {
188
+ displayName: 'Value',
189
+ name: 'value',
190
+ type: 'string',
191
+ default: '',
192
+ description: 'The value of the custom field',
193
+ },
194
+ ],
195
+ },
196
+ ],
197
+ };
198
+ function formatDateForZoho(date) {
199
+ if (!date)
200
+ return '';
201
+ const d = new Date(date);
202
+ const year = d.getFullYear();
203
+ const month = String(d.getMonth() + 1).padStart(2, '0');
204
+ const day = String(d.getDate()).padStart(2, '0');
205
+ return `${year}-${month}-${day}`;
206
+ }
207
+ //# sourceMappingURL=Schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schemas.js","sourceRoot":"","sources":["../../utils/Schemas.ts"],"names":[],"mappings":"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"}
package/index.js ADDED
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ nodes: ['dist/nodes/ZohoBooks.node.js'],
3
+ credentials: ['dist/credentials/ZohoBooksOAuth2.credentials.js'],
4
+ };
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@arathron/n8n-nodes-zoho-books",
3
+ "version": "1.0.0",
4
+ "description": "n8n node for Zoho Books API integration",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "dev": "tsc --watch",
9
+ "lint": "eslint . --ext .ts",
10
+ "lint:fix": "eslint . --ext .ts --fix",
11
+ "format": "prettier --write \"**/*.{ts,json,md}\"",
12
+ "test": "jest",
13
+ "test:coverage": "jest --coverage",
14
+ "test:integration": "jest --testPathPattern=integration",
15
+ "prepublishOnly": "npm run build && npm run lint && npm test"
16
+ },
17
+ "n8n": {
18
+ "n8nNodesApiVersion": 1,
19
+ "credentials": [
20
+ "dist/credentials/ZohoBooksOAuth2.credentials.js"
21
+ ],
22
+ "nodes": [
23
+ "dist/nodes/ZohoBooks.node.js"
24
+ ]
25
+ },
26
+ "keywords": [
27
+ "n8n",
28
+ "node",
29
+ "zoho",
30
+ "books",
31
+ "accounting",
32
+ "workflow",
33
+ "automation"
34
+ ],
35
+ "author": "n8n Community <info@n8n.io>",
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/n8n-io/n8n-nodes-zoho-books.git"
40
+ },
41
+ "devDependencies": {
42
+ "@types/jest": "^29.5.0",
43
+ "@types/node": "^20.0.0",
44
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
45
+ "@typescript-eslint/parser": "^6.0.0",
46
+ "eslint": "^8.50.0",
47
+ "eslint-config-prettier": "^9.0.0",
48
+ "jest": "^29.5.0",
49
+ "nock": "^13.3.0",
50
+ "prettier": "^3.0.0",
51
+ "ts-jest": "^29.1.0",
52
+ "typescript": "^5.2.0"
53
+ },
54
+ "dependencies": {
55
+ "n8n-core": "^1.0.0",
56
+ "n8n-workflow": "^1.0.0"
57
+ },
58
+ "files": [
59
+ "dist"
60
+ ],
61
+ "bugs": {
62
+ "url": "https://github.com/n8n-io/n8n-nodes-zoho-books/issues"
63
+ },
64
+ "homepage": "https://github.com/n8n-io/n8n-nodes-zoho-books#readme",
65
+ "directories": {
66
+ "doc": "docs",
67
+ "test": "test"
68
+ }
69
+ }