n8n-nodes-amazon-selling-partner-marketplace 0.0.14

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 (69) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +125 -0
  3. package/dist/credentials/AmazonSpApi.credentials.d.ts +10 -0
  4. package/dist/credentials/AmazonSpApi.credentials.js +267 -0
  5. package/dist/credentials/AmazonSpApi.credentials.js.map +1 -0
  6. package/dist/icons/amazon-sp.dark.svg +13 -0
  7. package/dist/icons/amazon-sp.svg +13 -0
  8. package/dist/nodes/AmazonSellingPartner/AmazonSellingPartner.node.d.ts +5 -0
  9. package/dist/nodes/AmazonSellingPartner/AmazonSellingPartner.node.js +93 -0
  10. package/dist/nodes/AmazonSellingPartner/AmazonSellingPartner.node.js.map +1 -0
  11. package/dist/nodes/AmazonSellingPartner/AmazonSellingPartner.node.json +18 -0
  12. package/dist/nodes/AmazonSellingPartner/amazonSpApi.svg +25 -0
  13. package/dist/nodes/AmazonSellingPartner/core/AuditLogger.d.ts +67 -0
  14. package/dist/nodes/AmazonSellingPartner/core/AuditLogger.js +296 -0
  15. package/dist/nodes/AmazonSellingPartner/core/AuditLogger.js.map +1 -0
  16. package/dist/nodes/AmazonSellingPartner/core/ErrorHandler.d.ts +6 -0
  17. package/dist/nodes/AmazonSellingPartner/core/ErrorHandler.js +82 -0
  18. package/dist/nodes/AmazonSellingPartner/core/ErrorHandler.js.map +1 -0
  19. package/dist/nodes/AmazonSellingPartner/core/MetricsCollector.d.ts +48 -0
  20. package/dist/nodes/AmazonSellingPartner/core/MetricsCollector.js +181 -0
  21. package/dist/nodes/AmazonSellingPartner/core/MetricsCollector.js.map +1 -0
  22. package/dist/nodes/AmazonSellingPartner/core/RateLimiter.d.ts +43 -0
  23. package/dist/nodes/AmazonSellingPartner/core/RateLimiter.js +260 -0
  24. package/dist/nodes/AmazonSellingPartner/core/RateLimiter.js.map +1 -0
  25. package/dist/nodes/AmazonSellingPartner/core/SecurityValidator.d.ts +35 -0
  26. package/dist/nodes/AmazonSellingPartner/core/SecurityValidator.js +383 -0
  27. package/dist/nodes/AmazonSellingPartner/core/SecurityValidator.js.map +1 -0
  28. package/dist/nodes/AmazonSellingPartner/core/rateLimitConfig.d.ts +14 -0
  29. package/dist/nodes/AmazonSellingPartner/core/rateLimitConfig.js +93 -0
  30. package/dist/nodes/AmazonSellingPartner/core/rateLimitConfig.js.map +1 -0
  31. package/dist/nodes/AmazonSellingPartner/descriptions/Custom.description.d.ts +3 -0
  32. package/dist/nodes/AmazonSellingPartner/descriptions/Custom.description.js +147 -0
  33. package/dist/nodes/AmazonSellingPartner/descriptions/Custom.description.js.map +1 -0
  34. package/dist/nodes/AmazonSellingPartner/generated/Generated.description.d.ts +4977 -0
  35. package/dist/nodes/AmazonSellingPartner/generated/Generated.description.js +40893 -0
  36. package/dist/nodes/AmazonSellingPartner/generated/Generated.description.js.map +1 -0
  37. package/dist/nodes/AmazonSellingPartner/helpers/LwaClient.d.ts +10 -0
  38. package/dist/nodes/AmazonSellingPartner/helpers/LwaClient.js +79 -0
  39. package/dist/nodes/AmazonSellingPartner/helpers/LwaClient.js.map +1 -0
  40. package/dist/nodes/AmazonSellingPartner/helpers/RdtClient.d.ts +11 -0
  41. package/dist/nodes/AmazonSellingPartner/helpers/RdtClient.js +66 -0
  42. package/dist/nodes/AmazonSellingPartner/helpers/RdtClient.js.map +1 -0
  43. package/dist/nodes/AmazonSellingPartner/helpers/ReportDownloader.d.ts +16 -0
  44. package/dist/nodes/AmazonSellingPartner/helpers/ReportDownloader.js +65 -0
  45. package/dist/nodes/AmazonSellingPartner/helpers/ReportDownloader.js.map +1 -0
  46. package/dist/nodes/AmazonSellingPartner/helpers/SigV4Signer.d.ts +4 -0
  47. package/dist/nodes/AmazonSellingPartner/helpers/SigV4Signer.js +76 -0
  48. package/dist/nodes/AmazonSellingPartner/helpers/SigV4Signer.js.map +1 -0
  49. package/dist/nodes/AmazonSellingPartner/helpers/SpApiRequest.d.ts +23 -0
  50. package/dist/nodes/AmazonSellingPartner/helpers/SpApiRequest.js +220 -0
  51. package/dist/nodes/AmazonSellingPartner/helpers/SpApiRequest.js.map +1 -0
  52. package/dist/nodes/AmazonSellingPartner/helpers/downloadPresigned.d.ts +4 -0
  53. package/dist/nodes/AmazonSellingPartner/helpers/downloadPresigned.js +16 -0
  54. package/dist/nodes/AmazonSellingPartner/helpers/downloadPresigned.js.map +1 -0
  55. package/dist/nodes/AmazonSellingPartner/helpers/graphql.d.ts +1 -0
  56. package/dist/nodes/AmazonSellingPartner/helpers/graphql.js +13 -0
  57. package/dist/nodes/AmazonSellingPartner/helpers/graphql.js.map +1 -0
  58. package/dist/nodes/AmazonSellingPartner/operations/Custom.operations.d.ts +2 -0
  59. package/dist/nodes/AmazonSellingPartner/operations/Custom.operations.js +232 -0
  60. package/dist/nodes/AmazonSellingPartner/operations/Custom.operations.js.map +1 -0
  61. package/dist/nodes/AmazonSellingPartner/operations/Generated.operations.d.ts +2 -0
  62. package/dist/nodes/AmazonSellingPartner/operations/Generated.operations.js +186 -0
  63. package/dist/nodes/AmazonSellingPartner/operations/Generated.operations.js.map +1 -0
  64. package/dist/nodes/AmazonSellingPartner/operations/analytics/constants.d.ts +126 -0
  65. package/dist/nodes/AmazonSellingPartner/operations/analytics/constants.js +213 -0
  66. package/dist/nodes/AmazonSellingPartner/operations/analytics/constants.js.map +1 -0
  67. package/dist/package.json +63 -0
  68. package/dist/tsconfig.tsbuildinfo +1 -0
  69. package/package.json +63 -0
@@ -0,0 +1,67 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface AuditEvent {
3
+ id: string;
4
+ timestamp: Date;
5
+ userId?: string;
6
+ nodeId: string;
7
+ action: string;
8
+ resource: string;
9
+ details: Record<string, any>;
10
+ severity: 'low' | 'medium' | 'high' | 'critical';
11
+ source: 'user' | 'system' | 'api';
12
+ outcome: 'success' | 'failure' | 'warning';
13
+ ipAddress?: string;
14
+ userAgent?: string;
15
+ }
16
+ export interface SecurityEvent extends AuditEvent {
17
+ threatLevel: 'low' | 'medium' | 'high' | 'critical';
18
+ attackVector?: string;
19
+ mitigationAction?: string;
20
+ }
21
+ export interface AlertRule {
22
+ id: string;
23
+ name: string;
24
+ condition: (event: AuditEvent) => boolean;
25
+ severity: 'low' | 'medium' | 'high' | 'critical';
26
+ enabled: boolean;
27
+ cooldownMs: number;
28
+ lastTriggered?: Date;
29
+ }
30
+ export declare class AuditLogger extends EventEmitter {
31
+ private events;
32
+ private securityEvents;
33
+ private alertRules;
34
+ private readonly maxEventsHistory;
35
+ private readonly maxSecurityEventsHistory;
36
+ constructor();
37
+ logEvent(event: Omit<AuditEvent, 'id' | 'timestamp'>): void;
38
+ logSecurityEvent(event: Omit<SecurityEvent, 'id' | 'timestamp'>): void;
39
+ logApiAccess(nodeId: string, endpoint: string, success: boolean, details?: Record<string, any>): void;
40
+ logCredentialUsage(nodeId: string, credentialType: string, success: boolean, details?: Record<string, any>): void;
41
+ logAuthentication(nodeId: string, method: string, success: boolean, details?: Record<string, any>): void;
42
+ logRateLimit(nodeId: string, endpoint: string, details?: Record<string, any>): void;
43
+ logError(nodeId: string, error: Error, context?: Record<string, any>): void;
44
+ logSuspiciousActivity(nodeId: string, activity: string, details?: Record<string, any>): void;
45
+ getEvents(filter?: {
46
+ severity?: string[];
47
+ action?: string[];
48
+ resource?: string[];
49
+ outcome?: string[];
50
+ timeRange?: {
51
+ start: Date;
52
+ end: Date;
53
+ };
54
+ limit?: number;
55
+ }): AuditEvent[];
56
+ getSecurityEvents(limit?: number): SecurityEvent[];
57
+ addAlertRule(rule: AlertRule): void;
58
+ removeAlertRule(ruleId: string): void;
59
+ getStatistics(timeWindowMs?: number): Record<string, any>;
60
+ exportEvents(format?: 'json' | 'csv', filter?: Parameters<typeof this.getEvents>[0]): string;
61
+ private generateEventId;
62
+ private initializeDefaultAlertRules;
63
+ private checkAlertRules;
64
+ private triggerAlert;
65
+ private triggerSecurityAlert;
66
+ }
67
+ export declare const auditLogger: AuditLogger;
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.auditLogger = exports.AuditLogger = void 0;
4
+ const events_1 = require("events");
5
+ class AuditLogger extends events_1.EventEmitter {
6
+ constructor() {
7
+ super();
8
+ this.events = [];
9
+ this.securityEvents = [];
10
+ this.alertRules = [];
11
+ this.maxEventsHistory = 10000;
12
+ this.maxSecurityEventsHistory = 1000;
13
+ this.initializeDefaultAlertRules();
14
+ }
15
+ logEvent(event) {
16
+ const auditEvent = {
17
+ ...event,
18
+ id: this.generateEventId(),
19
+ timestamp: new Date(),
20
+ };
21
+ this.events.push(auditEvent);
22
+ if (this.events.length > this.maxEventsHistory) {
23
+ this.events = this.events.slice(-this.maxEventsHistory);
24
+ }
25
+ this.checkAlertRules(auditEvent);
26
+ this.emit('auditEvent', auditEvent);
27
+ console.log(`[AUDIT] ${auditEvent.severity.toUpperCase()}: ${auditEvent.action} on ${auditEvent.resource} - ${auditEvent.outcome}`);
28
+ }
29
+ logSecurityEvent(event) {
30
+ const securityEvent = {
31
+ ...event,
32
+ id: this.generateEventId(),
33
+ timestamp: new Date(),
34
+ };
35
+ this.securityEvents.push(securityEvent);
36
+ if (this.securityEvents.length > this.maxSecurityEventsHistory) {
37
+ this.securityEvents = this.securityEvents.slice(-this.maxSecurityEventsHistory);
38
+ }
39
+ this.logEvent(securityEvent);
40
+ this.emit('securityEvent', securityEvent);
41
+ if (securityEvent.threatLevel === 'high' || securityEvent.threatLevel === 'critical') {
42
+ this.triggerSecurityAlert(securityEvent);
43
+ }
44
+ }
45
+ logApiAccess(nodeId, endpoint, success, details = {}) {
46
+ this.logEvent({
47
+ nodeId,
48
+ action: 'api_access',
49
+ resource: endpoint,
50
+ details: {
51
+ endpoint,
52
+ ...details,
53
+ },
54
+ severity: success ? 'low' : 'medium',
55
+ source: 'api',
56
+ outcome: success ? 'success' : 'failure',
57
+ });
58
+ }
59
+ logCredentialUsage(nodeId, credentialType, success, details = {}) {
60
+ this.logEvent({
61
+ nodeId,
62
+ action: 'credential_usage',
63
+ resource: credentialType,
64
+ details: {
65
+ credentialType,
66
+ ...details,
67
+ },
68
+ severity: success ? 'low' : 'high',
69
+ source: 'system',
70
+ outcome: success ? 'success' : 'failure',
71
+ });
72
+ }
73
+ logAuthentication(nodeId, method, success, details = {}) {
74
+ this.logEvent({
75
+ nodeId,
76
+ action: 'authentication',
77
+ resource: method,
78
+ details: {
79
+ method,
80
+ ...details,
81
+ },
82
+ severity: success ? 'low' : 'high',
83
+ source: 'system',
84
+ outcome: success ? 'success' : 'failure',
85
+ });
86
+ }
87
+ logRateLimit(nodeId, endpoint, details = {}) {
88
+ this.logEvent({
89
+ nodeId,
90
+ action: 'rate_limit_hit',
91
+ resource: endpoint,
92
+ details: {
93
+ endpoint,
94
+ ...details,
95
+ },
96
+ severity: 'medium',
97
+ source: 'system',
98
+ outcome: 'warning',
99
+ });
100
+ }
101
+ logError(nodeId, error, context = {}) {
102
+ this.logEvent({
103
+ nodeId,
104
+ action: 'error_occurred',
105
+ resource: 'system',
106
+ details: {
107
+ errorMessage: error.message,
108
+ errorStack: error.stack,
109
+ errorName: error.name,
110
+ ...context,
111
+ },
112
+ severity: 'high',
113
+ source: 'system',
114
+ outcome: 'failure',
115
+ });
116
+ }
117
+ logSuspiciousActivity(nodeId, activity, details = {}) {
118
+ this.logSecurityEvent({
119
+ nodeId,
120
+ action: 'suspicious_activity',
121
+ resource: 'security',
122
+ details: {
123
+ activity,
124
+ ...details,
125
+ },
126
+ severity: 'high',
127
+ source: 'system',
128
+ outcome: 'warning',
129
+ threatLevel: 'medium',
130
+ attackVector: details.attackVector,
131
+ });
132
+ }
133
+ getEvents(filter) {
134
+ let filteredEvents = [...this.events];
135
+ if (filter) {
136
+ if (filter.severity) {
137
+ filteredEvents = filteredEvents.filter(event => filter.severity.includes(event.severity));
138
+ }
139
+ if (filter.action) {
140
+ filteredEvents = filteredEvents.filter(event => filter.action.includes(event.action));
141
+ }
142
+ if (filter.resource) {
143
+ filteredEvents = filteredEvents.filter(event => filter.resource.includes(event.resource));
144
+ }
145
+ if (filter.outcome) {
146
+ filteredEvents = filteredEvents.filter(event => filter.outcome.includes(event.outcome));
147
+ }
148
+ if (filter.timeRange) {
149
+ filteredEvents = filteredEvents.filter(event => event.timestamp >= filter.timeRange.start &&
150
+ event.timestamp <= filter.timeRange.end);
151
+ }
152
+ if (filter.limit) {
153
+ filteredEvents = filteredEvents.slice(-filter.limit);
154
+ }
155
+ }
156
+ return filteredEvents.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
157
+ }
158
+ getSecurityEvents(limit) {
159
+ const events = limit ? this.securityEvents.slice(-limit) : [...this.securityEvents];
160
+ return events.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
161
+ }
162
+ addAlertRule(rule) {
163
+ this.alertRules.push(rule);
164
+ }
165
+ removeAlertRule(ruleId) {
166
+ this.alertRules = this.alertRules.filter(rule => rule.id !== ruleId);
167
+ }
168
+ getStatistics(timeWindowMs = 24 * 60 * 60 * 1000) {
169
+ const cutoffTime = new Date(Date.now() - timeWindowMs);
170
+ const recentEvents = this.events.filter(event => event.timestamp >= cutoffTime);
171
+ const stats = {
172
+ totalEvents: recentEvents.length,
173
+ eventsBySeverity: {},
174
+ eventsByAction: {},
175
+ eventsByOutcome: {},
176
+ securityEvents: this.securityEvents.filter(event => event.timestamp >= cutoffTime).length,
177
+ errorRate: 0,
178
+ timeWindow: timeWindowMs,
179
+ };
180
+ for (const event of recentEvents) {
181
+ stats.eventsBySeverity[event.severity] = (stats.eventsBySeverity[event.severity] || 0) + 1;
182
+ stats.eventsByAction[event.action] = (stats.eventsByAction[event.action] || 0) + 1;
183
+ stats.eventsByOutcome[event.outcome] = (stats.eventsByOutcome[event.outcome] || 0) + 1;
184
+ }
185
+ const failureEvents = stats.eventsByOutcome.failure || 0;
186
+ stats.errorRate = recentEvents.length > 0 ? failureEvents / recentEvents.length : 0;
187
+ return stats;
188
+ }
189
+ exportEvents(format = 'json', filter) {
190
+ const events = this.getEvents(filter);
191
+ if (format === 'csv') {
192
+ const headers = ['id', 'timestamp', 'nodeId', 'action', 'resource', 'severity', 'source', 'outcome'];
193
+ const csvLines = [headers.join(',')];
194
+ for (const event of events) {
195
+ const row = [
196
+ event.id,
197
+ event.timestamp.toISOString(),
198
+ event.nodeId,
199
+ event.action,
200
+ event.resource,
201
+ event.severity,
202
+ event.source,
203
+ event.outcome,
204
+ ];
205
+ csvLines.push(row.join(','));
206
+ }
207
+ return csvLines.join('\n');
208
+ }
209
+ return JSON.stringify(events, null, 2);
210
+ }
211
+ generateEventId() {
212
+ return `audit_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
213
+ }
214
+ initializeDefaultAlertRules() {
215
+ this.alertRules = [
216
+ {
217
+ id: 'high_error_rate',
218
+ name: 'High Error Rate',
219
+ condition: (_event) => {
220
+ const recentEvents = this.events.filter(e => e.timestamp.getTime() > Date.now() - 5 * 60 * 1000);
221
+ const errorEvents = recentEvents.filter(e => e.outcome === 'failure');
222
+ return errorEvents.length > 10;
223
+ },
224
+ severity: 'high',
225
+ enabled: true,
226
+ cooldownMs: 15 * 60 * 1000,
227
+ },
228
+ {
229
+ id: 'repeated_auth_failures',
230
+ name: 'Repeated Authentication Failures',
231
+ condition: (event) => {
232
+ if (event.action !== 'authentication' || event.outcome !== 'failure')
233
+ return false;
234
+ const recentAuthFailures = this.events.filter(e => e.action === 'authentication' &&
235
+ e.outcome === 'failure' &&
236
+ e.nodeId === event.nodeId &&
237
+ e.timestamp.getTime() > Date.now() - 10 * 60 * 1000);
238
+ return recentAuthFailures.length >= 5;
239
+ },
240
+ severity: 'critical',
241
+ enabled: true,
242
+ cooldownMs: 30 * 60 * 1000,
243
+ },
244
+ {
245
+ id: 'credential_usage_failure',
246
+ name: 'Credential Usage Failure',
247
+ condition: (event) => event.action === 'credential_usage' && event.outcome === 'failure',
248
+ severity: 'high',
249
+ enabled: true,
250
+ cooldownMs: 5 * 60 * 1000,
251
+ },
252
+ ];
253
+ }
254
+ checkAlertRules(event) {
255
+ for (const rule of this.alertRules) {
256
+ if (!rule.enabled)
257
+ continue;
258
+ if (rule.lastTriggered && Date.now() - rule.lastTriggered.getTime() < rule.cooldownMs) {
259
+ continue;
260
+ }
261
+ try {
262
+ if (rule.condition(event)) {
263
+ this.triggerAlert(rule, event);
264
+ rule.lastTriggered = new Date();
265
+ }
266
+ }
267
+ catch (error) {
268
+ console.error(`Error checking alert rule ${rule.id}:`, error);
269
+ }
270
+ }
271
+ }
272
+ triggerAlert(rule, event) {
273
+ const alert = {
274
+ ruleId: rule.id,
275
+ ruleName: rule.name,
276
+ severity: rule.severity,
277
+ triggeredBy: event,
278
+ timestamp: new Date(),
279
+ };
280
+ this.emit('alert', alert);
281
+ console.warn(`[ALERT] ${rule.name} (${rule.severity.toUpperCase()}): Triggered by ${event.action} on ${event.resource}`);
282
+ }
283
+ triggerSecurityAlert(event) {
284
+ const alert = {
285
+ type: 'security',
286
+ severity: event.threatLevel,
287
+ event,
288
+ timestamp: new Date(),
289
+ };
290
+ this.emit('securityAlert', alert);
291
+ console.error(`[SECURITY ALERT] ${event.threatLevel.toUpperCase()}: ${event.action} - ${event.details.activity || event.resource}`);
292
+ }
293
+ }
294
+ exports.AuditLogger = AuditLogger;
295
+ exports.auditLogger = new AuditLogger();
296
+ //# sourceMappingURL=AuditLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLogger.js","sourceRoot":"","sources":["../../../../nodes/AmazonSellingPartner/core/AuditLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { AxiosResponse, AxiosError } from 'axios';
2
+ import { NodeOperationError } from 'n8n-workflow';
3
+ export declare class ErrorHandler {
4
+ static handleApiError(response: AxiosResponse): Promise<NodeOperationError>;
5
+ static handleNetworkError(error: AxiosError): Promise<NodeOperationError>;
6
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorHandler = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class ErrorHandler {
6
+ static async handleApiError(response) {
7
+ var _a;
8
+ const { status, data, headers } = response;
9
+ if (status === 429) {
10
+ const retryAfter = headers['retry-after'] || headers['x-amzn-rate-limit-wait'] || '60';
11
+ return new n8n_workflow_1.NodeOperationError({}, 'Request throttled by Amazon SP-API', {
12
+ description: `Rate limit exceeded. Retry after ${retryAfter} seconds. Consider reducing request frequency.`,
13
+ });
14
+ }
15
+ if (status === 401 || status === 403) {
16
+ let errorDetails = '';
17
+ let errorCode = '';
18
+ if (data && data.errors && Array.isArray(data.errors)) {
19
+ const errors = data.errors;
20
+ errorCode = ((_a = errors[0]) === null || _a === void 0 ? void 0 : _a.code) || 'Unauthorized';
21
+ errorDetails = errors.map(err => `${err.code}: ${err.message}`).join('\n');
22
+ }
23
+ console.error('SP-API Auth Error:', JSON.stringify({
24
+ status,
25
+ errorCode,
26
+ errors: data === null || data === void 0 ? void 0 : data.errors,
27
+ headers: {
28
+ 'x-amzn-requestid': headers['x-amzn-requestid'],
29
+ 'x-amzn-errortype': headers['x-amzn-errortype'],
30
+ }
31
+ }, null, 2));
32
+ return new n8n_workflow_1.NodeOperationError({}, `Authentication failed (${status}): ${errorCode}`, {
33
+ description: `${errorDetails || 'Access to requested resource is denied.'}\n\n` +
34
+ `Troubleshooting:\n` +
35
+ `• Verify your Primary Marketplace matches your app authorization (e.g., India = eu-west-1)\n` +
36
+ `• Check AWS Region matches your marketplace\n` +
37
+ `• Ensure LWA credentials are correct and refresh token is valid\n` +
38
+ `• Verify your app has required SP-API roles in Developer Console\n\n` +
39
+ `Request ID: ${headers['x-amzn-requestid'] || 'N/A'}`,
40
+ });
41
+ }
42
+ if (status === 404) {
43
+ return new n8n_workflow_1.NodeOperationError({}, 'Resource not found', {
44
+ description: 'The requested resource was not found. Check your marketplace IDs and endpoint configuration.',
45
+ });
46
+ }
47
+ if (data && data.errors && Array.isArray(data.errors)) {
48
+ const errors = data.errors;
49
+ const primaryError = errors[0];
50
+ const errorMessages = errors.map(err => `${err.code}: ${err.message}`).join('; ');
51
+ return new n8n_workflow_1.NodeOperationError({}, `SP-API Error: ${primaryError.message}`, {
52
+ description: `Error Code: ${primaryError.code}\nDetails: ${errorMessages}`,
53
+ });
54
+ }
55
+ if (status >= 400 && status < 500) {
56
+ return new n8n_workflow_1.NodeOperationError({}, `Client error (${status}): ${(data === null || data === void 0 ? void 0 : data.message) || 'Bad request'}`, {
57
+ description: 'Check your request parameters and credentials.',
58
+ });
59
+ }
60
+ return new n8n_workflow_1.NodeOperationError({}, `Server error (${status}): Amazon SP-API is temporarily unavailable`, {
61
+ description: 'This is likely a temporary issue with Amazon\'s servers. Please try again later.',
62
+ });
63
+ }
64
+ static async handleNetworkError(error) {
65
+ if (error.code === 'ECONNABORTED' || error.code === 'ETIMEDOUT') {
66
+ return new n8n_workflow_1.NodeOperationError({}, 'Request timeout', {
67
+ description: 'The request to Amazon SP-API timed out. This may be due to network issues or high server load.',
68
+ });
69
+ }
70
+ if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {
71
+ return new n8n_workflow_1.NodeOperationError({}, 'Network connection failed', {
72
+ description: 'Could not connect to Amazon SP-API. Check your internet connection and firewall settings.',
73
+ });
74
+ }
75
+ const errorMessage = error.message || 'Unknown network error';
76
+ return new n8n_workflow_1.NodeOperationError({}, `Network error: ${errorMessage}`, {
77
+ description: 'An unexpected network error occurred while connecting to Amazon SP-API.',
78
+ });
79
+ }
80
+ }
81
+ exports.ErrorHandler = ErrorHandler;
82
+ //# sourceMappingURL=ErrorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../../../../nodes/AmazonSellingPartner/core/ErrorHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface Metric {
3
+ name: string;
4
+ value: number;
5
+ timestamp: Date;
6
+ tags?: Record<string, string>;
7
+ }
8
+ export interface HealthCheckResult {
9
+ status: 'healthy' | 'unhealthy' | 'degraded';
10
+ timestamp: Date;
11
+ checks: {
12
+ [key: string]: {
13
+ status: 'pass' | 'fail' | 'warn';
14
+ message?: string;
15
+ duration?: number;
16
+ };
17
+ };
18
+ }
19
+ export interface UsageStats {
20
+ totalRequests: number;
21
+ successfulRequests: number;
22
+ failedRequests: number;
23
+ averageResponseTime: number;
24
+ requestsByEndpoint: Record<string, number>;
25
+ errorsByType: Record<string, number>;
26
+ rateLimitHits: number;
27
+ lastResetTime: Date;
28
+ }
29
+ export declare class MetricsCollector extends EventEmitter {
30
+ private metrics;
31
+ private usageStats;
32
+ private readonly maxMetricsHistory;
33
+ private healthCheckInterval?;
34
+ constructor();
35
+ private initializeUsageStats;
36
+ recordMetric(name: string, value: number, tags?: Record<string, string>): void;
37
+ recordApiRequest(endpoint: string, duration: number, success: boolean, errorType?: string): void;
38
+ recordRateLimitHit(endpoint: string): void;
39
+ performHealthCheck(): Promise<HealthCheckResult>;
40
+ getUsageStats(): UsageStats;
41
+ getMetrics(limit?: number): Metric[];
42
+ resetStats(): void;
43
+ getMetricsSummary(timeWindowMs?: number): Record<string, any>;
44
+ private startHealthCheckMonitoring;
45
+ stopMonitoring(): void;
46
+ exportPrometheusMetrics(): string;
47
+ }
48
+ export declare const metricsCollector: MetricsCollector;