import { Requester } from '../http/Requester';
import { ApiKey } from '../types/ApiKey';
import { GoogleIssuer, GoogleIssuerExport } from '../types/GoogleIssuer';
import { Organization } from '../types/Organization';
import { PassType, PassTypeExport } from '../types/PassType';
import { ScannerDeviceInfo } from '../types/ScannerDeviceInfo';
import { ScannerInvite } from '../types/ScannerInvite';
import OrganizationDataStoresEndpoint from './organizations/DataStoresEndpoint';
import OrganizationExportersEndpoint from './organizations/ExportersEndpoint';
import OrganizationWebhooksEndpoint from './organizations/WebhooksEndpoint';
import Endpoint from './Endpoint';
/**
 * Communicate with the organizations endpoints.
 *
 * Top-level methods cover the org itself, scanner-invite handshake, and API keys. Resource
 * sub-endpoints (webhooks, dataStores, exporters) are exposed as `public readonly` props,
 * mirroring the composition pattern of {@link ../Client | Client}.
 */
export default class OrganizationsEndpoint extends Endpoint {
    /**
     * Webhook management (`/organization/webhooks*`).
     *
     * CRUD on webhooks plus access to the per-organization delivery log.
     */
    readonly webhooks: OrganizationWebhooksEndpoint;
    /**
     * Data store management (`/organization/dataStores*`).
     *
     * CRUD on key/value and external-source data stores that workflows can read from.
     */
    readonly dataStores: OrganizationDataStoresEndpoint;
    /**
     * Exporter management (`/organization/exporters*`).
     *
     * CRUD on scheduled exporters plus the ability to run an exporter on demand and tail
     * its execution logs.
     */
    readonly exporters: OrganizationExportersEndpoint;
    /**
     * Constructor.
     *
     * @param req The object to use to make requests.
     */
    constructor(req: Requester);
    /**
     * Fetches the details of the authenticated organization.
     *
     * @returns The organization.
     */
    getMine: () => Promise<Organization>;
    /**
     * Returns a scanner invite by code.
     *
     * @param code The invite code.
     */
    getScannerInvite: (code: string) => Promise<ScannerInvite | null>;
    /**
     * Begins the scanner exchange.
     *
     * @param code The invite code.
     */
    startScannerExchange: (code: string) => Promise<ScannerInvite | null>;
    /**
     * Accepts an scanner app invite code and returns api keys.
     *
     * @param code The invite code.
     * @param pushToken The push token.
     * @param scannerDeviceInfo The scanner device info.
     */
    finishScannerExchange: (code: string, pushToken: string, scannerDeviceInfo: ScannerDeviceInfo) => Promise<ApiKey>;
    /**
     * Returns the API keys for the authenticated organization.
     */
    getApiKeys: () => Promise<ApiKey[]>;
    /**
     * Returns the Apple pass types for the authenticated organization.
     *
     * Sensitive fields (signer certificate, key, passphrase) are omitted from the response.
     */
    getPassTypes: () => Promise<PassType[]>;
    /**
     * Exports a pass type, including its signer certificate, key, and passphrase.
     *
     * @param id The ID of the pass type.
     */
    exportPassType: (id: string) => Promise<PassTypeExport>;
    /**
     * Returns the Google Wallet issuers for the authenticated organization.
     *
     * Service-account credentials are omitted from the response.
     */
    getGoogleIssuers: () => Promise<GoogleIssuer[]>;
    /**
     * Exports a Google issuer, including its service-account credentials.
     *
     * @param id The ID of the Google issuer.
     */
    exportGoogleIssuer: (id: string) => Promise<GoogleIssuerExport>;
    /**
     * Returns an API key by ID.
     *
     * @param id The ID of the API key.
     * @param scanner Optional scanner context — typed as `unknown` because the backend
     *   accepts any JSON-serializable value; defaults to the empty string.
     */
    getApiKey: (id: string, scanner?: unknown) => Promise<ApiKey | null>;
    /**
     * Deletes an API key.
     *
     * @param id The ID of the API key.
     */
    deleteApiKey: (id: string) => Promise<void>;
}
