/// <reference path="./gio-2.0.d.ts" />
/// <reference path="./gobject-2.0.d.ts" />
/// <reference path="./glib-2.0.d.ts" />
/// <reference path="./gmodule-2.0.d.ts" />

/**
 * Type Definitions for Gjs (https://gjs.guide/)
 *
 * These type definitions are automatically generated, do not edit them by hand.
 * If you found a bug fix it in `ts-for-gir` or create a bug report on https://github.com/gjsify/ts-for-gir
 *
 * The based EJS template file is used for the generated .d.ts file of each GIR module like Gtk-4.0, GObject-2.0, ...
 */

declare module 'gi://AstalWp?version=0.1' {
    // Module dependencies
    import type Gio from 'gi://Gio?version=2.0';
    import type GObject from 'gi://GObject?version=2.0';
    import type GLib from 'gi://GLib?version=2.0';
    import type GModule from 'gi://GModule?version=2.0';

    export namespace AstalWp {
        /**
         * AstalWp-0.1
         */

        export namespace DeviceType {
            export const $gtype: GObject.GType<DeviceType>;
        }

        enum DeviceType {
            AUDIO,
            VIDEO,
        }

        export namespace MediaClass {
            export const $gtype: GObject.GType<MediaClass>;
        }

        enum MediaClass {
            AUDIO_MICROPHONE,
            AUDIO_SPEAKER,
            AUDIO_RECORDER,
            AUDIO_STREAM,
            VIDEO_SOURCE,
            VIDEO_SINK,
            VIDEO_RECORDER,
            VIDEO_STREAM,
        }

        export namespace Scale {
            export const $gtype: GObject.GType<Scale>;
        }

        enum Scale {
            LINEAR,
            CUBIC,
        }
        const MAJOR_VERSION: number;
        const MICRO_VERSION: number;
        const MINOR_VERSION: number;
        const VERSION: string;
        /**
         * gets the default wireplumber object.
         * @returns gets the default wireplumber object.
         */
        function get_default(): Wp | null;
        namespace Audio {
            // Signal callback interfaces

            interface DeviceAdded {
                (object: Device): void;
            }

            interface DeviceRemoved {
                (object: Device): void;
            }

            interface MicrophoneAdded {
                (object: Endpoint): void;
            }

            interface MicrophoneRemoved {
                (object: Endpoint): void;
            }

            interface RecorderAdded {
                (object: Endpoint): void;
            }

            interface RecorderRemoved {
                (object: Endpoint): void;
            }

            interface SpeakerAdded {
                (object: Endpoint): void;
            }

            interface SpeakerRemoved {
                (object: Endpoint): void;
            }

            interface StreamAdded {
                (object: Endpoint): void;
            }

            interface StreamRemoved {
                (object: Endpoint): void;
            }

            // Constructor properties interface

            interface ConstructorProps extends GObject.Object.ConstructorProps {
                default_microphone: Endpoint;
                defaultMicrophone: Endpoint;
                default_speaker: Endpoint;
                defaultSpeaker: Endpoint;
                devices: Device[];
                microphones: Endpoint[];
                recorders: Endpoint[];
                speakers: Endpoint[];
                streams: Endpoint[];
            }
        }

        /**
         * is instanciated by [class`AstalWp`.Wp]. An instance of class can only be received there.
         *
         *  This is a convinience class and acts as a filter for [class`AstalWp`.Wp] to filter for audio
         * endpoints and devices.
         */
        class Audio extends GObject.Object {
            static $gtype: GObject.GType<Audio>;

            // Properties

            /**
             * The AstalWndpoint object representing the default speaker
             */
            get default_microphone(): Endpoint;
            /**
             * The AstalWndpoint object representing the default speaker
             */
            get defaultMicrophone(): Endpoint;
            /**
             * The AstalWndpoint object representing the default speaker
             */
            get default_speaker(): Endpoint;
            /**
             * The AstalWndpoint object representing the default speaker
             */
            get defaultSpeaker(): Endpoint;
            /**
             * A list of AstalWpEndpoint objects
             */
            get devices(): Device[];
            /**
             * A list of AstalWpEndpoint objects
             */
            get microphones(): Endpoint[];
            /**
             * A list of AstalWpEndpoint objects
             */
            get recorders(): Endpoint[];
            /**
             * A list of AstalWpEndpoint objects
             */
            get speakers(): Endpoint[];
            /**
             * A list of AstalWpEndpoint objects
             */
            get streams(): Endpoint[];

            // Constructors

            constructor(properties?: Partial<Audio.ConstructorProps>, ...args: any[]);

            _init(...args: any[]): void;

            static ['new'](wp: Wp): Audio;

            // Signals

            connect(id: string, callback: (...args: any[]) => any): number;
            connect_after(id: string, callback: (...args: any[]) => any): number;
            emit(id: string, ...args: any[]): void;
            connect(signal: 'device-added', callback: (_source: this, object: Device) => void): number;
            connect_after(signal: 'device-added', callback: (_source: this, object: Device) => void): number;
            emit(signal: 'device-added', object: Device): void;
            connect(signal: 'device-removed', callback: (_source: this, object: Device) => void): number;
            connect_after(signal: 'device-removed', callback: (_source: this, object: Device) => void): number;
            emit(signal: 'device-removed', object: Device): void;
            connect(signal: 'microphone-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'microphone-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'microphone-added', object: Endpoint): void;
            connect(signal: 'microphone-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'microphone-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'microphone-removed', object: Endpoint): void;
            connect(signal: 'recorder-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'recorder-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'recorder-added', object: Endpoint): void;
            connect(signal: 'recorder-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'recorder-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'recorder-removed', object: Endpoint): void;
            connect(signal: 'speaker-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'speaker-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'speaker-added', object: Endpoint): void;
            connect(signal: 'speaker-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'speaker-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'speaker-removed', object: Endpoint): void;
            connect(signal: 'stream-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'stream-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'stream-added', object: Endpoint): void;
            connect(signal: 'stream-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'stream-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'stream-removed', object: Endpoint): void;

            // Methods

            /**
             * gets the default microphone object
             */
            get_default_microphone(): Endpoint | null;
            /**
             * gets the default speaker object
             */
            get_default_speaker(): Endpoint | null;
            /**
             * gets the device with the given id
             * @param id the id of the device
             */
            get_device(id: number): Device | null;
            /**
             * a GList containing the devices
             */
            get_devices(): Device[] | null;
            /**
             * the endpoint with the given id
             * @param id the id of the endpoint
             */
            get_endpoint(id: number): Endpoint | null;
            /**
             * gets the microphone with the given id
             * @param id the id of the endpoint
             */
            get_microphone(id: number): Endpoint | null;
            /**
             * a GList containing the microphones
             */
            get_microphones(): Endpoint[] | null;
            /**
             * gets the recorder with the given id
             * @param id the id of the endpoint
             */
            get_recorder(id: number): Endpoint | null;
            /**
             * a GList containing the recorders
             */
            get_recorders(): Endpoint[] | null;
            /**
             * gets the speaker with the given id
             * @param id the id of the endpoint
             */
            get_speaker(id: number): Endpoint | null;
            /**
             * a GList containing the speakers
             */
            get_speakers(): Endpoint[] | null;
            /**
             * gets the stream with the given id
             * @param id the id of the endpoint
             */
            get_stream(id: number): Endpoint | null;
            /**
             * a GList containing the streams
             */
            get_streams(): Endpoint[] | null;
        }

        namespace Device {
            // Constructor properties interface

            interface ConstructorProps extends GObject.Object.ConstructorProps {
                active_profile_id: number;
                activeProfileId: number;
                description: string;
                device_type: DeviceType;
                deviceType: DeviceType;
                icon: string;
                id: number;
                profiles: Profile[];
            }
        }

        class Device extends GObject.Object {
            static $gtype: GObject.GType<Device>;

            // Properties

            /**
             * The id of the currently active profile.
             */
            get active_profile_id(): number;
            set active_profile_id(val: number);
            /**
             * The id of the currently active profile.
             */
            get activeProfileId(): number;
            set activeProfileId(val: number);
            /**
             * The description of this device.
             */
            get description(): string;
            /**
             * The type of this device
             */
            get device_type(): DeviceType;
            /**
             * The type of this device
             */
            get deviceType(): DeviceType;
            /**
             * The icon name for this device.
             */
            get icon(): string;
            /**
             * The id of this device.
             */
            get id(): number;
            /**
             * A list of available profiles
             */
            get profiles(): Profile[];

            // Constructors

            constructor(properties?: Partial<Device.ConstructorProps>, ...args: any[]);

            _init(...args: any[]): void;

            // Methods

            /**
             * gets the currently active profile of this device
             */
            get_active_profile(): number;
            /**
             * gets the description of this device
             */
            get_description(): string;
            /**
             * gets the type of this device
             */
            get_device_type(): DeviceType;
            /**
             * gets the icon of this device
             */
            get_icon(): string;
            /**
             * gets the id of this device
             */
            get_id(): number;
            /**
             * gets the profile with the given id
             * @param id the id of the profile
             */
            get_profile(id: number): Profile | null;
            /**
             * gets a GList containing the profiles
             */
            get_profiles(): Profile[] | null;
            /**
             * sets the profile for this device
             * @param profile_id the id of the profile
             */
            set_active_profile(profile_id: number): void;
        }

        namespace Endpoint {
            // Constructor properties interface

            interface ConstructorProps extends GObject.Object.ConstructorProps {
                description: string;
                icon: string;
                id: number;
                is_default: boolean;
                isDefault: boolean;
                lock_channels: boolean;
                lockChannels: boolean;
                media_class: MediaClass;
                mediaClass: MediaClass;
                mute: boolean;
                name: string;
                path: string;
                serial: number;
                volume: number;
                volume_icon: string;
                volumeIcon: string;
            }
        }

        class Endpoint extends GObject.Object {
            static $gtype: GObject.GType<Endpoint>;

            // Properties

            /**
             * The description of this endpoint
             */
            get description(): string;
            /**
             * The icon of this endpoint. Note that endpoints do not have icons associated with them in
             * pipewire, so the icon of the associated device is used instead.
             */
            get icon(): string;
            /**
             * The pipewire id of this endpoint.
             */
            get id(): number;
            /**
             * Whether this endpoint is the default one used for this media-class. Note that setting this
             * property to false has no effect.
             */
            get is_default(): boolean;
            set is_default(val: boolean);
            /**
             * Whether this endpoint is the default one used for this media-class. Note that setting this
             * property to false has no effect.
             */
            get isDefault(): boolean;
            set isDefault(val: boolean);
            /**
             * Whether to lock the channels together or not.
             */
            get lock_channels(): boolean;
            set lock_channels(val: boolean);
            /**
             * Whether to lock the channels together or not.
             */
            get lockChannels(): boolean;
            set lockChannels(val: boolean);
            /**
             * The media class of this endpoint
             */
            get media_class(): MediaClass;
            /**
             * The media class of this endpoint
             */
            get mediaClass(): MediaClass;
            /**
             * The mute state of this endpoint
             */
            get mute(): boolean;
            set mute(val: boolean);
            /**
             * The name of this endpoint
             */
            get name(): string;
            /**
             * The object path of this endpoint
             */
            get path(): string;
            /**
             * The object serial of this endpoint.
             */
            get serial(): number;
            /**
             * The volume of this endpoint
             */
            get volume(): number;
            set volume(val: number);
            /**
             * The volume icon of this endpoint
             */
            get volume_icon(): string;
            /**
             * The volume icon of this endpoint
             */
            get volumeIcon(): string;

            // Constructors

            constructor(properties?: Partial<Endpoint.ConstructorProps>, ...args: any[]);

            _init(...args: any[]): void;

            // Methods

            /**
             * gets the description of this endpoint
             */
            get_description(): string;
            /**
             * gets the icon for this endpoint
             */
            get_icon(): string;
            /**
             * gets the id of the endpoint.
             */
            get_id(): number;
            get_is_default(): boolean;
            get_lock_channels(): boolean;
            /**
             * gets the media class of the endpoint.
             */
            get_media_class(): MediaClass;
            /**
             * gets the mute status of the endpoint.
             */
            get_mute(): boolean;
            /**
             * gets the name of this endpoint
             */
            get_name(): string;
            /**
             * gets the object path of this endpoint
             */
            get_path(): string;
            /**
             * gets the serial number of this endpoint
             */
            get_serial(): number;
            /**
             * gets the volume
             */
            get_volume(): number;
            get_volume_icon(): string;
            set_is_default(is_default: boolean): void;
            set_lock_channels(lock_channels: boolean): void;
            /**
             * Sets the mute status for the endpoint.
             * @param mute A boolean indicating whether to mute the endpoint.
             */
            set_mute(mute: boolean): void;
            /**
             * Sets the volume level for this endpoint. The volume is clamped to be between
             * 0 and 1.5.
             * @param volume The new volume level to set.
             */
            set_volume(volume: number): void;
        }

        namespace Profile {
            // Constructor properties interface

            interface ConstructorProps extends GObject.Object.ConstructorProps {
                description: string;
                index: number;
            }
        }

        class Profile extends GObject.Object {
            static $gtype: GObject.GType<Profile>;

            // Properties

            get description(): string;
            get index(): number;

            // Constructors

            constructor(properties?: Partial<Profile.ConstructorProps>, ...args: any[]);

            _init(...args: any[]): void;

            // Methods

            get_description(): string;
            get_index(): number;
        }

        namespace Video {
            // Signal callback interfaces

            interface DeviceAdded {
                (object: Device): void;
            }

            interface DeviceRemoved {
                (object: Device): void;
            }

            interface RecorderAdded {
                (object: Endpoint): void;
            }

            interface RecorderRemoved {
                (object: Endpoint): void;
            }

            interface SinkAdded {
                (object: Endpoint): void;
            }

            interface SinkRemoved {
                (object: Endpoint): void;
            }

            interface SourceAdded {
                (object: Endpoint): void;
            }

            interface SourceRemoved {
                (object: Endpoint): void;
            }

            interface StreamAdded {
                (object: Endpoint): void;
            }

            interface StreamRemoved {
                (object: Endpoint): void;
            }

            // Constructor properties interface

            interface ConstructorProps extends GObject.Object.ConstructorProps {
                devices: Endpoint[];
                recorders: any;
                sinks: Endpoint[];
                sources: Endpoint[];
                streams: Endpoint[];
            }
        }

        /**
         * is instanciated by [class`AstalWp`.Wp]. An instance of class can only be received there.
         *
         *  This is a convinience class and acts as a filter for [class`AstalWp`.Wp] to filter for video
         * endpoints and devices.
         */
        class Video extends GObject.Object {
            static $gtype: GObject.GType<Video>;

            // Properties

            /**
             * A list of AstalWpEndpoint objects
             */
            get devices(): Endpoint[];
            get recorders(): any;
            /**
             * A list of AstalWpEndpoint objects
             */
            get sinks(): Endpoint[];
            /**
             * A list of AstalWpEndpoint objects
             */
            get sources(): Endpoint[];
            /**
             * A list of AstalWpEndpoint objects
             */
            get streams(): Endpoint[];

            // Constructors

            constructor(properties?: Partial<Video.ConstructorProps>, ...args: any[]);

            _init(...args: any[]): void;

            static ['new'](wp: Wp): Video;

            // Signals

            connect(id: string, callback: (...args: any[]) => any): number;
            connect_after(id: string, callback: (...args: any[]) => any): number;
            emit(id: string, ...args: any[]): void;
            connect(signal: 'device-added', callback: (_source: this, object: Device) => void): number;
            connect_after(signal: 'device-added', callback: (_source: this, object: Device) => void): number;
            emit(signal: 'device-added', object: Device): void;
            connect(signal: 'device-removed', callback: (_source: this, object: Device) => void): number;
            connect_after(signal: 'device-removed', callback: (_source: this, object: Device) => void): number;
            emit(signal: 'device-removed', object: Device): void;
            connect(signal: 'recorder-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'recorder-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'recorder-added', object: Endpoint): void;
            connect(signal: 'recorder-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'recorder-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'recorder-removed', object: Endpoint): void;
            connect(signal: 'sink-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'sink-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'sink-added', object: Endpoint): void;
            connect(signal: 'sink-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'sink-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'sink-removed', object: Endpoint): void;
            connect(signal: 'source-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'source-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'source-added', object: Endpoint): void;
            connect(signal: 'source-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'source-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'source-removed', object: Endpoint): void;
            connect(signal: 'stream-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'stream-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'stream-added', object: Endpoint): void;
            connect(signal: 'stream-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'stream-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'stream-removed', object: Endpoint): void;

            // Methods

            /**
             * the device with the given id
             * @param id the id of the device
             * @returns the device with the given id
             */
            get_device(id: number): Device | null;
            /**
             * a list containing the devices
             * @returns a GList containing the devices
             */
            get_devices(): Device[] | null;
            /**
             * the recorder with the given id
             * @param id the id of the endpoint
             * @returns the recorder with the given id
             */
            get_recorder(id: number): Endpoint | null;
            /**
             * a list containing the video recorders
             * @returns a GList containing the video recorders
             */
            get_recorders(): Endpoint[] | null;
            /**
             * the sink with the given id
             * @param id the id of the endpoint
             * @returns the sink with the given id
             */
            get_sink(id: number): Endpoint | null;
            /**
             * a list containing the video sinks
             * @returns a GList containing the video sinks
             */
            get_sinks(): Endpoint[] | null;
            /**
             * the source with the given id
             * @param id the id of the endpoint
             * @returns the source with the given id
             */
            get_source(id: number): Endpoint | null;
            /**
             * a list containing the video sources
             * @returns a GList containing the video sources
             */
            get_sources(): Endpoint[] | null;
            /**
             * the stream with the given id
             * @param id the id of the endpoint
             * @returns the stream with the given id
             */
            get_stream(id: number): Endpoint | null;
            /**
             * a list containing the video streams
             * @returns a GList containing the video streams
             */
            get_streams(): Endpoint[] | null;
        }

        namespace Wp {
            // Signal callback interfaces

            interface DeviceAdded {
                (object: Device): void;
            }

            interface DeviceRemoved {
                (object: Device): void;
            }

            interface EndpointAdded {
                (object: Endpoint): void;
            }

            interface EndpointRemoved {
                (object: Endpoint): void;
            }

            // Constructor properties interface

            interface ConstructorProps extends GObject.Object.ConstructorProps {
                audio: Audio;
                default_microphone: Endpoint;
                defaultMicrophone: Endpoint;
                default_speaker: Endpoint;
                defaultSpeaker: Endpoint;
                devices: Device[];
                endpoints: Endpoint[];
                scale: Scale;
                video: Video;
            }
        }

        /**
         * manages the connection to wireplumber. Usually you don't want to use this class directly, but use
         * the [class`AstalWp`.Audio] or [class`AstalWp`.Video] instead.
         */
        class Wp extends GObject.Object {
            static $gtype: GObject.GType<Wp>;

            // Properties

            get audio(): Audio;
            /**
             * The [class`AstalWp`.Endpoint] representing the default speaker
             */
            get default_microphone(): Endpoint;
            /**
             * The [class`AstalWp`.Endpoint] representing the default speaker
             */
            get defaultMicrophone(): Endpoint;
            /**
             * The [class`AstalWp`.Endpoint] representing the default speaker
             */
            get default_speaker(): Endpoint;
            /**
             * The [class`AstalWp`.Endpoint] representing the default speaker
             */
            get defaultSpeaker(): Endpoint;
            /**
             * A list of [class`AstalWp`.Device] objects
             */
            get devices(): Device[];
            /**
             * A list of [class`AstalWp`.Endpoint] objects
             */
            get endpoints(): Endpoint[];
            /**
             * The scale used for the volume
             */
            get scale(): Scale;
            set scale(val: Scale);
            get video(): Video;

            // Constructors

            constructor(properties?: Partial<Wp.ConstructorProps>, ...args: any[]);

            _init(...args: any[]): void;

            // Signals

            connect(id: string, callback: (...args: any[]) => any): number;
            connect_after(id: string, callback: (...args: any[]) => any): number;
            emit(id: string, ...args: any[]): void;
            connect(signal: 'device-added', callback: (_source: this, object: Device) => void): number;
            connect_after(signal: 'device-added', callback: (_source: this, object: Device) => void): number;
            emit(signal: 'device-added', object: Device): void;
            connect(signal: 'device-removed', callback: (_source: this, object: Device) => void): number;
            connect_after(signal: 'device-removed', callback: (_source: this, object: Device) => void): number;
            emit(signal: 'device-removed', object: Device): void;
            connect(signal: 'endpoint-added', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'endpoint-added', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'endpoint-added', object: Endpoint): void;
            connect(signal: 'endpoint-removed', callback: (_source: this, object: Endpoint) => void): number;
            connect_after(signal: 'endpoint-removed', callback: (_source: this, object: Endpoint) => void): number;
            emit(signal: 'endpoint-removed', object: Endpoint): void;

            // Static methods

            /**
             * gets the default wireplumber object.
             */
            static get_default(): Wp | null;

            // Methods

            /**
             * gets the [class`AstalWp`.Audio] object
             * @returns gets the audio object
             */
            get_audio(): Audio | null;
            /**
             * gets the default microphone object
             * @returns gets the default microphone object
             */
            get_default_microphone(): Endpoint | null;
            /**
             * gets the default speaker object
             * @returns gets the default speaker object
             */
            get_default_speaker(): Endpoint | null;
            /**
             * the device with the given id
             * @param id the id of the device
             * @returns the device with the given id
             */
            get_device(id: number): Device | null;
            /**
             * the GList containing the devices
             * @returns a GList containing the devices
             */
            get_devices(): Device[] | null;
            /**
             * the endpoint with the given id
             * @param id the id of the endpoint
             * @returns the endpoint with the given id
             */
            get_endpoint(id: number): Endpoint | null;
            /**
             * a GList containing all endpoints
             * @returns a GList containing the endpoints
             */
            get_endpoints(): Endpoint[] | null;
            get_scale(): Scale;
            /**
             * gets the video object
             * @returns gets the video object
             */
            get_video(): Video | null;
            set_scale(scale: Scale | null): void;
        }

        type AudioClass = typeof Audio;
        type DeviceClass = typeof Device;
        type EndpointClass = typeof Endpoint;
        type ProfileClass = typeof Profile;
        type VideoClass = typeof Video;
        type WpClass = typeof Wp;
        /**
         * Name of the imported GIR library
         * `see` https://gitlab.gnome.org/GNOME/gjs/-/blob/master/gi/ns.cpp#L188
         */
        const __name__: string;
        /**
         * Version of the imported GIR library
         * `see` https://gitlab.gnome.org/GNOME/gjs/-/blob/master/gi/ns.cpp#L189
         */
        const __version__: string;
    }

    export default AstalWp;
}

declare module 'gi://AstalWp' {
    import AstalWp01 from 'gi://AstalWp?version=0.1';
    export default AstalWp01;
}
// END
