import type { IframeMessenger } from "./iframe-messenger.js";
interface FieldCommmon {
    name: string;
    label: string;
    hidden?: boolean;
}
interface NumberField extends FieldCommmon {
    type: "number";
    min?: number;
    max?: number;
    step?: number;
}
interface BooleanField extends FieldCommmon {
    type: "bool";
}
interface EnumField extends FieldCommmon {
    type: "enum";
    options: string[];
}
interface StringField extends FieldCommmon {
    type: "string";
}
interface ColorField extends FieldCommmon {
    type: "color";
}
interface PolygonField extends FieldCommmon {
    type: "polygon";
}
interface PolylineField extends FieldCommmon {
    type: "polyline";
}
/** Allowable generator fields */
export type GeneratorSchemaV1Field = NumberField | BooleanField | EnumField | ColorField | StringField | PolygonField | PolylineField;
/** Values corresponding to the allowable generator fields */
export type GeneratorSchemaV1Value = number | boolean | string | string | string | {
    points: [number, number][];
} | {
    points: [number, number][];
};
type Namespace = string;
type Owner = string;
type OwnerId = string;
type AuthContext = string;
type Id = string;
/**
 * Specially formatted URN used as unique identifier for a generator.
 *
 * Must satisfy the specified pattern, where
 * - `Namespace` is a namespace of the generator, currently only `adsk-forma-generators` is allowed
 * - `Owner` is a name of the generator owner, i.e. `extension`
 * - `OwnerId` is the `extensionId` of the extension that owns the generator
 * - `AuthContext` is the authcontext the generator is registered in, i.e. the current `projectId`
 * - `Id` is a unique identifier of the generator, specified by the extension
 *    and used to keep a stable reference to the generator instance.
 * */
export type GeneratorUrn = `urn:${Namespace}:${Owner}:${OwnerId}:${AuthContext}:${Id}`;
/** [Endpoint runner](https://aps.autodesk.com/en/docs/forma/v1/generators/in-depth/http/) */
export interface ExtensionEndpointRunner {
    type: "extensionEndpoint";
    extension: {
        extensionId: string;
        endpointId: string;
    };
    additionalData: unknown;
}
/** [Script runner](https://aps.autodesk.com/en/docs/forma/v1/generators/in-depth/script/) */
export interface ExtensionScriptRunner {
    type: "extensionScript";
    extensionId: string;
    bundleId: string;
    additionalData: unknown;
}
/**
 * The v1 schema is a simple schema that supports a few field types and a simple
 * structure to render a form for the user to specify values to the fields.
 *
 * See [our documentation](https://aps.autodesk.com/en/docs/forma/v1/generators/generator-schema-v1/) for more details.
 */
export interface GeneratorSchemaV1 {
    version: 1;
    fields: GeneratorSchemaV1Field[];
    defaultValues?: Record<string, GeneratorSchemaV1Value>;
}
/**
 * Generator resource model.
 *
 * Generators that exist in the context of an extension may only be manipulated
 * by the extension itself, but can be read by all users. These generators are
 * useful for cases where you want to provide a single generator to any user of
 * your extension.
 */
export interface Generator {
    /** Unique identifier for the generator, see {@link GeneratorUrn} for format spec. */
    id: GeneratorUrn;
    /** Name of the generator. */
    name: string;
    /** Runners to be employed by the generator. */
    runners: ({
        type: never;
    } | ExtensionEndpointRunner | ExtensionScriptRunner)[];
    /** Schema defining the fields and default values expected by the generator. */
    schema: {
        version: never;
    } | GeneratorSchemaV1;
}
/**
 * Manage [generators](https://aps.autodesk.com/en/docs/forma/v1/http-specification/generators-api/) registered in Forma Site Design.
 *
 * @remarks
 * Available via {@link auto.Forma | Forma}.{@link index.EmbeddedViewSdk.generators | generators}.
 */
export declare class GeneratorsApi {
    #private;
    /** @hidden */
    constructor(iframeMessenger: IframeMessenger);
    /**
     * Create or replace a generator.
     *
     * @returns The created or replaced generator resource model.
     */
    put(request: {
        /**
         * Authcontext to use with the request.
         *
         * As of now, the currently open project id is both default
         * and only allowed value.
         */
        authcontext?: string | undefined;
        /** Generator resource model to create or replace. */
        data: Generator;
    }): Promise<Generator>;
    /**
     * List out generators within the specified authcontext.
     *
     * @returns List of registered generators.
     */
    list(request?: {
        /**
         * Authcontext to use with the request.
         *
         * As of now, the currently open project id is both default
         * and only allowed value.
         */
        authcontext?: string | undefined;
    } | undefined): Promise<Generator[]>;
}
export {};
