@orchesty/connector-zoho 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/LICENSE +190 -0
- package/coverage/clover.xml +124 -0
- package/coverage/coverage-final.json +5 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +146 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/src/Connector/ZohoAddRecordsConnector.ts.html +310 -0
- package/coverage/lcov-report/src/Connector/ZohoGetRecordsConnector.ts.html +436 -0
- package/coverage/lcov-report/src/Connector/index.html +131 -0
- package/coverage/lcov-report/src/ZohoApplication.ts.html +430 -0
- package/coverage/lcov-report/src/index.html +116 -0
- package/coverage/lcov-report/test/dataProvider.ts.html +271 -0
- package/coverage/lcov-report/test/index.html +116 -0
- package/coverage/lcov.info +182 -0
- package/dist/Connector/ZohoAddRecordsConnector.d.ts +36 -0
- package/dist/Connector/ZohoAddRecordsConnector.js +30 -0
- package/dist/Connector/ZohoGetRecordsConnector.d.ts +76 -0
- package/dist/Connector/ZohoGetRecordsConnector.js +34 -0
- package/dist/ZohoApplication.d.ts +26 -0
- package/dist/ZohoApplication.js +123 -0
- package/dist/package.json +22 -0
- package/jest.config.js +13 -0
- package/package.json +22 -0
- package/src/Connector/ZohoAddRecordsConnector.ts +75 -0
- package/src/Connector/ZohoGetRecordsConnector.ts +117 -0
- package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-input.json +25 -0
- package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-mock.json +39 -0
- package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-output.json +37 -0
- package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/input.json +25 -0
- package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/mock.json +12 -0
- package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/output.json +8 -0
- package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-input.json +8 -0
- package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-mock.json +79 -0
- package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-output.json +76 -0
- package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/input.json +8 -0
- package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/mock.json +11 -0
- package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/output.json +11 -0
- package/src/Connector/__tests__/ZohoAddRecordsConnector.ts +21 -0
- package/src/Connector/__tests__/ZohoGetRecordsConnector.ts +21 -0
- package/src/ZohoApplication.ts +115 -0
- package/test/dataProvider.ts +62 -0
- package/tsconfig.json +8 -0
- package/tsconfig.prod.json +13 -0
- package/tsconfig.prod.tsbuildinfo +1 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import AConnector from '@orchesty/nodejs-sdk/dist/lib/Connector/AConnector';
|
|
2
|
+
import ProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/ProcessDto';
|
|
3
|
+
export declare const NAME = "zoho-get-records-connector";
|
|
4
|
+
export default class ZohoGetRecordsConnector extends AConnector {
|
|
5
|
+
getName(): string;
|
|
6
|
+
processAction(dto: ProcessDto<IInput>): Promise<ProcessDto<IOutput>>;
|
|
7
|
+
}
|
|
8
|
+
export interface IInput {
|
|
9
|
+
recordId: string;
|
|
10
|
+
}
|
|
11
|
+
export interface IOutput {
|
|
12
|
+
Multi_Line: string;
|
|
13
|
+
Email: string;
|
|
14
|
+
Address: {
|
|
15
|
+
display_value: string;
|
|
16
|
+
country: string;
|
|
17
|
+
district_city: string;
|
|
18
|
+
latitude: string;
|
|
19
|
+
address_line_1: string;
|
|
20
|
+
state_province: string;
|
|
21
|
+
address_line_2: string;
|
|
22
|
+
postal_code: string;
|
|
23
|
+
longitude: string;
|
|
24
|
+
};
|
|
25
|
+
Phone_Number: string;
|
|
26
|
+
Time: string;
|
|
27
|
+
Image: string;
|
|
28
|
+
Url: {
|
|
29
|
+
value: string;
|
|
30
|
+
url: string;
|
|
31
|
+
};
|
|
32
|
+
Name: {
|
|
33
|
+
display_value: string;
|
|
34
|
+
prefix: string;
|
|
35
|
+
last_name: string;
|
|
36
|
+
suffix: string;
|
|
37
|
+
first_name: string;
|
|
38
|
+
};
|
|
39
|
+
Formula: string;
|
|
40
|
+
Single_Line: string;
|
|
41
|
+
Number: string;
|
|
42
|
+
Decimal: string;
|
|
43
|
+
Decision_box: string;
|
|
44
|
+
File_upload: string;
|
|
45
|
+
Checkbox: string;
|
|
46
|
+
Currency: string;
|
|
47
|
+
Rich_Text: string;
|
|
48
|
+
Lookup: {
|
|
49
|
+
display_value: string;
|
|
50
|
+
ID: string;
|
|
51
|
+
};
|
|
52
|
+
ID: string;
|
|
53
|
+
Integration: {
|
|
54
|
+
display_value: string;
|
|
55
|
+
ID: string;
|
|
56
|
+
};
|
|
57
|
+
Multi_Select: string[];
|
|
58
|
+
Keyword: string;
|
|
59
|
+
Percent: string;
|
|
60
|
+
Prediction: string;
|
|
61
|
+
Dropdown: string;
|
|
62
|
+
Inline_SubForm: {
|
|
63
|
+
display_value: string;
|
|
64
|
+
ID: string;
|
|
65
|
+
};
|
|
66
|
+
Radio: string;
|
|
67
|
+
Auto_Number: string;
|
|
68
|
+
users: string;
|
|
69
|
+
Audio: string;
|
|
70
|
+
Video: string;
|
|
71
|
+
Signature: string;
|
|
72
|
+
Sentiment: string;
|
|
73
|
+
Date_Time: string;
|
|
74
|
+
Date_field: string;
|
|
75
|
+
Object_Detection: string;
|
|
76
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.NAME = void 0;
|
|
7
|
+
const AConnector_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Connector/AConnector"));
|
|
8
|
+
const HttpMethods_1 = require("@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods");
|
|
9
|
+
const ZohoApplication_1 = require("../ZohoApplication");
|
|
10
|
+
exports.NAME = 'zoho-get-records-connector';
|
|
11
|
+
class ZohoGetRecordsConnector extends AConnector_1.default {
|
|
12
|
+
getName() {
|
|
13
|
+
return exports.NAME;
|
|
14
|
+
}
|
|
15
|
+
async processAction(dto) {
|
|
16
|
+
const { recordId } = dto.getJsonData();
|
|
17
|
+
if (!recordId) {
|
|
18
|
+
throw new Error('Record ID is missing');
|
|
19
|
+
}
|
|
20
|
+
const appInstall = await this.getApplicationInstallFromProcess(dto);
|
|
21
|
+
const accountOwnerName = appInstall.getSettings()[ZohoApplication_1.CREATOR_FORM][ZohoApplication_1.ACCOUNT_OWNER_NAME];
|
|
22
|
+
const appLink = appInstall.getSettings()[ZohoApplication_1.CREATOR_FORM][ZohoApplication_1.APP_LINK_NAME];
|
|
23
|
+
const reportLink = appInstall.getSettings()[ZohoApplication_1.CREATOR_FORM][ZohoApplication_1.REPORT_LINK_NAME];
|
|
24
|
+
const url = `/${accountOwnerName}/${appLink}/report/${reportLink}/${recordId}`;
|
|
25
|
+
const req = await this.getApplication().getRequestDto(dto, appInstall, HttpMethods_1.HttpMethods.GET, url);
|
|
26
|
+
const resp = await this.getSender().send(req, [200]);
|
|
27
|
+
const records = resp.getJsonBody();
|
|
28
|
+
if (records.code !== 3000) {
|
|
29
|
+
throw new Error('The request failed');
|
|
30
|
+
}
|
|
31
|
+
return dto.setNewJsonData(records.data);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.default = ZohoGetRecordsConnector;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ApplicationInstall } from '@orchesty/nodejs-sdk/dist/lib/Application/Database/ApplicationInstall';
|
|
2
|
+
import FormStack from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FormStack';
|
|
3
|
+
import AOAuth2Application from '@orchesty/nodejs-sdk/dist/lib/Authorization/Type/OAuth2/AOAuth2Application';
|
|
4
|
+
import RequestDto from '@orchesty/nodejs-sdk/dist/lib/Transport/Curl/RequestDto';
|
|
5
|
+
import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
|
|
6
|
+
import AProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/AProcessDto';
|
|
7
|
+
export declare const NAME = "zoho";
|
|
8
|
+
export declare const API_DOMAIN = "api_domain";
|
|
9
|
+
export declare const CREATOR_FORM = "creator_form";
|
|
10
|
+
export declare const ACCOUNT_OWNER_NAME = "account_owner_name";
|
|
11
|
+
export declare const APP_LINK_NAME = "app_link_name";
|
|
12
|
+
export declare const FORM_LINK_NAME = "form_link_name";
|
|
13
|
+
export declare const REPORT_LINK_NAME = "report_link_name";
|
|
14
|
+
export default class ZohoApplication extends AOAuth2Application {
|
|
15
|
+
getAuthUrl(): string;
|
|
16
|
+
getDescription(): string;
|
|
17
|
+
getName(): string;
|
|
18
|
+
getPublicName(): string;
|
|
19
|
+
getLogo(): string;
|
|
20
|
+
getRequestDto(dto: AProcessDto, applicationInstall: ApplicationInstall, method: HttpMethods, uri?: string, data?: unknown): Promise<RequestDto> | RequestDto;
|
|
21
|
+
getScopes(applicationInstall: ApplicationInstall): string[];
|
|
22
|
+
getFormStack(): FormStack;
|
|
23
|
+
isAuthorized(applicationInstall: ApplicationInstall): boolean;
|
|
24
|
+
getTokenUrl(): string;
|
|
25
|
+
protected getScopesSeparator(): string;
|
|
26
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.REPORT_LINK_NAME = exports.FORM_LINK_NAME = exports.APP_LINK_NAME = exports.ACCOUNT_OWNER_NAME = exports.CREATOR_FORM = exports.API_DOMAIN = exports.NAME = void 0;
|
|
40
|
+
const CoreFormsEnum_1 = __importStar(require("@orchesty/nodejs-sdk/dist/lib/Application/Base/CoreFormsEnum"));
|
|
41
|
+
const Field_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Field"));
|
|
42
|
+
const FieldType_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FieldType"));
|
|
43
|
+
const Form_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Form"));
|
|
44
|
+
const FormStack_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FormStack"));
|
|
45
|
+
const ScopeSeparatorEnum_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Authorization/ScopeSeparatorEnum"));
|
|
46
|
+
const ABasicApplication_1 = require("@orchesty/nodejs-sdk/dist/lib/Authorization/Type/Basic/ABasicApplication");
|
|
47
|
+
const AOAuth2Application_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Authorization/Type/OAuth2/AOAuth2Application"));
|
|
48
|
+
const IOAuth2Application_1 = require("@orchesty/nodejs-sdk/dist/lib/Authorization/Type/OAuth2/IOAuth2Application");
|
|
49
|
+
const RequestDto_1 = __importDefault(require("@orchesty/nodejs-sdk/dist/lib/Transport/Curl/RequestDto"));
|
|
50
|
+
const Headers_1 = require("@orchesty/nodejs-sdk/dist/lib/Utils/Headers");
|
|
51
|
+
const API_PATH = '/api/v2';
|
|
52
|
+
exports.NAME = 'zoho';
|
|
53
|
+
exports.API_DOMAIN = 'api_domain';
|
|
54
|
+
exports.CREATOR_FORM = 'creator_form';
|
|
55
|
+
exports.ACCOUNT_OWNER_NAME = 'account_owner_name';
|
|
56
|
+
exports.APP_LINK_NAME = 'app_link_name';
|
|
57
|
+
exports.FORM_LINK_NAME = 'form_link_name';
|
|
58
|
+
exports.REPORT_LINK_NAME = 'report_link_name';
|
|
59
|
+
class ZohoApplication extends AOAuth2Application_1.default {
|
|
60
|
+
getAuthUrl() {
|
|
61
|
+
return 'https://accounts.zoho.eu/oauth/v2/auth';
|
|
62
|
+
}
|
|
63
|
+
getDescription() {
|
|
64
|
+
return 'Zoho is a provider of a Customer Relationship Management (CRM) solution';
|
|
65
|
+
}
|
|
66
|
+
getName() {
|
|
67
|
+
return exports.NAME;
|
|
68
|
+
}
|
|
69
|
+
getPublicName() {
|
|
70
|
+
return 'Zoho';
|
|
71
|
+
}
|
|
72
|
+
getLogo() {
|
|
73
|
+
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';
|
|
74
|
+
}
|
|
75
|
+
getRequestDto(dto, applicationInstall, method, uri, data) {
|
|
76
|
+
const domain = applicationInstall.getSettings()[CoreFormsEnum_1.default.AUTHORIZATION_FORM][ABasicApplication_1.TOKEN][exports.API_DOMAIN];
|
|
77
|
+
const url = `${domain}${API_PATH}${uri}`;
|
|
78
|
+
const request = new RequestDto_1.default(url ?? '', method, dto);
|
|
79
|
+
request.setHeaders({
|
|
80
|
+
[Headers_1.CommonHeaders.CONTENT_TYPE]: Headers_1.JSON_TYPE,
|
|
81
|
+
[Headers_1.CommonHeaders.ACCEPT]: Headers_1.JSON_TYPE,
|
|
82
|
+
[Headers_1.CommonHeaders.AUTHORIZATION]: `Zoho-oauthtoken ${this.getAccessToken(applicationInstall)}`,
|
|
83
|
+
});
|
|
84
|
+
if (data) {
|
|
85
|
+
request.setJsonBody(data);
|
|
86
|
+
}
|
|
87
|
+
return request;
|
|
88
|
+
}
|
|
89
|
+
getScopes(applicationInstall) {
|
|
90
|
+
return ['ZohoCRM.modules.ALL', 'ZohoCRM.settings.ALL', 'ZohoCreator.form.ALL', 'ZohoCreator.report.ALL'];
|
|
91
|
+
}
|
|
92
|
+
getFormStack() {
|
|
93
|
+
const form = new Form_1.default(CoreFormsEnum_1.default.AUTHORIZATION_FORM, (0, CoreFormsEnum_1.getFormName)(CoreFormsEnum_1.default.AUTHORIZATION_FORM))
|
|
94
|
+
.addField(new Field_1.default(FieldType_1.default.TEXT, IOAuth2Application_1.CLIENT_ID, 'Client Id', undefined, true))
|
|
95
|
+
.addField(new Field_1.default(FieldType_1.default.TEXT, IOAuth2Application_1.CLIENT_SECRET, 'Client Secret', undefined, true));
|
|
96
|
+
const creatorForm = new Form_1.default(exports.CREATOR_FORM, 'Creator settings')
|
|
97
|
+
.addField(new Field_1.default(FieldType_1.default.TEXT, exports.ACCOUNT_OWNER_NAME, 'Account owner name', undefined, true))
|
|
98
|
+
.addField(new Field_1.default(FieldType_1.default.TEXT, exports.APP_LINK_NAME, 'App link name', undefined, true))
|
|
99
|
+
.addField(new Field_1.default(FieldType_1.default.TEXT, exports.FORM_LINK_NAME, 'Form link name', undefined, true))
|
|
100
|
+
.addField(new Field_1.default(FieldType_1.default.TEXT, exports.REPORT_LINK_NAME, 'report_link_name', undefined, true));
|
|
101
|
+
return new FormStack_1.default()
|
|
102
|
+
.addForm(form)
|
|
103
|
+
.addForm(creatorForm);
|
|
104
|
+
}
|
|
105
|
+
isAuthorized(applicationInstall) {
|
|
106
|
+
const authorizationForm = applicationInstall.getSettings()[CoreFormsEnum_1.default.AUTHORIZATION_FORM];
|
|
107
|
+
const creatorForm = applicationInstall.getSettings()[exports.CREATOR_FORM];
|
|
108
|
+
return super.isAuthorized(applicationInstall)
|
|
109
|
+
&& authorizationForm?.[IOAuth2Application_1.CLIENT_ID]
|
|
110
|
+
&& authorizationForm?.[IOAuth2Application_1.CLIENT_SECRET]
|
|
111
|
+
&& creatorForm?.[exports.ACCOUNT_OWNER_NAME]
|
|
112
|
+
&& creatorForm?.[exports.APP_LINK_NAME]
|
|
113
|
+
&& creatorForm?.[exports.FORM_LINK_NAME]
|
|
114
|
+
&& creatorForm?.[exports.REPORT_LINK_NAME];
|
|
115
|
+
}
|
|
116
|
+
getTokenUrl() {
|
|
117
|
+
return 'https://accounts.zoho.eu/oauth/v2/token';
|
|
118
|
+
}
|
|
119
|
+
getScopesSeparator() {
|
|
120
|
+
return ScopeSeparatorEnum_1.default.SPACE;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.default = ZohoApplication;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@orchesty/connector-zoho",
|
|
3
|
+
"description": "",
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"url": "https://github.com/Orchesty/orchesty-nodejs-connectors",
|
|
7
|
+
"repository": "https://github.com/Orchesty/orchesty-nodejs-connectors",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "rm -rf dist && rm -rf tsconfig.prod.tsbuildinfo && tsc -d -p tsconfig.prod.json && cp package.json ./dist/package.json",
|
|
10
|
+
"test": "jest --coverage --forceExit --passWithNoTests",
|
|
11
|
+
"lint": "eslint src test --fix",
|
|
12
|
+
"lint-ci": "eslint src test"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [],
|
|
15
|
+
"author": "info@hanaboso.com",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@orchesty/nodejs-sdk": "^4.3.6"
|
|
18
|
+
},
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=24"
|
|
21
|
+
}
|
|
22
|
+
}
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const baseConfig = require('../../jest.config.js');
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
...baseConfig,
|
|
5
|
+
roots: ["<rootDir>/src"],
|
|
6
|
+
setupFiles: ["<rootDir>/../../.jest/testEnvs.ts"],
|
|
7
|
+
setupFilesAfterEnv: ["<rootDir>/../../.jest/testLifecycle.ts"],
|
|
8
|
+
globalSetup: "<rootDir>/../../.jest/globalSetup.ts",
|
|
9
|
+
moduleNameMapper: {
|
|
10
|
+
"^@orchesty/nodejs-connectors/test/(.*)$": "<rootDir>/../../test/$1",
|
|
11
|
+
"^@orchesty/nodejs-connectors/lib/(.*)$": "<rootDir>/../../lib/$1",
|
|
12
|
+
},
|
|
13
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@orchesty/connector-zoho",
|
|
3
|
+
"description": "",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"url": "https://github.com/Orchesty/orchesty-nodejs-connectors",
|
|
7
|
+
"repository": "https://github.com/Orchesty/orchesty-nodejs-connectors",
|
|
8
|
+
"keywords": [],
|
|
9
|
+
"author": "info@hanaboso.com",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@orchesty/nodejs-sdk": "^4.3.6"
|
|
12
|
+
},
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=24"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "rm -rf dist && rm -rf tsconfig.prod.tsbuildinfo && tsc -d -p tsconfig.prod.json && cp package.json ./dist/package.json",
|
|
18
|
+
"test": "jest --coverage --forceExit --passWithNoTests",
|
|
19
|
+
"lint": "eslint src test --fix",
|
|
20
|
+
"lint-ci": "eslint src test"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
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 { ACCOUNT_OWNER_NAME, APP_LINK_NAME, CREATOR_FORM, FORM_LINK_NAME } from '../ZohoApplication';
|
|
5
|
+
|
|
6
|
+
export const NAME = 'zoho-add-records-connector';
|
|
7
|
+
|
|
8
|
+
export default class ZohoAddRecordsConnector extends AConnector {
|
|
9
|
+
|
|
10
|
+
public getName(): string {
|
|
11
|
+
return NAME;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public async processAction(dto: ProcessDto<IInput>): Promise<ProcessDto<IOutput>> {
|
|
15
|
+
const appInstall = await this.getApplicationInstallFromProcess(dto);
|
|
16
|
+
const accountOwnerName = appInstall.getSettings()[CREATOR_FORM][ACCOUNT_OWNER_NAME];
|
|
17
|
+
const appLink = appInstall.getSettings()[CREATOR_FORM][APP_LINK_NAME];
|
|
18
|
+
const formLink = appInstall.getSettings()[CREATOR_FORM][FORM_LINK_NAME];
|
|
19
|
+
const url = `/${accountOwnerName}/${appLink}/form/${formLink}`;
|
|
20
|
+
|
|
21
|
+
const req = await this.getApplication().getRequestDto(
|
|
22
|
+
dto,
|
|
23
|
+
appInstall,
|
|
24
|
+
HttpMethods.POST,
|
|
25
|
+
url,
|
|
26
|
+
{ data: dto.getJsonData() },
|
|
27
|
+
);
|
|
28
|
+
const resp = await this.getSender().send<IResponse>(req, [200]);
|
|
29
|
+
|
|
30
|
+
const records = resp.getJsonBody();
|
|
31
|
+
|
|
32
|
+
if (records.code !== 3000) {
|
|
33
|
+
throw new Error(records.message);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return dto.setNewJsonData(records.data);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
42
|
+
|
|
43
|
+
export interface IInput {
|
|
44
|
+
data: [
|
|
45
|
+
{
|
|
46
|
+
Email: string;
|
|
47
|
+
Phone_Number: string;
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
result: {
|
|
51
|
+
fields: string[];
|
|
52
|
+
message: boolean;
|
|
53
|
+
tasks: boolean;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface IOutput {
|
|
58
|
+
Email: string;
|
|
59
|
+
Phone_Number: string;
|
|
60
|
+
ID: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface IResponse {
|
|
64
|
+
code: number;
|
|
65
|
+
data: IOutput;
|
|
66
|
+
message: string;
|
|
67
|
+
tasks: {
|
|
68
|
+
openurl: {
|
|
69
|
+
type: string;
|
|
70
|
+
url: string;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* eslint-enable @typescript-eslint/naming-convention */
|
|
@@ -0,0 +1,117 @@
|
|
|
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 */
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
}
|