import * as react from 'react';
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
import { DiscoveryApi, ConfigApi } from '@backstage/core-plugin-api';
import * as _backstage_config from '@backstage/config';
import { PolicyDecision } from '@backstage/plugin-permission-common';
import { PermissionPolicy, PolicyQuery } from '@backstage/plugin-permission-node';
import { BackstageIdentityResponse } from '@backstage/plugin-auth-node';
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';

declare const openfgaPlugin: _backstage_core_plugin_api.BackstagePlugin<{
    root: _backstage_core_plugin_api.RouteRef<undefined>;
}, {}, {}>;
declare const OpenfgaPage: () => react.JSX.Element;

interface OpenFgaRequest {
    tuple_key: {
        user: string;
        relation: string;
        object: string;
    };
    authorization_model_id: string;
}
interface OpenFgaResponse {
    allowed: boolean;
    ok?: boolean;
    message: string;
}

declare class OpenFgaClient implements OpenFgaApi {
    readonly discoveryApi: DiscoveryApi;
    private readonly baseUrl;
    private readonly storeId;
    private readonly authorizationModelId;
    private permissionResponse;
    static fromConfig(configApi: ConfigApi, discoveryApi: DiscoveryApi): OpenFgaClient;
    constructor(opts: {
        discoveryApi: DiscoveryApi;
        baseUrl: string;
        storeId: string;
        authorizationModelId: string;
    });
    getPermissionResponse(): OpenFgaResponse | null;
    private fetch;
    sendPermissionRequest(entityName: string, action: string, userName: any): Promise<OpenFgaResponse>;
    addPolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
    revokePolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
}

declare const openFgaApiRef: _backstage_core_plugin_api.ApiRef<OpenFgaApi>;
interface OpenFgaApi {
    sendPermissionRequest(entityName: string, action: string, userName: any): Promise<OpenFgaResponse>;
    addPolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
    revokePolicy(entityName: string, accessType: string, userName: any): Promise<OpenFgaResponse>;
}
declare const openFgaApiFactory: {
    deps: {
        configApi: _backstage_core_plugin_api.ApiRef<_backstage_config.Config>;
        discoveryApi: _backstage_core_plugin_api.ApiRef<DiscoveryApi>;
    };
    factory: ({ configApi, discoveryApi }: {
        configApi: ConfigApi;
        discoveryApi: DiscoveryApi;
    }) => OpenFgaClient;
};

declare class OpenFgaCatalogPolicy implements PermissionPolicy {
    private openFgaClient;
    constructor(configApi: ConfigApi, discoveryApi: DiscoveryApi);
    handle(request: PolicyQuery, user: BackstageIdentityResponse): Promise<PolicyDecision>;
}

declare const permissionModuleCatalogPolicy: _backstage_backend_plugin_api.BackendFeatureCompat;

export { type OpenFgaApi, OpenFgaCatalogPolicy, OpenFgaClient, type OpenFgaRequest, type OpenFgaResponse, OpenfgaPage, openFgaApiFactory, openFgaApiRef, openfgaPlugin, permissionModuleCatalogPolicy };
