@luzconsulting/n8n-nodes-vibetrack 0.1.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 (56) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +69 -0
  3. package/dist/credentials/VibeTrackApi.credentials.d.ts +10 -0
  4. package/dist/credentials/VibeTrackApi.credentials.js +48 -0
  5. package/dist/credentials/vibetrack-dark-icon.svg +1 -0
  6. package/dist/credentials/vibetrack-light-icon.svg +1 -0
  7. package/dist/nodes/VibeTrack/VibeTrack.node.d.ts +13 -0
  8. package/dist/nodes/VibeTrack/VibeTrack.node.js +141 -0
  9. package/dist/nodes/VibeTrack/VibeTrack.node.json +18 -0
  10. package/dist/nodes/VibeTrack/actions/apiCall/apiCall.actions.d.ts +2 -0
  11. package/dist/nodes/VibeTrack/actions/apiCall/apiCall.actions.js +35 -0
  12. package/dist/nodes/VibeTrack/actions/apiCall/index.d.ts +3 -0
  13. package/dist/nodes/VibeTrack/actions/apiCall/index.js +105 -0
  14. package/dist/nodes/VibeTrack/actions/attribution/attribution.actions.d.ts +2 -0
  15. package/dist/nodes/VibeTrack/actions/attribution/attribution.actions.js +58 -0
  16. package/dist/nodes/VibeTrack/actions/attribution/index.d.ts +3 -0
  17. package/dist/nodes/VibeTrack/actions/attribution/index.js +105 -0
  18. package/dist/nodes/VibeTrack/actions/conversion/conversion.actions.d.ts +2 -0
  19. package/dist/nodes/VibeTrack/actions/conversion/conversion.actions.js +86 -0
  20. package/dist/nodes/VibeTrack/actions/conversion/index.d.ts +3 -0
  21. package/dist/nodes/VibeTrack/actions/conversion/index.js +193 -0
  22. package/dist/nodes/VibeTrack/actions/project/index.d.ts +3 -0
  23. package/dist/nodes/VibeTrack/actions/project/index.js +22 -0
  24. package/dist/nodes/VibeTrack/actions/project/project.actions.d.ts +2 -0
  25. package/dist/nodes/VibeTrack/actions/project/project.actions.js +16 -0
  26. package/dist/nodes/VibeTrack/actions/resource.selector.d.ts +2 -0
  27. package/dist/nodes/VibeTrack/actions/resource.selector.js +47 -0
  28. package/dist/nodes/VibeTrack/actions/router.d.ts +2 -0
  29. package/dist/nodes/VibeTrack/actions/router.js +31 -0
  30. package/dist/nodes/VibeTrack/actions/team/index.d.ts +3 -0
  31. package/dist/nodes/VibeTrack/actions/team/index.js +104 -0
  32. package/dist/nodes/VibeTrack/actions/team/team.actions.d.ts +2 -0
  33. package/dist/nodes/VibeTrack/actions/team/team.actions.js +37 -0
  34. package/dist/nodes/VibeTrack/actions/trigger/index.d.ts +3 -0
  35. package/dist/nodes/VibeTrack/actions/trigger/index.js +88 -0
  36. package/dist/nodes/VibeTrack/actions/trigger/trigger.actions.d.ts +2 -0
  37. package/dist/nodes/VibeTrack/actions/trigger/trigger.actions.js +31 -0
  38. package/dist/nodes/VibeTrack/actions/webhook/index.d.ts +3 -0
  39. package/dist/nodes/VibeTrack/actions/webhook/index.js +129 -0
  40. package/dist/nodes/VibeTrack/actions/webhook/webhook.actions.d.ts +2 -0
  41. package/dist/nodes/VibeTrack/actions/webhook/webhook.actions.js +83 -0
  42. package/dist/nodes/VibeTrack/helpers/apiclient.d.ts +14 -0
  43. package/dist/nodes/VibeTrack/helpers/apiclient.js +61 -0
  44. package/dist/nodes/VibeTrack/methods/loadOptions/common.loadOptions.d.ts +5 -0
  45. package/dist/nodes/VibeTrack/methods/loadOptions/common.loadOptions.js +86 -0
  46. package/dist/nodes/VibeTrack/methods/loadOptions/index.d.ts +1 -0
  47. package/dist/nodes/VibeTrack/methods/loadOptions/index.js +37 -0
  48. package/dist/nodes/VibeTrack/trigger/VibeTrackTrigger.node.d.ts +19 -0
  49. package/dist/nodes/VibeTrack/trigger/VibeTrackTrigger.node.js +208 -0
  50. package/dist/nodes/VibeTrack/trigger/VibeTrackTrigger.node.json +18 -0
  51. package/dist/nodes/VibeTrack/trigger/trigger.instant.properties.d.ts +2 -0
  52. package/dist/nodes/VibeTrack/trigger/trigger.instant.properties.js +71 -0
  53. package/dist/nodes/VibeTrack/vibetrack-dark-icon.svg +1 -0
  54. package/dist/nodes/VibeTrack/vibetrack-light-icon.svg +1 -0
  55. package/dist/package.json +76 -0
  56. package/package.json +76 -0
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VibeTrackTrigger = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const apiclient_1 = require("../helpers/apiclient");
7
+ const common_loadOptions_1 = require("../methods/loadOptions/common.loadOptions");
8
+ const trigger_instant_properties_1 = require("./trigger.instant.properties");
9
+ function isNotFoundError(error) {
10
+ var _a;
11
+ const apiError = error;
12
+ return apiError.httpCode === "404" || ((_a = apiError.response) === null || _a === void 0 ? void 0 : _a.statusCode) === 404;
13
+ }
14
+ function buildFilter(ctx) {
15
+ var _a;
16
+ const filters = ((_a = ctx.getNodeParameter("filters", 0)) !== null && _a !== void 0 ? _a : {});
17
+ const filter = {};
18
+ if (typeof filters.triggerId === "string" && filters.triggerId.trim()) {
19
+ filter.triggerId = filters.triggerId.trim();
20
+ }
21
+ if (typeof filters.eventName === "string" && filters.eventName.trim()) {
22
+ filter.eventName = filters.eventName.trim();
23
+ }
24
+ return filter;
25
+ }
26
+ function isValidSignature(secret, payload, signatureHeader) {
27
+ const provided = signatureHeader.trim().replace(/^sha256=/i, "");
28
+ if (!provided)
29
+ return false;
30
+ const digests = [
31
+ (0, node_crypto_1.createHmac)("sha256", secret).update(payload).digest("hex"),
32
+ (0, node_crypto_1.createHmac)("sha256", secret).update(payload).digest("base64"),
33
+ ];
34
+ const providedBuffer = Buffer.from(provided);
35
+ return digests.some((digest) => {
36
+ const digestBuffer = Buffer.from(digest);
37
+ return (digestBuffer.length === providedBuffer.length &&
38
+ (0, node_crypto_1.timingSafeEqual)(digestBuffer, providedBuffer));
39
+ });
40
+ }
41
+ class VibeTrackTrigger {
42
+ constructor() {
43
+ this.description = {
44
+ displayName: "VibeTrack Trigger",
45
+ name: "vibeTrackTrigger",
46
+ icon: {
47
+ light: "file:../vibetrack-light-icon.svg",
48
+ dark: "file:../vibetrack-dark-icon.svg",
49
+ },
50
+ group: ["trigger"],
51
+ version: 1,
52
+ description: "Starts a workflow when a VibeTrack conversion is tracked",
53
+ subtitle: '={{$parameter["events"]}}',
54
+ defaults: {
55
+ name: "VibeTrack Trigger",
56
+ description: "Starts a workflow when a VibeTrack conversion is tracked",
57
+ },
58
+ credentials: [{ name: "vibeTrackApi", required: true }],
59
+ usableAsTool: true,
60
+ webhooks: [
61
+ {
62
+ name: "default",
63
+ httpMethod: "POST",
64
+ responseMode: "onReceived",
65
+ isFullPath: true,
66
+ path: "",
67
+ },
68
+ ],
69
+ inputs: [],
70
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
71
+ properties: trigger_instant_properties_1.instantProperties,
72
+ };
73
+ this.methods = {
74
+ loadOptions: {
75
+ getProjects: common_loadOptions_1.getProjects,
76
+ getConversionTriggers: common_loadOptions_1.getConversionTriggers,
77
+ },
78
+ };
79
+ this.webhookMethods = {
80
+ default: {
81
+ async checkExists() {
82
+ var _a;
83
+ const webhookData = this.getWorkflowStaticData("node");
84
+ const id = webhookData.subscriptionId;
85
+ if (!id)
86
+ return false;
87
+ const projectId = webhookData.projectId ||
88
+ this.getNodeParameter("projectId", 0);
89
+ try {
90
+ const remote = await (0, apiclient_1.vtRequest)(this, "GET", `/v1/webhooks/${encodeURIComponent(id)}`, { qs: { projectId } });
91
+ const currentUrl = this.getNodeWebhookUrl("default");
92
+ if (((_a = remote === null || remote === void 0 ? void 0 : remote.webhook) === null || _a === void 0 ? void 0 : _a.hookUrl) &&
93
+ remote.webhook.hookUrl !== currentUrl) {
94
+ delete webhookData.subscriptionId;
95
+ delete webhookData.secret;
96
+ return false;
97
+ }
98
+ return true;
99
+ }
100
+ catch (e) {
101
+ if (isNotFoundError(e)) {
102
+ delete webhookData.subscriptionId;
103
+ delete webhookData.secret;
104
+ return false;
105
+ }
106
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), e, {
107
+ message: "Failed to verify existing webhook subscription",
108
+ });
109
+ }
110
+ },
111
+ async create() {
112
+ var _a, _b;
113
+ const webhookUrl = this.getNodeWebhookUrl("default");
114
+ if (!webhookUrl) {
115
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), "Webhook URL could not be determined.");
116
+ }
117
+ const projectId = (_a = this.getNodeParameter("projectId", 0)) === null || _a === void 0 ? void 0 : _a.trim();
118
+ if (!projectId) {
119
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), "Please select a project.");
120
+ }
121
+ const filter = buildFilter(this);
122
+ const body = {
123
+ projectId,
124
+ hookUrl: webhookUrl,
125
+ type: "conversion.created",
126
+ };
127
+ if (Object.keys(filter).length) {
128
+ body.filter = filter;
129
+ }
130
+ try {
131
+ const res = await (0, apiclient_1.vtRequest)(this, "POST", "/v1/webhooks", { body });
132
+ if (!((_b = res === null || res === void 0 ? void 0 : res.webhook) === null || _b === void 0 ? void 0 : _b.id)) {
133
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), "VibeTrack: Could not read the webhook ID from the response.", { description: JSON.stringify(res || {}) });
134
+ }
135
+ const webhookData = this.getWorkflowStaticData("node");
136
+ webhookData.subscriptionId = res.webhook.id;
137
+ webhookData.projectId = projectId;
138
+ if (res.secret) {
139
+ webhookData.secret = res.secret;
140
+ }
141
+ else {
142
+ delete webhookData.secret;
143
+ }
144
+ return true;
145
+ }
146
+ catch (e) {
147
+ if (e instanceof n8n_workflow_1.NodeOperationError)
148
+ throw e;
149
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), e, {
150
+ message: "Failed to create webhook subscription",
151
+ });
152
+ }
153
+ },
154
+ async delete() {
155
+ const webhookData = this.getWorkflowStaticData("node");
156
+ const id = webhookData.subscriptionId;
157
+ if (!id)
158
+ return true;
159
+ const projectId = webhookData.projectId ||
160
+ this.getNodeParameter("projectId", 0);
161
+ try {
162
+ await (0, apiclient_1.vtRequest)(this, "DELETE", `/v1/webhooks/${encodeURIComponent(id)}`, { qs: { projectId } });
163
+ }
164
+ catch (e) {
165
+ if (!isNotFoundError(e)) {
166
+ delete webhookData.subscriptionId;
167
+ delete webhookData.secret;
168
+ delete webhookData.projectId;
169
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), e, {
170
+ message: "Failed to delete webhook subscription",
171
+ });
172
+ }
173
+ }
174
+ delete webhookData.subscriptionId;
175
+ delete webhookData.secret;
176
+ delete webhookData.projectId;
177
+ return true;
178
+ },
179
+ },
180
+ };
181
+ }
182
+ async webhook() {
183
+ var _a, _b, _c;
184
+ const req = this.getRequestObject();
185
+ const body = ((_a = req.body) !== null && _a !== void 0 ? _a : {});
186
+ const options = ((_b = this.getNodeParameter("options", 0)) !== null && _b !== void 0 ? _b : {});
187
+ const validateSignature = options.validateSignature !== false;
188
+ const webhookData = this.getWorkflowStaticData("node");
189
+ if (validateSignature && webhookData.secret) {
190
+ const signatureHeader = String((_c = req.headers["x-vibetrack-signature"]) !== null && _c !== void 0 ? _c : "");
191
+ const rawBody = req.rawBody;
192
+ const payload = rawBody !== null && rawBody !== void 0 ? rawBody : Buffer.from(JSON.stringify(body));
193
+ if (!isValidSignature(webhookData.secret, payload, signatureHeader)) {
194
+ return {
195
+ webhookResponse: {
196
+ body: { error: "Invalid signature" },
197
+ responseCode: 401,
198
+ },
199
+ };
200
+ }
201
+ }
202
+ return {
203
+ webhookResponse: { body: { ok: true }, responseCode: 200 },
204
+ workflowData: [[{ json: body }]],
205
+ };
206
+ }
207
+ }
208
+ exports.VibeTrackTrigger = VibeTrackTrigger;
@@ -0,0 +1,18 @@
1
+ {
2
+ "node": "n8n-nodes-base.VibeTrackTrigger",
3
+ "nodeVersion": "1.0.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Analytics", "Marketing"],
6
+ "resources": {
7
+ "credentialDocumentation": [
8
+ {
9
+ "url": "https://github.com/luzconsulting/n8n-nodes-vibetrack/blob/main/CREDENTIALS.md"
10
+ }
11
+ ],
12
+ "primaryDocumentation": [
13
+ {
14
+ "url": "https://github.com/luzconsulting/n8n-nodes-vibetrack/blob/main/README.md"
15
+ }
16
+ ]
17
+ }
18
+ }
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from "n8n-workflow";
2
+ export declare const instantProperties: INodeProperties[];
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instantProperties = void 0;
4
+ exports.instantProperties = [
5
+ {
6
+ displayName: "Project Name or ID",
7
+ name: "projectId",
8
+ type: "options",
9
+ typeOptions: { loadOptionsMethod: "getProjects" },
10
+ default: "",
11
+ required: true,
12
+ description: 'The project to listen to. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
13
+ },
14
+ {
15
+ displayName: "Event",
16
+ name: "events",
17
+ type: "options",
18
+ default: "conversion.created",
19
+ options: [
20
+ {
21
+ name: "Conversion Created",
22
+ value: "conversion.created",
23
+ description: "Triggers when a new conversion is tracked",
24
+ },
25
+ ],
26
+ description: "Which event should trigger the webhook?",
27
+ },
28
+ {
29
+ displayName: "Filters",
30
+ name: "filters",
31
+ type: "collection",
32
+ placeholder: "Add Filter",
33
+ default: {},
34
+ options: [
35
+ {
36
+ displayName: "Event Name",
37
+ name: "eventName",
38
+ type: "string",
39
+ default: "",
40
+ description: "Only trigger for conversions containing this event name",
41
+ },
42
+ {
43
+ displayName: "Trigger Name or ID",
44
+ name: "triggerId",
45
+ type: "options",
46
+ typeOptions: {
47
+ loadOptionsMethod: "getConversionTriggers",
48
+ loadOptionsDependsOn: ["projectId"],
49
+ },
50
+ default: "",
51
+ description: 'Only trigger for conversions of this conversion trigger. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
52
+ },
53
+ ],
54
+ },
55
+ {
56
+ displayName: "Options",
57
+ name: "options",
58
+ type: "collection",
59
+ placeholder: "Add Option",
60
+ default: {},
61
+ options: [
62
+ {
63
+ displayName: "Validate Signature",
64
+ name: "validateSignature",
65
+ type: "boolean",
66
+ default: true,
67
+ description: "Whether to validate the X-VibeTrack-Signature header of incoming deliveries against the stored webhook secret",
68
+ },
69
+ ],
70
+ },
71
+ ];
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 350.304 383" xmlns="http://www.w3.org/2000/svg" fill="none"><g fill="#6b54ec"><path d="m137.316 370.142-97.114-56.069a77.2 77.2 0 0 1-28.155-28.12A77.2 77.2 0 0 1 1.67 247.537l-.31-110.741a77.16 77.16 0 0 1 10.325-38.75A77.16 77.16 0 0 1 40.08 69.732l96.059-55.103a77.2 77.2 0 0 1 38.458-10.22 77.2 77.2 0 0 1 38.43 10.322L310.141 70.8a77.2 77.2 0 0 1 28.152 28.119 77.15 77.15 0 0 1 10.372 38.412l.311 110.742a77.1 77.1 0 0 1-10.322 38.751 77.13 77.13 0 0 1-28.398 28.315l-96.061 55.101a77.16 77.16 0 0 1-38.452 10.225 77.2 77.2 0 0 1-38.428-10.322M191.55 80.555a35.08 35.08 0 0 0-34.921-.056l-71.541 40.944a35.11 35.11 0 0 0-17.632 30.54l.312 82.428a35.09 35.09 0 0 0 17.51 30.215l72.315 41.751a35.1 35.1 0 0 0 17.456 4.685 35.05 35.05 0 0 0 17.467-4.628l71.541-40.943a35.09 35.09 0 0 0 17.632-30.54l-.312-82.428a35.06 35.06 0 0 0-17.511-30.216z"/><path d="M213.331 157.854a23.34 23.34 0 0 1 11.676 20.154l.094 31.066a23.35 23.35 0 0 1-11.737 20.33l-26.951 15.451a23.36 23.36 0 0 1-23.292-.035l-27.292-15.756a23.36 23.36 0 0 1-11.676-20.155l-.094-31.065a23.35 23.35 0 0 1 11.738-20.33l26.95-15.452a23.36 23.36 0 0 1 23.293.035z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 350.304 383" xmlns="http://www.w3.org/2000/svg" fill="none"><g fill="#6b54ec"><path d="m137.316 370.142-97.114-56.069a77.2 77.2 0 0 1-28.155-28.12A77.2 77.2 0 0 1 1.67 247.537l-.31-110.741a77.16 77.16 0 0 1 10.325-38.75A77.16 77.16 0 0 1 40.08 69.732l96.059-55.103a77.2 77.2 0 0 1 38.458-10.22 77.2 77.2 0 0 1 38.43 10.322L310.141 70.8a77.2 77.2 0 0 1 28.152 28.119 77.15 77.15 0 0 1 10.372 38.412l.311 110.742a77.1 77.1 0 0 1-10.322 38.751 77.13 77.13 0 0 1-28.398 28.315l-96.061 55.101a77.16 77.16 0 0 1-38.452 10.225 77.2 77.2 0 0 1-38.428-10.322M191.55 80.555a35.08 35.08 0 0 0-34.921-.056l-71.541 40.944a35.11 35.11 0 0 0-17.632 30.54l.312 82.428a35.09 35.09 0 0 0 17.51 30.215l72.315 41.751a35.1 35.1 0 0 0 17.456 4.685 35.05 35.05 0 0 0 17.467-4.628l71.541-40.943a35.09 35.09 0 0 0 17.632-30.54l-.312-82.428a35.06 35.06 0 0 0-17.511-30.216z"/><path d="M213.331 157.854a23.34 23.34 0 0 1 11.676 20.154l.094 31.066a23.35 23.35 0 0 1-11.737 20.33l-26.951 15.451a23.36 23.36 0 0 1-23.292-.035l-27.292-15.756a23.36 23.36 0 0 1-11.676-20.155l-.094-31.065a23.35 23.35 0 0 1 11.738-20.33l26.95-15.452a23.36 23.36 0 0 1 23.293.035z"/></g></svg>
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@luzconsulting/n8n-nodes-vibetrack",
3
+ "version": "0.1.0",
4
+ "description": "Connect n8n with VibeTrack attribution and conversion tracking",
5
+ "type": "commonjs",
6
+ "keywords": [
7
+ "n8n-community-node-package",
8
+ "vibetrack"
9
+ ],
10
+ "license": "MIT",
11
+ "homepage": "https://github.com/luzconsulting/n8n-nodes-vibetrack#readme",
12
+ "author": {
13
+ "name": "LUZ Consulting",
14
+ "email": "kontakt@luz-consulting.de"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/luzconsulting/n8n-nodes-vibetrack/issues"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/luzconsulting/n8n-nodes-vibetrack.git"
22
+ },
23
+ "engines": {
24
+ "node": ">=20.15"
25
+ },
26
+ "main": "index.js",
27
+ "scripts": {
28
+ "build": "npx rimraf dist && tsc && gulp build:icons",
29
+ "dev": "tsc --watch",
30
+ "format": "prettier nodes credentials --write",
31
+ "lint": "eslint nodes credentials package.json",
32
+ "lint:fix": "eslint nodes credentials package.json --fix",
33
+ "lint:node": "n8n-node lint",
34
+ "lint:all": "npm run lint && npm run lint:node",
35
+ "release": "n8n-node release",
36
+ "prepublishOnly": "n8n-node prerelease"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "!dist/**/*.map",
41
+ "!dist/tsconfig.tsbuildinfo",
42
+ "README.md",
43
+ "LICENSE.md"
44
+ ],
45
+ "n8n": {
46
+ "n8nNodesApiVersion": 1,
47
+ "strict": true,
48
+ "credentials": [
49
+ "dist/credentials/VibeTrackApi.credentials.js"
50
+ ],
51
+ "nodes": [
52
+ "dist/nodes/VibeTrack/VibeTrack.node.js",
53
+ "dist/nodes/VibeTrack/trigger/VibeTrackTrigger.node.js"
54
+ ]
55
+ },
56
+ "devDependencies": {
57
+ "@n8n/node-cli": "^0.23.0",
58
+ "@types/node": "^24.10.1",
59
+ "@typescript-eslint/parser": "^8.52.0",
60
+ "eslint": "^9.39.4",
61
+ "eslint-plugin-n8n-nodes-base": "^1.16.3",
62
+ "gulp": "^5.0.1",
63
+ "gulp-cli": "^3.1.0",
64
+ "package-json-from-dist": "^1.0.1",
65
+ "prettier": "^3.8.1",
66
+ "release-it": "^19.2.4",
67
+ "rimraf": "^6.1.3",
68
+ "typescript": "^5.9.3"
69
+ },
70
+ "peerDependencies": {
71
+ "n8n-workflow": "*"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
75
+ }
76
+ }
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@luzconsulting/n8n-nodes-vibetrack",
3
+ "version": "0.1.0",
4
+ "description": "Connect n8n with VibeTrack attribution and conversion tracking",
5
+ "type": "commonjs",
6
+ "keywords": [
7
+ "n8n-community-node-package",
8
+ "vibetrack"
9
+ ],
10
+ "license": "MIT",
11
+ "homepage": "https://github.com/luzconsulting/n8n-nodes-vibetrack#readme",
12
+ "author": {
13
+ "name": "LUZ Consulting",
14
+ "email": "kontakt@luz-consulting.de"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/luzconsulting/n8n-nodes-vibetrack/issues"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/luzconsulting/n8n-nodes-vibetrack.git"
22
+ },
23
+ "engines": {
24
+ "node": ">=20.15"
25
+ },
26
+ "main": "index.js",
27
+ "scripts": {
28
+ "build": "npx rimraf dist && tsc && gulp build:icons",
29
+ "dev": "tsc --watch",
30
+ "format": "prettier nodes credentials --write",
31
+ "lint": "eslint nodes credentials package.json",
32
+ "lint:fix": "eslint nodes credentials package.json --fix",
33
+ "lint:node": "n8n-node lint",
34
+ "lint:all": "npm run lint && npm run lint:node",
35
+ "release": "n8n-node release",
36
+ "prepublishOnly": "n8n-node prerelease"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "!dist/**/*.map",
41
+ "!dist/tsconfig.tsbuildinfo",
42
+ "README.md",
43
+ "LICENSE.md"
44
+ ],
45
+ "n8n": {
46
+ "n8nNodesApiVersion": 1,
47
+ "strict": true,
48
+ "credentials": [
49
+ "dist/credentials/VibeTrackApi.credentials.js"
50
+ ],
51
+ "nodes": [
52
+ "dist/nodes/VibeTrack/VibeTrack.node.js",
53
+ "dist/nodes/VibeTrack/trigger/VibeTrackTrigger.node.js"
54
+ ]
55
+ },
56
+ "devDependencies": {
57
+ "@n8n/node-cli": "^0.23.0",
58
+ "@types/node": "^24.10.1",
59
+ "@typescript-eslint/parser": "^8.52.0",
60
+ "eslint": "^9.39.4",
61
+ "eslint-plugin-n8n-nodes-base": "^1.16.3",
62
+ "gulp": "^5.0.1",
63
+ "gulp-cli": "^3.1.0",
64
+ "package-json-from-dist": "^1.0.1",
65
+ "prettier": "^3.8.1",
66
+ "release-it": "^19.2.4",
67
+ "rimraf": "^6.1.3",
68
+ "typescript": "^5.9.3"
69
+ },
70
+ "peerDependencies": {
71
+ "n8n-workflow": "*"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
75
+ }
76
+ }