UNPKG

tencentcloud-sdk-nodejs-intl-en

Version:
5,332 lines • 137 kB
/*
 * Copyright (c) 2018 THL A29 Limited, a Tencent company. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * CreateRecord request structure.
 * @class
 */
class CreateRecordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Record type, which is obtained through the record type API. The value contains uppercase letters, such as `A`.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * Record split zone, which is obtained through the record split zone API.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * Record value, such as `IP : 200.200.200.200`, `CNAME : cname.dnspod.com`, and `MX : mail.dnspod.com`.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Domain ID. The `DomainId` parameter has a higher priority than `Domain`. If `DomainId` is passed in, `Domain` will be ignored.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Host record such as `www`. If it is not passed in, it will be `@` by default.
         * @type {string || null}
         */
        this.SubDomain = null;

        /**
         * Split zone ID, which is obtained through the record split zone API. The value is a string such as `10=1`. The `RecordLineId` parameter has a higher priority than `RecordLine`. If both of them are passed in, `RecordLineId` will be used first.
         * @type {string || null}
         */
        this.RecordLineId = null;

        /**
         * MX priority, which is required for an MX record and will take effect if the record type is MX. Value range: 1–20.
         * @type {number || null}
         */
        this.MX = null;

        /**
         * TTL. Value range: 1–604800. The minimum value varies by domain level.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Weight information, which is an integer between 0 and 100. It is supported only for enterprise VIP domains. `0` indicates not to pass in this parameter, i.e., not to set the weight.
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * Initial status of the record. Valid values: ENABLE, DISABLE. Default value: ENABLE. If `DISABLE` is passed in, the DNS record won't take effect, and the limit on round-robin DNS won't be verified.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.SubDomain = 'SubDomain' in params ? params.SubDomain : null;
        this.RecordLineId = 'RecordLineId' in params ? params.RecordLineId : null;
        this.MX = 'MX' in params ? params.MX : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DeleteDomainAlias response structure.
 * @class
 */
class DeleteDomainAliasResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteDomainBatch response structure.
 * @class
 */
class DeleteDomainBatchResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID.
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * The array of task details.
         * @type {Array.<DeleteDomainBatchDetail> || null}
         */
        this.DetailList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;

        if (params.DetailList) {
            this.DetailList = new Array();
            for (let z in params.DetailList) {
                let obj = new DeleteDomainBatchDetail();
                obj.deserialize(params.DetailList[z]);
                this.DetailList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information of a DNS record group
 * @class
 */
class RecordGroupInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group ID
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Group name
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Group type. Valid values: `system`, `user`.
         * @type {string || null}
         */
        this.GroupType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.GroupType = 'GroupType' in params ? params.GroupType : null;

    }
}

/**
 * CreateRecordBatch response structure.
 * @class
 */
class CreateRecordBatchResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information of the bulk added domains
         * @type {Array.<CreateRecordBatchDetail> || null}
         */
        this.DetailList = null;

        /**
         * Bulk task ID
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DetailList) {
            this.DetailList = new Array();
            for (let z in params.DetailList) {
                let obj = new CreateRecordBatchDetail();
                obj.deserialize(params.DetailList[z]);
                this.DetailList.push(obj);
            }
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Record information in the task of bulk adding domains
 * @class
 */
class CreateDomainBatchRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subdomain (host record).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubDomain = null;

        /**
         * Record type. For more information, see the `DescribeRecordType` API.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * Split zone of the DNS record. For more information, see the `DescribeRecordLineList` API.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * Record value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * TTL value of the record
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Record adding status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operation type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrMsg = null;

        /**
         * ID of the record in the list
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubDomain = 'SubDomain' in params ? params.SubDomain : null;
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.ErrMsg = 'ErrMsg' in params ? params.ErrMsg : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * ModifyRecordGroup request structure.
 * @class
 */
class ModifyRecordGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Group name
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * ID of the group to be modified
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DNS query volume in the current statistical dimension
 * @class
 */
class DomainAnalyticsDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * DNS query volume in the current statistical dimension
         * @type {number || null}
         */
        this.Num = null;

        /**
         * Collection date for daily collection
         * @type {string || null}
         */
        this.DateKey = null;

        /**
         * The last hour (0–23) for hourly collection. For example, if `HourKey` is `23`, the DNS query volume in the statistical period of 22:00–23:00 will be collected.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.HourKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Num = 'Num' in params ? params.Num : null;
        this.DateKey = 'DateKey' in params ? params.DateKey : null;
        this.HourKey = 'HourKey' in params ? params.HourKey : null;

    }
}

/**
 * DeleteRecordGroup request structure.
 * @class
 */
class DeleteRecordGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Group ID
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DescribeDomain response structure.
 * @class
 */
class DescribeDomainResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain information
         * @type {DomainInfo || null}
         */
        this.DomainInfo = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DomainInfo) {
            let obj = new DomainInfo();
            obj.deserialize(params.DomainInfo)
            this.DomainInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRecordLineList response structure.
 * @class
 */
class DescribeRecordLineListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of split zones.
         * @type {Array.<LineInfo> || null}
         */
        this.LineList = null;

        /**
         * List of split zone groups.
         * @type {Array.<LineGroupInfo> || null}
         */
        this.LineGroupList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LineList) {
            this.LineList = new Array();
            for (let z in params.LineList) {
                let obj = new LineInfo();
                obj.deserialize(params.LineList[z]);
                this.LineList.push(obj);
            }
        }

        if (params.LineGroupList) {
            this.LineGroupList = new Array();
            for (let z in params.LineGroupList) {
                let obj = new LineGroupInfo();
                obj.deserialize(params.LineGroupList[z]);
                this.LineGroupList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Domain details
 * @class
 */
class DomainInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain ID
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Domain status
         * @type {string || null}
         */
        this.Status = null;

        /**
         * DNS plan level
         * @type {string || null}
         */
        this.Grade = null;

        /**
         * Domain group ID
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Whether the domain is starred
         * @type {string || null}
         */
        this.IsMark = null;

        /**
         * TTL (DNS record cache time)
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Whether CNAME flattening is enabled
         * @type {string || null}
         */
        this.CnameSpeedup = null;

        /**
         * Domain remarks
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Domain Punycode
         * @type {string || null}
         */
        this.Punycode = null;

        /**
         * DNS status of the domain
         * @type {string || null}
         */
        this.DnsStatus = null;

        /**
         * NS list of the domain
         * @type {Array.<string> || null}
         */
        this.DnspodNsList = null;

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain level ID
         * @type {number || null}
         */
        this.GradeLevel = null;

        /**
         * Domain user ID
         * @type {number || null}
         */
        this.UserId = null;

        /**
         * Whether the domain is a VIP domain
         * @type {string || null}
         */
        this.IsVip = null;

        /**
         * Domain owner account
         * @type {string || null}
         */
        this.Owner = null;

        /**
         * Domain level description
         * @type {string || null}
         */
        this.GradeTitle = null;

        /**
         * Domain creation time
         * @type {string || null}
         */
        this.CreatedOn = null;

        /**
         * Last update time
         * @type {string || null}
         */
        this.UpdatedOn = null;

        /**
         * Tencent Cloud account `Uin`
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * NS list actually used by the domain
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.ActualNsList = null;

        /**
         * Number of domain records
         * @type {number || null}
         */
        this.RecordCount = null;

        /**
         * Alias of the domain account owner
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OwnerNick = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Grade = 'Grade' in params ? params.Grade : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.IsMark = 'IsMark' in params ? params.IsMark : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.CnameSpeedup = 'CnameSpeedup' in params ? params.CnameSpeedup : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.Punycode = 'Punycode' in params ? params.Punycode : null;
        this.DnsStatus = 'DnsStatus' in params ? params.DnsStatus : null;
        this.DnspodNsList = 'DnspodNsList' in params ? params.DnspodNsList : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.GradeLevel = 'GradeLevel' in params ? params.GradeLevel : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.IsVip = 'IsVip' in params ? params.IsVip : null;
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.GradeTitle = 'GradeTitle' in params ? params.GradeTitle : null;
        this.CreatedOn = 'CreatedOn' in params ? params.CreatedOn : null;
        this.UpdatedOn = 'UpdatedOn' in params ? params.UpdatedOn : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.ActualNsList = 'ActualNsList' in params ? params.ActualNsList : null;
        this.RecordCount = 'RecordCount' in params ? params.RecordCount : null;
        this.OwnerNick = 'OwnerNick' in params ? params.OwnerNick : null;

    }
}

/**
 * CreateDomainBatch request structure.
 * @class
 */
class CreateDomainBatchRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain array
         * @type {Array.<string> || null}
         */
        this.DomainList = null;

        /**
         * Add A records of @ and www for each domain with the record value of the IP. If this parameter is not passed in or is set to an empty string or null, only the domain but not the records will be added.
         * @type {string || null}
         */
        this.RecordValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainList = 'DomainList' in params ? params.DomainList : null;
        this.RecordValue = 'RecordValue' in params ? params.RecordValue : null;

    }
}

/**
 * ModifyRecordGroup response structure.
 * @class
 */
class ModifyRecordGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the modified group
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainGroupList request structure.
 * @class
 */
class DescribeDomainGroupListRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * Element in the domain list
 * @class
 */
class DomainListItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID assigned to the domain by the system
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Original format of the domain
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Domain status. Valid values: `ENABLE` (normal), `PAUSE` (suspended), `SPAM` (blocked).
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Default TTL of the default DNS record of the domain
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Whether CNAME flattening is enabled. Valid values: `ENABLE` (enabled); `DISABLE` (disabled).
         * @type {string || null}
         */
        this.CNAMESpeedup = null;

        /**
         * DNS configuration status. Valid values: `DNSERROR` (error), an empty string (normal).
         * @type {string || null}
         */
        this.DNSStatus = null;

        /**
         * Plan level code of the domain
         * @type {string || null}
         */
        this.Grade = null;

        /**
         * Group ID of the domain
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Whether search engine push optimization is enabled. Valid values: `YES` (yes), `NO` (no).
         * @type {string || null}
         */
        this.SearchEnginePush = null;

        /**
         * Domain remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Punycode-encoded domain format
         * @type {string || null}
         */
        this.Punycode = null;

        /**
         * Effective DNS assigned to the domain by the system
         * @type {Array.<string> || null}
         */
        this.EffectiveDNS = null;

        /**
         * Number corresponding to the plan level of the domain
         * @type {number || null}
         */
        this.GradeLevel = null;

        /**
         * Plan name
         * @type {string || null}
         */
        this.GradeTitle = null;

        /**
         * Whether it is a paid plan
         * @type {string || null}
         */
        this.IsVip = null;

        /**
         * Activation time of the paid plan
         * @type {string || null}
         */
        this.VipStartAt = null;

        /**
         * Expiry time of the paid plan
         * @type {string || null}
         */
        this.VipEndAt = null;

        /**
         * Whether VIP automatic renewal is enabled for the domain. Valid values: `YES` (yes); `NO` (no). Default value: `DEFAULT`.
         * @type {string || null}
         */
        this.VipAutoRenew = null;

        /**
         * Number of records under the domain
         * @type {number || null}
         */
        this.RecordCount = null;

        /**
         * Domain adding time
         * @type {string || null}
         */
        this.CreatedOn = null;

        /**
         * Domain update time
         * @type {string || null}
         */
        this.UpdatedOn = null;

        /**
         * Account of the domain
         * @type {string || null}
         */
        this.Owner = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.CNAMESpeedup = 'CNAMESpeedup' in params ? params.CNAMESpeedup : null;
        this.DNSStatus = 'DNSStatus' in params ? params.DNSStatus : null;
        this.Grade = 'Grade' in params ? params.Grade : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.SearchEnginePush = 'SearchEnginePush' in params ? params.SearchEnginePush : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.Punycode = 'Punycode' in params ? params.Punycode : null;
        this.EffectiveDNS = 'EffectiveDNS' in params ? params.EffectiveDNS : null;
        this.GradeLevel = 'GradeLevel' in params ? params.GradeLevel : null;
        this.GradeTitle = 'GradeTitle' in params ? params.GradeTitle : null;
        this.IsVip = 'IsVip' in params ? params.IsVip : null;
        this.VipStartAt = 'VipStartAt' in params ? params.VipStartAt : null;
        this.VipEndAt = 'VipEndAt' in params ? params.VipEndAt : null;
        this.VipAutoRenew = 'VipAutoRenew' in params ? params.VipAutoRenew : null;
        this.RecordCount = 'RecordCount' in params ? params.RecordCount : null;
        this.CreatedOn = 'CreatedOn' in params ? params.CreatedOn : null;
        this.UpdatedOn = 'UpdatedOn' in params ? params.UpdatedOn : null;
        this.Owner = 'Owner' in params ? params.Owner : null;

    }
}

/**
 * DeleteDomainBatch request structure.
 * @class
 */
class DeleteDomainBatchRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The domain array.
         * @type {Array.<string> || null}
         */
        this.DomainList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainList = 'DomainList' in params ? params.DomainList : null;

    }
}

/**
 * DescribeRecordType response structure.
 * @class
 */
class DescribeRecordTypeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of record types
         * @type {Array.<string> || null}
         */
        this.TypeList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TypeList = 'TypeList' in params ? params.TypeList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDomainRemark response structure.
 * @class
 */
class ModifyDomainRemarkResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainAliasList response structure.
 * @class
 */
class DescribeDomainAliasListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of domain aliases
         * @type {Array.<DomainAliasInfo> || null}
         */
        this.DomainAliasList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DomainAliasList) {
            this.DomainAliasList = new Array();
            for (let z in params.DomainAliasList) {
                let obj = new DomainAliasInfo();
                obj.deserialize(params.DomainAliasList[z]);
                this.DomainAliasList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRecordToGroup request structure.
 * @class
 */
class ModifyRecordToGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Group ID
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Record ID. Separate multiple IDs by vertical bar ("|").
         * @type {string || null}
         */
        this.RecordId = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * Count info of the queried record list
 * @class
 */
class RecordCountInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The subdomain count.
         * @type {number || null}
         */
        this.SubdomainCount = null;

        /**
         * The count of records returned in the list.
         * @type {number || null}
         */
        this.ListCount = null;

        /**
         * The total record count.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubdomainCount = 'SubdomainCount' in params ? params.SubdomainCount : null;
        this.ListCount = 'ListCount' in params ? params.ListCount : null;
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DeleteShareDomain response structure.
 * @class
 */
class DeleteShareDomainResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRecord request structure.
 * @class
 */
class ModifyRecordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Record type, which is obtained through the record type API. The value contains uppercase letters, such as `A`.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * Record split zone, which is obtained through the record split zone API.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * Record value, such as `IP : 200.200.200.200`, `CNAME : cname.dnspod.com`, and `MX : mail.dnspod.com`.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * The record ID. You can view all DNS records and their IDs via the `DescribeRecordList` API.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Host record such as `www`. If it is not passed in, it will be `@` by default.
         * @type {string || null}
         */
        this.SubDomain = null;

        /**
         * Split zone ID, which is obtained through the record split zone API. The value is a string such as `10=1`. The `RecordLineId` parameter has a higher priority than `RecordLine`. If both of them are passed in, `RecordLineId` will be used first.
         * @type {string || null}
         */
        this.RecordLineId = null;

        /**
         * MX priority, which is required for an MX record and will take effect if the record type is MX. Value range: 1–20.
         * @type {number || null}
         */
        this.MX = null;

        /**
         * TTL. Value range: 1–604800. The minimum value varies by domain level.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Weight information, which is an integer between 0 and 100. It is supported only for enterprise VIP domains. `0` indicates not to pass in this parameter, i.e., not to set the weight.
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * Initial status of the record. Valid values: ENABLE, DISABLE. Default value: ENABLE. If `DISABLE` is passed in, the DNS record won't take effect, and the limit on round-robin DNS won't be verified.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.SubDomain = 'SubDomain' in params ? params.SubDomain : null;
        this.RecordLineId = 'RecordLineId' in params ? params.RecordLineId : null;
        this.MX = 'MX' in params ? params.MX : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * Record information in the bulk task
 * @class
 */
class BatchRecordInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Record ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * Subdomain (host record).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubDomain = null;

        /**
         * Record type. For more information, see the `DescribeRecordType` API.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * Split zone of the DNS record. For more information, see the `DescribeRecordLineList` API.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * Record value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * TTL value of the record
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Record adding status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operation type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrMsg = null;

        /**
         * ID of the record in the list
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Record status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Enabled = null;

        /**
         * MX weight of the record
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MX = null;

        /**
         * The record weight.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Weight = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.SubDomain = 'SubDomain' in params ? params.SubDomain : null;
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.ErrMsg = 'ErrMsg' in params ? params.ErrMsg : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.Enabled = 'Enabled' in params ? params.Enabled : null;
        this.MX = 'MX' in params ? params.MX : null;
        this.Weight = 'Weight' in params ? params.Weight : null;

    }
}

/**
 * Information of a split zone group
 * @class
 */
class LineGroupInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Split zone group ID
         * @type {string || null}
         */
        this.LineId = null;

        /**
         * Split zone group name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Group type
         * @type {string || null}
         */
        this.Type = null;

        /**
         * List of split zones in the split zone group
         * @type {Array.<string> || null}
         */
        this.LineList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LineId = 'LineId' in params ? params.LineId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.LineList = 'LineList' in params ? params.LineList : null;

    }
}

/**
 * DeleteDomain request structure.
 * @class
 */
class DeleteDomainRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * ModifyDomainOwner request structure.
 * @class
 */
class ModifyDomainOwnerRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The account to which to transfer the domain, which can be an UIN or email address
         * @type {string || null}
         */
        this.Account = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Account = 'Account' in params ? params.Account : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * Domain sharing information
 * @class
 */
class DomainShareInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Account with which the domain is shared
         * @type {string || null}
         */
        this.ShareTo = null;

        /**
         * Sharing mode. Valid values: `rw` (read/write), `r` (read-only).
         * @type {string || null}
         */
        this.Mode = null;

        /**
         * Sharing status. Valid values: `enabled` (shared successfully); `pending` (the account shared to does not exist and is pending registration).
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ShareTo = 'ShareTo' in params ? params.ShareTo : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DescribeRecordLineList request structure.
 * @class
 */
class DescribeRecordLineListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain level.
+ Original plan. Valid values: `D_FREE` (Free Plan); `D_PLUS` (Individual Plus Plan); `D_EXTRA` (Enterprise 1 Plan); `D_EXPERT` (Enterprise 2 Plan); `D_ULTRA` (Enterprise 3 Plan).
+ New plan. Valid values: `DP_FREE` (Free Version); `DP_PLUS` (Professional); `DP_EXTRA` (Enterprise Basic); `DP_EXPERT` (Enterprise); `DP_ULTRA` (Ultimate).
         * @type {string || null}
         */
        this.DomainGrade = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainGrade = 'DomainGrade' in params ? params.DomainGrade : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DescribeRecordList response structure.
 * @class
 */
class DescribeRecordListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The record count info.
         * @type {RecordCountInfo || null}
         */
        this.RecordCountInfo = null;

        /**
         * The record list result.
         * @type {Array.<RecordListItem> || null}
         */
        this.RecordList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RecordCountInfo) {
            let obj = new RecordCountInfo();
            obj.deserialize(params.RecordCountInfo)
            this.RecordCountInfo = obj;
        }

        if (params.RecordList) {
            this.RecordList = new Array();
            for (let z in params.RecordList) {
                let obj = new RecordListItem();
                obj.deserialize(params.RecordList[z]);
                this.RecordList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRecordBatch request structure.
 * @class
 */
class CreateRecordBatchRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain ID. Separate multiple ones by comma.
         * @type {Array.<string> || null}
         */
        this.DomainIdList = null;

        /**
         * Record array
         * @type {Array.<AddRecordBatch> || null}
         */
        this.RecordList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainIdList = 'DomainIdList' in params ? params.DomainIdList : null;

        if (params.RecordList) {
            this.RecordList = new Array();
            for (let z in params.RecordList) {
                let obj = new AddRecordBatch();
                obj.deserialize(params.RecordList[z]);
                this.RecordList.push(obj);
            }
        }

    }
}

/**
 * DeleteDomainAlias request structure.
 * @class
 */
class DeleteDomainAliasRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain alias ID. You can view all domain aliases and their IDs via the `DescribeDomainAliasList` API.
         * @type {number || null}
         */
        this.DomainAliasId = null;

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainAliasId = 'DomainAliasId' in params ? params.DomainAliasId : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * Information of a domain alias
 * @class
 */
class DomainAliasInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain alias ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Domain alias
         * @type {string || null}
         */
        this.DomainAlias = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.DomainAlias = 'DomainAlias' in params ? params.DomainAlias : null;

    }
}

/**
 * ModifyDomainLock request structure.
 * @class
 */
class ModifyDomainLockRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Number of days to lock the domain. The maximum number of locked days can be obtained by calling the API for getting the permissions of a domain.
         * @type {number || null}
         */
        this.LockDays = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.LockDays = 'LockDays' in params ? params.LockDays : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * ModifyDomainStatus request structure.
 * @class
 */
class ModifyDomainStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain status. Valid values: enable; disable.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DNS query volume of the subdomain alias
 * @class
 */
class SubdomainAliasAnalyticsItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Statistics on the DNS query volume of a subdomain
         * @type {SubdomainAnalyticsInfo || null}
         */
        this.Info = null;

        /**
         * DNS query volume in the current statistical dimension
         * @type {Array.<DomainAnalyticsDetail> || null}
         */
        this.Data = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Info) {
            let obj = new SubdomainAnalyticsInfo();
            obj.deserialize(params.Info)
            this.Info = obj;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new DomainAnalyticsDetail();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }

    }
}

/**
 * ModifyDomainStatus response structure.
 * @class
 */
class ModifyDomainStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Records to be bulk added
 * @class
 */
class AddRecordBatch extends  AbstractModel {
    constructor(){
        super();

        /**
         * Record type. For more information, see the `DescribeRecordType` API.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * Record value.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Subdomain (host record), which is `@` by default.
         * @type {string || null}
         */
        this.SubDomain = null;

        /**
         * Split zone of the DNS record. For more information, see the `DescribeRecordLineList` API. If neither `RecordLine` nor `RecordLineId` is specified, the default split zone will be used.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * Split zone ID of the DNS record. If both `RecordLine` and `RecordLineId` are specified, `RecordLineId` will be used.
         * @type {string || null}
         */
        this.RecordLineId = null;

        /**
         * The record weight (not supported).
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * MX record value. It is `0` by default for non-MX records and required for MX records.
         * @type {number || null}
         */
        this.MX = null;

        /**
         * TTL value of the record, which is `600` by default.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Record status (not supported). Valid values: `0` (disabled); `1` (enabled). Default value: `1`.
         * @type {number || null}
         */
        this.Enabled = null;

        /**
         * Record remarks (not supported).
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.SubDomain = 'SubDomain' in params ? params.SubDomain : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.RecordLineId = 'RecordLineId' in params ? params.RecordLineId : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.MX = 'MX' in params ? params.MX : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.Enabled = 'Enabled' in params ? params.Enabled : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * DescribeRecord request structure.
 * @class
 */
class DescribeRecordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The record ID. You can view all DNS records and their IDs via the `DescribeRecordList` API.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * CreateDomainGroup response structure.
 * @class
 */
class CreateDomainGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain group ID
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSubdomainAnalytics request structure.
 * @class
 */
class DescribeSubdomainAnalyticsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The domain of the DNS query volume to be queried
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Query start date in the format of `YYYY-MM-DD`
         * @type {string || null}
         */
        this.StartDate = null;

        /**
         * Query end date in the format of `YYYY-MM-DD`
         * @type {string || null}
         */
        this.EndDate = null;

        /**
         * The subdomain of the DNS query volume to be queried
         * @type {string || null}
         */
        this.Subdomain = null;

        /**
         * `DATE`: Daily. `HOUR`: Hourly
         * @type {string || null}
         */
        this.DnsFormat = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.StartDate = 'StartDate' in params ? params.StartDate : null;
        this.EndDate = 'EndDate' in params ? params.EndDate : null;
        this.Subdomain = 'Subdomain' in params ? params.Subdomain : null;
        this.DnsFormat = 'DnsFormat' in params ? params.DnsFormat : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DeleteRecord request structure.
 * @class
 */
class DeleteRecordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The record ID. You can view all DNS records and their IDs via the `DescribeRecordList` API.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DescribeDomain request structure.
 * @class
 */
class DescribeDomainRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * List of domain groups
 * @class
 */
class GroupInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group ID
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Group name
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Group type
         * @type {string || null}
         */
        this.GroupType = null;

        /**
         * Number of domains in the group
         * @type {number || null}
         */
        this.Size = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.GroupType = 'GroupType' in params ? params.GroupType : null;
        this.Size = 'Size' in params ? params.Size : null;

    }
}

/**
 * ModifyRecordStatus request structure.
 * @class
 */
class ModifyRecordStatusRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The record ID. You can view all DNS records and their IDs via the `DescribeRecordList` API.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * Record status. Valid values: `ENABLE`, `DISABLE`. If `DISABLE` is passed in, the DNS record won't take effect, and the limit on round-robin DNS won't be verified.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * CreateRecord response structure.
 * @class
 */
class CreateRecordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Record ID
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRecordGroup response structure.
 * @class
 */
class DeleteRecordGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Record information
 * @class
 */
class RecordInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Record ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Subdomain (host record).
         * @type {string || null}
         */
        this.SubDomain = null;

        /**
         * Record type. For more information, see the `DescribeRecordType` API.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * Split zone of the DNS record. For more information, see the `DescribeRecordLineList` API.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * Split zone ID of the DNS record. For more information, see the `DescribeRecordLineList` API.
         * @type {string || null}
         */
        this.RecordLineId = null;

        /**
         * Record value.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Record weight.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * MX record value. It is 0 by default for non-MX records.
         * @type {number || null}
         */
        this.MX = null;

        /**
         * TTL value of the record.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Record status. Valid values: 0 (disabled); 1 (enabled).
         * @type {number || null}
         */
        this.Enabled = null;

        /**
         * D-Monitor status of the record.
"Ok" : The server is normal.
"Warn" : There is an alarm on this record, and the server returns 4XX.
"Down" : The server is down.
"" : D-Monitor is disabled for this record.
         * @type {string || null}
         */
        this.MonitorStatus = null;

        /**
         * Record remarks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Last update time of the record.
         * @type {string || null}
         */
        this.UpdatedOn = null;

        /**
         * Domain ID.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.SubDomain = 'SubDomain' in params ? params.SubDomain : null;
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.RecordLineId = 'RecordLineId' in params ? params.RecordLineId : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.MX = 'MX' in params ? params.MX : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.Enabled = 'Enabled' in params ? params.Enabled : null;
        this.MonitorStatus = 'MonitorStatus' in params ? params.MonitorStatus : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.UpdatedOn = 'UpdatedOn' in params ? params.UpdatedOn : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * Response structure for bulk adding records
 * @class
 */
class CreateRecordBatchDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * See `RecordInfoBatch`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CreateRecordBatchRecord> || null}
         */
        this.RecordList = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Domain
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain level
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DomainGrade = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrMsg = null;

        /**
         * Task running status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operation type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * Domain ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RecordList) {
            this.RecordList = new Array();
            for (let z in params.RecordList) {
                let obj = new CreateRecordBatchRecord();
                obj.deserialize(params.RecordList[z]);
                this.RecordList.push(obj);
            }
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainGrade = 'DomainGrade' in params ? params.DomainGrade : null;
        this.ErrMsg = 'ErrMsg' in params ? params.ErrMsg : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DescribeSubdomainAnalytics response structure.
 * @class
 */
class DescribeSubdomainAnalyticsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * DNS query volume in the current statistical dimension
         * @type {Array.<DomainAnalyticsDetail> || null}
         */
        this.Data = null;

        /**
         * Statistics on the DNS query volume of a subdomain
         * @type {SubdomainAnalyticsInfo || null}
         */
        this.Info = null;

        /**
         * DNS query volume of the subdomain alias
         * @type {Array.<SubdomainAliasAnalyticsItem> || null}
         */
        this.AliasData = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new DomainAnalyticsDetail();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }

        if (params.Info) {
            let obj = new SubdomainAnalyticsInfo();
            obj.deserialize(params.Info)
            this.Info = obj;
        }

        if (params.AliasData) {
            this.AliasData = new Array();
            for (let z in params.AliasData) {
                let obj = new SubdomainAliasAnalyticsItem();
                obj.deserialize(params.AliasData[z]);
                this.AliasData.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRecord response structure.
 * @class
 */
class ModifyRecordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Record ID
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRecordToGroup response structure.
 * @class
 */
class ModifyRecordToGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDomainUnlock response structure.
 * @class
 */
class ModifyDomainUnlockResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainLogList request structure.
 * @class
 */
class DescribeDomainLogListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Record offset starting from `0`. Default value: `0`.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Total number of logs to be obtained. For example, `20` indicates to obtain 20 logs. Default value: `500`. Maximum value: `500`.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeDomainList response structure.
 * @class
 */
class DescribeDomainListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Statistics on the list page
         * @type {DomainCountInfo || null}
         */
        this.DomainCountInfo = null;

        /**
         * Domain list
         * @type {Array.<DomainListItem> || null}
         */
        this.DomainList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DomainCountInfo) {
            let obj = new DomainCountInfo();
            obj.deserialize(params.DomainCountInfo)
            this.DomainCountInfo = obj;
        }

        if (params.DomainList) {
            this.DomainList = new Array();
            for (let z in params.DomainList) {
                let obj = new DomainListItem();
                obj.deserialize(params.DomainList[z]);
                this.DomainList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRecordBatch request structure.
 * @class
 */
class ModifyRecordBatchRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of record IDs. You can view all DNS records and their IDs via the `DescribeRecordList` API.
         * @type {Array.<number> || null}
         */
        this.RecordIdList = null;

        /**
         * The field to be modified. Valid values: `sub_domain`, `record_type`, `area`, `value`, `mx`, `ttl`, `status`.
         * @type {string || null}
         */
        this.Change = null;

        /**
         * The value to be changed to, which is required and subject to the `change` field.
         * @type {string || null}
         */
        this.ChangeTo = null;

        /**
         * The record value to be changed to, which is required only if the `change` field is `record_type`.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * MX record priority, which is required only if the `Change` field is `mx`.
         * @type {string || null}
         */
        this.MX = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordIdList = 'RecordIdList' in params ? params.RecordIdList : null;
        this.Change = 'Change' in params ? params.Change : null;
        this.ChangeTo = 'ChangeTo' in params ? params.ChangeTo : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.MX = 'MX' in params ? params.MX : null;

    }
}

/**
 * DeleteRecord response structure.
 * @class
 */
class DeleteRecordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Record information in the task of bulk adding records
 * @class
 */
class CreateRecordBatchRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subdomain (host record).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubDomain = null;

        /**
         * Record type. For more information, see the `DescribeRecordType` API.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * Split zone of the DNS record. For more information, see the `DescribeRecordLineList` API.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * Record value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * TTL value of the record
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * Record adding status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operation type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrMsg = null;

        /**
         * ID of the record in the list
         * @type {number || null}
         */
        this.Id = null;

        /**
         * MX weight of the record
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MX = null;

        /**
         * The record weight.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Weight = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubDomain = 'SubDomain' in params ? params.SubDomain : null;
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.ErrMsg = 'ErrMsg' in params ? params.ErrMsg : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.MX = 'MX' in params ? params.MX : null;
        this.Weight = 'Weight' in params ? params.Weight : null;

    }
}

/**
 * CreateDomain response structure.
 * @class
 */
class CreateDomainResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain information
         * @type {DomainCreateInfo || null}
         */
        this.DomainInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DomainInfo) {
            let obj = new DomainCreateInfo();
            obj.deserialize(params.DomainInfo)
            this.DomainInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * List statistics by page
 * @class
 */
class DomainCountInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible domains
         * @type {number || null}
         */
        this.DomainTotal = null;

        /**
         * Number of all domains that can be viewed by the user
         * @type {number || null}
         */
        this.AllTotal = null;

        /**
         * Number of domains added under the user account
         * @type {number || null}
         */
        this.MineTotal = null;

        /**
         * Number of domains shared with the user
         * @type {number || null}
         */
        this.ShareTotal = null;

        /**
         * Number of paid domains
         * @type {number || null}
         */
        this.VipTotal = null;

        /**
         * Number of suspended domains
         * @type {number || null}
         */
        this.PauseTotal = null;

        /**
         * Number of domains with a DNS configuration error
         * @type {number || null}
         */
        this.ErrorTotal = null;

        /**
         * Number of locked domains
         * @type {number || null}
         */
        this.LockTotal = null;

        /**
         * Number of blocked domains
         * @type {number || null}
         */
        this.SpamTotal = null;

        /**
         * Number of domains that will expire within 30 days
         * @type {number || null}
         */
        this.VipExpire = null;

        /**
         * Number of domains shared with others
         * @type {number || null}
         */
        this.ShareOutTotal = null;

        /**
         * Number of domains in the specified group
         * @type {number || null}
         */
        this.GroupTotal = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainTotal = 'DomainTotal' in params ? params.DomainTotal : null;
        this.AllTotal = 'AllTotal' in params ? params.AllTotal : null;
        this.MineTotal = 'MineTotal' in params ? params.MineTotal : null;
        this.ShareTotal = 'ShareTotal' in params ? params.ShareTotal : null;
        this.VipTotal = 'VipTotal' in params ? params.VipTotal : null;
        this.PauseTotal = 'PauseTotal' in params ? params.PauseTotal : null;
        this.ErrorTotal = 'ErrorTotal' in params ? params.ErrorTotal : null;
        this.LockTotal = 'LockTotal' in params ? params.LockTotal : null;
        this.SpamTotal = 'SpamTotal' in params ? params.SpamTotal : null;
        this.VipExpire = 'VipExpire' in params ? params.VipExpire : null;
        this.ShareOutTotal = 'ShareOutTotal' in params ? params.ShareOutTotal : null;
        this.GroupTotal = 'GroupTotal' in params ? params.GroupTotal : null;

    }
}

/**
 * ModifyRecordBatch response structure.
 * @class
 */
class ModifyRecordBatchResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Bulk task ID
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * See `modifyRecordBatchDetail`.
         * @type {Array.<ModifyRecordBatchDetail> || null}
         */
        this.DetailList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;

        if (params.DetailList) {
            this.DetailList = new Array();
            for (let z in params.DetailList) {
                let obj = new ModifyRecordBatchDetail();
                obj.deserialize(params.DetailList[z]);
                this.DetailList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainLogList response structure.
 * @class
 */
class DescribeDomainLogListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.LogList = null;

        /**
         * Number of results per page
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Total number of logs
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LogList = 'LogList' in params ? params.LogList : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRecordType request structure.
 * @class
 */
class DescribeRecordTypeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain level.
+ Original plan. Valid values: `D_FREE` (Free Plan); `D_PLUS` (Individual Plus Plan); `D_EXTRA` (Enterprise 1 Plan); `D_EXPERT` (Enterprise 2 Plan); `D_ULTRA` (Enterprise 3 Plan).
+ New plan. Valid values: `DP_FREE` (Free Version); `DP_PLUS` (Professional); `DP_EXTRA` (Enterprise Basic); `DP_EXPERT` (Enterprise); `DP_ULTRA` (Ultimate).
         * @type {string || null}
         */
        this.DomainGrade = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainGrade = 'DomainGrade' in params ? params.DomainGrade : null;

    }
}

/**
 * Record list elements
 * @class
 */
class RecordListItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * The record ID.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The record value.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * The record status. Valid values: `ENABLE` (enabled), `DISABLE` (disabled).
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The update time.
         * @type {string || null}
         */
        this.UpdatedOn = null;

        /**
         * The host name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * The record split zone.
         * @type {string || null}
         */
        this.Line = null;

        /**
         * The split zone ID.
         * @type {string || null}
         */
        this.LineId = null;

        /**
         * The record type.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * The record weight, which is required for round-robin DNS records.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Weight = null;

        /**
         * The monitoring status of the record. Valid values: `OK` (normal), `WARN` (warning), and `DOWN` (downtime). It is empty if no monitoring is set or the monitoring is suspended.
         * @type {string || null}
         */
        this.MonitorStatus = null;

        /**
         * The record remarks.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * The record cache time.
         * @type {number || null}
         */
        this.TTL = null;

        /**
         * The MX value, applicable to the MX record only.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MX = null;

        /**
         * Whether it is a default NS record.
         * @type {boolean || null}
         */
        this.DefaultNS = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.UpdatedOn = 'UpdatedOn' in params ? params.UpdatedOn : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Line = 'Line' in params ? params.Line : null;
        this.LineId = 'LineId' in params ? params.LineId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Weight = 'Weight' in params ? params.Weight : null;
        this.MonitorStatus = 'MonitorStatus' in params ? params.MonitorStatus : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.TTL = 'TTL' in params ? params.TTL : null;
        this.MX = 'MX' in params ? params.MX : null;
        this.DefaultNS = 'DefaultNS' in params ? params.DefaultNS : null;

    }
}

/**
 * CreateDomainBatch response structure.
 * @class
 */
class CreateDomainBatchResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information of the bulk added domains
         * @type {Array.<CreateDomainBatchDetail> || null}
         */
        this.DetailList = null;

        /**
         * Bulk task ID
         * @type {number || null}
         */
        this.JobId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DetailList) {
            this.DetailList = new Array();
            for (let z in params.DetailList) {
                let obj = new CreateDomainBatchDetail();
                obj.deserialize(params.DetailList[z]);
                this.DetailList.push(obj);
            }
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainGroupList response structure.
 * @class
 */
class DescribeDomainGroupListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group list
         * @type {Array.<GroupInfo> || null}
         */
        this.GroupList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.GroupList) {
            this.GroupList = new Array();
            for (let z in params.GroupList) {
                let obj = new GroupInfo();
                obj.deserialize(params.GroupList[z]);
                this.GroupList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDomainOwner response structure.
 * @class
 */
class ModifyDomainOwnerResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Statistics on the DNS query volume of a subdomain
 * @class
 */
class SubdomainAnalyticsInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * `DATE`: Daily; `HOUR`: Hourly
         * @type {string || null}
         */
        this.DnsFormat = null;

        /**
         * Total DNS query volume for the current statistical period
         * @type {number || null}
         */
        this.DnsTotal = null;

        /**
         * The queried domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Start date of the current statistical period
         * @type {string || null}
         */
        this.StartDate = null;

        /**
         * End date of the current statistical period
         * @type {string || null}
         */
        this.EndDate = null;

        /**
         * Subdomain
         * @type {string || null}
         */
        this.Subdomain = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DnsFormat = 'DnsFormat' in params ? params.DnsFormat : null;
        this.DnsTotal = 'DnsTotal' in params ? params.DnsTotal : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.StartDate = 'StartDate' in params ? params.StartDate : null;
        this.EndDate = 'EndDate' in params ? params.EndDate : null;
        this.Subdomain = 'Subdomain' in params ? params.Subdomain : null;

    }
}

/**
 * Response structure for bulk adding records
 * @class
 */
class ModifyRecordBatchDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * See `RecordInfoBatchModify`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<BatchRecordInfo> || null}
         */
        this.RecordList = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Domain
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain level
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DomainGrade = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrMsg = null;

        /**
         * Task running status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operation type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * Domain ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RecordList) {
            this.RecordList = new Array();
            for (let z in params.RecordList) {
                let obj = new BatchRecordInfo();
                obj.deserialize(params.RecordList[z]);
                this.RecordList.push(obj);
            }
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainGrade = 'DomainGrade' in params ? params.DomainGrade : null;
        this.ErrMsg = 'ErrMsg' in params ? params.ErrMsg : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * Details of batch deleting domains
 * @class
 */
class DeleteDomainBatchDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * The domain ID.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * The domain name.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The error message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Error = null;

        /**
         * The domain deletion status.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The operation.
         * @type {string || null}
         */
        this.Operation = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Error = 'Error' in params ? params.Error : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Operation = 'Operation' in params ? params.Operation : null;

    }
}

/**
 * CreateDomain request structure.
 * @class
 */
class CreateDomainRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The group ID of the domain. You can view the group information of this domain via the `DescribeDomainGroupList` API.
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Whether the domain is starred. Valid values: yes, no.
         * @type {string || null}
         */
        this.IsMark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.IsMark = 'IsMark' in params ? params.IsMark : null;

    }
}

/**
 * DescribeDomainShareInfo response structure.
 * @class
 */
class DescribeDomainShareInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain sharing information
         * @type {Array.<DomainShareInfo> || null}
         */
        this.ShareList = null;

        /**
         * Owner account of the domain
         * @type {string || null}
         */
        this.Owner = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ShareList) {
            this.ShareList = new Array();
            for (let z in params.ShareList) {
                let obj = new DomainShareInfo();
                obj.deserialize(params.ShareList[z]);
                this.ShareList.push(obj);
            }
        }
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDomainRemark request structure.
 * @class
 */
class ModifyDomainRemarkRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Domain remarks. To delete the remarks, submit empty content.
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * CreateDomainAlias response structure.
 * @class
 */
class CreateDomainAliasResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain alias ID
         * @type {number || null}
         */
        this.DomainAliasId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainAliasId = 'DomainAliasId' in params ? params.DomainAliasId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRecordList request structure.
 * @class
 */
class DescribeRecordListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The domain for which DNS records are to be obtained.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The ID of the domain whose DNS records are requested. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * The host header of a DNS record. If this parameter is passed in, only the DNS record corresponding to this host header will be returned.
         * @type {string || null}
         */
        this.Subdomain = null;

        /**
         * The type of DNS record, such as A, CNAME, NS, AAAA, explicit URL, implicit URL, CAA, or SPF record.
         * @type {string || null}
         */
        this.RecordType = null;

        /**
         * The name of the split zone for which DNS records are requested. You can view split zones allowed by this domain via the `DescribeRecordLineList` API.
         * @type {string || null}
         */
        this.RecordLine = null;

        /**
         * The ID of the split zone for which DNS records are requested. If `RecordLineId` is passed in, `RecordLine` is ignored. You can view split zones allowed by this domain via the `DescribeRecordLineList` API.
         * @type {string || null}
         */
        this.RecordLineId = null;

        /**
         * The group ID passed in to get DNS records in the group.
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * The keyword for searching for DNS records. Host headers and record values are supported.
         * @type {string || null}
         */
        this.Keyword = null;

        /**
         * The sorting field. Available values: `name`, `line`, `type`, `value`, `weight`, `mx`, and `ttl,updated_on`.
         * @type {string || null}
         */
        this.SortField = null;

        /**
         * The sorting type. Valid values: `ASC` (ascending, default), `DESC` (descending).
         * @type {string || null}
         */
        this.SortType = null;

        /**
         * The offset. Default value: `0`.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The limit. It defaults to 100 and can be up to 3,000.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Subdomain = 'Subdomain' in params ? params.Subdomain : null;
        this.RecordType = 'RecordType' in params ? params.RecordType : null;
        this.RecordLine = 'RecordLine' in params ? params.RecordLine : null;
        this.RecordLineId = 'RecordLineId' in params ? params.RecordLineId : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;
        this.SortField = 'SortField' in params ? params.SortField : null;
        this.SortType = 'SortType' in params ? params.SortType : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeRecord response structure.
 * @class
 */
class DescribeRecordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Record information
         * @type {RecordInfo || null}
         */
        this.RecordInfo = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RecordInfo) {
            let obj = new RecordInfo();
            obj.deserialize(params.RecordInfo)
            this.RecordInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainPurview response structure.
 * @class
 */
class DescribeDomainPurviewResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Permission list of the domain
         * @type {Array.<PurviewInfo> || null}
         */
        this.PurviewList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.PurviewList) {
            this.PurviewList = new Array();
            for (let z in params.PurviewList) {
                let obj = new PurviewInfo();
                obj.deserialize(params.PurviewList[z]);
                this.PurviewList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRecordStatus response structure.
 * @class
 */
class ModifyRecordStatusResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Record ID.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRecordGroup request structure.
 * @class
 */
class CreateRecordGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Group name
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DescribeRecordGroupList response structure.
 * @class
 */
class DescribeRecordGroupListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group list
         * @type {Array.<RecordGroupInfo> || null}
         */
        this.GroupList = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.GroupList) {
            this.GroupList = new Array();
            for (let z in params.GroupList) {
                let obj = new RecordGroupInfo();
                obj.deserialize(params.GroupList[z]);
                this.GroupList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDomainGroup request structure.
 * @class
 */
class CreateDomainGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain group
         * @type {string || null}
         */
        this.GroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;

    }
}

/**
 * Information of a split zone
 * @class
 */
class LineInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Split zone name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Split zone ID
         * @type {string || null}
         */
        this.LineId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.LineId = 'LineId' in params ? params.LineId : null;

    }
}

/**
 * DeleteDomain response structure.
 * @class
 */
class DeleteDomainResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainAliasList request structure.
 * @class
 */
class DescribeDomainAliasListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * CreateDomainAlias request structure.
 * @class
 */
class CreateDomainAliasRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain alias
         * @type {string || null}
         */
        this.DomainAlias = null;

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainAlias = 'DomainAlias' in params ? params.DomainAlias : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DeleteShareDomain request structure.
 * @class
 */
class DeleteShareDomainRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Account of the domain to be shared
         * @type {string || null}
         */
        this.Account = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Account = 'Account' in params ? params.Account : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * DescribeRecordGroupList request structure.
 * @class
 */
class DescribeRecordGroupListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Pagination offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of items per page for pagination
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Domain permission
 * @class
 */
class PurviewInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Permission name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Permission value
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * ModifyRecordRemark request structure.
 * @class
 */
class ModifyRecordRemarkRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The record ID. You can view all DNS records and their IDs via the `DescribeRecordList` API.
         * @type {number || null}
         */
        this.RecordId = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * DNS record remarks. To delete the remarks, submit empty content.
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * ModifyRecordRemark response structure.
 * @class
 */
class ModifyRecordRemarkResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainList request structure.
 * @class
 */
class DescribeDomainListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The domain group type. Valid values: `ALL` (default), `MINE`, `SHARE`, `ISMARK`, `PAUSE`, `VIP`, `RECENT`, `SHARE_OUT`, and `FREE`.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Record offset starting from `0`. Default value: `0`.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of domains to be obtained. For example, `20` indicates to obtain 20 domains. Default value: `3000`.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Group ID, which can be passed in to get all domains in the specified group
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Keyword for searching for a domain
         * @type {string || null}
         */
        this.Keyword = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;

    }
}

/**
 * Domain information returned during domain creation
 * @class
 */
class DomainCreateInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain Punycode
         * @type {string || null}
         */
        this.Punycode = null;

        /**
         * NS list of the domain
         * @type {Array.<string> || null}
         */
        this.GradeNsList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.Punycode = 'Punycode' in params ? params.Punycode : null;
        this.GradeNsList = 'GradeNsList' in params ? params.GradeNsList : null;

    }
}

/**
 * DescribeDomainPurview request structure.
 * @class
 */
class DescribeDomainPurviewRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * Response structure for bulk adding domains
 * @class
 */
class CreateDomainBatchDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * See `RecordInfoBatch`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CreateDomainBatchRecord> || null}
         */
        this.RecordList = null;

        /**
         * Task ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Domain
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain level
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DomainGrade = null;

        /**
         * Error message
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrMsg = null;

        /**
         * Task running status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operation type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operation = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RecordList) {
            this.RecordList = new Array();
            for (let z in params.RecordList) {
                let obj = new CreateDomainBatchRecord();
                obj.deserialize(params.RecordList[z]);
                this.RecordList.push(obj);
            }
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainGrade = 'DomainGrade' in params ? params.DomainGrade : null;
        this.ErrMsg = 'ErrMsg' in params ? params.ErrMsg : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Operation = 'Operation' in params ? params.Operation : null;

    }
}

/**
 * ModifyDomainUnlock request structure.
 * @class
 */
class ModifyDomainUnlockRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Domain unlock code, which will be returned when the domain is locked.
         * @type {string || null}
         */
        this.LockCode = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.LockCode = 'LockCode' in params ? params.LockCode : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

/**
 * ModifyDomainLock response structure.
 * @class
 */
class ModifyDomainLockResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain lock information
         * @type {LockInfo || null}
         */
        this.LockInfo = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LockInfo) {
            let obj = new LockInfo();
            obj.deserialize(params.LockInfo)
            this.LockInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Domain lock information
 * @class
 */
class LockInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain ID
         * @type {number || null}
         */
        this.DomainId = null;

        /**
         * Domain unlock code
         * @type {string || null}
         */
        this.LockCode = null;

        /**
         * Automatic unlock date of the domain
         * @type {string || null}
         */
        this.LockEnd = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DomainId = 'DomainId' in params ? params.DomainId : null;
        this.LockCode = 'LockCode' in params ? params.LockCode : null;
        this.LockEnd = 'LockEnd' in params ? params.LockEnd : null;

    }
}

/**
 * CreateRecordGroup response structure.
 * @class
 */
class CreateRecordGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * New group ID
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * The unique request ID, which is returned for each request. RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDomainShareInfo request structure.
 * @class
 */
class DescribeDomainShareInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * The domain ID. `DomainId` takes priority over `Domain`. If `DomainId` is passed in, `Domain` is ignored. You can view all `Domain` and `DomainId` values via the `DescribeDomainList` API.
         * @type {number || null}
         */
        this.DomainId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.DomainId = 'DomainId' in params ? params.DomainId : null;

    }
}

module.exports = {
    CreateRecordRequest: CreateRecordRequest,
    DeleteDomainAliasResponse: DeleteDomainAliasResponse,
    DeleteDomainBatchResponse: DeleteDomainBatchResponse,
    RecordGroupInfo: RecordGroupInfo,
    CreateRecordBatchResponse: CreateRecordBatchResponse,
    CreateDomainBatchRecord: CreateDomainBatchRecord,
    ModifyRecordGroupRequest: ModifyRecordGroupRequest,
    DomainAnalyticsDetail: DomainAnalyticsDetail,
    DeleteRecordGroupRequest: DeleteRecordGroupRequest,
    DescribeDomainResponse: DescribeDomainResponse,
    DescribeRecordLineListResponse: DescribeRecordLineListResponse,
    DomainInfo: DomainInfo,
    CreateDomainBatchRequest: CreateDomainBatchRequest,
    ModifyRecordGroupResponse: ModifyRecordGroupResponse,
    DescribeDomainGroupListRequest: DescribeDomainGroupListRequest,
    DomainListItem: DomainListItem,
    DeleteDomainBatchRequest: DeleteDomainBatchRequest,
    DescribeRecordTypeResponse: DescribeRecordTypeResponse,
    ModifyDomainRemarkResponse: ModifyDomainRemarkResponse,
    DescribeDomainAliasListResponse: DescribeDomainAliasListResponse,
    ModifyRecordToGroupRequest: ModifyRecordToGroupRequest,
    RecordCountInfo: RecordCountInfo,
    DeleteShareDomainResponse: DeleteShareDomainResponse,
    ModifyRecordRequest: ModifyRecordRequest,
    BatchRecordInfo: BatchRecordInfo,
    LineGroupInfo: LineGroupInfo,
    DeleteDomainRequest: DeleteDomainRequest,
    ModifyDomainOwnerRequest: ModifyDomainOwnerRequest,
    DomainShareInfo: DomainShareInfo,
    DescribeRecordLineListRequest: DescribeRecordLineListRequest,
    DescribeRecordListResponse: DescribeRecordListResponse,
    CreateRecordBatchRequest: CreateRecordBatchRequest,
    DeleteDomainAliasRequest: DeleteDomainAliasRequest,
    DomainAliasInfo: DomainAliasInfo,
    ModifyDomainLockRequest: ModifyDomainLockRequest,
    ModifyDomainStatusRequest: ModifyDomainStatusRequest,
    SubdomainAliasAnalyticsItem: SubdomainAliasAnalyticsItem,
    ModifyDomainStatusResponse: ModifyDomainStatusResponse,
    AddRecordBatch: AddRecordBatch,
    DescribeRecordRequest: DescribeRecordRequest,
    CreateDomainGroupResponse: CreateDomainGroupResponse,
    DescribeSubdomainAnalyticsRequest: DescribeSubdomainAnalyticsRequest,
    DeleteRecordRequest: DeleteRecordRequest,
    DescribeDomainRequest: DescribeDomainRequest,
    GroupInfo: GroupInfo,
    ModifyRecordStatusRequest: ModifyRecordStatusRequest,
    CreateRecordResponse: CreateRecordResponse,
    DeleteRecordGroupResponse: DeleteRecordGroupResponse,
    RecordInfo: RecordInfo,
    CreateRecordBatchDetail: CreateRecordBatchDetail,
    DescribeSubdomainAnalyticsResponse: DescribeSubdomainAnalyticsResponse,
    ModifyRecordResponse: ModifyRecordResponse,
    ModifyRecordToGroupResponse: ModifyRecordToGroupResponse,
    ModifyDomainUnlockResponse: ModifyDomainUnlockResponse,
    DescribeDomainLogListRequest: DescribeDomainLogListRequest,
    DescribeDomainListResponse: DescribeDomainListResponse,
    ModifyRecordBatchRequest: ModifyRecordBatchRequest,
    DeleteRecordResponse: DeleteRecordResponse,
    CreateRecordBatchRecord: CreateRecordBatchRecord,
    CreateDomainResponse: CreateDomainResponse,
    DomainCountInfo: DomainCountInfo,
    ModifyRecordBatchResponse: ModifyRecordBatchResponse,
    DescribeDomainLogListResponse: DescribeDomainLogListResponse,
    DescribeRecordTypeRequest: DescribeRecordTypeRequest,
    RecordListItem: RecordListItem,
    CreateDomainBatchResponse: CreateDomainBatchResponse,
    DescribeDomainGroupListResponse: DescribeDomainGroupListResponse,
    ModifyDomainOwnerResponse: ModifyDomainOwnerResponse,
    SubdomainAnalyticsInfo: SubdomainAnalyticsInfo,
    ModifyRecordBatchDetail: ModifyRecordBatchDetail,
    DeleteDomainBatchDetail: DeleteDomainBatchDetail,
    CreateDomainRequest: CreateDomainRequest,
    DescribeDomainShareInfoResponse: DescribeDomainShareInfoResponse,
    ModifyDomainRemarkRequest: ModifyDomainRemarkRequest,
    CreateDomainAliasResponse: CreateDomainAliasResponse,
    DescribeRecordListRequest: DescribeRecordListRequest,
    DescribeRecordResponse: DescribeRecordResponse,
    DescribeDomainPurviewResponse: DescribeDomainPurviewResponse,
    ModifyRecordStatusResponse: ModifyRecordStatusResponse,
    CreateRecordGroupRequest: CreateRecordGroupRequest,
    DescribeRecordGroupListResponse: DescribeRecordGroupListResponse,
    CreateDomainGroupRequest: CreateDomainGroupRequest,
    LineInfo: LineInfo,
    DeleteDomainResponse: DeleteDomainResponse,
    DescribeDomainAliasListRequest: DescribeDomainAliasListRequest,
    CreateDomainAliasRequest: CreateDomainAliasRequest,
    DeleteShareDomainRequest: DeleteShareDomainRequest,
    DescribeRecordGroupListRequest: DescribeRecordGroupListRequest,
    PurviewInfo: PurviewInfo,
    ModifyRecordRemarkRequest: ModifyRecordRemarkRequest,
    ModifyRecordRemarkResponse: ModifyRecordRemarkResponse,
    DescribeDomainListRequest: DescribeDomainListRequest,
    DomainCreateInfo: DomainCreateInfo,
    DescribeDomainPurviewRequest: DescribeDomainPurviewRequest,
    CreateDomainBatchDetail: CreateDomainBatchDetail,
    ModifyDomainUnlockRequest: ModifyDomainUnlockRequest,
    ModifyDomainLockResponse: ModifyDomainLockResponse,
    LockInfo: LockInfo,
    CreateRecordGroupResponse: CreateRecordGroupResponse,
    DescribeDomainShareInfoRequest: DescribeDomainShareInfoRequest,

}