@orchesty/connector-zoho 1.0.0 → 2.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 (44) hide show
  1. package/README.md +85 -0
  2. package/dist/package.json +5 -2
  3. package/package.json +5 -2
  4. package/CHANGELOG.md +0 -7
  5. package/coverage/clover.xml +0 -124
  6. package/coverage/coverage-final.json +0 -5
  7. package/coverage/lcov-report/base.css +0 -224
  8. package/coverage/lcov-report/block-navigation.js +0 -87
  9. package/coverage/lcov-report/favicon.png +0 -0
  10. package/coverage/lcov-report/index.html +0 -146
  11. package/coverage/lcov-report/prettify.css +0 -1
  12. package/coverage/lcov-report/prettify.js +0 -2
  13. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  14. package/coverage/lcov-report/sorter.js +0 -210
  15. package/coverage/lcov-report/src/Connector/ZohoAddRecordsConnector.ts.html +0 -310
  16. package/coverage/lcov-report/src/Connector/ZohoGetRecordsConnector.ts.html +0 -436
  17. package/coverage/lcov-report/src/Connector/index.html +0 -131
  18. package/coverage/lcov-report/src/ZohoApplication.ts.html +0 -430
  19. package/coverage/lcov-report/src/index.html +0 -116
  20. package/coverage/lcov-report/test/dataProvider.ts.html +0 -271
  21. package/coverage/lcov-report/test/index.html +0 -116
  22. package/coverage/lcov.info +0 -182
  23. package/jest.config.js +0 -13
  24. package/src/Connector/ZohoAddRecordsConnector.ts +0 -75
  25. package/src/Connector/ZohoGetRecordsConnector.ts +0 -117
  26. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-input.json +0 -25
  27. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-mock.json +0 -39
  28. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-output.json +0 -37
  29. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/input.json +0 -25
  30. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/mock.json +0 -12
  31. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/output.json +0 -8
  32. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-input.json +0 -8
  33. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-mock.json +0 -79
  34. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-output.json +0 -76
  35. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/input.json +0 -8
  36. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/mock.json +0 -11
  37. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/output.json +0 -11
  38. package/src/Connector/__tests__/ZohoAddRecordsConnector.ts +0 -21
  39. package/src/Connector/__tests__/ZohoGetRecordsConnector.ts +0 -21
  40. package/src/ZohoApplication.ts +0 -115
  41. package/test/dataProvider.ts +0 -62
  42. package/tsconfig.json +0 -8
  43. package/tsconfig.prod.json +0 -13
  44. package/tsconfig.prod.tsbuildinfo +0 -1
@@ -1,117 +0,0 @@
1
- import AConnector from '@orchesty/nodejs-sdk/dist/lib/Connector/AConnector';
2
- import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
3
- import ProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/ProcessDto';
4
- import {
5
- ACCOUNT_OWNER_NAME, APP_LINK_NAME, CREATOR_FORM, REPORT_LINK_NAME,
6
- } from '../ZohoApplication';
7
-
8
- export const NAME = 'zoho-get-records-connector';
9
-
10
- export default class ZohoGetRecordsConnector extends AConnector {
11
-
12
- public getName(): string {
13
- return NAME;
14
- }
15
-
16
- public async processAction(dto: ProcessDto<IInput>): Promise<ProcessDto<IOutput>> {
17
- const { recordId } = dto.getJsonData();
18
-
19
- if (!recordId) {
20
- throw new Error('Record ID is missing');
21
- }
22
-
23
- const appInstall = await this.getApplicationInstallFromProcess(dto);
24
- const accountOwnerName = appInstall.getSettings()[CREATOR_FORM][ACCOUNT_OWNER_NAME];
25
- const appLink = appInstall.getSettings()[CREATOR_FORM][APP_LINK_NAME];
26
- const reportLink = appInstall.getSettings()[CREATOR_FORM][REPORT_LINK_NAME];
27
- const url = `/${accountOwnerName}/${appLink}/report/${reportLink}/${recordId}`;
28
-
29
- const req = await this.getApplication().getRequestDto(dto, appInstall, HttpMethods.GET, url);
30
- const resp = await this.getSender().send<IResponse>(req, [200]);
31
-
32
- const records = resp.getJsonBody();
33
-
34
- if (records.code !== 3000) {
35
- throw new Error('The request failed');
36
- }
37
-
38
- return dto.setNewJsonData(records.data);
39
- }
40
-
41
- }
42
-
43
- /* eslint-disable @typescript-eslint/naming-convention */
44
- interface IResponse {
45
- code: number;
46
- data: IOutput;
47
- }
48
-
49
- export interface IInput {
50
- recordId: string;
51
- }
52
-
53
- export interface IOutput {
54
- Multi_Line: string;
55
- Email: string;
56
- Address: {
57
- display_value: string;
58
- country: string;
59
- district_city: string;
60
- latitude: string;
61
- address_line_1: string;
62
- state_province: string;
63
- address_line_2: string;
64
- postal_code: string;
65
- longitude: string;
66
- };
67
- Phone_Number: string;
68
- Time: string;
69
- Image: string;
70
- Url: {
71
- value: string;
72
- url: string;
73
- };
74
- Name: {
75
- display_value: string;
76
- prefix: string;
77
- last_name: string;
78
- suffix: string;
79
- first_name: string;
80
- };
81
- Formula: string;
82
- Single_Line: string;
83
- Number: string;
84
- Decimal: string;
85
- Decision_box: string;
86
- File_upload: string;
87
- Checkbox: string;
88
- Currency: string;
89
- Rich_Text: string;
90
- Lookup: {
91
- display_value: string;
92
- ID: string;
93
- };
94
- ID: string;
95
- Integration: {
96
- display_value: string;
97
- ID: string;
98
- };
99
- Multi_Select: string[];
100
- Keyword: string;
101
- Percent: string;
102
- Prediction: string;
103
- Dropdown: string;
104
- Inline_SubForm: { display_value: string; ID: string };
105
- Radio: string;
106
- Auto_Number: string;
107
- users: string;
108
- Audio: string;
109
- Video: string;
110
- Signature: string;
111
- Sentiment: string;
112
- Date_Time: string;
113
- Date_field: string;
114
- Object_Detection: string;
115
- }
116
-
117
- /* eslint-enable @typescript-eslint/naming-convention */
@@ -1,25 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": {
6
- "data": [
7
- {
8
- "Email": "jason@zylker.com",
9
- "Phone_Number": "+16103948336"
10
- },
11
- {
12
- "Email": "p.boyle@zylker.com",
13
- "Phone_Number": "+12096173907"
14
- }
15
- ],
16
- "result": {
17
- "fields": [
18
- "Phone_Number",
19
- "Email"
20
- ],
21
- "message": true,
22
- "tasks": true
23
- }
24
- }
25
- }
@@ -1,39 +0,0 @@
1
- {
2
- "http": "POST https://creator.zoho.eu/api/v2/Hanabosotest/HanabosoApp/report/report_link/123",
3
- "code": 200,
4
- "body": {
5
- "result": [
6
- {
7
- "code": 3000,
8
- "data": {
9
- "Email": "jason@zylker.com",
10
- "Phone_Number": "+16103948336",
11
- "ID": "3888833000000121319"
12
- },
13
- "message": "Data Added Successfully!",
14
- "tasks": {
15
- "openurl": {
16
- "type": "Same window",
17
- "url": "#Report:All_Orders"
18
- }
19
- }
20
- },
21
- {
22
- "code": 2999,
23
- "data": {
24
- "Email": "p.boyle@zylker.com",
25
- "Phone_Number": "+12096173907",
26
- "ID": "3888833000000121339"
27
- },
28
- "message": "err!",
29
- "tasks": {
30
- "openurl": {
31
- "type": "Same window",
32
- "url": "#Report:All_Orders"
33
- }
34
- }
35
- }
36
- ],
37
- "code": 2999
38
- }
39
- }
@@ -1,37 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": [
6
- {
7
- "code": 3000,
8
- "data": {
9
- "Email": "jason@zylker.com",
10
- "Phone_Number": "+16103948336",
11
- "ID": "3888833000000121319"
12
- },
13
- "message": "Data Added Successfully!",
14
- "tasks": {
15
- "openurl": {
16
- "type": "Same window",
17
- "url": "#Report:All_Orders"
18
- }
19
- }
20
- },
21
- {
22
- "code": 2999,
23
- "data": {
24
- "Email": "p.boyle@zylker.com",
25
- "Phone_Number": "+12096173907",
26
- "ID": "3888833000000121339"
27
- },
28
- "message": "err!",
29
- "tasks": {
30
- "openurl": {
31
- "type": "Same window",
32
- "url": "#Report:All_Orders"
33
- }
34
- }
35
- }
36
- ]
37
- }
@@ -1,25 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": {
6
- "data": [
7
- {
8
- "Email": "jason@zylker.com",
9
- "Phone_Number": "+16103948336"
10
- },
11
- {
12
- "Email": "p.boyle@zylker.com",
13
- "Phone_Number": "+12096173907"
14
- }
15
- ],
16
- "result": {
17
- "fields": [
18
- "Phone_Number",
19
- "Email"
20
- ],
21
- "message": false,
22
- "tasks": true
23
- }
24
- }
25
- }
@@ -1,12 +0,0 @@
1
- {
2
- "http": "POST https://creator.zoho.eu/api/v2/hanaboso/HanabosoApp/form/karel",
3
- "code": 200,
4
- "body": {
5
- "code": 3000,
6
- "data": {
7
- "ID": "152208000000007011"
8
- },
9
- "message": "Data Added Successfully!"
10
- }
11
- }
12
-
@@ -1,8 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": {
6
- "ID": "152208000000007011"
7
- }
8
- }
@@ -1,8 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": {
6
- "recordId": "123"
7
- }
8
- }
@@ -1,79 +0,0 @@
1
- {
2
- "http": "GET https://creator.zoho.com/api/v2/name/name_app/report/report_link/123",
3
- "code": 200,
4
- "body": {
5
- "code": 2900,
6
- "data": {
7
- "Multi_Line": "Multiples\nLines\nof Text",
8
- "Email": "jason@zylker.com",
9
- "Address": {
10
- "display_value": "4154 High Meadow Lane, Scranton, PA, 18503, United States",
11
- "country": "United States",
12
- "district_city": "Scranton",
13
- "latitude": "41.4086874",
14
- "address_line_1": "4154 High Meadow Lane",
15
- "state_province": "PA",
16
- "address_line_2": "",
17
- "postal_code": "18503",
18
- "longitude": "-75.6621294"
19
- },
20
- "Phone_Number": "+15704961113",
21
- "Time": "10:30:00",
22
- "Image": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Image/download?filepath=1605793663620_jasonprofile.jpg",
23
- "Url": {
24
- "value": "Zylker Inc",
25
- "url": "https://www.zylker.com"
26
- },
27
- "Name": {
28
- "display_value": "Mr. Jason Bowley Jr",
29
- "prefix": "Mr.",
30
- "last_name": "Bowley",
31
- "suffix": "Jr",
32
- "first_name": "Jason"
33
- },
34
- "Formula": "Single Line of Text - jason@zylker.com",
35
- "Single_Line": "Single Line of Text",
36
- "Number": "20",
37
- "Decimal": "20.43",
38
- "Decision_box": "true",
39
- "File_upload": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/File_upload/download?filepath=1605793668376_myfile.txt",
40
- "Checkbox": "Choice 1,Choice 2",
41
- "Currency": "1230.89",
42
- "Rich_Text": "<div><b>Rich</b> <i><span class=\"highlight\" style=\"background-color: rgb(254, 255, 51)\">Text</span></i> <u><span class=\"colour\" style=\"color: rgb(51, 51, 255)\">data</span></u>.<br /></div>",
43
- "Lookup": {
44
- "display_value": "asdasd",
45
- "ID": "3888833000000114027"
46
- },
47
- "ID": "3888833000000114023",
48
- "Integration": {
49
- "display_value": "Webster",
50
- "ID": "3888833000000114007"
51
- },
52
- "Multi_Select": [
53
- "Choice 2",
54
- "Choice 3"
55
- ],
56
- "Keyword": "Multiples Lines,Text",
57
- "Percent": "34.34",
58
- "Prediction": "",
59
- "Dropdown": "Choice 2",
60
- "Inline_SubForm": [
61
- {
62
- "display_value": "Barry",
63
- "ID": "3888833000000114013"
64
- }
65
- ],
66
- "Radio": "Choice 1",
67
- "Auto_Number": "1",
68
- "users": "jason18",
69
- "Audio": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Audio/download?filepath=1605793663623_audiofile.mp3",
70
- "Video": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Video/download?filepath=1605793663626_videofile.mp4",
71
- "Signature": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Signature/download?filepath=1605793663691_signature.png",
72
- "Sentiment": "Positive",
73
- "Date_Time": "24-Apr-2020 10:30:00",
74
- "Date_field": "24-Apr-2020",
75
- "Object_Detection": "tv,laptop"
76
- }
77
- }
78
- }
79
-
@@ -1,76 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": {
6
- "Multi_Line": "Multiples\nLines\nof Text",
7
- "Email": "jason@zylker.com",
8
- "Address": {
9
- "display_value": "4154 High Meadow Lane, Scranton, PA, 18503, United States",
10
- "country": "United States",
11
- "district_city": "Scranton",
12
- "latitude": "41.4086874",
13
- "address_line_1": "4154 High Meadow Lane",
14
- "state_province": "PA",
15
- "address_line_2": "",
16
- "postal_code": "18503",
17
- "longitude": "-75.6621294"
18
- },
19
- "Phone_Number": "+15704961113",
20
- "Time": "10:30:00",
21
- "Image": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Image/download?filepath=1605793663620_jasonprofile.jpg",
22
- "Url": {
23
- "value": "Zylker Inc",
24
- "url": "https://www.zylker.com"
25
- },
26
- "Name": {
27
- "display_value": "Mr. Jason Bowley Jr",
28
- "prefix": "Mr.",
29
- "last_name": "Bowley",
30
- "suffix": "Jr",
31
- "first_name": "Jason"
32
- },
33
- "Formula": "Single Line of Text - jason@zylker.com",
34
- "Single_Line": "Single Line of Text",
35
- "Number": "20",
36
- "Decimal": "20.43",
37
- "Decision_box": "true",
38
- "File_upload": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/File_upload/download?filepath=1605793668376_myfile.txt",
39
- "Checkbox": "Choice 1,Choice 2",
40
- "Currency": "1230.89",
41
- "Rich_Text": "<div><b>Rich</b> <i><span class=\"highlight\" style=\"background-color: rgb(254, 255, 51)\">Text</span></i> <u><span class=\"colour\" style=\"color: rgb(51, 51, 255)\">data</span></u>.<br /></div>",
42
- "Lookup": {
43
- "display_value": "asdasd",
44
- "ID": "3888833000000114027"
45
- },
46
- "ID": "3888833000000114023",
47
- "Integration": {
48
- "display_value": "Webster",
49
- "ID": "3888833000000114007"
50
- },
51
- "Multi_Select": [
52
- "Choice 2",
53
- "Choice 3"
54
- ],
55
- "Keyword": "Multiples Lines,Text",
56
- "Percent": "34.34",
57
- "Prediction": "",
58
- "Dropdown": "Choice 2",
59
- "Inline_SubForm": [
60
- {
61
- "display_value": "Barry",
62
- "ID": "3888833000000114013"
63
- }
64
- ],
65
- "Radio": "Choice 1",
66
- "Auto_Number": "1",
67
- "users": "jason18",
68
- "Audio": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Audio/download?filepath=1605793663623_audiofile.mp3",
69
- "Video": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Video/download?filepath=1605793663626_videofile.mp4",
70
- "Signature": "/api/v2/jason18/zylker-store/report/All_Orders/3888833000000114023/Signature/download?filepath=1605793663691_signature.png",
71
- "Sentiment": "Positive",
72
- "Date_Time": "24-Apr-2020 10:30:00",
73
- "Date_field": "24-Apr-2020",
74
- "Object_Detection": "tv,laptop"
75
- }
76
- }
@@ -1,8 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": {
6
- "recordId": "152208000000004003"
7
- }
8
- }
@@ -1,11 +0,0 @@
1
- {
2
- "http": "GET https://creator.zoho.eu/api/v2/hanaboso/HanabosoApp/report/karel_Report/152208000000004003",
3
- "code": 200,
4
- "body": {
5
- "code": 3000,
6
- "data": {
7
- "ID": "152208000000004003"
8
- }
9
- }
10
- }
11
-
@@ -1,11 +0,0 @@
1
- {
2
- "headers": {
3
- "user": "TestUser"
4
- },
5
- "data": {
6
- "ID": "152208000000004003"
7
- }
8
- }
9
-
10
-
11
-
@@ -1,21 +0,0 @@
1
- import { container } from '@orchesty/nodejs-connectors/test/TestAbstract';
2
- import NodeTester from '@orchesty/nodejs-sdk/dist/test/Testers/NodeTester';
3
- import init from '../../../test/dataProvider';
4
- import { NAME as ZOHO_ADD_RECORDS_CONNECTOR } from '../ZohoAddRecordsConnector';
5
-
6
- let tester: NodeTester;
7
-
8
- describe('Tests for ZohoAddRecordsConnector', () => {
9
- beforeAll(() => {
10
- tester = new NodeTester(container, __filename);
11
- init();
12
- });
13
-
14
- it('process - ok', async () => {
15
- await tester.testConnector(ZOHO_ADD_RECORDS_CONNECTOR);
16
- });
17
-
18
- it('process - error', async () => {
19
- await tester.testConnector(ZOHO_ADD_RECORDS_CONNECTOR, 'error', Error);
20
- });
21
- });
@@ -1,21 +0,0 @@
1
- import { container } from '@orchesty/nodejs-connectors/test/TestAbstract';
2
- import NodeTester from '@orchesty/nodejs-sdk/dist/test/Testers/NodeTester';
3
- import init from '../../../test/dataProvider';
4
- import { NAME as ZOHO_GET_RECORDS_CONNECTOR } from '../ZohoGetRecordsConnector';
5
-
6
- let tester: NodeTester;
7
-
8
- describe('Tests for ZohoGetRecordsConnector', () => {
9
- beforeAll(() => {
10
- tester = new NodeTester(container, __filename);
11
- init();
12
- });
13
-
14
- it('process - ok', async () => {
15
- await tester.testConnector(ZOHO_GET_RECORDS_CONNECTOR);
16
- });
17
-
18
- it('process - error', async () => {
19
- await tester.testConnector(ZOHO_GET_RECORDS_CONNECTOR, 'error', Error);
20
- });
21
- });
@@ -1,115 +0,0 @@
1
- import CoreFormsEnum, { getFormName } from '@orchesty/nodejs-sdk/dist/lib/Application/Base/CoreFormsEnum';
2
- import { ApplicationInstall } from '@orchesty/nodejs-sdk/dist/lib/Application/Database/ApplicationInstall';
3
- import Field from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Field';
4
- import FieldType from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FieldType';
5
- import Form from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Form';
6
- import FormStack from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FormStack';
7
- import ScopeSeparatorEnum from '@orchesty/nodejs-sdk/dist/lib/Authorization/ScopeSeparatorEnum';
8
- import { TOKEN } from '@orchesty/nodejs-sdk/dist/lib/Authorization/Type/Basic/ABasicApplication';
9
- import AOAuth2Application from '@orchesty/nodejs-sdk/dist/lib/Authorization/Type/OAuth2/AOAuth2Application';
10
- import { CLIENT_ID, CLIENT_SECRET } from '@orchesty/nodejs-sdk/dist/lib/Authorization/Type/OAuth2/IOAuth2Application';
11
- import RequestDto from '@orchesty/nodejs-sdk/dist/lib/Transport/Curl/RequestDto';
12
- import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
13
- import AProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/AProcessDto';
14
- import { CommonHeaders, JSON_TYPE } from '@orchesty/nodejs-sdk/dist/lib/Utils/Headers';
15
-
16
- const API_PATH = '/api/v2';
17
-
18
- export const NAME = 'zoho';
19
- export const API_DOMAIN = 'api_domain';
20
- export const CREATOR_FORM = 'creator_form';
21
- export const ACCOUNT_OWNER_NAME = 'account_owner_name';
22
- export const APP_LINK_NAME = 'app_link_name';
23
- export const FORM_LINK_NAME = 'form_link_name';
24
- export const REPORT_LINK_NAME = 'report_link_name';
25
-
26
- export default class ZohoApplication extends AOAuth2Application {
27
-
28
- public getAuthUrl(): string {
29
- return 'https://accounts.zoho.eu/oauth/v2/auth';
30
- }
31
-
32
- public getDescription(): string {
33
- return 'Zoho is a provider of a Customer Relationship Management (CRM) solution';
34
- }
35
-
36
- public getName(): string {
37
- return NAME;
38
- }
39
-
40
- public getPublicName(): string {
41
- return 'Zoho';
42
- }
43
-
44
- public getLogo(): string {
45
- return 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZyc3R2YV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAwIDEwMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiNFNzkyMjQ7fQoJLnN0MXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDJ7ZmlsbDojRkVGMjZGO30KCS5zdDN7ZmlsbDojOTFDOUVEO30KCS5zdDR7ZmlsbDp1cmwoI1NWR0lEXzJfKTt9Cgkuc3Q1e2ZpbGw6IzBCOUFENjt9Cgkuc3Q2e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzRfKTt9Cgkuc3Q3e2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0OHtmaWxsOiM5OEQwQTA7fQoJLnN0OXtmaWxsOiM2OEJGNkI7fQoJLnN0MTB7ZmlsbDp1cmwoI1NWR0lEXzZfKTt9Cgkuc3QxMXtmaWxsOiNFRjQ2M0Q7fQoJLnN0MTJ7ZmlsbDojNzYxMTE2O30KCS5zdDEze2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+CjxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMzMzMyAwIDAgLTEuMzMzMyAwIDEwMC4wOCkiPgoJPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjI5Mzc4IDAgMCAuMjkzNzggMCAuMDQyMzczKSI+CgkJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzQwLjM4IDIwMC44NCkiPgoJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTQ4NS4yLTQ3LjF2LTYyLjZsLTguNC04LjR2NjEuMkwtNDg1LjItNDcuMSIvPgoJCTwvZz4KCQkKCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSItNjE1LjQ1MjkiIHkxPSItOTUwLjEzOTUiIHgyPSItNjE1LjA5NjUiIHkyPSItOTUwLjEzOTUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTIuNzQxODc4ZS0wNiAtNjQuMzU1OCAtNjQuMzU1OCAyLjc0MTg3OGUtMDYgLTYwOTI3LjY5MTQgLTM5NDY0LjgzOTgpIj4KCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGRTUwMCIvPgoJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkNCODIyIi8+CgkJPC9saW5lYXJHcmFkaWVudD4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjQ2LjksMTQ0aC01NS4zVjgyLjdoNTUuM1YxNDR6Ii8+CgkJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTgxLjEgMjAwLjcyKSI+CgkJCTxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0tMzgwLjgtNDdsLTguNy05LjhoNTUuM2w4LjIsOS44TC0zODAuOC00NyIvPgoJCTwvZz4KCQk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzODIuMjMgMTkzLjE5KSI+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjUwLjQtNDIuMWw1NC40LDcuOGwtNC42LTEzLjVsLTUxLjUtOC41bDAuMiw5LjZMLTI1MC40LTQyLjEiLz4KCQk8L2c+CgkJCgkJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMl8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTYxOS40Njc3IiB5MT0iLTk0MC40Nzg4IiB4Mj0iLTYxOS4xMTg4IiB5Mj0iLTk0MC40Nzg4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDYzLjA5NDUgLTUwLjY2OTkgLTUwLjY2OTkgLTYzLjA5NDUgLTg0MzguMjQ1MSAtOTA1OTEpIj4KCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzE2OENDQyIvPgoJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDA2NDlFIi8+CgkJPC9saW5lYXJHcmFkaWVudD4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNMTgxLjcsMTQ1LjRsNy41LTU0LjlsLTUzLjYtNy44bC03LjIsNTMuMWwzLjEsMi41TDE4MS43LDE0NS40Ii8+CgkJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTQwLjE4IDIxNS4xNSkiPgoJCQk8cGF0aCBjbGFzcz0ic3Q1IiBkPSJNLTM1NC01Ni4zbDAtMC4zbDcuMS01Ni4ybC00LjEtMTEuOGwtNy41LDU0LjkiLz4KCQk8L2c+CgkJPGc+CgkJCTxkZWZzPgoJCQkJPHBvbHlsaW5lIGlkPSJTVkdJRF8zXyIgcG9pbnRzPSI4NS44LDE1NS43IDEzNCwxMzMuMyAxMTIuMyw4Mi4yIDY0LjEsMTA0LjcgODUuOCwxNTUuNyAJCQkJIi8+CgkJCTwvZGVmcz4KCQkJPGNsaXBQYXRoIGlkPSJTVkdJRF80XyI+CgkJCQk8dXNlIHhsaW5rOmhyZWY9IiNTVkdJRF8zXyIgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlOyIvPgoJCQk8L2NsaXBQYXRoPgoJCQk8ZyBjbGFzcz0ic3Q2Ij4KCQkJCQoJCQkJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTYxMy41NiIgeTE9Ii05NTUuMTc0NiIgeDI9Ii02MTMuMjAzNiIgeTI9Ii05NTUuMTc0NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMi4zNTAxODFlLTA2IC01Ni4zODA4IC01Ni4zODA4IDIuMzUwMTgxZS0wNiAtNTM3MjUuOTAyMyAtMzQ0NTcuNzE4OCkiPgoJCQkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMyNUExNDkiLz4KCQkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDA4QTUyIi8+CgkJCQk8L2xpbmVhckdyYWRpZW50PgoJCQkJPHBhdGggY2xhc3M9InN0NyIgZD0iTTAuMSwxNzMuMmgyNTV2LTkxSDAuMVYxNzMuMnoiLz4KCQkJPC9nPgoJCTwvZz4KCQk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzQuMzEgMjU1LjM2KSI+CgkJCTxwYXRoIGNsYXNzPSJzdDgiIGQ9Ik0tMTUzLjUtODIuMWw1LTE3LjVsNDguMi0yMi41bC00LDE2LjdMLTE1My41LTgyLjEiLz4KCQk8L2c+CgkJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjM0LjMxIDI1NS4zNikiPgoJCQk8cGF0aCBjbGFzcz0ic3Q5IiBkPSJNLTE1My41LTgyLjFsLTE5LjQtNDcuNmwyLjctMjAuOWwyMS43LDUxTC0xNTMuNS04Mi4xIi8+CgkJPC9nPgoJCQoJCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii02MTIuODc2NyIgeTE9Ii05NTMuNzc4OCIgeDI9Ii02MTIuNTIyNiIgeTI9Ii05NTMuNzc4OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg5LjY5NjEgLTU4LjUzNTIgLTU4LjUzNTIgLTkuNjk2MSAtNDk4NjAuMTA5NCAtNDQ5ODIuNTgyKSI+CgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTIyMzEiLz4KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0JBMjIzNCIvPgoJCTwvbGluZWFyR3JhZGllbnQ+CgkJPHBhdGggY2xhc3M9InN0MTAiIGQ9Ik01NCwxNDUuNWw3LjktNTRMOC43LDgyLjhsLTguNSw1NC4xTDU0LDE0NS41Ii8+CgkJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxNTMuNTcpIj4KCQkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik0wLjEtMTYuNkwzLjksMi43bDUzLjcsOC45TDU0LTguMUwwLjEtMTYuNiIvPgoJCTwvZz4KCQk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjYuODggMjMyLjcpIj4KCQkJPHBhdGggY2xhc3M9InN0MTIiIGQ9Ik0tMTA5LjMtNjcuNmw3LjktNTQuNWwtMy42LTE5LjFsLTcuOSw1NEwtMTA5LjMtNjcuNiIvPgoJCTwvZz4KCQk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MDAuNDcgMTQ3Ljc2KSI+CgkJCTxwYXRoIGNsYXNzPSJzdDEzIiBkPSJNLTMyNy45LTEyLjljLTAuMiwxLjctMC44LDMtMS43LDMuOWMtMC43LDAuNy0xLjYsMS0yLjcsMWMtMC4zLDAtMC41LDAtMC44LTAuMWMtMS40LTAuMi0yLjUtMC45LTMuMS0yCgkJCQljLTAuNS0wLjgtMC43LTEuOC0wLjctMi45YzAtMC40LDAtMC45LDAuMS0xLjNsMi0xNC4zbC0xNS40LTIuM2wtMiwxNC4zYy0wLjIsMS43LTAuOCwyLjktMS43LDMuOGMtMC43LDAuNy0xLjYsMS4xLTIuNywxLjEKCQkJCWMtMC4yLDAtMC41LDAtMC43LTAuMWMtMS41LTAuMi0yLjYtMC45LTMuMi0yYy0wLjUtMC44LTAuNy0xLjctMC43LTIuOWMwLTAuNCwwLTAuOSwwLjEtMS40bDUuMy0zNy4xYzAuMi0xLjcsMC44LTMsMS44LTMuOAoJCQkJYzAuNy0wLjcsMS43LTEsMi43LTFjMC4zLDAsMC42LDAsMC45LDAuMWMxLjMsMC4yLDIuNCwwLjksMywyYzAuNCwwLjgsMC43LDEuNywwLjcsMi44YzAsMC40LDAsMC45LTAuMSwxLjRsLTIuMiwxNC43bDE1LjQsMi4zCgkJCQlsMi4yLTE0LjdjMC4yLTEuNywwLjgtMywxLjctMy44YzAuNy0wLjcsMS43LTEsMi43LTFjMC4zLDAsMC41LDAsMC44LDAuMWMxLjQsMC4yLDIuNSwwLjksMy4xLDJjMC41LDAuOCwwLjcsMS43LDAuNywyLjgKCQkJCWMwLDAuNCwwLDAuOS0wLjEsMS40TC0zMjcuOS0xMi45eiBNLTM5MC43LTMzLjRjLTEuOC00LjQtNC4yLTcuNS03LjItOS4xYy0xLjYtMC45LTMuMi0xLjMtNC45LTEuM2MtMS41LDAtMywwLjMtNC41LDEKCQkJCWMtMy40LDEuNS01LjUsMy45LTYuNCw3LjJjLTAuMywxLjEtMC41LDIuMy0wLjUsMy42YzAsMi41LDAuNiw1LjIsMS44LDguMWMxLjksNC41LDQuMyw3LjYsNy4yLDkuM2MxLjYsMC45LDMuMiwxLjQsNC45LDEuNAoJCQkJYzEuNSwwLDMtMC4zLDQuNi0xYzMuMy0xLjUsNS40LTMuOSw2LjMtNy4zYzAuMy0xLjEsMC40LTIuMywwLjQtMy41Qy0zODguOC0yNy42LTM4OS40LTMwLjQtMzkwLjctMzMuNHogTS0zODUuNC0xMS4yCgkJCQljLTEuOSwyLjEtNC4yLDMuNy02LjksNC45Yy0yLjcsMS4yLTUuNCwxLjgtOC4xLDEuOGwtMC4xLDBjLTIuOCwwLTUuNS0wLjctOC4yLTEuOXYwYy0yLjgtMS4zLTUuMy0zLTcuNC01LjMKCQkJCWMtMi4xLTIuMy0zLjgtNS01LjEtOC4yYy0xLjMtMy4yLTItNi4zLTIuMS05LjVjMC0wLjQsMC0wLjcsMC0xLjFjMC0yLjgsMC41LTUuNSwxLjQtOC4yYzEtMi44LDIuNC01LjMsNC4zLTcuMwoJCQkJYzEuOS0yLjEsNC4zLTMuNyw3LTQuOXYwYzIuNy0xLjIsNS4zLTEuOCw4LjEtMS43aDAuMWMyLjgsMCw1LjUsMC42LDguMiwxLjhsMCwwbDAsMGMyLjgsMS4zLDUuMywzLjEsNy40LDUuNAoJCQkJYzIuMSwyLjMsMy44LDUsNS4xLDguMmMxLjMsMy4yLDIsNi4zLDIuMSw5LjVjMCwwLjMsMCwwLjYsMCwwLjljMCwyLjgtMC41LDUuNi0xLjUsOC4zQy0zODItMTUuNy0zODMuNS0xMy4zLTM4NS40LTExLjJ6CgkJCQkgTS00NTIuMi00Ny43Yy0wLjQsMC41LTEsMC45LTEuNywxLjJjLTAuNywwLjMtMS42LDAuNC0yLjYsMC40Yy0wLjksMC0yLTAuMS0zLjMtMC4zbC0xNC0yLjVjMC4xLDEuMSwwLjcsMi42LDEuNiw0LjQKCQkJCWMxLjEsMiwyLjYsNC40LDQuNyw3LjJsMCwwYzAuNywxLDEuMiwxLjcsMS42LDIuMmMwLjMsMC4zLDAuNiwwLjgsMS4xLDEuNWMzLjIsNC40LDUuMiw3LjksNiwxMC43YzAuNCwxLjYsMC43LDMuMiwwLjgsNC44CgkJCQljMCwwLjQsMCwwLjksMCwxLjNjMCwxLjEtMC4xLDIuMy0wLjMsMy40Yy0wLjIsMS0wLjQsMS45LTAuNywyLjVjLTAuMywwLjctMC43LDEuMi0xLjIsMS41Yy0wLjYsMC40LTEuNCwwLjUtMi40LDAuNQoJCQkJYy0wLjksMC0xLjktMC4xLTMuMS0wLjNsLTE2LjItMi45Yy0yLTAuMy0zLjQtMC45LTQuMy0xLjhjLTAuNy0wLjctMS4xLTEuNi0xLjEtMi43YzAtMC4zLDAtMC42LDAuMS0wLjljMC4yLTEuNCwwLjktMi41LDIuMS0zCgkJCQljMC43LTAuMywxLjUtMC41LDIuNS0wLjVjMC43LDAsMS40LDAuMSwyLjIsMC4ybDEzLjYsMi40YzAtMC4yLDAtMC41LDAtMC43YzAtMC45LTAuMS0xLjctMC40LTIuNmMtMC40LTEuMi0xLjQtMi44LTMtNC45CgkJCQljLTAuNS0wLjYtMS4yLTEuNS0yLjEtMi43Yy0zLjctNC42LTYuMy04LjUtNy45LTExLjhjMCwwLDAsMCwwLDBjMCwwLDAsMCwwLDBjLTEuMS0yLjItMS45LTQuNS0yLjMtNi42CgkJCQljLTAuMy0xLjMtMC40LTIuNS0wLjQtMy43YzAtMC44LDAuMS0xLjYsMC4yLTIuNGMwLjItMS4xLDAuNS0yLjEsMC44LTIuOGMwLjQtMC43LDAuOC0xLjMsMS40LTEuNmMwLjUtMC4zLDEuMy0wLjQsMi40LTAuNAoJCQkJYzEuNCwwLDMuMiwwLjIsNS41LDAuNmwxNC43LDIuNmMyLjYsMC41LDQuNCwxLjEsNS41LDJjMC44LDAuNywxLjMsMS43LDEuMywyLjljMCwwLjMsMCwwLjYtMC4xLDAuOQoJCQkJQy00NTEuNS00OC45LTQ1MS44LTQ4LjItNDUyLjItNDcuN0wtNDUyLjItNDcuN3ogTS00NjQuNy0zMy42TC00NjQuNy0zMy42Qy00NjQuNy0zMy42LTQ2NC43LTMzLjYtNDY0LjctMzMuNkwtNDY0LjctMzMuNgoJCQkJTC00NjQuNy0zMy42eiBNLTI3My4zLTQ2Yy0yLjEtMi42LTUtNC04LjctNGMtMy43LDAtNi42LDEuMy04LjcsNGMtMi4xLDIuNi0zLjIsNi4zLTMuMiwxMC45YzAsNC43LDEuMSw4LjQsMy4yLDExLjEKCQkJCWMyLjEsMi43LDUsNCw4LjcsNGMzLjcsMCw2LjUtMS4zLDguNy00YzIuMS0yLjcsMy4yLTYuMywzLjItMTEuMUMtMjcwLjEtMzkuOC0yNzEuMi00My40LTI3My4zLTQ2eiBNLTI2Mi0yNS44CgkJCQljLTEuMSwyLjgtMi43LDUuNC00LjksNy42Yy0yLjEsMi4yLTQuNCwzLjgtNi45LDQuOWMtMi41LDEuMS01LjMsMS42LTguMywxLjZjLTMsMC01LjgtMC41LTguMy0xLjZjLTIuNi0xLjEtNC45LTIuNy02LjktNC45CgkJCQljLTIuMS0yLjItMy44LTQuOC00LjgtNy42Yy0xLjEtMi44LTEuNi02LTEuNi05LjNjMC0zLjMsMC41LTYuNCwxLjYtOS4zYzEuMS0yLjksMi43LTUuNCw0LjgtNy43YzItMi4xLDQuMy0zLjcsNi44LTQuOAoJCQkJYzIuNi0xLjEsNS40LTEuNiw4LjQtMS42YzIuOSwwLDUuNywwLjUsOC4yLDEuNmMyLjYsMS4xLDQuOSwyLjcsNi45LDQuOGMyLjEsMi4zLDMuOCw0LjgsNC45LDcuN2MxLjEsMi45LDEuNiw2LDEuNiw5LjMKCQkJCVMtMjYwLjktMjguNy0yNjItMjUuOCIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8L3N2Zz4K';
46
- }
47
-
48
- public getRequestDto(
49
- dto: AProcessDto,
50
- applicationInstall: ApplicationInstall,
51
- method: HttpMethods,
52
- uri?: string,
53
- data?: unknown,
54
- ): Promise<RequestDto> | RequestDto {
55
- const domain = applicationInstall.getSettings()[CoreFormsEnum.AUTHORIZATION_FORM][TOKEN][API_DOMAIN];
56
- const url = `${domain}${API_PATH}${uri}`;
57
-
58
- const request = new RequestDto(url ?? '', method, dto);
59
- request.setHeaders({
60
- [CommonHeaders.CONTENT_TYPE]: JSON_TYPE,
61
- [CommonHeaders.ACCEPT]: JSON_TYPE,
62
- [CommonHeaders.AUTHORIZATION]: `Zoho-oauthtoken ${this.getAccessToken(applicationInstall)}`,
63
- });
64
-
65
- if (data) {
66
- request.setJsonBody(data);
67
- }
68
-
69
- return request;
70
- }
71
-
72
- public getScopes(
73
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
- applicationInstall: ApplicationInstall,
75
- ): string[] {
76
- return ['ZohoCRM.modules.ALL', 'ZohoCRM.settings.ALL', 'ZohoCreator.form.ALL', 'ZohoCreator.report.ALL'];
77
- }
78
-
79
- public getFormStack(): FormStack {
80
- const form = new Form(CoreFormsEnum.AUTHORIZATION_FORM, getFormName(CoreFormsEnum.AUTHORIZATION_FORM))
81
- .addField(new Field(FieldType.TEXT, CLIENT_ID, 'Client Id', undefined, true))
82
- .addField(new Field(FieldType.TEXT, CLIENT_SECRET, 'Client Secret', undefined, true));
83
-
84
- const creatorForm = new Form(CREATOR_FORM, 'Creator settings')
85
- .addField(new Field(FieldType.TEXT, ACCOUNT_OWNER_NAME, 'Account owner name', undefined, true))
86
- .addField(new Field(FieldType.TEXT, APP_LINK_NAME, 'App link name', undefined, true))
87
- .addField(new Field(FieldType.TEXT, FORM_LINK_NAME, 'Form link name', undefined, true))
88
- .addField(new Field(FieldType.TEXT, REPORT_LINK_NAME, 'report_link_name', undefined, true));
89
-
90
- return new FormStack()
91
- .addForm(form)
92
- .addForm(creatorForm);
93
- }
94
-
95
- public isAuthorized(applicationInstall: ApplicationInstall): boolean {
96
- const authorizationForm = applicationInstall.getSettings()[CoreFormsEnum.AUTHORIZATION_FORM];
97
- const creatorForm = applicationInstall.getSettings()[CREATOR_FORM];
98
- return super.isAuthorized(applicationInstall)
99
- && authorizationForm?.[CLIENT_ID]
100
- && authorizationForm?.[CLIENT_SECRET]
101
- && creatorForm?.[ACCOUNT_OWNER_NAME]
102
- && creatorForm?.[APP_LINK_NAME]
103
- && creatorForm?.[FORM_LINK_NAME]
104
- && creatorForm?.[REPORT_LINK_NAME];
105
- }
106
-
107
- public getTokenUrl(): string {
108
- return 'https://accounts.zoho.eu/oauth/v2/token';
109
- }
110
-
111
- protected getScopesSeparator(): string {
112
- return ScopeSeparatorEnum.SPACE;
113
- }
114
-
115
- }