import type { Collection, MakeRequest, PaginationQueryParams, QueryOptions, QueryParams, GetAppDefinitionParams, CursorPaginatedCollection, GetEnvironmentTemplateParams, BasicCursorPaginationOptions, GetOAuthApplicationParams, GetUserParams } from './common-types';
import type { CreateOAuthApplicationProps, OAuthApplication, OAuthApplicationProps } from './entities/oauth-application';
import type { Organization, OrganizationProps } from './entities/organization';
import type { CreatePersonalAccessTokenProps } from './entities/personal-access-token';
import type { Space, SpaceProps } from './entities/space';
import type { AppDefinition } from './entities/app-definition';
import type { UsageQuery } from './entities/usage';
import type { UserProps } from './entities/user';
import type { CreateEnvironmentTemplateProps, EnvironmentTemplate, EnvironmentTemplateProps } from './entities/environment-template';
import type { RawAxiosRequestConfig } from 'axios';
/**
 * @deprecated The nested (legacy) client is deprecated and will be removed in the next major version. Use the plain client instead.
 */
export type ClientAPI = ReturnType<typeof createClientApi>;
type CreateSpaceProps = Omit<SpaceProps, 'sys'> & {
    defaultLocale?: string;
    productId?: string;
};
/**
 * @internal
 */
export default function createClientApi(makeRequest: MakeRequest): {
    /**
     * Gets all environment templates for a given organization with the lasted version
     * @param organizationId - Organization ID
     * @returns Promise for a collection of EnvironmentTemplates
     * ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getEnvironmentTemplates('<organization_id>')
     * .then((response) => console.log(response.items))
     * .catch(console.error)
     * ```
     */
    getEnvironmentTemplates: (organizationId: string, query?: BasicCursorPaginationOptions & {
        select?: string;
        forTemplatedSpaces?: boolean;
    }) => Promise<CursorPaginatedCollection<EnvironmentTemplate, EnvironmentTemplateProps>>;
    /**
     * Gets the lasted version environment template if params.version is not specified
     * @param params.organizationId - Organization ID
     * @param params.environmentTemplateId - Environment template ID
     * @param [params.version] - Template version number to return a specific version of the environment template
     * @returns Promise for a EnvironmentTemplate
     * ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getEnvironmentTemplate({
     *   organizationId: '<organization_id>',
     *   environmentTemplateId: '<environment_template_id>',
     *   version: version>
     * })
     * .then((space) => console.log(space))
     * .catch(console.error)
     * ```
     */
    getEnvironmentTemplate: ({ organizationId, environmentTemplateId, version, query, }: GetEnvironmentTemplateParams & {
        version?: number;
        query?: {
            select?: string;
        };
    }) => Promise<EnvironmentTemplate>;
    /**
     * Creates an environment template
     * @param organizationId - Organization ID
     * @param environmentTemplateData - Object representation of the environment template to be created
     * @returns Promise for the newly created EnvironmentTemplate
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.createEnvironmentTemplate('<organization_id>', {<environment_template_date>})
     * .then((environmentTemplate) => console.log(environmentTemplate))
     * .catch(console.error)
     * ```
     */
    createEnvironmentTemplate: (organizationId: string, environmentTemplateData: CreateEnvironmentTemplateProps) => Promise<EnvironmentTemplate>;
    /**
     * Gets all spaces
     * @returns Promise for a collection of Spaces
     * ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getSpaces()
     * .then((response) => console.log(response.items))
     * .catch(console.error)
     * ```
     */
    getSpaces: (query?: QueryOptions) => Promise<Collection<Space, SpaceProps>>;
    /**
     * Gets a space
     * @param spaceId - Space ID
     * @returns Promise for a Space
     * ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getSpace('<space_id>')
     * .then((space) => console.log(space))
     * .catch(console.error)
     * ```
     */
    getSpace: (spaceId: string) => Promise<Space>;
    /**
     * Creates a space
     * @param spaceData - Object representation of the Space to be created
     * @param organizationId - Organization ID, if the associated token can manage more than one organization.
     * @returns Promise for the newly created Space
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.createSpace({
     *   name: 'Name of new space'
     * })
     * .then((space) => console.log(space))
     * .catch(console.error)
     * ```
     */
    createSpace: (spaceData: CreateSpaceProps, organizationId: string) => Promise<Space>;
    /**
     * Gets an organization
     * @param  id - Organization ID
     * @returns Promise for a Organization
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getOrganization('<org_id>')
     * .then((org) => console.log(org))
     * .catch(console.error)
     * ```
     */
    getOrganization: (id: string) => Promise<Organization>;
    /**
     * Gets a collection of Organizations
     * @returns Promise for a collection of Organizations
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getOrganizations()
     * .then(result => console.log(result.items))
     * .catch(console.error)
     * ```
     */
    getOrganizations: (query?: PaginationQueryParams["query"]) => Promise<Collection<Organization, OrganizationProps>>;
    /**
     * Gets the authenticated user
     * @returns Promise for a User
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getCurrentUser()
     * .then(user => console.log(user.firstName))
     * .catch(console.error)
     * ```
     */
    getCurrentUser: <T = UserProps>(params?: QueryParams) => Promise<T>;
    /**
     *
     * @param params
     * @returns Promise of a OAuthApplication
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *  accessToken: '<content_management_api_key>'
     * })
     *
     * client.getOAuthApplication({
     * userId: '<user_id>'
     * oauthApplicationId: '<oauth_application_id>'
     * }).then(oauthApplication => console.log(oauthApplication))
     * .catch(console.error)
     */
    getOAuthApplication: (params: GetOAuthApplicationParams) => Promise<OAuthApplicationProps>;
    /**
     *
     * @param params
     * @returns Promise of list of user's OAuthApplications
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *  accessToken: '<content_management_api_key>'
     * })
     *
     * client.getOAuthApplications({
     * userId: '<user_id>'}).then(oauthApplications => console.log(oauthApplications))
     * .catch(console.error)
     */
    getOAuthApplications: (params: GetUserParams & QueryParams) => Promise<CursorPaginatedCollection<OAuthApplication, OAuthApplicationProps>>;
    /**
     *
     * @param params
     * @returns Promise of a new OAuth application.
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *  accessToken: '<content_management_api_key>'
     * })
     *
     * client.createOAuthApplication({
     * userId: '<user_id>'},
     * { name: '<name>',
     *   description: '<description>',
     *   scopes: ['scope'],
     *   redirectUri: '<redirectUri>',
     *   confidential: '<true/false>'}).then(oauthApplications => console.log(oauthApplications))
     * .catch(console.error)
     */
    createOAuthApplication: (params: GetUserParams, rawData: CreateOAuthApplicationProps) => Promise<OAuthApplicationProps>;
    /**
     * Gets App Definition
     * @returns Promise for App Definition
     * @param organizationId - Id of the organization where the app is installed
     * @param appDefinitionId - Id of the app that will be returned
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getAppDefinition(<'org_id'>, <'app_id'>)
     * .then(appDefinition => console.log(appDefinition.name))
     * .catch(console.error)
     * ```
     */
    getAppDefinition: (params: GetAppDefinitionParams) => Promise<AppDefinition>;
    /**
     * Creates a personal access token
     * @param data - personal access token config
     * @returns Promise for a Token
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.createPersonalAccessToken(
     *  {
     *    "name": "My Token",
     *    "scope": [
     *      "content_management_manage"
     *    ]
     *  }
     * )
     * .then(personalAccessToken => console.log(personalAccessToken.token))
     * .catch(console.error)
     * ```
     */
    createPersonalAccessToken: (data: CreatePersonalAccessTokenProps) => Promise<import("./export-types").PersonalAccessToken>;
    /**
     * @deprecated - use getAccessToken instead
     *
     * Gets a personal access token
     * @param data - personal access token config
     * @returns Promise for a Token
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getPersonalAccessToken(tokenId)
     * .then(token => console.log(token.token))
     * .catch(console.error)
     * ```
     */
    getPersonalAccessToken: (tokenId: string) => Promise<import("./export-types").PersonalAccessToken>;
    /**
     * @deprecated - use getAccessTokens instead
     *
     * Gets all personal access tokens
     * @returns Promise for a Token
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getPersonalAccessTokens()
     * .then(response => console.log(response.items))
     * .catch(console.error)
     * ```
     */
    getPersonalAccessTokens: () => Promise<Collection<import("./export-types").PersonalAccessToken, import("./export-types").PersonalAccessTokenProps>>;
    /**
     * Gets a users access token
     * @param data - users access token config
     * @returns Promise for a Token
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getAccessToken(tokenId)
     * .then(token => console.log(token.token))
     * .catch(console.error)
     * ```
     */
    getAccessToken: (tokenId: string) => Promise<import("./export-types").AccessToken>;
    /**
     * Gets all user access tokens
     * @returns Promise for a Token
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getAccessTokens()
     * .then(response => console.log(reponse.items))
     * .catch(console.error)
     * ```
     */
    getAccessTokens: () => Promise<Collection<import("./export-types").AccessToken, import("./export-types").AccessTokenProp>>;
    /**
     * Retrieves a list of redacted versions of access tokens for an organization, accessible to owners or administrators of an organization.
     *
     * @returns Promise for a Token
     * @example ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getOrganizationAccessTokens(organizationId)
     * .then(response => console.log(reponse.items))
     * .catch(console.error)
     * ```
     */
    getOrganizationAccessTokens: (organizationId: string, query?: QueryOptions) => Promise<Collection<import("./export-types").AccessToken, import("./export-types").AccessTokenProp>>;
    /**
     * Get organization usage grouped by {@link UsageMetricEnum metric}
     *
     * @param organizationId - Id of an organization
     * @param query - Query parameters
     * @returns Promise of a collection of usages
     * @example ```javascript
     *
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getOrganizationUsage('<organizationId>', {
     *    'metric[in]': 'cma,gql',
     *    'dateRange.startAt': '2019-10-22',
     *    'dateRange.endAt': '2019-11-10'
     *    }
     * })
     * .then(result => console.log(result.items))
     * .catch(console.error)
     * ```
     */
    getOrganizationUsage: (organizationId: string, query?: QueryOptions) => Promise<Collection<import("./export-types").Usage, import("./export-types").UsageProps>>;
    /**
     * Get organization usage grouped by space and metric
     *
     * @param organizationId - Id of an organization
     * @param query - Query parameters
     * @returns Promise of a collection of usages
     * ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.getSpaceUsage('<organizationId>', {
     *    skip: 0,
     *    limit: 10,
     *    'metric[in]': 'cda,cpa,gql',
     *    'dateRange.startAt': '2019-10-22',
     *    'dateRange.endAt': '2020-11-30'
     *    }
     * })
     * .then(result => console.log(result.items))
     * .catch(console.error)
     * ```
     */
    getSpaceUsage: (organizationId: string, query?: UsageQuery) => Promise<Collection<import("./export-types").Usage, import("./export-types").UsageProps>>;
    /**
     * Make a custom request to the Contentful management API's /spaces endpoint
     * @param opts - axios request options (https://github.com/mzabriskie/axios)
     * @returns Promise for the response data
     * ```javascript
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *   accessToken: '<content_management_api_key>'
     * })
     *
     * client.rawRequest({
     *   method: 'GET',
     *   url: '/custom/path'
     * })
     * .then((responseData) => console.log(responseData))
     * .catch(console.error)
     * ```
     */
    rawRequest: ({ url, ...config }: RawAxiosRequestConfig & {
        url: string;
    }) => Promise<any>;
};
export {};
