n8n-nodes-peak 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 (42) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +127 -0
  3. package/dist/assets/PEAK.svg +13 -0
  4. package/dist/credentials/PEAKApi.credentials.d.ts +7 -0
  5. package/dist/credentials/PEAKApi.credentials.js +40 -0
  6. package/dist/credentials/PEAKApi.credentials.js.map +1 -0
  7. package/dist/helpers/time.d.ts +2 -0
  8. package/dist/helpers/time.js +23 -0
  9. package/dist/helpers/time.js.map +1 -0
  10. package/dist/nodes/Contact/GetContact.node.d.ts +5 -0
  11. package/dist/nodes/Contact/GetContact.node.js +145 -0
  12. package/dist/nodes/Contact/GetContact.node.js.map +1 -0
  13. package/dist/nodes/DailyJournal/CreateDailyJournal.node.d.ts +5 -0
  14. package/dist/nodes/DailyJournal/CreateDailyJournal.node.js +139 -0
  15. package/dist/nodes/DailyJournal/CreateDailyJournal.node.js.map +1 -0
  16. package/dist/nodes/DailyJournal/GetAccountCode.node.d.ts +5 -0
  17. package/dist/nodes/DailyJournal/GetAccountCode.node.js +118 -0
  18. package/dist/nodes/DailyJournal/GetAccountCode.node.js.map +1 -0
  19. package/dist/nodes/Invoice/CreateExpense.node.d.ts +5 -0
  20. package/dist/nodes/Invoice/CreateExpense.node.js +139 -0
  21. package/dist/nodes/Invoice/CreateExpense.node.js.map +1 -0
  22. package/dist/nodes/Invoice/CreateInvoice.node.d.ts +5 -0
  23. package/dist/nodes/Invoice/CreateInvoice.node.js +140 -0
  24. package/dist/nodes/Invoice/CreateInvoice.node.js.map +1 -0
  25. package/dist/nodes/Invoice/CreateInvoice.node.json +13 -0
  26. package/dist/nodes/PaymentMethod/GetPaymentMethod.node.d.ts +5 -0
  27. package/dist/nodes/PaymentMethod/GetPaymentMethod.node.js +145 -0
  28. package/dist/nodes/PaymentMethod/GetPaymentMethod.node.js.map +1 -0
  29. package/dist/nodes/Product/GetProduct.node.d.ts +5 -0
  30. package/dist/nodes/Product/GetProduct.node.js +146 -0
  31. package/dist/nodes/Product/GetProduct.node.js.map +1 -0
  32. package/dist/nodes/Product/GetService.node.d.ts +5 -0
  33. package/dist/nodes/Product/GetService.node.js +145 -0
  34. package/dist/nodes/Product/GetService.node.js.map +1 -0
  35. package/dist/nodes/Receipt/CreateReceipt.node.d.ts +5 -0
  36. package/dist/nodes/Receipt/CreateReceipt.node.js +139 -0
  37. package/dist/nodes/Receipt/CreateReceipt.node.js.map +1 -0
  38. package/dist/nodes/Receipt/CreateReceipt.node.json +13 -0
  39. package/dist/package.json +73 -0
  40. package/dist/tsconfig.tsbuildinfo +1 -0
  41. package/index.js +0 -0
  42. package/package.json +73 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetProduct = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const time_1 = require("../../helpers/time");
6
+ class GetProduct {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'Get Product',
10
+ name: 'getProduct',
11
+ icon: 'file:../../assets/PEAK.svg',
12
+ group: ['input'],
13
+ version: 1,
14
+ subtitle: '={{$parameter["operation"]}}',
15
+ description: 'Send parameter to get product via PEAK API',
16
+ defaults: {
17
+ name: 'Get Product',
18
+ },
19
+ inputs: ['main'],
20
+ outputs: ['main'],
21
+ credentials: [{ name: 'PEAKApi', required: true }],
22
+ usableAsTool: true,
23
+ properties: [
24
+ {
25
+ displayName: 'Server Environment',
26
+ name: 'serverEnvironment',
27
+ type: 'options',
28
+ typeOptions: { rows: 1 },
29
+ default: 'Production',
30
+ required: true,
31
+ description: 'Product ID to retrieve',
32
+ options: [
33
+ {
34
+ name: 'UAT',
35
+ value: 'uat',
36
+ },
37
+ {
38
+ name: 'Production',
39
+ value: 'production',
40
+ },
41
+ ],
42
+ },
43
+ {
44
+ displayName: 'Product ID',
45
+ name: 'productId',
46
+ type: 'string',
47
+ typeOptions: { rows: 1 },
48
+ default: '',
49
+ required: false,
50
+ description: 'Product ID to retrieve',
51
+ },
52
+ {
53
+ displayName: 'Product Code',
54
+ name: 'productCode',
55
+ type: 'string',
56
+ typeOptions: { rows: 1 },
57
+ default: '',
58
+ required: false,
59
+ description: 'Product code to retrieve',
60
+ },
61
+ {
62
+ displayName: 'Client Token (override)',
63
+ name: 'clientTokenOverride',
64
+ type: 'string',
65
+ typeOptions: { password: true },
66
+ default: '',
67
+ description: 'Optional override (useful when token refreshes every 24h)',
68
+ },
69
+ ],
70
+ };
71
+ }
72
+ async execute() {
73
+ const items = this.getInputData();
74
+ const returnData = [];
75
+ const creds = (await this.getCredentials('PEAKApi'));
76
+ const userToken = creds.userToken;
77
+ const connectId = creds.connectId;
78
+ const endpointUrl = 'https://peakengineapidev.azurewebsites.net/api/v1/products';
79
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
80
+ try {
81
+ const serverEnv = this.getNodeParameter('serverEnvironment', itemIndex, '');
82
+ const productId = this.getNodeParameter('productId', itemIndex, '');
83
+ const productCode = this.getNodeParameter('productCode', itemIndex, '');
84
+ const clientTokenOverride = this.getNodeParameter('clientTokenOverride', itemIndex, '');
85
+ if (serverEnv === 'production') {
86
+ endpointUrl.replace('peakengineapidev.azurewebsites.net', 'api.peakaccount.com');
87
+ }
88
+ let endpointWithParams = endpointUrl + '?';
89
+ const clientToken = clientTokenOverride || creds.clientToken;
90
+ if (!clientToken)
91
+ throw new Error('Client Token is required (credentials or override).');
92
+ if (productId !== '') {
93
+ endpointWithParams += `id=${encodeURIComponent(productId)}`;
94
+ }
95
+ if (productCode !== '') {
96
+ endpointWithParams += `code=${encodeURIComponent(productCode)}`;
97
+ }
98
+ const timeStamp = (0, time_1.formatTimestamp)(new Date(), false);
99
+ const timeSignature = (0, time_1.hmacSha1Hex)(connectId, timeStamp);
100
+ const headers = {
101
+ 'User-Token': userToken,
102
+ 'Client-Token': clientToken,
103
+ 'Time-Stamp': timeStamp,
104
+ 'Time-Signature': timeSignature,
105
+ 'x-peak-integrator': 'n8n',
106
+ 'Content-Type': 'application/json',
107
+ };
108
+ const options = {
109
+ method: 'GET',
110
+ url: endpointWithParams,
111
+ headers,
112
+ json: true,
113
+ };
114
+ const response = await this.helpers.request(options);
115
+ returnData.push({
116
+ json: {
117
+ success: true,
118
+ statusCode: 200,
119
+ data: response,
120
+ headers,
121
+ },
122
+ });
123
+ }
124
+ catch (error) {
125
+ if (this.continueOnFail()) {
126
+ returnData.push({
127
+ json: { error: error.message },
128
+ pairedItem: { item: itemIndex },
129
+ });
130
+ }
131
+ else {
132
+ if (error.context) {
133
+ error.context.itemIndex = itemIndex;
134
+ throw error;
135
+ }
136
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, {
137
+ itemIndex,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ return [returnData];
143
+ }
144
+ }
145
+ exports.GetProduct = GetProduct;
146
+ //# sourceMappingURL=GetProduct.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetProduct.node.js","sourceRoot":"","sources":["../../../nodes/Product/GetProduct.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class GetService implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetService = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const time_1 = require("../../helpers/time");
6
+ class GetService {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'Get Service',
10
+ name: 'getService',
11
+ icon: 'file:../../assets/PEAK.svg',
12
+ group: ['input'],
13
+ version: 1,
14
+ subtitle: '={{$parameter["operation"]}}',
15
+ description: 'Send parameter to get service via PEAK API',
16
+ defaults: {
17
+ name: 'Get Service',
18
+ },
19
+ inputs: ['main'],
20
+ outputs: ['main'],
21
+ credentials: [{ name: 'PEAKApi', required: true }],
22
+ usableAsTool: true,
23
+ properties: [
24
+ {
25
+ displayName: 'Server Environment',
26
+ name: 'serverEnvironment',
27
+ type: 'options',
28
+ typeOptions: { rows: 1 },
29
+ default: 'production',
30
+ required: true,
31
+ description: 'Product ID to retrieve',
32
+ options: [
33
+ {
34
+ name: 'UAT',
35
+ value: 'uat',
36
+ },
37
+ {
38
+ name: 'Production',
39
+ value: 'production',
40
+ },
41
+ ],
42
+ },
43
+ {
44
+ displayName: 'Service ID',
45
+ name: 'serviceId',
46
+ type: 'string',
47
+ typeOptions: { rows: 1 },
48
+ default: '',
49
+ required: false,
50
+ description: 'Service ID to retrieve',
51
+ },
52
+ {
53
+ displayName: 'Service Code',
54
+ name: 'serviceCode',
55
+ type: 'string',
56
+ typeOptions: { rows: 1 },
57
+ default: '',
58
+ required: false,
59
+ description: 'Service code to retrieve',
60
+ },
61
+ {
62
+ displayName: 'Client Token (override)',
63
+ name: 'clientTokenOverride',
64
+ type: 'string',
65
+ typeOptions: { password: true },
66
+ default: '',
67
+ description: 'Optional override (useful when token refreshes every 24h)',
68
+ },
69
+ ],
70
+ };
71
+ }
72
+ async execute() {
73
+ const items = this.getInputData();
74
+ const returnData = [];
75
+ const creds = (await this.getCredentials('PEAKApi'));
76
+ const userToken = creds.userToken;
77
+ const connectId = creds.connectId;
78
+ const endpointUrl = 'https://peakengineapidev.azurewebsites.net/api/v1/services';
79
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
80
+ try {
81
+ const serverEnv = this.getNodeParameter('serverEnvironment', itemIndex, '');
82
+ const serviceId = this.getNodeParameter('serviceId', itemIndex, '');
83
+ const serviceCode = this.getNodeParameter('serviceCode', itemIndex, '');
84
+ const clientTokenOverride = this.getNodeParameter('clientTokenOverride', itemIndex, '');
85
+ if (serverEnv === 'production') {
86
+ endpointUrl.replace('peakengineapidev.azurewebsites.net', 'api.peakaccount.com');
87
+ }
88
+ let endpointWithParams = endpointUrl + '?';
89
+ const clientToken = clientTokenOverride || creds.clientToken;
90
+ if (!clientToken)
91
+ throw new Error('Client Token is required (credentials or override).');
92
+ if (serviceId !== '') {
93
+ endpointWithParams += `id=${encodeURIComponent(serviceId)}`;
94
+ }
95
+ if (serviceCode !== '') {
96
+ endpointWithParams += `code=${encodeURIComponent(serviceCode)}`;
97
+ }
98
+ const timeStamp = (0, time_1.formatTimestamp)(new Date(), false);
99
+ const timeSignature = (0, time_1.hmacSha1Hex)(connectId, timeStamp);
100
+ const headers = {
101
+ 'User-Token': userToken,
102
+ 'Client-Token': clientToken,
103
+ 'Time-Stamp': timeStamp,
104
+ 'Time-Signature': timeSignature,
105
+ 'Content-Type': 'application/json',
106
+ };
107
+ const options = {
108
+ method: 'GET',
109
+ url: endpointWithParams,
110
+ headers,
111
+ json: true,
112
+ };
113
+ const response = await this.helpers.request(options);
114
+ returnData.push({
115
+ json: {
116
+ success: true,
117
+ statusCode: 200,
118
+ data: response,
119
+ headers,
120
+ },
121
+ });
122
+ }
123
+ catch (error) {
124
+ if (this.continueOnFail()) {
125
+ returnData.push({
126
+ json: { error: error.message },
127
+ pairedItem: { item: itemIndex },
128
+ });
129
+ }
130
+ else {
131
+ if (error.context) {
132
+ error.context.itemIndex = itemIndex;
133
+ throw error;
134
+ }
135
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, {
136
+ itemIndex,
137
+ });
138
+ }
139
+ }
140
+ }
141
+ return [returnData];
142
+ }
143
+ }
144
+ exports.GetService = GetService;
145
+ //# sourceMappingURL=GetService.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetService.node.js","sourceRoot":"","sources":["../../../nodes/Product/GetService.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class CreateReceipt implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateReceipt = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const time_1 = require("../../helpers/time");
6
+ class CreateReceipt {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'Create Receipt',
10
+ name: 'createReceipt',
11
+ icon: 'file:../../assets/PEAK.svg',
12
+ group: ['output'],
13
+ version: 1,
14
+ subtitle: '={{$parameter["operation"]}}',
15
+ description: 'Send JSON payload to create receipt via PEAK API',
16
+ defaults: {
17
+ name: 'Create Receipt',
18
+ },
19
+ inputs: ['main'],
20
+ outputs: ['main'],
21
+ credentials: [{ name: 'PEAKApi', required: true }],
22
+ usableAsTool: true,
23
+ properties: [
24
+ {
25
+ displayName: 'Server Environment',
26
+ name: 'serverEnvironment',
27
+ type: 'options',
28
+ typeOptions: { rows: 1 },
29
+ default: 'production',
30
+ required: true,
31
+ description: 'Product ID to retrieve',
32
+ options: [
33
+ {
34
+ name: 'UAT',
35
+ value: 'uat',
36
+ },
37
+ {
38
+ name: 'Production',
39
+ value: 'production',
40
+ },
41
+ ],
42
+ },
43
+ {
44
+ displayName: 'JSON Body',
45
+ name: 'jsonBody',
46
+ type: 'string',
47
+ typeOptions: { rows: 10 },
48
+ default: '{\n "merchantId": "241027",\n "issueDate": "2025-10-16",\n "items": []\n}',
49
+ required: true,
50
+ description: 'Raw JSON payload (you can map from previous node with {{$json}})',
51
+ },
52
+ {
53
+ displayName: 'Client Token (override)',
54
+ name: 'clientTokenOverride',
55
+ type: 'string',
56
+ typeOptions: { password: true },
57
+ default: '',
58
+ description: 'Optional override (useful when token refreshes every 24h)',
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ async execute() {
64
+ const items = this.getInputData();
65
+ const returnData = [];
66
+ const creds = (await this.getCredentials('PEAKApi'));
67
+ const userToken = creds.userToken;
68
+ const connectId = creds.connectId;
69
+ const endpointUrl = 'https://peakengineapidev.azurewebsites.net/api/v1/receipts';
70
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
71
+ try {
72
+ const serverEnv = this.getNodeParameter('serverEnvironment', itemIndex, '');
73
+ const jsonBodyStr = this.getNodeParameter('jsonBody', itemIndex);
74
+ const clientTokenOverride = this.getNodeParameter('clientTokenOverride', itemIndex, '');
75
+ if (serverEnv === 'production') {
76
+ endpointUrl.replace('peakengineapidev.azurewebsites.net', 'api.peakaccount.com');
77
+ }
78
+ const clientToken = clientTokenOverride || creds.clientToken;
79
+ if (!clientToken)
80
+ throw new Error('Client Token is required (credentials or override).');
81
+ let bodyObj;
82
+ try {
83
+ bodyObj = JSON.parse(jsonBodyStr);
84
+ if (typeof bodyObj !== 'object' || bodyObj === null) {
85
+ throw new Error('JSON Body must be an object.');
86
+ }
87
+ }
88
+ catch {
89
+ throw new Error('Invalid JSON Body.');
90
+ }
91
+ const timeStamp = (0, time_1.formatTimestamp)(new Date(), false);
92
+ const timeSignature = (0, time_1.hmacSha1Hex)(connectId, timeStamp);
93
+ const headers = {
94
+ 'User-Token': userToken,
95
+ 'Client-Token': clientToken,
96
+ 'Time-Stamp': timeStamp,
97
+ 'Time-Signature': timeSignature,
98
+ 'Content-Type': 'application/json',
99
+ };
100
+ const options = {
101
+ method: 'POST',
102
+ url: endpointUrl,
103
+ headers,
104
+ body: bodyObj,
105
+ json: true,
106
+ };
107
+ const response = await this.helpers.request(options);
108
+ returnData.push({
109
+ json: {
110
+ success: true,
111
+ statusCode: 200,
112
+ data: response,
113
+ headers,
114
+ },
115
+ });
116
+ }
117
+ catch (error) {
118
+ if (this.continueOnFail()) {
119
+ returnData.push({
120
+ json: { error: error.message },
121
+ pairedItem: { item: itemIndex },
122
+ });
123
+ }
124
+ else {
125
+ if (error.context) {
126
+ error.context.itemIndex = itemIndex;
127
+ throw error;
128
+ }
129
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, {
130
+ itemIndex,
131
+ });
132
+ }
133
+ }
134
+ }
135
+ return [returnData];
136
+ }
137
+ }
138
+ exports.CreateReceipt = CreateReceipt;
139
+ //# sourceMappingURL=CreateReceipt.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateReceipt.node.js","sourceRoot":"","sources":["../../../nodes/Receipt/CreateReceipt.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ {
2
+ "nodeClassDescription": {
3
+ "displayName": "Create Receipt",
4
+ "name": "createReceipt",
5
+ "icon": "file:../../assets/PEAK.svg",
6
+ "codex": {
7
+ "categories": ["PEAK"],
8
+ "subcategories": {
9
+ "PEAK": ["Document Actions"]
10
+ }
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "n8n-nodes-peak",
3
+ "version": "0.1.0",
4
+ "description": "n8n community node for integrating with the PEAK Accounting Platform",
5
+ "private": false,
6
+ "keywords": [
7
+ "n8n-community-node-package"
8
+ ],
9
+ "license": "MIT",
10
+ "homepage": "https://gitlab.com/peakaccount/peak-n8n-node",
11
+ "author": {
12
+ "name": "PEAK Account",
13
+ "email": "api@peakengine.com"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://gitlab.com/peakaccount/peak-n8n-node.git"
18
+ },
19
+ "engines": {
20
+ "node": ">=20.17"
21
+ },
22
+ "main": "index.js",
23
+ "scripts": {
24
+ "dev": "tsc --watch",
25
+ "format": "prettier nodes credentials --write",
26
+ "lint": "eslint nodes credentials package.json",
27
+ "lintfix": "eslint nodes credentials package.json --fix",
28
+ "clean": "rimraf node_modules package-lock.json dist",
29
+ "n8n:dev": "n8n start",
30
+ "build": "rimraf dist && tsc && gulp build:icons"
31
+ },
32
+ "files": [
33
+ "dist"
34
+ ],
35
+ "n8n": {
36
+ "n8nNodesApiVersion": 1,
37
+ "credentials": [
38
+ "dist/credentials/PEAKApi.credentials.js"
39
+ ],
40
+ "nodes": [
41
+ "dist/nodes/Invoice/CreateInvoice.node.js",
42
+ "dist/nodes/Invoice/CreateExpense.node.js",
43
+ "dist/nodes/Receipt/CreateReceipt.node.js",
44
+ "dist/nodes/Contact/GetContact.node.js",
45
+ "dist/nodes/Product/GetProduct.node.js",
46
+ "dist/nodes/Product/GetService.node.js",
47
+ "dist/nodes/DailyJournal/GetAccountCode.node.js",
48
+ "dist/nodes/DailyJournal/CreateDailyJournal.node.js",
49
+ "dist/nodes/PaymentMethod/GetPaymentMethod.node.js"
50
+ ]
51
+ },
52
+ "devDependencies": {
53
+ "@n8n/node-cli": "^0.9.0",
54
+ "@types/node": "^20.11.30",
55
+ "@typescript-eslint/eslint-plugin": "^8.47.0",
56
+ "@typescript-eslint/parser": "^8.47.0",
57
+ "eslint": "^9.39.1",
58
+ "eslint-plugin-n8n-nodes-base": "^1.16.3",
59
+ "gulp": "^5.0.0",
60
+ "prettier": "^3.5.3",
61
+ "rimraf": "^6.0.1",
62
+ "typescript": "^5.8.2"
63
+ },
64
+ "peerDependencies": {
65
+ "n8n-workflow": "*"
66
+ },
67
+ "overrides": {
68
+ "change-case": "4.1.2"
69
+ },
70
+ "publishConfig": {
71
+ "access": "public"
72
+ }
73
+ }