n8n-nodes-peak-test 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 (44) 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/ClientToken/CreateClientToken.node.d.ts +5 -0
  11. package/dist/nodes/ClientToken/CreateClientToken.node.js +128 -0
  12. package/dist/nodes/ClientToken/CreateClientToken.node.js.map +1 -0
  13. package/dist/nodes/Contact/GetContact.node.d.ts +5 -0
  14. package/dist/nodes/Contact/GetContact.node.js +145 -0
  15. package/dist/nodes/Contact/GetContact.node.js.map +1 -0
  16. package/dist/nodes/DailyJournal/CreateDailyJournal.node.d.ts +5 -0
  17. package/dist/nodes/DailyJournal/CreateDailyJournal.node.js +139 -0
  18. package/dist/nodes/DailyJournal/CreateDailyJournal.node.js.map +1 -0
  19. package/dist/nodes/DailyJournal/GetAccountCode.node.d.ts +5 -0
  20. package/dist/nodes/DailyJournal/GetAccountCode.node.js +118 -0
  21. package/dist/nodes/DailyJournal/GetAccountCode.node.js.map +1 -0
  22. package/dist/nodes/Invoice/CreateExpense.node.d.ts +5 -0
  23. package/dist/nodes/Invoice/CreateExpense.node.js +139 -0
  24. package/dist/nodes/Invoice/CreateExpense.node.js.map +1 -0
  25. package/dist/nodes/Invoice/CreateInvoice.node.d.ts +5 -0
  26. package/dist/nodes/Invoice/CreateInvoice.node.js +140 -0
  27. package/dist/nodes/Invoice/CreateInvoice.node.js.map +1 -0
  28. package/dist/nodes/Invoice/CreateInvoice.node.json +13 -0
  29. package/dist/nodes/PaymentMethod/GetPaymentMethod.node.d.ts +5 -0
  30. package/dist/nodes/PaymentMethod/GetPaymentMethod.node.js +145 -0
  31. package/dist/nodes/PaymentMethod/GetPaymentMethod.node.js.map +1 -0
  32. package/dist/nodes/Product/GetProduct.node.d.ts +5 -0
  33. package/dist/nodes/Product/GetProduct.node.js +146 -0
  34. package/dist/nodes/Product/GetProduct.node.js.map +1 -0
  35. package/dist/nodes/Product/GetService.node.d.ts +5 -0
  36. package/dist/nodes/Product/GetService.node.js +145 -0
  37. package/dist/nodes/Product/GetService.node.js.map +1 -0
  38. package/dist/nodes/Receipt/CreateReceipt.node.d.ts +5 -0
  39. package/dist/nodes/Receipt/CreateReceipt.node.js +139 -0
  40. package/dist/nodes/Receipt/CreateReceipt.node.js.map +1 -0
  41. package/dist/nodes/Receipt/CreateReceipt.node.json +13 -0
  42. package/dist/tsconfig.tsbuildinfo +1 -0
  43. package/index.js +0 -0
  44. package/package.json +75 -0
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetPaymentMethod = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const time_1 = require("../../helpers/time");
6
+ class GetPaymentMethod {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'PEAK Get Payment Method',
10
+ name: 'getPaymentMethod',
11
+ icon: 'file:../../assets/PEAK.svg',
12
+ group: ['input'],
13
+ version: 1,
14
+ subtitle: '={{$parameter["operation"]}}',
15
+ description: 'Send parameter to get payment method via PEAK API',
16
+ defaults: {
17
+ name: 'Get PaymentMethod',
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: 'PaymentMethod ID to retrieve',
32
+ options: [
33
+ {
34
+ name: 'UAT',
35
+ value: 'uat',
36
+ },
37
+ {
38
+ name: 'PaymentMethodion',
39
+ value: 'paymentMethodion',
40
+ },
41
+ ],
42
+ },
43
+ {
44
+ displayName: 'PaymentMethod ID',
45
+ name: 'paymentMethodId',
46
+ type: 'string',
47
+ typeOptions: { rows: 1 },
48
+ default: '',
49
+ required: false,
50
+ description: 'PaymentMethod ID to retrieve',
51
+ },
52
+ {
53
+ displayName: 'PaymentMethod Code',
54
+ name: 'paymentMethodCode',
55
+ type: 'string',
56
+ typeOptions: { rows: 1 },
57
+ default: '',
58
+ required: false,
59
+ description: 'PaymentMethod 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
+ let endpointUrl = 'https://peakengineapidev.azurewebsites.net/api/v1/paymentMethods';
79
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
80
+ try {
81
+ const serverEnv = this.getNodeParameter('serverEnvironment', itemIndex, '');
82
+ const paymentMethodId = this.getNodeParameter('paymentMethodId', itemIndex, '');
83
+ const paymentMethodCode = this.getNodeParameter('paymentMethodCode', itemIndex, '');
84
+ const clientTokenOverride = this.getNodeParameter('clientTokenOverride', itemIndex, '');
85
+ if (serverEnv === 'production') {
86
+ endpointUrl = 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 (paymentMethodId !== '') {
93
+ endpointWithParams += `id=${encodeURIComponent(paymentMethodId)}`;
94
+ }
95
+ if (paymentMethodCode !== '') {
96
+ endpointWithParams += `code=${encodeURIComponent(paymentMethodCode)}`;
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.httpRequest(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.GetPaymentMethod = GetPaymentMethod;
145
+ //# sourceMappingURL=GetPaymentMethod.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetPaymentMethod.node.js","sourceRoot":"","sources":["../../../nodes/PaymentMethod/GetPaymentMethod.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 GetProduct implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -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: 'PEAK 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
+ let 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 = 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.httpRequest(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: 'PEAK 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
+ let 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 = 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.httpRequest(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: 'PEAK 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
+ let 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 = 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.httpRequest(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
+ }