All files / src ZohoApplication.ts

68.29% Statements 28/41
27.27% Branches 3/11
18.18% Functions 2/11
68.29% Lines 28/41

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 1162x   2x 2x 2x 2x 2x 2x 2x 2x 2x     2x   2x   2x 2x 2x 2x 2x 2x 2x   2x                     6x                                   4x 4x   4x 4x           4x 2x     4x                                                                                              
import CoreFormsEnum, { getFormName } from '@orchesty/nodejs-sdk/dist/lib/Application/Base/CoreFormsEnum';
import { ApplicationInstall } from '@orchesty/nodejs-sdk/dist/lib/Application/Database/ApplicationInstall';
import Field from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Field';
import FieldType from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FieldType';
import Form from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/Form';
import FormStack from '@orchesty/nodejs-sdk/dist/lib/Application/Model/Form/FormStack';
import ScopeSeparatorEnum from '@orchesty/nodejs-sdk/dist/lib/Authorization/ScopeSeparatorEnum';
import { TOKEN } from '@orchesty/nodejs-sdk/dist/lib/Authorization/Type/Basic/ABasicApplication';
import AOAuth2Application from '@orchesty/nodejs-sdk/dist/lib/Authorization/Type/OAuth2/AOAuth2Application';
import { CLIENT_ID, CLIENT_SECRET } from '@orchesty/nodejs-sdk/dist/lib/Authorization/Type/OAuth2/IOAuth2Application';
import RequestDto from '@orchesty/nodejs-sdk/dist/lib/Transport/Curl/RequestDto';
import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
import AProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/AProcessDto';
import { CommonHeaders, JSON_TYPE } from '@orchesty/nodejs-sdk/dist/lib/Utils/Headers';
 
const API_PATH = '/api/v2';
 
export const NAME = 'zoho';
export const API_DOMAIN = 'api_domain';
export const CREATOR_FORM = 'creator_form';
export const ACCOUNT_OWNER_NAME = 'account_owner_name';
export const APP_LINK_NAME = 'app_link_name';
export const FORM_LINK_NAME = 'form_link_name';
export const REPORT_LINK_NAME = 'report_link_name';
 
export default class ZohoApplication extends AOAuth2Application {
 
    public getAuthUrl(): string {
        return 'https://accounts.zoho.eu/oauth/v2/auth';
    }
 
    public getDescription(): string {
        return 'Zoho is a provider of a Customer Relationship Management (CRM) solution';
    }
 
    public getName(): string {
        return NAME;
    }
 
    public getPublicName(): string {
        return 'Zoho';
    }
 
    public getLogo(): string {
        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';
    }
 
    public getRequestDto(
        dto: AProcessDto,
        applicationInstall: ApplicationInstall,
        method: HttpMethods,
        uri?: string,
        data?: unknown,
    ): Promise<RequestDto> | RequestDto {
        const domain = applicationInstall.getSettings()[CoreFormsEnum.AUTHORIZATION_FORM][TOKEN][API_DOMAIN];
        const url = `${domain}${API_PATH}${uri}`;
 
        const request = new RequestDto(url ?? '', method, dto);
        request.setHeaders({
            [CommonHeaders.CONTENT_TYPE]: JSON_TYPE,
            [CommonHeaders.ACCEPT]: JSON_TYPE,
            [CommonHeaders.AUTHORIZATION]: `Zoho-oauthtoken ${this.getAccessToken(applicationInstall)}`,
        });
 
        if (data) {
            request.setJsonBody(data);
        }
 
        return request;
    }
 
    public getScopes(
        // eslint-disable-next-line @typescript-eslint/no-unused-vars
        applicationInstall: ApplicationInstall,
    ): string[] {
        return ['ZohoCRM.modules.ALL', 'ZohoCRM.settings.ALL', 'ZohoCreator.form.ALL', 'ZohoCreator.report.ALL'];
    }
 
    public getFormStack(): FormStack {
        const form = new Form(CoreFormsEnum.AUTHORIZATION_FORM, getFormName(CoreFormsEnum.AUTHORIZATION_FORM))
            .addField(new Field(FieldType.TEXT, CLIENT_ID, 'Client Id', undefined, true))
            .addField(new Field(FieldType.TEXT, CLIENT_SECRET, 'Client Secret', undefined, true));
 
        const creatorForm = new Form(CREATOR_FORM, 'Creator settings')
            .addField(new Field(FieldType.TEXT, ACCOUNT_OWNER_NAME, 'Account owner name', undefined, true))
            .addField(new Field(FieldType.TEXT, APP_LINK_NAME, 'App link name', undefined, true))
            .addField(new Field(FieldType.TEXT, FORM_LINK_NAME, 'Form link name', undefined, true))
            .addField(new Field(FieldType.TEXT, REPORT_LINK_NAME, 'report_link_name', undefined, true));
 
        return new FormStack()
            .addForm(form)
            .addForm(creatorForm);
    }
 
    public isAuthorized(applicationInstall: ApplicationInstall): boolean {
        const authorizationForm = applicationInstall.getSettings()[CoreFormsEnum.AUTHORIZATION_FORM];
        const creatorForm = applicationInstall.getSettings()[CREATOR_FORM];
        return super.isAuthorized(applicationInstall)
            && authorizationForm?.[CLIENT_ID]
            && authorizationForm?.[CLIENT_SECRET]
            && creatorForm?.[ACCOUNT_OWNER_NAME]
            && creatorForm?.[APP_LINK_NAME]
            && creatorForm?.[FORM_LINK_NAME]
            && creatorForm?.[REPORT_LINK_NAME];
    }
 
    public getTokenUrl(): string {
        return 'https://accounts.zoho.eu/oauth/v2/token';
    }
 
    protected getScopesSeparator(): string {
        return ScopeSeparatorEnum.SPACE;
    }
 
}