/**
 * Fireblocks API
 * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain.  - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com)
 *
 * The version of the OpenAPI document: 1.6.2
 * Contact: developers@fireblocks.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */
import { LegacyPolicyRuleAmount } from './legacy-policy-rule-amount';
import { LegacyPolicyRuleAmountAggregation } from './legacy-policy-rule-amount-aggregation';
import { LegacyPolicyRuleAuthorizationGroups } from './legacy-policy-rule-authorization-groups';
import { LegacyPolicyRuleDesignatedSigners } from './legacy-policy-rule-designated-signers';
import { LegacyPolicyRuleDst } from './legacy-policy-rule-dst';
import { LegacyPolicyRuleOperators } from './legacy-policy-rule-operators';
import { LegacyPolicyRuleRawMessageSigning } from './legacy-policy-rule-raw-message-signing';
import { LegacyPolicyRuleSrc } from './legacy-policy-rule-src';
import { LegacyPolicySrcOrDestSubType } from './legacy-policy-src-or-dest-sub-type';
import { LegacyPolicySrcOrDestType } from './legacy-policy-src-or-dest-type';
/**
 * Policy rule which is enforced on transactions
 * @export
 * @interface LegacyPolicyRule
 */
export interface LegacyPolicyRule {
    /**
     * Policy rule type
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'type': LegacyPolicyRuleTypeEnum;
    /**
     * Defines what occurs when a transaction meets the rule\'s criteria * ALLOW - The transaction goes through and can be signed without requiring additional approvals * BLOCK - The transaction is automatically blocked * 2-TIER - Only these users or user groups can approve             If any of them reject the transaction before the required approval threshold is met, the transaction doesn\'t go through            The list of entities are set is \"authorizationGroups\" field
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'action': LegacyPolicyRuleActionEnum;
    /**
     * Defines the type of asset being transacted, options are * \"*\" - All assets * Specific asset
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'asset': string;
    /**
     * * USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset. * EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset. * NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'amountCurrency': LegacyPolicyRuleAmountCurrencyEnum;
    /**
     * * SINGLE_TX - limit applies to a single transaction * TIMEFRAME - limit applies to all transactions within the defined time period
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'amountScope': LegacyPolicyRuleAmountScopeEnum;
    /**
     *
     * @type {LegacyPolicyRuleAmount}
     * @memberof LegacyPolicyRule
     */
    'amount': LegacyPolicyRuleAmount;
    /**
     * Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum. When the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.
     * @type {number}
     * @memberof LegacyPolicyRule
     */
    'periodSec': number;
    /**
     * (deprecated - replaced by \"operators\")  | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id
     * @type {string}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'operator'?: string;
    /**
     *
     * @type {LegacyPolicyRuleOperators}
     * @memberof LegacyPolicyRule
     */
    'operators'?: LegacyPolicyRuleOperators;
    /**
     * Defines the type of transaction to which the rule applies.   * TRANSFER - Default. Transfers funds from one account to another   * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.   * APPROVE - Allows a smart contract to withdraw from a designated wallet.   * MINT - Perform a mint operation (increase supply) on a supported token   * BURN - Perform a burn operation (reduce supply) on a supported token   * SUPPLY - Use for DeFi to lend assets   * REDEEM - Use for DeFi to get lending back   * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.   * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.   * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.   * PROGRAM_CALL - In Solana refers to invoking on-chain programs (smart contracts) to execute transactions and interact with the blockchain.
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'transactionType'?: LegacyPolicyRuleTransactionTypeEnum;
    /**
     * (deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule
     * @type {string}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'designatedSigner'?: string;
    /**
     *
     * @type {LegacyPolicyRuleDesignatedSigners}
     * @memberof LegacyPolicyRule
     */
    'designatedSigners'?: LegacyPolicyRuleDesignatedSigners;
    /**
     * (deprecated - replaced by "src") source account type
     * @type {LegacyPolicySrcOrDestType}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'srcType'?: LegacyPolicySrcOrDestType;
    /**
     * (deprecated - replaced by "src") source sub account type
     * @type {LegacyPolicySrcOrDestSubType}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'srcSubType'?: LegacyPolicySrcOrDestSubType;
    /**
     * (deprecated - replaced by "src") source account id
     * @type {string}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'srcId'?: string;
    /**
     *
     * @type {LegacyPolicyRuleSrc}
     * @memberof LegacyPolicyRule
     */
    'src'?: LegacyPolicyRuleSrc;
    /**
     * (deprecated - replaced by "dst") destination account type
     * @type {LegacyPolicySrcOrDestType}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'dstType'?: LegacyPolicySrcOrDestType;
    /**
     * (deprecated - replaced by "dst") destination sub account type
     * @type {LegacyPolicySrcOrDestSubType}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'dstSubType'?: LegacyPolicySrcOrDestSubType;
    /**
     * (deprecated - replaced by "dst") destination account id
     * @type {string}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'dstId'?: string;
    /**
     *
     * @type {LegacyPolicyRuleDst}
     * @memberof LegacyPolicyRule
     */
    'dst'?: LegacyPolicyRuleDst;
    /**
     * Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both. By default, you can only transfer to an external address after it’s whitelisted.   * WHITELISTED - Can only be sent to whitelisted addresses.   * ONE_TIME - Can only be sent to non-whitelisted external addresses.   * \"*\" - can be sent to whitelisted addresses or non-whitelisted external
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'dstAddressType'?: LegacyPolicyRuleDstAddressTypeEnum;
    /**
     * (deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction
     * @type {Array<string>}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'authorizers'?: Array<string>;
    /**
     * (deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction
     * @type {number}
     * @memberof LegacyPolicyRule
     * @deprecated
     */
    'authorizersCount'?: number;
    /**
     *
     * @type {LegacyPolicyRuleAuthorizationGroups}
     * @memberof LegacyPolicyRule
     */
    'authorizationGroups'?: LegacyPolicyRuleAuthorizationGroups;
    /**
     *
     * @type {LegacyPolicyRuleAmountAggregation}
     * @memberof LegacyPolicyRule
     */
    'amountAggregation'?: LegacyPolicyRuleAmountAggregation;
    /**
     *
     * @type {LegacyPolicyRuleRawMessageSigning}
     * @memberof LegacyPolicyRule
     */
    'rawMessageSigning'?: LegacyPolicyRuleRawMessageSigning;
    /**
     * Applying this rule over APPROVE type transactions (can only be enabled when rule\'s transaction type is TRANSFER)
     * @type {boolean}
     * @memberof LegacyPolicyRule
     */
    'applyForApprove'?: boolean;
    /**
     * Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule\'s transaction type is CONTRACT_CALL)
     * @type {boolean}
     * @memberof LegacyPolicyRule
     */
    'applyForTypedMessage'?: boolean;
    /**
     * A unique id identifying the rule
     * @type {string}
     * @memberof LegacyPolicyRule
     */
    'externalDescriptor'?: string;
}
export declare const LegacyPolicyRuleTypeEnum: {
    readonly Transfer: "TRANSFER";
};
export type LegacyPolicyRuleTypeEnum = typeof LegacyPolicyRuleTypeEnum[keyof typeof LegacyPolicyRuleTypeEnum];
export declare const LegacyPolicyRuleActionEnum: {
    readonly Allow: "ALLOW";
    readonly Block: "BLOCK";
    readonly _2Tier: "2-TIER";
};
export type LegacyPolicyRuleActionEnum = typeof LegacyPolicyRuleActionEnum[keyof typeof LegacyPolicyRuleActionEnum];
export declare const LegacyPolicyRuleAmountCurrencyEnum: {
    readonly Usd: "USD";
    readonly Eur: "EUR";
    readonly Native: "NATIVE";
};
export type LegacyPolicyRuleAmountCurrencyEnum = typeof LegacyPolicyRuleAmountCurrencyEnum[keyof typeof LegacyPolicyRuleAmountCurrencyEnum];
export declare const LegacyPolicyRuleAmountScopeEnum: {
    readonly SingleTx: "SINGLE_TX";
    readonly Timeframe: "TIMEFRAME";
};
export type LegacyPolicyRuleAmountScopeEnum = typeof LegacyPolicyRuleAmountScopeEnum[keyof typeof LegacyPolicyRuleAmountScopeEnum];
export declare const LegacyPolicyRuleTransactionTypeEnum: {
    readonly Transfer: "TRANSFER";
    readonly ContractCall: "CONTRACT_CALL";
    readonly Approve: "APPROVE";
    readonly Mint: "MINT";
    readonly Burn: "BURN";
    readonly Supply: "SUPPLY";
    readonly Redeem: "REDEEM";
    readonly Stake: "STAKE";
    readonly Raw: "RAW";
    readonly TypedMessage: "TYPED_MESSAGE";
    readonly ProgramCall: "PROGRAM_CALL";
};
export type LegacyPolicyRuleTransactionTypeEnum = typeof LegacyPolicyRuleTransactionTypeEnum[keyof typeof LegacyPolicyRuleTransactionTypeEnum];
export declare const LegacyPolicyRuleDstAddressTypeEnum: {
    readonly Whitelisted: "WHITELISTED";
    readonly OneTime: "ONE_TIME";
    readonly Star: "*";
};
export type LegacyPolicyRuleDstAddressTypeEnum = typeof LegacyPolicyRuleDstAddressTypeEnum[keyof typeof LegacyPolicyRuleDstAddressTypeEnum];
