@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.
Files changed (50) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +190 -0
  3. package/coverage/clover.xml +124 -0
  4. package/coverage/coverage-final.json +5 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/index.html +146 -0
  9. package/coverage/lcov-report/prettify.css +1 -0
  10. package/coverage/lcov-report/prettify.js +2 -0
  11. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  12. package/coverage/lcov-report/sorter.js +210 -0
  13. package/coverage/lcov-report/src/Connector/ZohoAddRecordsConnector.ts.html +310 -0
  14. package/coverage/lcov-report/src/Connector/ZohoGetRecordsConnector.ts.html +436 -0
  15. package/coverage/lcov-report/src/Connector/index.html +131 -0
  16. package/coverage/lcov-report/src/ZohoApplication.ts.html +430 -0
  17. package/coverage/lcov-report/src/index.html +116 -0
  18. package/coverage/lcov-report/test/dataProvider.ts.html +271 -0
  19. package/coverage/lcov-report/test/index.html +116 -0
  20. package/coverage/lcov.info +182 -0
  21. package/dist/Connector/ZohoAddRecordsConnector.d.ts +36 -0
  22. package/dist/Connector/ZohoAddRecordsConnector.js +30 -0
  23. package/dist/Connector/ZohoGetRecordsConnector.d.ts +76 -0
  24. package/dist/Connector/ZohoGetRecordsConnector.js +34 -0
  25. package/dist/ZohoApplication.d.ts +26 -0
  26. package/dist/ZohoApplication.js +123 -0
  27. package/dist/package.json +22 -0
  28. package/jest.config.js +13 -0
  29. package/package.json +22 -0
  30. package/src/Connector/ZohoAddRecordsConnector.ts +75 -0
  31. package/src/Connector/ZohoGetRecordsConnector.ts +117 -0
  32. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-input.json +25 -0
  33. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-mock.json +39 -0
  34. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/error-output.json +37 -0
  35. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/input.json +25 -0
  36. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/mock.json +12 -0
  37. package/src/Connector/__tests__/Data/ZohoAddRecordsConnector/output.json +8 -0
  38. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-input.json +8 -0
  39. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-mock.json +79 -0
  40. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/error-output.json +76 -0
  41. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/input.json +8 -0
  42. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/mock.json +11 -0
  43. package/src/Connector/__tests__/Data/ZohoGetRecordsConnector/output.json +11 -0
  44. package/src/Connector/__tests__/ZohoAddRecordsConnector.ts +21 -0
  45. package/src/Connector/__tests__/ZohoGetRecordsConnector.ts +21 -0
  46. package/src/ZohoApplication.ts +115 -0
  47. package/test/dataProvider.ts +62 -0
  48. package/tsconfig.json +8 -0
  49. package/tsconfig.prod.json +13 -0
  50. 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
+ }