/**
 * A strategy for posting messages to Bluesky.
 */
export class BlueskyStrategy {
    /**
     * Creates a new instance.
     * @param {BlueskyOptions} options Options for the instance.
     * @throws {Error} When options are missing.
     */
    constructor(options: BlueskyOptions);
    /**
     * Maximum length of a Bluesky post in characters.
     * @type {number}
     * @const
     */
    MAX_MESSAGE_LENGTH: number;
    /**
     * The ID of the strategy.
     * @type {string}
     * @readonly
     */
    readonly id: string;
    /**
     * The display name of the strategy.
     * @type {string}
     * @readonly
     */
    readonly name: string;
    /**
     * Calculates the length of a message according to Bluesky's algorithm.
     * All URLs are counted as 27 characters, all other Unicode characters as is.
     * @param {string} message The message to calculate the length of.
     * @returns {number} The calculated length of the message.
     */
    calculateMessageLength(message: string): number;
    /**
     * Posts a message to Bluesky.
     * @param {string} message The message to post.
     * @param {PostOptions} [postOptions] Additional options for the post.
     * @returns {Promise<BlueskyCreateRecordResponse>} A promise that resolves with the post data.
     */
    post(message: string, postOptions?: PostOptions): Promise<BlueskyCreateRecordResponse>;
    /**
     * Extracts a URL from a Bluesky API response.
     * @param {BlueskyCreateRecordResponse} response The response from the Bluesky post request.
     * @returns {string} The URL for the Bluesky post.
     */
    getUrlFromResponse(response: BlueskyCreateRecordResponse): string;
    #private;
}
export type PostOptions = import("../types.js").PostOptions;
export type BlueskyOptions = {
    /**
     * The username to post with.
     */
    identifier: string;
    /**
     * The application password to use.
     */
    password: string;
    /**
     * The host domain for the Bluesky instance.
     */
    host: string;
};
export type BlueskySession = {
    /**
     * The access JWT for the session.
     */
    accessJwt: string;
    /**
     * The refresh JWT for the session.
     */
    refreshJwt: string;
    /**
     * Indicates if the session is active.
     */
    active: boolean;
    /**
     * The DID of the session.
     */
    did: string;
};
export type BlueskyImage = {
    /**
     * The alt text for the image.
     */
    alt: string;
    /**
     * The image data.
     */
    image: {
        $type: string;
        ref: {
            $link: string;
        };
        mimeType: string;
        size: number;
    };
};
export type BlueskyPostBody = {
    /**
     * The DID of the user.
     */
    repo: string;
    /**
     * The collection type (always "app.bsky.feed.post").
     */
    collection: string;
    /**
     * The post record.
     */
    record: {
        $type: string;
        text: string;
        facets: Array<Object>;
        createdAt: string;
        embed?: {
            /**
             * The type of embedded content.
             */
            $type: string;
            /**
             * The images to embed.
             */
            images?: Object[] | undefined;
        } | undefined;
    };
};
export type BlueskyCreateRecordResponse = {
    /**
     * The CID of the post.
     */
    cid: string;
    /**
     * The commit information.
     */
    commit: {
        cid: string;
        rev: string;
    };
    /**
     * The URI of the post.
     */
    uri: string;
    /**
     * The validation status of the post.
     */
    validationStatus: string;
};
export type BlueskyErrorResponse = {
    /**
     * The type of error.
     */
    error: string;
    /**
     * The error message.
     */
    message: string;
};
export type BlueskyUploadBlobResponse = {
    /**
     * The blob data
     */
    blob: {
        $type: "blob";
        ref: {
            $link: string;
        };
        mimeType: string;
        size: number;
    };
};
