n8n-nodes-analytics 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 (32) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +214 -0
  3. package/dist/credentials/N8nApi.credentials.d.ts +10 -0
  4. package/dist/credentials/N8nApi.credentials.d.ts.map +1 -0
  5. package/dist/credentials/N8nApi.credentials.js +52 -0
  6. package/dist/credentials/N8nApi.credentials.js.map +1 -0
  7. package/dist/nodes/Analytics/Analytics.node.d.ts +6 -0
  8. package/dist/nodes/Analytics/Analytics.node.d.ts.map +1 -0
  9. package/dist/nodes/Analytics/Analytics.node.js +284 -0
  10. package/dist/nodes/Analytics/Analytics.node.js.map +1 -0
  11. package/dist/nodes/Analytics/Description.d.ts +5 -0
  12. package/dist/nodes/Analytics/Description.d.ts.map +1 -0
  13. package/dist/nodes/Analytics/Description.js +296 -0
  14. package/dist/nodes/Analytics/Description.js.map +1 -0
  15. package/dist/nodes/Analytics/GenericFunctions.d.ts +8 -0
  16. package/dist/nodes/Analytics/GenericFunctions.d.ts.map +1 -0
  17. package/dist/nodes/Analytics/GenericFunctions.js +100 -0
  18. package/dist/nodes/Analytics/GenericFunctions.js.map +1 -0
  19. package/dist/nodes/Analytics/Helpers.d.ts +101 -0
  20. package/dist/nodes/Analytics/Helpers.d.ts.map +1 -0
  21. package/dist/nodes/Analytics/Helpers.js +520 -0
  22. package/dist/nodes/Analytics/Helpers.js.map +1 -0
  23. package/dist/nodes/Analytics/Transport.d.ts +3 -0
  24. package/dist/nodes/Analytics/Transport.d.ts.map +1 -0
  25. package/dist/nodes/Analytics/Transport.js +10 -0
  26. package/dist/nodes/Analytics/Transport.js.map +1 -0
  27. package/dist/nodes/Analytics/Validators.d.ts +5 -0
  28. package/dist/nodes/Analytics/Validators.d.ts.map +1 -0
  29. package/dist/nodes/Analytics/Validators.js +43 -0
  30. package/dist/nodes/Analytics/Validators.js.map +1 -0
  31. package/dist/nodes/Analytics/icon.svg +10 -0
  32. package/package.json +62 -0
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nodeProperties = exports.operations = exports.resources = void 0;
4
+ exports.resources = [
5
+ {
6
+ displayName: 'Resource',
7
+ name: 'resource',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ options: [
11
+ {
12
+ name: 'Execution Analytics',
13
+ value: 'executionAnalytics',
14
+ },
15
+ ],
16
+ default: 'executionAnalytics',
17
+ },
18
+ ];
19
+ exports.operations = [
20
+ {
21
+ displayName: 'Operation',
22
+ name: 'operation',
23
+ type: 'options',
24
+ noDataExpression: true,
25
+ displayOptions: {
26
+ show: {
27
+ resource: ['executionAnalytics'],
28
+ },
29
+ },
30
+ options: [
31
+ {
32
+ name: 'Analyze Execution',
33
+ value: 'analyzeExecution',
34
+ description: 'Fetch and analyze a single execution',
35
+ action: 'Analyze an execution',
36
+ },
37
+ {
38
+ name: 'Token Summary',
39
+ value: 'tokenSummary',
40
+ description: 'Extract AI token usage across all AI nodes',
41
+ action: 'Summarize AI token usage',
42
+ },
43
+ {
44
+ name: 'Workflow Summary',
45
+ value: 'workflowSummary',
46
+ description: 'Get workflow-level metadata and stats',
47
+ action: 'Summarize the workflow',
48
+ },
49
+ {
50
+ name: 'AI Model Summary',
51
+ value: 'aiModelSummary',
52
+ description: 'Per-model breakdown of AI usage',
53
+ action: 'Summarize AI usage per model',
54
+ },
55
+ {
56
+ name: 'Cost Summary',
57
+ value: 'costSummary',
58
+ description: 'Estimate costs based on token usage',
59
+ action: 'Estimate AI costs',
60
+ },
61
+ {
62
+ name: 'Node Statistics',
63
+ value: 'nodeStatistics',
64
+ description: 'Per-node execution stats',
65
+ action: 'Get per-node statistics',
66
+ },
67
+ {
68
+ name: 'Execution Timeline',
69
+ value: 'executionTimeline',
70
+ description: 'Ordered timeline of node executions',
71
+ action: 'Build an execution timeline',
72
+ },
73
+ {
74
+ name: 'Export Analytics',
75
+ value: 'exportAnalytics',
76
+ description: 'Export full analytics in various formats',
77
+ action: 'Export full analytics',
78
+ },
79
+ ],
80
+ default: 'analyzeExecution',
81
+ },
82
+ ];
83
+ const commonParameters = [
84
+ {
85
+ displayName: 'Use Current Execution',
86
+ name: 'useCurrentExecution',
87
+ type: 'boolean',
88
+ default: false,
89
+ description: 'Whether to analyze the currently running execution instead of a manually specified one',
90
+ displayOptions: {
91
+ show: {
92
+ resource: ['executionAnalytics'],
93
+ },
94
+ },
95
+ },
96
+ {
97
+ displayName: 'Execution ID',
98
+ name: 'executionId',
99
+ type: 'string',
100
+ default: '',
101
+ placeholder: '12345',
102
+ description: 'The ID of the execution to analyze',
103
+ displayOptions: {
104
+ show: {
105
+ resource: ['executionAnalytics'],
106
+ useCurrentExecution: [false],
107
+ },
108
+ },
109
+ },
110
+ ];
111
+ const operationSpecificParameters = [
112
+ {
113
+ displayName: 'Group By',
114
+ name: 'groupBy',
115
+ type: 'options',
116
+ default: 'none',
117
+ description: 'How to group the aggregated token usage',
118
+ displayOptions: {
119
+ show: {
120
+ resource: ['executionAnalytics'],
121
+ operation: ['tokenSummary'],
122
+ },
123
+ },
124
+ options: [
125
+ { name: 'None (Total)', value: 'none' },
126
+ { name: 'Provider', value: 'provider' },
127
+ { name: 'Model', value: 'model' },
128
+ { name: 'Workflow', value: 'workflow' },
129
+ { name: 'Node', value: 'node' },
130
+ ],
131
+ },
132
+ {
133
+ displayName: 'Cost Source',
134
+ name: 'costSource',
135
+ type: 'options',
136
+ default: 'builtin',
137
+ description: 'Where to source the per-token pricing from',
138
+ displayOptions: {
139
+ show: {
140
+ resource: ['executionAnalytics'],
141
+ operation: ['costSummary'],
142
+ },
143
+ },
144
+ options: [
145
+ { name: 'Built-in Pricing Table', value: 'builtin' },
146
+ { name: 'Custom Pricing', value: 'custom' },
147
+ ],
148
+ },
149
+ {
150
+ displayName: 'Currency',
151
+ name: 'currency',
152
+ type: 'options',
153
+ default: 'USD',
154
+ description: 'Currency to express estimated costs in (converted from USD)',
155
+ displayOptions: {
156
+ show: {
157
+ resource: ['executionAnalytics'],
158
+ operation: ['costSummary'],
159
+ },
160
+ },
161
+ options: [
162
+ { name: 'USD', value: 'USD' },
163
+ { name: 'EUR', value: 'EUR' },
164
+ { name: 'NPR', value: 'NPR' },
165
+ { name: 'GBP', value: 'GBP' },
166
+ { name: 'INR', value: 'INR' },
167
+ ],
168
+ },
169
+ {
170
+ displayName: 'Custom Pricing (JSON)',
171
+ name: 'customPricing',
172
+ type: 'json',
173
+ default: '{\n "my-model": { "prompt": 1.0, "completion": 2.0 }\n}',
174
+ description: 'Custom pricing per 1M tokens, merged over the built-in table. Format: {"model": {"prompt": number, "completion": number}}.',
175
+ displayOptions: {
176
+ show: {
177
+ resource: ['executionAnalytics'],
178
+ operation: ['costSummary'],
179
+ costSource: ['custom'],
180
+ },
181
+ },
182
+ },
183
+ {
184
+ displayName: 'Filter',
185
+ name: 'filterType',
186
+ type: 'options',
187
+ default: 'all',
188
+ description: 'Which nodes to include in the statistics',
189
+ displayOptions: {
190
+ show: {
191
+ resource: ['executionAnalytics'],
192
+ operation: ['nodeStatistics'],
193
+ },
194
+ },
195
+ options: [
196
+ { name: 'All Nodes', value: 'all' },
197
+ { name: 'AI Nodes Only', value: 'ai' },
198
+ { name: 'Failed Nodes', value: 'failed' },
199
+ { name: 'Successful Nodes', value: 'successful' },
200
+ { name: 'Trigger Nodes', value: 'trigger' },
201
+ { name: 'HTTP Nodes', value: 'http' },
202
+ ],
203
+ },
204
+ {
205
+ displayName: 'Output Format',
206
+ name: 'outputFormat',
207
+ type: 'options',
208
+ default: 'json',
209
+ description: 'Format of the exported analytics payload',
210
+ displayOptions: {
211
+ show: {
212
+ resource: ['executionAnalytics'],
213
+ operation: ['exportAnalytics'],
214
+ },
215
+ },
216
+ options: [
217
+ { name: 'JSON', value: 'json' },
218
+ { name: 'Flat JSON', value: 'flatJson' },
219
+ { name: 'CSV', value: 'csv' },
220
+ { name: 'Markdown', value: 'markdown' },
221
+ ],
222
+ },
223
+ ];
224
+ const advancedOptions = [
225
+ {
226
+ displayName: 'Advanced Options',
227
+ name: 'advancedOptions',
228
+ type: 'collection',
229
+ placeholder: 'Add Option',
230
+ default: {},
231
+ displayOptions: {
232
+ show: {
233
+ resource: ['executionAnalytics'],
234
+ },
235
+ },
236
+ options: [
237
+ {
238
+ displayName: 'Include Token Usage',
239
+ name: 'includeTokenUsage',
240
+ type: 'boolean',
241
+ default: true,
242
+ description: 'Whether to include AI token usage fields where applicable',
243
+ },
244
+ {
245
+ displayName: 'Include Costs',
246
+ name: 'includeCosts',
247
+ type: 'boolean',
248
+ default: false,
249
+ description: 'Whether to include estimated cost fields where applicable',
250
+ },
251
+ {
252
+ displayName: 'Include Errors',
253
+ name: 'includeErrors',
254
+ type: 'boolean',
255
+ default: true,
256
+ description: 'Whether to include error details for failed nodes',
257
+ },
258
+ {
259
+ displayName: 'Include Node Timing',
260
+ name: 'includeNodeTiming',
261
+ type: 'boolean',
262
+ default: true,
263
+ description: 'Whether to include per-node start/end times and durations',
264
+ },
265
+ {
266
+ displayName: 'Include Workflow Metadata',
267
+ name: 'includeWorkflowMetadata',
268
+ type: 'boolean',
269
+ default: true,
270
+ description: 'Whether to include workflow-level metadata in the output',
271
+ },
272
+ {
273
+ displayName: 'Include AI Metadata',
274
+ name: 'includeAiMetadata',
275
+ type: 'boolean',
276
+ default: true,
277
+ description: 'Whether to include provider/model metadata for AI nodes',
278
+ },
279
+ {
280
+ displayName: 'Include Raw Execution',
281
+ name: 'includeRawExecution',
282
+ type: 'boolean',
283
+ default: false,
284
+ description: 'Whether to attach the raw execution response (large payload)',
285
+ },
286
+ ],
287
+ },
288
+ ];
289
+ exports.nodeProperties = [
290
+ ...exports.resources,
291
+ ...exports.operations,
292
+ ...commonParameters,
293
+ ...operationSpecificParameters,
294
+ ...advancedOptions,
295
+ ];
296
+ //# sourceMappingURL=Description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Description.js","sourceRoot":"","sources":["../../../nodes/Analytics/Description.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { IDataObject, IExecuteFunctions, IHttpRequestMethods } from 'n8n-workflow';
2
+ export declare function n8nApiRequest(this: IExecuteFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, query?: IDataObject): Promise<any>;
3
+ export declare function resolveExecutionId(context: IExecuteFunctions, itemIndex: number): string;
4
+ export declare function formatDuration(ms: number): string;
5
+ export declare function deepGet(obj: any, path: string): any;
6
+ export declare function safeDate(value: any): string;
7
+ export declare function calculateDuration(start: any, end: any): number;
8
+ //# sourceMappingURL=GenericFunctions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.d.ts","sourceRoot":"","sources":["../../../nodes/Analytics/GenericFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,MAAM,cAAc,CAAC;AAWtB,wBAAsB,aAAa,CAClC,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,GAAG,CAAC,CA+Bd;AAOD,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,GACf,MAAM,CAgBR;AAMD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAMD,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAYnD;AAMD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAS3C;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAU9D"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateDuration = exports.safeDate = exports.deepGet = exports.formatDuration = exports.resolveExecutionId = exports.n8nApiRequest = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ async function n8nApiRequest(method, endpoint, body, query) {
6
+ const credentials = await this.getCredentials('n8nApi');
7
+ const baseUrl = credentials.baseUrl.replace(/\/+$/, '');
8
+ const options = {
9
+ method,
10
+ url: `${baseUrl}${endpoint}`,
11
+ headers: {
12
+ 'X-N8N-API-KEY': credentials.apiKey,
13
+ 'Accept': 'application/json',
14
+ },
15
+ json: true,
16
+ };
17
+ if (body && Object.keys(body).length > 0) {
18
+ options.body = body;
19
+ }
20
+ if (query && Object.keys(query).length > 0) {
21
+ options.qs = query;
22
+ }
23
+ try {
24
+ return await this.helpers.httpRequest(options);
25
+ }
26
+ catch (error) {
27
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error, {
28
+ message: `n8n API request failed: ${error.message}`,
29
+ description: `${method} ${endpoint} returned an error`,
30
+ });
31
+ }
32
+ }
33
+ exports.n8nApiRequest = n8nApiRequest;
34
+ function resolveExecutionId(context, itemIndex) {
35
+ const useCurrentExecution = context.getNodeParameter('useCurrentExecution', itemIndex, false);
36
+ if (useCurrentExecution) {
37
+ const executionData = context.getExecutionId();
38
+ if (executionData) {
39
+ return executionData;
40
+ }
41
+ throw new Error('Could not retrieve current execution ID. Provide an execution ID manually.');
42
+ }
43
+ return context.getNodeParameter('executionId', itemIndex, '');
44
+ }
45
+ exports.resolveExecutionId = resolveExecutionId;
46
+ function formatDuration(ms) {
47
+ if (ms < 0)
48
+ return '0ms';
49
+ if (ms < 1000)
50
+ return `${Math.round(ms)}ms`;
51
+ if (ms < 60000)
52
+ return `${(ms / 1000).toFixed(2)}s`;
53
+ const minutes = Math.floor(ms / 60000);
54
+ const seconds = ((ms % 60000) / 1000).toFixed(1);
55
+ return `${minutes}m ${seconds}s`;
56
+ }
57
+ exports.formatDuration = formatDuration;
58
+ function deepGet(obj, path) {
59
+ if (!obj || !path)
60
+ return undefined;
61
+ const keys = path.split('.');
62
+ let current = obj;
63
+ for (const key of keys) {
64
+ if (current === null || current === undefined)
65
+ return undefined;
66
+ current = current[key];
67
+ }
68
+ return current;
69
+ }
70
+ exports.deepGet = deepGet;
71
+ function safeDate(value) {
72
+ if (!value)
73
+ return '';
74
+ try {
75
+ const date = new Date(value);
76
+ if (isNaN(date.getTime()))
77
+ return '';
78
+ return date.toISOString();
79
+ }
80
+ catch (_a) {
81
+ return '';
82
+ }
83
+ }
84
+ exports.safeDate = safeDate;
85
+ function calculateDuration(start, end) {
86
+ if (!start || !end)
87
+ return 0;
88
+ try {
89
+ const startDate = new Date(start);
90
+ const endDate = new Date(end);
91
+ if (isNaN(startDate.getTime()) || isNaN(endDate.getTime()))
92
+ return 0;
93
+ return endDate.getTime() - startDate.getTime();
94
+ }
95
+ catch (_a) {
96
+ return 0;
97
+ }
98
+ }
99
+ exports.calculateDuration = calculateDuration;
100
+ //# sourceMappingURL=GenericFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/Analytics/GenericFunctions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ export interface ITokenUsage {
2
+ prompt_tokens: number;
3
+ completion_tokens: number;
4
+ cached_tokens: number;
5
+ reasoning_tokens: number;
6
+ total_tokens: number;
7
+ }
8
+ export interface IAiNodeAnalytics {
9
+ node: string;
10
+ type: string;
11
+ provider: string;
12
+ model: string;
13
+ tokens: ITokenUsage;
14
+ latency_ms: number;
15
+ runs: number;
16
+ }
17
+ export interface INodeAnalytics {
18
+ name: string;
19
+ type: string;
20
+ order: number;
21
+ status: 'success' | 'error' | 'unknown';
22
+ startTime: string;
23
+ endTime: string;
24
+ duration_ms: number;
25
+ items: number;
26
+ retries: number;
27
+ error?: string;
28
+ isAiNode: boolean;
29
+ }
30
+ export interface ITimelineEntry {
31
+ order: number;
32
+ node: string;
33
+ type: string;
34
+ startTime: string;
35
+ duration_ms: number;
36
+ status: string;
37
+ }
38
+ export interface ICostBreakdown {
39
+ prompt_cost: number;
40
+ completion_cost: number;
41
+ reasoning_cost: number;
42
+ total_cost: number;
43
+ currency: string;
44
+ }
45
+ export interface IWorkflowMetadata {
46
+ workflowId: string;
47
+ workflowName: string;
48
+ executionId: string;
49
+ status: string;
50
+ mode: string;
51
+ startedAt: string;
52
+ stoppedAt: string;
53
+ duration_ms: number;
54
+ nodeCount: number;
55
+ finished: boolean;
56
+ error?: string;
57
+ }
58
+ export declare function detectProvider(nodeType: string, model?: string): string;
59
+ export declare function findTokenUsageObject(value: any, depth?: number): Record<string, any> | undefined;
60
+ export declare function extractTokenUsage(rawUsage: Record<string, any> | undefined): ITokenUsage;
61
+ export declare function addTokens(a: ITokenUsage, b: ITokenUsage): ITokenUsage;
62
+ export declare function extractModel(runEntry: any, nodeParams?: any): string;
63
+ interface IParsedExecution {
64
+ runData: Record<string, any[]>;
65
+ workflow: any;
66
+ nodeParamsByName: Record<string, any>;
67
+ }
68
+ export declare function parseExecution(execution: any): IParsedExecution;
69
+ export declare function extractNodeAnalytics(execution: any): INodeAnalytics[];
70
+ export declare function extractAiAnalytics(execution: any): IAiNodeAnalytics[];
71
+ export type GroupBy = 'none' | 'provider' | 'model' | 'workflow' | 'node';
72
+ export interface IAggregatedTokens {
73
+ group: string;
74
+ tokens: ITokenUsage;
75
+ nodeCount: number;
76
+ }
77
+ export declare function aggregateTokens(aiNodes: IAiNodeAnalytics[], groupBy: GroupBy, workflowName?: string): IAggregatedTokens[];
78
+ export declare const PRICING: Record<string, {
79
+ prompt: number;
80
+ completion: number;
81
+ }>;
82
+ export declare function findPricing(model: string, pricingTable: Record<string, {
83
+ prompt: number;
84
+ completion: number;
85
+ }>): {
86
+ prompt: number;
87
+ completion: number;
88
+ } | undefined;
89
+ export declare function calculateCost(tokens: ITokenUsage, model: string, currency: string, customPricing?: Record<string, {
90
+ prompt: number;
91
+ completion: number;
92
+ }>): ICostBreakdown;
93
+ export declare function buildTimeline(nodes: INodeAnalytics[]): ITimelineEntry[];
94
+ export declare function extractWorkflowMetadata(execution: any): IWorkflowMetadata;
95
+ export type FilterType = 'all' | 'ai' | 'failed' | 'successful' | 'trigger' | 'http';
96
+ export declare function filterNodes(nodes: INodeAnalytics[], filter: FilterType): INodeAnalytics[];
97
+ export declare function toFlatJson(data: any, prefix?: string): Record<string, any>;
98
+ export declare function toCsv(data: any): string;
99
+ export declare function toMarkdown(data: any, title?: string): string;
100
+ export {};
101
+ //# sourceMappingURL=Helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Helpers.d.ts","sourceRoot":"","sources":["../../../nodes/Analytics/Helpers.ts"],"names":[],"mappings":"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"}