import { HttpClient, HttpHeaders, HttpResponse, HttpEvent, HttpParameterCodec, HttpContext } from '@angular/common/http';
import { Observable } from 'rxjs';
import { CreateIdentifierDefinitionRequest } from '../model/createIdentifierDefinitionRequest';
import { DeletedEntityResponse } from '../model/deletedEntityResponse';
import { IdentifierDefinition } from '../model/identifierDefinition';
import { PagedResourceListOfIdentifierDefinition } from '../model/pagedResourceListOfIdentifierDefinition';
import { UpdateIdentifierDefinitionRequest } from '../model/updateIdentifierDefinitionRequest';
import { Configuration } from '../configuration';
import * as i0 from "@angular/core";
export interface CreateIdentifierDefinitionRequestParams {
    /** The request defining the new definition */
    createIdentifierDefinitionRequest?: CreateIdentifierDefinitionRequest;
}
export interface DeleteIdentifierDefinitionRequestParams {
    /** The type of entity to which the identifier relates. Available values: Transaction, Portfolio, Holding, ReferenceHolding, TransactionConfiguration, Instrument, PortfolioGroup, Person, Order, Allocation, Calendar, LegalEntity, InvestorRecord, InvestmentAccount, Placement, Execution, Block, Participation, Package, OrderInstruction, CustomEntity, InstrumentEvent, Account, ChartOfAccounts, CustodianAccount, CheckDefinition, Abor, AborConfiguration, Fund, FundConfiguration, Fee, Reconciliation, PropertyDefinition, Compliance, DiaryEntry, Leg, DerivedValuation, Timeline, ClosedPeriod, IdentifierDefinition, SettlementInstruction, TransactionFeeType. */
    domain: 'NotDefined' | 'Transaction' | 'Portfolio' | 'Holding' | 'ReferenceHolding' | 'TransactionConfiguration' | 'Instrument' | 'CutLabelDefinition' | 'Analytic' | 'PortfolioGroup' | 'Person' | 'AccessMetadata' | 'Order' | 'UnitResult' | 'MarketData' | 'ConfigurationRecipe' | 'Allocation' | 'Calendar' | 'LegalEntity' | 'InvestorRecord' | 'InvestmentAccount' | 'Placement' | 'Execution' | 'Block' | 'Participation' | 'Package' | 'OrderInstruction' | 'NextBestAction' | 'CustomEntity' | 'InstrumentEvent' | 'Account' | 'ChartOfAccounts' | 'CustodianAccount' | 'CheckDefinition' | 'Abor' | 'AborConfiguration' | 'Fund' | 'FundConfiguration' | 'Fee' | 'Reconciliation' | 'PropertyDefinition' | 'Compliance' | 'DiaryEntry' | 'Leg' | 'DerivedValuation' | 'Timeline' | 'ClosedPeriod' | 'AddressKeyDefinition' | 'AmortisationRuleSet' | 'AnalyticsSetInventory' | 'AtomUnitResult' | 'CleardownModule' | 'ComplexMarketData' | 'ComplianceRunSummary' | 'ComplianceRule' | 'ComplianceRunInfo' | 'CorporateActionSource' | 'CounterpartyAgreement' | 'CustomEntityDefinition' | 'DataType' | 'Dialect' | 'EventHandler' | 'GeneralLedgerProfile' | 'PostingModule' | 'Quote' | 'RecipeComposer' | 'ReconciliationRunBreak' | 'ReferenceList' | 'RelationDefinition' | 'ReturnBlockIndex' | 'SRSDocument' | 'SRSIndex' | 'TransactionTemplate' | 'TransactionTemplateScope' | 'TransactionType' | 'TransactionTypeConfig' | 'TranslationScript' | 'TaskDefinition' | 'TaskInstance' | 'Worker' | 'StagingRuleSet' | 'IdentifierDefinition' | 'SettlementInstruction' | 'TransactionFeeType' | 'AllocationMethod' | 'TransactionFee';
    /** The scope that the identifier exists in */
    identifierScope: string;
    /** What the identifier represents. Together with \&quot;domain\&quot; and \&quot;identifierScope\&quot; this uniquely identifies the identifier definition */
    identifierType: string;
}
export interface GetIdentifierDefinitionRequestParams {
    /** The type of entity to which the identifier relates. Available values: Transaction, Portfolio, Holding, ReferenceHolding, TransactionConfiguration, Instrument, PortfolioGroup, Person, Order, Allocation, Calendar, LegalEntity, InvestorRecord, InvestmentAccount, Placement, Execution, Block, Participation, Package, OrderInstruction, CustomEntity, InstrumentEvent, Account, ChartOfAccounts, CustodianAccount, CheckDefinition, Abor, AborConfiguration, Fund, FundConfiguration, Fee, Reconciliation, PropertyDefinition, Compliance, DiaryEntry, Leg, DerivedValuation, Timeline, ClosedPeriod, IdentifierDefinition, SettlementInstruction, TransactionFeeType. */
    domain: 'NotDefined' | 'Transaction' | 'Portfolio' | 'Holding' | 'ReferenceHolding' | 'TransactionConfiguration' | 'Instrument' | 'CutLabelDefinition' | 'Analytic' | 'PortfolioGroup' | 'Person' | 'AccessMetadata' | 'Order' | 'UnitResult' | 'MarketData' | 'ConfigurationRecipe' | 'Allocation' | 'Calendar' | 'LegalEntity' | 'InvestorRecord' | 'InvestmentAccount' | 'Placement' | 'Execution' | 'Block' | 'Participation' | 'Package' | 'OrderInstruction' | 'NextBestAction' | 'CustomEntity' | 'InstrumentEvent' | 'Account' | 'ChartOfAccounts' | 'CustodianAccount' | 'CheckDefinition' | 'Abor' | 'AborConfiguration' | 'Fund' | 'FundConfiguration' | 'Fee' | 'Reconciliation' | 'PropertyDefinition' | 'Compliance' | 'DiaryEntry' | 'Leg' | 'DerivedValuation' | 'Timeline' | 'ClosedPeriod' | 'AddressKeyDefinition' | 'AmortisationRuleSet' | 'AnalyticsSetInventory' | 'AtomUnitResult' | 'CleardownModule' | 'ComplexMarketData' | 'ComplianceRunSummary' | 'ComplianceRule' | 'ComplianceRunInfo' | 'CorporateActionSource' | 'CounterpartyAgreement' | 'CustomEntityDefinition' | 'DataType' | 'Dialect' | 'EventHandler' | 'GeneralLedgerProfile' | 'PostingModule' | 'Quote' | 'RecipeComposer' | 'ReconciliationRunBreak' | 'ReferenceList' | 'RelationDefinition' | 'ReturnBlockIndex' | 'SRSDocument' | 'SRSIndex' | 'TransactionTemplate' | 'TransactionTemplateScope' | 'TransactionType' | 'TransactionTypeConfig' | 'TranslationScript' | 'TaskDefinition' | 'TaskInstance' | 'Worker' | 'StagingRuleSet' | 'IdentifierDefinition' | 'SettlementInstruction' | 'TransactionFeeType' | 'AllocationMethod' | 'TransactionFee';
    /** The scope that the identifier exists in */
    identifierScope: string;
    /** What the identifier represents. Together with \&quot;domain\&quot; and \&quot;identifierScope\&quot; this uniquely identifies the identifier definition */
    identifierType: string;
    /** The asAt datetime at which to retrieve the Identifier Definition. Defaults to return              the latest version of the definition if not specified. */
    asAt?: string;
    /** The effectiveAt datetime at which to retrieve the Identifier Definitions.              Since Identifier Definitions exist for all effective time, this will only apply to properties (if requested)              on the Identifier Definition. */
    effectiveAt?: string;
    /** A list of property keys from the \&#39;IdentifierDefinition\&#39; domain to decorate onto the Identifier Definition.              These must take the format {domain}/{scope}/{code}. If no properties are specified, then no properties will be returned. */
    propertyKeys?: Array<string>;
}
export interface ListIdentifierDefinitionsRequestParams {
    /** The effectiveAt datetime at which to retrieve the Identifier Definitions.              Since Identifier Definitions exist for all effective time, this will only apply to properties (if requested)              on the Identifier Definition. */
    effectiveAt?: string;
    /** The asAt datetime at which to retrieve the Identifier Definitions. Defaults to return the latest              version of the Identifier Definitions if not specified. */
    asAt?: string;
    /** The pagination token to use to continue listing Identifier Definitions from a previous call to list              Identifier Definitions. This value is returned from the previous call. If a pagination token is provided the sortBy,              filter, effectiveAt, and asAt fields must not have changed since the original request. */
    page?: string;
    /** When paginating, limit the number of returned results to this many per page. */
    limit?: number;
    /** Expression to filter the result set. Read more about filtering results from LUSID here:              https://support.lusid.com/filtering-results-from-lusid. */
    filter?: string;
    /** A list of field names to sort by, each suffixed by \&quot; ASC\&quot; or \&quot; DESC\&quot; */
    sortBy?: Array<string>;
    /** A list of property keys from the \&#39;IdentifierDefinition\&#39; domain to decorate onto the Identifier Definition.              These must take the format {domain}/{scope}/{code}. */
    propertyKeys?: Array<string>;
}
export interface UpdateIdentifierDefinitionRequestParams {
    /** The type of entity to which the identifier relates. Available values: Transaction, Portfolio, Holding, ReferenceHolding, TransactionConfiguration, Instrument, PortfolioGroup, Person, Order, Allocation, Calendar, LegalEntity, InvestorRecord, InvestmentAccount, Placement, Execution, Block, Participation, Package, OrderInstruction, CustomEntity, InstrumentEvent, Account, ChartOfAccounts, CustodianAccount, CheckDefinition, Abor, AborConfiguration, Fund, FundConfiguration, Fee, Reconciliation, PropertyDefinition, Compliance, DiaryEntry, Leg, DerivedValuation, Timeline, ClosedPeriod, IdentifierDefinition, SettlementInstruction, TransactionFeeType. */
    domain: 'NotDefined' | 'Transaction' | 'Portfolio' | 'Holding' | 'ReferenceHolding' | 'TransactionConfiguration' | 'Instrument' | 'CutLabelDefinition' | 'Analytic' | 'PortfolioGroup' | 'Person' | 'AccessMetadata' | 'Order' | 'UnitResult' | 'MarketData' | 'ConfigurationRecipe' | 'Allocation' | 'Calendar' | 'LegalEntity' | 'InvestorRecord' | 'InvestmentAccount' | 'Placement' | 'Execution' | 'Block' | 'Participation' | 'Package' | 'OrderInstruction' | 'NextBestAction' | 'CustomEntity' | 'InstrumentEvent' | 'Account' | 'ChartOfAccounts' | 'CustodianAccount' | 'CheckDefinition' | 'Abor' | 'AborConfiguration' | 'Fund' | 'FundConfiguration' | 'Fee' | 'Reconciliation' | 'PropertyDefinition' | 'Compliance' | 'DiaryEntry' | 'Leg' | 'DerivedValuation' | 'Timeline' | 'ClosedPeriod' | 'AddressKeyDefinition' | 'AmortisationRuleSet' | 'AnalyticsSetInventory' | 'AtomUnitResult' | 'CleardownModule' | 'ComplexMarketData' | 'ComplianceRunSummary' | 'ComplianceRule' | 'ComplianceRunInfo' | 'CorporateActionSource' | 'CounterpartyAgreement' | 'CustomEntityDefinition' | 'DataType' | 'Dialect' | 'EventHandler' | 'GeneralLedgerProfile' | 'PostingModule' | 'Quote' | 'RecipeComposer' | 'ReconciliationRunBreak' | 'ReferenceList' | 'RelationDefinition' | 'ReturnBlockIndex' | 'SRSDocument' | 'SRSIndex' | 'TransactionTemplate' | 'TransactionTemplateScope' | 'TransactionType' | 'TransactionTypeConfig' | 'TranslationScript' | 'TaskDefinition' | 'TaskInstance' | 'Worker' | 'StagingRuleSet' | 'IdentifierDefinition' | 'SettlementInstruction' | 'TransactionFeeType' | 'AllocationMethod' | 'TransactionFee';
    /** The scope that the identifier exists in */
    identifierScope: string;
    /** What the identifier represents. Together with \&quot;domain\&quot; and \&quot;identifierScope\&quot; this uniquely identifies the Identifier Definition */
    identifierType: string;
    /** The request containing the updated details of the Identifier Definition. */
    updateIdentifierDefinitionRequest?: UpdateIdentifierDefinitionRequest;
}
export declare class IdentifierDefinitionsService {
    protected httpClient: HttpClient;
    protected basePath: string;
    defaultHeaders: HttpHeaders;
    configuration: Configuration;
    encoder: HttpParameterCodec;
    constructor(httpClient: HttpClient, basePath: string | string[], configuration: Configuration);
    private addToHttpParams;
    private addToHttpParamsRecursive;
    /**
     * [EXPERIMENTAL] CreateIdentifierDefinition: Create an Identifier Definition
     * Define a new Identifier Definition
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    createIdentifierDefinition(requestParameters?: CreateIdentifierDefinitionRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<IdentifierDefinition>;
    createIdentifierDefinition(requestParameters?: CreateIdentifierDefinitionRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<IdentifierDefinition>>;
    createIdentifierDefinition(requestParameters?: CreateIdentifierDefinitionRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<IdentifierDefinition>>;
    /**
     * [EXPERIMENTAL] DeleteIdentifierDefinition: Delete a particular Identifier Definition
     * The deletion will take effect from the Identifier Definition deletion datetime.  i.e. will no longer exist at any asAt datetime after the asAt datetime of deletion.
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    deleteIdentifierDefinition(requestParameters?: DeleteIdentifierDefinitionRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<DeletedEntityResponse>;
    deleteIdentifierDefinition(requestParameters?: DeleteIdentifierDefinitionRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<DeletedEntityResponse>>;
    deleteIdentifierDefinition(requestParameters?: DeleteIdentifierDefinitionRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<DeletedEntityResponse>>;
    /**
     * [EXPERIMENTAL] GetIdentifierDefinition: Get a single Identifier Definition
     * Get a single Identifier Definition using domain, identifierScope, identifierType, and an optional asAt              - defaulting to latest if not specified
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    getIdentifierDefinition(requestParameters?: GetIdentifierDefinitionRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<IdentifierDefinition>;
    getIdentifierDefinition(requestParameters?: GetIdentifierDefinitionRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<IdentifierDefinition>>;
    getIdentifierDefinition(requestParameters?: GetIdentifierDefinitionRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<IdentifierDefinition>>;
    /**
     * [EXPERIMENTAL] ListIdentifierDefinitions: List Identifier Definitions
     * Retrieves all Identifier Definitions that fit the filter, in a specific order if sortBy is provided  Supports pagination
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    listIdentifierDefinitions(requestParameters?: ListIdentifierDefinitionsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<PagedResourceListOfIdentifierDefinition>;
    listIdentifierDefinitions(requestParameters?: ListIdentifierDefinitionsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<PagedResourceListOfIdentifierDefinition>>;
    listIdentifierDefinitions(requestParameters?: ListIdentifierDefinitionsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<PagedResourceListOfIdentifierDefinition>>;
    /**
     * [EXPERIMENTAL] UpdateIdentifierDefinition: Update Identifier Definition defined by domain, identifierScope, and identifierType
     * Overwrites an existing Identifier Definition.
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    updateIdentifierDefinition(requestParameters?: UpdateIdentifierDefinitionRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<IdentifierDefinition>;
    updateIdentifierDefinition(requestParameters?: UpdateIdentifierDefinitionRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<IdentifierDefinition>>;
    updateIdentifierDefinition(requestParameters?: UpdateIdentifierDefinitionRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<IdentifierDefinition>>;
    static ɵfac: i0.ɵɵFactoryDeclaration<IdentifierDefinitionsService, [null, { optional: true; }, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<IdentifierDefinitionsService>;
}
