n8n-nodes-smartsuite 2.0.17 → 2.0.18

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.
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Simple in-memory cache with TTL (Time To Live) support
3
+ * Used to cache API responses and reduce redundant calls
4
+ */
5
+ type CacheKey = string;
6
+ /**
7
+ * Get a value from cache if it exists and hasn't expired
8
+ * @param key - The cache key
9
+ * @param ttlMs - Optional TTL in milliseconds (defaults to 60 seconds)
10
+ * @returns The cached value or undefined if not found/expired
11
+ */
12
+ export declare function getCache<T>(key: CacheKey, ttlMs?: number): T | undefined;
13
+ /**
14
+ * Set a value in the cache with timestamp
15
+ * @param key - The cache key
16
+ * @param value - The value to cache
17
+ * @returns The cached value
18
+ */
19
+ export declare function setCache<T>(key: CacheKey, value: T): T;
20
+ /**
21
+ * Clear a specific cache entry
22
+ * @param key - The cache key to clear
23
+ */
24
+ export declare function clearCache(key: CacheKey): boolean;
25
+ /**
26
+ * Clear all cache entries
27
+ */
28
+ export declare function clearAllCache(): void;
29
+ /**
30
+ * Get the size of the cache
31
+ * @returns Number of entries in the cache
32
+ */
33
+ export declare function getCacheSize(): number;
34
+ /**
35
+ * Clean up expired cache entries
36
+ * @param ttlMs - TTL to check against (defaults to 60 seconds)
37
+ */
38
+ export declare function cleanupExpiredCache(ttlMs?: number): number;
39
+ /**
40
+ * Generate a cache key for field options
41
+ * @param solutionId - The solution ID
42
+ * @param tableId - The table ID
43
+ * @param suffix - Optional suffix for the key
44
+ * @returns A formatted cache key
45
+ */
46
+ export declare function generateFieldsCacheKey(solutionId: string, tableId: string, suffix?: string): string;
47
+ export {};
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ // src/nodes/SmartSuite/helpers/cache.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getCache = getCache;
5
+ exports.setCache = setCache;
6
+ exports.clearCache = clearCache;
7
+ exports.clearAllCache = clearAllCache;
8
+ exports.getCacheSize = getCacheSize;
9
+ exports.cleanupExpiredCache = cleanupExpiredCache;
10
+ exports.generateFieldsCacheKey = generateFieldsCacheKey;
11
+ // Global cache storage
12
+ const cacheStore = new Map();
13
+ // Default TTL in milliseconds (60 seconds)
14
+ const DEFAULT_TTL_MS = 60000;
15
+ /**
16
+ * Get a value from cache if it exists and hasn't expired
17
+ * @param key - The cache key
18
+ * @param ttlMs - Optional TTL in milliseconds (defaults to 60 seconds)
19
+ * @returns The cached value or undefined if not found/expired
20
+ */
21
+ function getCache(key, ttlMs = DEFAULT_TTL_MS) {
22
+ const entry = cacheStore.get(key);
23
+ if (!entry) {
24
+ return undefined;
25
+ }
26
+ const now = Date.now();
27
+ const age = now - entry.timestamp;
28
+ // Check if entry has expired
29
+ if (age > ttlMs) {
30
+ // Remove expired entry
31
+ cacheStore.delete(key);
32
+ return undefined;
33
+ }
34
+ return entry.value;
35
+ }
36
+ /**
37
+ * Set a value in the cache with timestamp
38
+ * @param key - The cache key
39
+ * @param value - The value to cache
40
+ * @returns The cached value
41
+ */
42
+ function setCache(key, value) {
43
+ const entry = {
44
+ value,
45
+ timestamp: Date.now(),
46
+ };
47
+ cacheStore.set(key, entry);
48
+ return value;
49
+ }
50
+ /**
51
+ * Clear a specific cache entry
52
+ * @param key - The cache key to clear
53
+ */
54
+ function clearCache(key) {
55
+ return cacheStore.delete(key);
56
+ }
57
+ /**
58
+ * Clear all cache entries
59
+ */
60
+ function clearAllCache() {
61
+ cacheStore.clear();
62
+ }
63
+ /**
64
+ * Get the size of the cache
65
+ * @returns Number of entries in the cache
66
+ */
67
+ function getCacheSize() {
68
+ return cacheStore.size;
69
+ }
70
+ /**
71
+ * Clean up expired cache entries
72
+ * @param ttlMs - TTL to check against (defaults to 60 seconds)
73
+ */
74
+ function cleanupExpiredCache(ttlMs = DEFAULT_TTL_MS) {
75
+ const now = Date.now();
76
+ let cleaned = 0;
77
+ for (const [key, entry] of cacheStore.entries()) {
78
+ const age = now - entry.timestamp;
79
+ if (age > ttlMs) {
80
+ cacheStore.delete(key);
81
+ cleaned++;
82
+ }
83
+ }
84
+ return cleaned;
85
+ }
86
+ /**
87
+ * Generate a cache key for field options
88
+ * @param solutionId - The solution ID
89
+ * @param tableId - The table ID
90
+ * @param suffix - Optional suffix for the key
91
+ * @returns A formatted cache key
92
+ */
93
+ function generateFieldsCacheKey(solutionId, tableId, suffix) {
94
+ const baseKey = `fields:${solutionId}:${tableId}`;
95
+ return suffix ? `${baseKey}:${suffix}` : baseKey;
96
+ }
97
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/nodes/SmartSuite/helpers/cache.ts"],"names":[],"mappings":";AAAA,wCAAwC;;AAyBxC,4BAkBC;AAQD,4BAQC;AAMD,gCAEC;AAKD,sCAEC;AAMD,oCAEC;AAMD,kDAaC;AASD,wDAOC;AAxGD,uBAAuB;AACvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;AAExD,2CAA2C;AAC3C,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B;;;;;GAKG;AACH,SAAgB,QAAQ,CAAI,GAAa,EAAE,QAAgB,cAAc;IACvE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,6BAA6B;IAC7B,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QAChB,uBAAuB;QACvB,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,KAAU,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAI,GAAa,EAAE,KAAQ;IACjD,MAAM,KAAK,GAAkB;QAC3B,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IAEF,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,GAAa;IACtC,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY;IAC1B,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,QAAgB,cAAc;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,UAAkB,EAClB,OAAe,EACf,MAAe;IAEf,MAAM,OAAO,GAAG,UAAU,UAAU,IAAI,OAAO,EAAE,CAAC;IAClD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC"}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.listSearch = exports.searchTableFieldsMutable = exports.searchTableFields = exports.tableSearch = exports.solutionSearch = void 0;
5
5
  const utils_1 = require("../helpers/utils");
6
6
  const smartSuiteApi_1 = require("../transport/smartSuiteApi");
7
+ const cache_1 = require("../helpers/cache");
7
8
  // Helper to map fields for resourceLocator (supports description property)
8
9
  const serializeField = (f) => ({
9
10
  name: `${f.label} (${f.field_type})`,
@@ -47,7 +48,32 @@ const searchTableFields = async function (filter = '') {
47
48
  const tableId = (0, utils_1.asIdString)(this.getNodeParameter('tableId', 0));
48
49
  if (!tableId)
49
50
  return { results: [] };
50
- const { structure = [] } = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/${tableId}/`));
51
+ // Try to get solution ID for more specific caching
52
+ let solutionId = '';
53
+ try {
54
+ solutionId = (0, utils_1.asIdString)(this.getNodeParameter('solutionId', 0)) || '';
55
+ }
56
+ catch {
57
+ // Solution ID might not be available in all contexts
58
+ }
59
+ // Generate cache key
60
+ const cacheKey = (0, cache_1.generateFieldsCacheKey)(solutionId || 'unknown', tableId);
61
+ // Check cache first
62
+ const cachedStructure = (0, cache_1.getCache)(cacheKey);
63
+ let structure = [];
64
+ if (cachedStructure) {
65
+ // Use cached data
66
+ structure = cachedStructure;
67
+ }
68
+ else {
69
+ // Fetch from API if not cached
70
+ const response = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/${tableId}/`));
71
+ structure = response.structure || [];
72
+ // Cache the structure for future use
73
+ if (structure.length > 0) {
74
+ (0, cache_1.setCache)(cacheKey, structure);
75
+ }
76
+ }
51
77
  const filtered = structure.filter((f) => !filter ||
52
78
  f.label.toLowerCase().includes(filter.toLowerCase()) ||
53
79
  f.slug.toLowerCase().includes(filter.toLowerCase()));
@@ -59,7 +85,32 @@ const searchTableFieldsMutable = async function (filter = '') {
59
85
  const tableId = (0, utils_1.asIdString)(this.getNodeParameter('tableId', 0));
60
86
  if (!tableId)
61
87
  return { results: [] };
62
- const { structure = [] } = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/${tableId}/`));
88
+ // Try to get solution ID for more specific caching
89
+ let solutionId = '';
90
+ try {
91
+ solutionId = (0, utils_1.asIdString)(this.getNodeParameter('solutionId', 0)) || '';
92
+ }
93
+ catch {
94
+ // Solution ID might not be available in all contexts
95
+ }
96
+ // Generate cache key with 'mutable' suffix to differentiate from regular fields
97
+ const cacheKey = (0, cache_1.generateFieldsCacheKey)(solutionId || 'unknown', tableId, 'mutable');
98
+ // Check cache first
99
+ const cachedStructure = (0, cache_1.getCache)(cacheKey);
100
+ let structure = [];
101
+ if (cachedStructure) {
102
+ // Use cached data
103
+ structure = cachedStructure;
104
+ }
105
+ else {
106
+ // Fetch from API if not cached
107
+ const response = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/${tableId}/`));
108
+ structure = response.structure || [];
109
+ // Cache the structure for future use
110
+ if (structure.length > 0) {
111
+ (0, cache_1.setCache)(cacheKey, structure);
112
+ }
113
+ }
63
114
  // Exclude reserved fields
64
115
  const withoutReserved = structure.filter((f) => !(0, utils_1.isReservedField)(f.slug));
65
116
  // Exclude record ID fields
@@ -1 +1 @@
1
- {"version":3,"file":"listSearch.js","sourceRoot":"","sources":["../../../../src/nodes/SmartSuite/methods/listSearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listSearch.js","sourceRoot":"","sources":["../../../../src/nodes/SmartSuite/methods/listSearch.ts"],"names":[],"mappings":"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"}
@@ -76,26 +76,14 @@ exports.fieldsInput = {
76
76
  {
77
77
  displayName: 'Field',
78
78
  name: 'field',
79
- type: 'resourceLocator',
79
+ type: 'options',
80
80
  noDataExpression: true,
81
- default: { mode: 'list', value: '' },
81
+ typeOptions: {
82
+ loadOptionsMethod: 'searchTableFieldsMutable',
83
+ loadOptionsDependsOn: ['solutionId.value', 'tableId.value'],
84
+ },
85
+ default: '',
82
86
  placeholder: 'Choose a field…',
83
- typeOptions: { loadOptionsDependsOn: ['solutionId.value', 'tableId.value'], searchListMethod: 'searchTableFieldsMutable', searchable: true },
84
- modes: [
85
- {
86
- name: 'list',
87
- displayName: 'From list',
88
- type: 'list',
89
- placeholder: 'Choose a field…',
90
- typeOptions: { searchListMethod: 'searchTableFieldsMutable', searchable: true },
91
- },
92
- {
93
- name: 'id',
94
- displayName: 'By ID',
95
- type: 'string',
96
- placeholder: 'Field ID',
97
- },
98
- ],
99
87
  description: 'Select a field to set',
100
88
  },
101
89
  {
@@ -1 +1 @@
1
- {"version":3,"file":"resourceInputs.js","sourceRoot":"","sources":["../../../../src/nodes/SmartSuite/shared/resourceInputs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resourceInputs.js","sourceRoot":"","sources":["../../../../src/nodes/SmartSuite/shared/resourceInputs.ts"],"names":[],"mappings":";AAAA,gDAAgD;;;AAIhD;;GAEG;AACU,QAAA,aAAa,GAAoB;IAC5C,WAAW,EAAO,UAAU;IAC5B,IAAI,EAAc,YAAY;IAC9B,IAAI,EAAc,iBAAiB;IACnC,gBAAgB,EAAE,KAAK;IACvB,OAAO,EAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7C,KAAK,EAAE;QACL;YACE,IAAI,EAAS,MAAM;YACnB,WAAW,EAAE,WAAW;YACxB,IAAI,EAAS,MAAM;YACnB,WAAW,EAAE,oBAAoB;YACjC,WAAW,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE;SACtE;QACD;YACE,IAAI,EAAS,IAAI;YACjB,WAAW,EAAE,OAAO;YACpB,IAAI,EAAS,QAAQ;YACrB,WAAW,EAAE,kBAAkB;SAChC;KACF;IACD,WAAW,EAAE,qBAAqB;CACnC,CAAC;AAEF;;;GAGG;AACU,QAAA,UAAU,GAAoB;IACzC,WAAW,EAAO,OAAO;IACzB,IAAI,EAAc,SAAS;IAC3B,IAAI,EAAc,iBAAiB;IACnC,gBAAgB,EAAE,KAAK;IACvB,OAAO,EAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7C,WAAW,EAAO,EAAE,oBAAoB,EAAE,CAAC,kBAAkB,CAAC,EAAE;IAChE,KAAK,EAAE;QACL;YACE,IAAI,EAAS,MAAM;YACnB,WAAW,EAAE,WAAW;YACxB,IAAI,EAAS,MAAM;YACnB,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE;SACnE;QACD;YACE,IAAI,EAAS,IAAI;YACjB,WAAW,EAAE,OAAO;YACpB,IAAI,EAAS,QAAQ;YACrB,WAAW,EAAE,eAAe;SAC7B;KACF;IACD,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEF;;;GAGG;AACU,QAAA,WAAW,GAAoB;IAC1C,WAAW,EAAE,QAAQ;IACrB,IAAI,EAAS,UAAU;IACvB,IAAI,EAAS,iBAAiB;IAC9B,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE;IACrC,OAAO,EAAM,EAAE,YAAY,EAAE,EAAE,EAAE;IACjC,WAAW,EAAE,+CAA+C;IAC5D,OAAO,EAAE;QACP;YACE,IAAI,EAAS,cAAc;YAC3B,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAO,OAAO;oBACzB,IAAI,EAAc,OAAO;oBACzB,IAAI,EAAc,SAAS;oBAC3B,gBAAgB,EAAE,IAAI;oBACtB,WAAW,EAAO;wBAChB,iBAAiB,EAAK,0BAA0B;wBAChD,oBAAoB,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;qBAC5D;oBACD,OAAO,EAAM,EAAE;oBACf,WAAW,EAAE,iBAAiB;oBAC9B,WAAW,EAAE,uBAAuB;iBACrC;gBACD;oBACE,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAS,OAAO;oBACpB,IAAI,EAAS,QAAQ;oBACrB,OAAO,EAAM,EAAE;oBACf,WAAW,EAAE,+BAA+B;iBAC7C;aACF;SACF;KACF;CACF,CAAC"}
@@ -1,10 +1,12 @@
1
1
  import type { IAllExecuteFunctions, IDataObject, IHttpRequestMethods } from 'n8n-workflow';
2
2
  /**
3
- * Core HTTP request function.
3
+ * Core HTTP request function with retry logic for rate limiting.
4
+ * - Implements exponential backoff for 429 errors
5
+ * - Respects Retry-After headers when provided
4
6
  * - customHeaders: extra headers to merge in
5
7
  * - absolute-URL detection
6
8
  */
7
- export declare function apiRequest<T = any>(this: IAllExecuteFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, qs?: IDataObject, customHeaders?: IDataObject): Promise<T>;
9
+ export declare function apiRequest<T = any>(this: IAllExecuteFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, qs?: IDataObject, customHeaders?: IDataObject, maxRetries?: number): Promise<T>;
8
10
  /**
9
11
  * Fetch all items from a paginated endpoint (limit/offset).
10
12
  */
@@ -6,11 +6,17 @@ exports.paginatedRequest = paginatedRequest;
6
6
  exports.apiRequestAllItems = paginatedRequest;
7
7
  const n8n_workflow_1 = require("n8n-workflow");
8
8
  /**
9
- * Core HTTP request function.
9
+ * Helper function to delay execution for retry logic
10
+ */
11
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
12
+ /**
13
+ * Core HTTP request function with retry logic for rate limiting.
14
+ * - Implements exponential backoff for 429 errors
15
+ * - Respects Retry-After headers when provided
10
16
  * - customHeaders: extra headers to merge in
11
17
  * - absolute-URL detection
12
18
  */
13
- async function apiRequest(method, endpoint, body = {}, qs = {}, customHeaders = {}) {
19
+ async function apiRequest(method, endpoint, body = {}, qs = {}, customHeaders = {}, maxRetries = 5) {
14
20
  const creds = await this.getCredentials('smartSuiteApi');
15
21
  if (!creds.apiKey || !creds.accountId || !creds.baseUrl) {
16
22
  throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Missing required SmartSuite credentials. Please check API Key, Account ID, and Base URL.');
@@ -46,39 +52,107 @@ async function apiRequest(method, endpoint, body = {}, qs = {}, customHeaders =
46
52
  json: true,
47
53
  body: method === 'GET' ? undefined : body,
48
54
  };
49
- try {
50
- const httpRequest = this.helpers.httpRequest;
51
- if (typeof httpRequest !== 'function') {
52
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'HTTP Request helper not available');
53
- }
54
- return (await httpRequest(options));
55
- }
56
- catch (error) {
57
- const status = error.response?.status;
58
- const apiError = error.response?.data;
59
- if (status === 400 &&
60
- apiError &&
61
- Object.values(apiError)[0] === 'Not allowed comparison.') {
62
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid comparison for that field type. See https://developers.smartsuite.com/docs/solution-data/records/sort-filter#operators-by-field-type for valid operators.');
63
- }
64
- if (apiError && typeof apiError === 'object') {
65
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), `SmartSuite API Error (${status}): ${JSON.stringify(apiError)}`);
55
+ // Retry loop with exponential backoff for rate limiting
56
+ let attempt = 0;
57
+ let lastError;
58
+ while (attempt <= maxRetries) {
59
+ try {
60
+ const httpRequest = this.helpers.httpRequest;
61
+ if (typeof httpRequest !== 'function') {
62
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'HTTP Request helper not available');
63
+ }
64
+ return (await httpRequest(options));
66
65
  }
67
- if (status === 404) {
68
- let resourceType = 'Record';
69
- if (originalEndpoint.startsWith('/solutions/')) {
70
- resourceType = 'Solution';
66
+ catch (error) {
67
+ lastError = error;
68
+ const status = error.response?.status;
69
+ const apiError = error.response?.data;
70
+ // Handle rate limiting with retry
71
+ if (status === 429 && attempt < maxRetries) {
72
+ attempt++;
73
+ // Check for Retry-After header
74
+ const retryAfterHeader = error.response?.headers?.['retry-after'];
75
+ let delayMs;
76
+ if (retryAfterHeader) {
77
+ // Retry-After can be in seconds or HTTP date format
78
+ const retryAfterSeconds = parseInt(retryAfterHeader, 10);
79
+ if (!isNaN(retryAfterSeconds)) {
80
+ delayMs = retryAfterSeconds * 1000;
81
+ }
82
+ else {
83
+ // Try to parse as date
84
+ const retryDate = new Date(retryAfterHeader);
85
+ if (!isNaN(retryDate.getTime())) {
86
+ delayMs = Math.max(0, retryDate.getTime() - Date.now());
87
+ }
88
+ else {
89
+ // Fallback to exponential backoff
90
+ delayMs = Math.min(30000, 500 * Math.pow(2, attempt - 1));
91
+ }
92
+ }
93
+ }
94
+ else {
95
+ // Exponential backoff: 0.5s, 1s, 2s, 4s, 8s... capped at 30s
96
+ delayMs = Math.min(30000, 500 * Math.pow(2, attempt - 1));
97
+ }
98
+ // Log the retry attempt - helpful for debugging
99
+ console.log(`SmartSuite rate limit hit. Automatically retrying in ${(delayMs / 1000).toFixed(1)}s (attempt ${attempt}/${maxRetries})`);
100
+ await sleep(delayMs);
101
+ continue; // Retry the request
102
+ }
103
+ // Handle other errors (non-429 or max retries exceeded)
104
+ if (status === 429) {
105
+ // Max retries exceeded for rate limiting
106
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'SmartSuite API rate limit exceeded after multiple retries. ' +
107
+ 'Please wait a moment before trying again. ' +
108
+ 'Tip: If this happens frequently, consider spacing out your operations or reducing the number of simultaneous field selections.', {
109
+ description: 'The SmartSuite API is temporarily limiting requests. This is normal when making many rapid changes.'
110
+ });
71
111
  }
72
- else if (originalEndpoint.startsWith('/tables/')) {
73
- resourceType = 'Table';
112
+ if (status === 400 &&
113
+ apiError &&
114
+ Object.values(apiError)[0] === 'Not allowed comparison.') {
115
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid comparison for that field type. See https://developers.smartsuite.com/docs/solution-data/records/sort-filter#operators-by-field-type for valid operators.');
74
116
  }
75
- const parts = finalUrl.split('/');
76
- const id = parts[parts.length - 1] || parts[parts.length - 2];
77
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The resource you are requesting could not be found
117
+ if (apiError && typeof apiError === 'object') {
118
+ // Format the error message more user-friendly
119
+ let errorMessage = 'SmartSuite API Error: ';
120
+ // Try to extract a meaningful error message from the API response
121
+ if (apiError.message) {
122
+ errorMessage += apiError.message;
123
+ }
124
+ else if (apiError.error) {
125
+ errorMessage += apiError.error;
126
+ }
127
+ else if (apiError.detail) {
128
+ errorMessage += apiError.detail;
129
+ }
130
+ else {
131
+ // Fallback to stringified error
132
+ errorMessage += JSON.stringify(apiError);
133
+ }
134
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), errorMessage, {
135
+ description: `HTTP ${status} error from SmartSuite API`
136
+ });
137
+ }
138
+ if (status === 404) {
139
+ let resourceType = 'Record';
140
+ if (originalEndpoint.startsWith('/solutions/')) {
141
+ resourceType = 'Solution';
142
+ }
143
+ else if (originalEndpoint.startsWith('/tables/')) {
144
+ resourceType = 'Table';
145
+ }
146
+ const parts = finalUrl.split('/');
147
+ const id = parts[parts.length - 1] || parts[parts.length - 2];
148
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The resource you are requesting could not be found
78
149
  ${id} is not a valid ${resourceType} ID`);
150
+ }
151
+ throw error;
79
152
  }
80
- throw error;
81
153
  }
154
+ // This should never be reached, but just in case
155
+ throw lastError;
82
156
  }
83
157
  /**
84
158
  * Fetch all items from a paginated endpoint (limit/offset).
@@ -1 +1 @@
1
- {"version":3,"file":"smartSuiteApi.js","sourceRoot":"","sources":["../../../../src/nodes/SmartSuite/transport/smartSuiteApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smartSuiteApi.js","sourceRoot":"","sources":["../../../../src/nodes/SmartSuite/transport/smartSuiteApi.ts"],"names":[],"mappings":";AAAA,kDAAkD;;AAsBlD,gCAqLC;AAKD,4CAqCC;AAE4B,8CAAkB;AA/O/C,+CAAkD;AAElD;;GAEG;AACH,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAE7F;;;;;;GAMG;AACI,KAAK,UAAU,UAAU,CAE9B,MAA2B,EAC3B,QAAgB,EAChB,OAAoB,EAAE,EACtB,KAAkB,EAAE,EACpB,gBAA6B,EAAE,EAC/B,UAAU,GAAG,CAAC;IAEd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IAClC,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,QAAgB,CAAC;IACrB,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,QAAQ,GAAG,OAAO,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,IACE,CAAC,KAAK,CAAC,OAAO;YACd,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACjC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EACjC,CAAC;YACD,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,+CAA+C,KAAK,CAAC,OAAO,EAAE,CAC/D,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAwB;QACnC,MAAM;QACN,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE;YACP,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE;YACtC,YAAY,EAAE,KAAK,CAAC,SAAS;YAC7B,GAAG,aAAa;SACjB;QACD,EAAE;QACF,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;KAC1C,CAAC;IAEF,wDAAwD;IACxD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAc,CAAC;IAEnB,OAAO,OAAO,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC7C,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;gBACtC,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,mCAAmC,CACpC,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAM,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;YACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAA2C,CAAC;YAE7E,kCAAkC;YAClC,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBAC3C,OAAO,EAAE,CAAC;gBAEV,+BAA+B;gBAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC;gBAClE,IAAI,OAAe,CAAC;gBAEpB,IAAI,gBAAgB,EAAE,CAAC;oBACrB,oDAAoD;oBACpD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;wBAC9B,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAAC;oBACrC,CAAC;yBAAM,CAAC;wBACN,uBAAuB;wBACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;4BAChC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;wBAC1D,CAAC;6BAAM,CAAC;4BACN,kCAAkC;4BAClC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC5D,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,6DAA6D;oBAC7D,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAED,gDAAgD;gBAChD,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,IAAI,UAAU,GAAG,CAAC,CAAC;gBAEvI,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrB,SAAS,CAAC,oBAAoB;YAChC,CAAC;YAED,wDAAwD;YACxD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,yCAAyC;gBACzC,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,6DAA6D;oBAC7D,4CAA4C;oBAC5C,gIAAgI,EAChI;oBACE,WAAW,EAAE,qGAAqG;iBACnH,CACF,CAAC;YACJ,CAAC;YAED,IACE,MAAM,KAAK,GAAG;gBACd,QAAQ;gBACR,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,yBAAyB,EACxD,CAAC;gBACD,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,mKAAmK,CACpK,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7C,8CAA8C;gBAC9C,IAAI,YAAY,GAAG,wBAAwB,CAAC;gBAE5C,kEAAkE;gBAClE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACrB,YAAY,IAAI,QAAQ,CAAC,OAAO,CAAC;gBACnC,CAAC;qBAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC1B,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC;gBACjC,CAAC;qBAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC3B,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,gCAAgC;oBAChC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC3C,CAAC;gBAED,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,YAAY,EACZ;oBACE,WAAW,EAAE,QAAQ,MAAM,4BAA4B;iBACxD,CACF,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,IAAI,YAAY,GAAG,QAAQ,CAAC;gBAC5B,IAAI,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC/C,YAAY,GAAG,UAAU,CAAC;gBAC5B,CAAC;qBAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACnD,YAAY,GAAG,OAAO,CAAC;gBACzB,CAAC;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9D,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd;EACR,EAAE,mBAAmB,YAAY,KAAK,CAC/B,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,SAAS,CAAC;AAClB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAEpC,MAA2B,EAC3B,QAAgB,EAChB,OAAoB,EAAE,EACtB,KAAkB,EAAE,EACpB,QAAQ,GAAG,GAAG;IAEd,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CACpC,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CACnC,CAAC;QAEF,IAAI,SAAS,GAAU,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,SAAS,GAAG,QAAQ,CAAC;QACvB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAE,QAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,SAAS,GAAI,QAAgB,CAAC,IAAI,CAAC;QACrC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAE,QAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,SAAS,GAAI,QAAgB,CAAC,OAAO,CAAC;QACxC,CAAC;aAAM,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5D,SAAS,GAAG,CAAC,QAAe,CAAC,CAAC;QAChC,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5B,IAAI,SAAS,CAAC,MAAM,GAAG,QAAQ;YAAE,MAAM;QACvC,MAAM,IAAI,QAAQ,CAAC;IACrB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-smartsuite",
3
- "version": "2.0.17",
3
+ "version": "2.0.18",
4
4
  "description": "n8n community node for SmartSuite",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
@@ -37,7 +37,8 @@
37
37
  "lint": "eslint src/**/*.ts",
38
38
  "lintfix": "eslint src/**/*.ts --fix",
39
39
  "generate:tests": "node scripts/generate-tests.js",
40
- "test": "jest"
40
+ "test": "jest",
41
+ "load-test": "node scripts/load-test-fields.js"
41
42
  },
42
43
  "publishConfig": {
43
44
  "access": "public"