export function prepareRecorder(baggage: import("@agoric/vat-data").Baggage, marshaller: ERef<Marshaller>): (publisher: globalThis.Publisher<unknown>, storageNode: import("@endo/eventual-send").DataOnly<globalThis.StorageNode> & import("@endo/eventual-send").RemotableBrand<import("@endo/eventual-send").DataOnly<globalThis.StorageNode>, globalThis.StorageNode>, valueShape?: TypedPattern<any> | undefined) => import("@endo/exo").Guarded<{
    getStorageNode(): import("@endo/eventual-send").DataOnly<globalThis.StorageNode> & import("@endo/eventual-send").RemotableBrand<import("@endo/eventual-send").DataOnly<globalThis.StorageNode>, globalThis.StorageNode>;
    /**
     * Memoizes the remote call to the storage node
     *
     * @returns {Promise<string>}
     */
    getStoragePath(): Promise<string>;
    /**
     * Marshalls before writing to storage or publisher to help ensure the two streams match.
     *
     * @param {any} value
     * @returns {Promise<void>}
     */
    write(value: any): Promise<void>;
    /**
     * Like `write` but prevents future writes and terminates the publisher.
     *
     * @param {any} value
     * @returns {Promise<void>}
     */
    writeFinal(value: any): Promise<void>;
}>;
export function defineRecorderKit({ makeRecorder, makeDurablePublishKit }: {
    makeRecorder: MakeRecorder;
    makeDurablePublishKit: ReturnType<typeof prepareDurablePublishKit>;
}): <T>(storageNode: StorageNode | Awaited<import("@endo/far").FarRef<StorageNode>>, valueShape?: TypedPattern<T> | undefined) => RecorderKit<T>;
export function defineERecorderKit({ makeRecorder, makeDurablePublishKit }: {
    makeRecorder: MakeRecorder;
    makeDurablePublishKit: ReturnType<typeof prepareDurablePublishKit>;
}): <T>(storageNodeP: ERef<StorageNode>, valueShape?: TypedPattern<T> | undefined) => EventualRecorderKit<T>;
export function prepareRecorderKit(baggage: import("@agoric/vat-data").Baggage, marshaller: ERef<Marshaller>): <T>(storageNode: StorageNode | Awaited<import("@endo/far").FarRef<StorageNode>>, valueShape?: TypedPattern<T> | undefined) => RecorderKit<T>;
export function prepareRecorderKitMakers(baggage: import("@agoric/vat-data").Baggage, marshaller: ERef<Marshaller>): {
    makeDurablePublishKit: <T>(options?: Parameters<(options?: {
        valueDurability?: "mandatory" | undefined;
    }) => import("@agoric/notifier").DurablePublishKitState>[0]) => PublishKit<T>;
    makeRecorder: (publisher: globalThis.Publisher<unknown>, storageNode: import("@endo/eventual-send").DataOnly<globalThis.StorageNode> & import("@endo/eventual-send").RemotableBrand<import("@endo/eventual-send").DataOnly<globalThis.StorageNode>, globalThis.StorageNode>, valueShape?: TypedPattern<any> | undefined) => import("@endo/exo").Guarded<{
        getStorageNode(): import("@endo/eventual-send").DataOnly<globalThis.StorageNode> & import("@endo/eventual-send").RemotableBrand<import("@endo/eventual-send").DataOnly<globalThis.StorageNode>, globalThis.StorageNode>;
        /**
         * Memoizes the remote call to the storage node
         *
         * @returns {Promise<string>}
         */
        getStoragePath(): Promise<string>;
        /**
         * Marshalls before writing to storage or publisher to help ensure the two streams match.
         *
         * @param {any} value
         * @returns {Promise<void>}
         */
        write(value: any): Promise<void>;
        /**
         * Like `write` but prevents future writes and terminates the publisher.
         *
         * @param {any} value
         * @returns {Promise<void>}
         */
        writeFinal(value: any): Promise<void>;
    }>;
    makeRecorderKit: <T>(storageNode: StorageNode | Awaited<import("@endo/far").FarRef<StorageNode>>, valueShape?: TypedPattern<T> | undefined) => RecorderKit<T>;
    makeERecorderKit: <T>(storageNodeP: ERef<StorageNode>, valueShape?: TypedPattern<T> | undefined) => EventualRecorderKit<T>;
};
export function prepareMockRecorderKitMakers(): {
    storageNode: globalThis.StorageNode & {
        countSetValueCalls: () => number;
    };
    makeDurablePublishKit: <T>(options?: Parameters<(options?: {
        valueDurability?: "mandatory" | undefined;
    }) => import("@agoric/notifier").DurablePublishKitState>[0]) => PublishKit<T>;
    makeRecorder: (publisher: globalThis.Publisher<unknown>, storageNode: import("@endo/eventual-send").DataOnly<globalThis.StorageNode> & import("@endo/eventual-send").RemotableBrand<import("@endo/eventual-send").DataOnly<globalThis.StorageNode>, globalThis.StorageNode>, valueShape?: TypedPattern<any> | undefined) => import("@endo/exo").Guarded<{
        getStorageNode(): import("@endo/eventual-send").DataOnly<globalThis.StorageNode> & import("@endo/eventual-send").RemotableBrand<import("@endo/eventual-send").DataOnly<globalThis.StorageNode>, globalThis.StorageNode>;
        /**
         * Memoizes the remote call to the storage node
         *
         * @returns {Promise<string>}
         */
        getStoragePath(): Promise<string>;
        /**
         * Marshalls before writing to storage or publisher to help ensure the two streams match.
         *
         * @param {any} value
         * @returns {Promise<void>}
         */
        write(value: any): Promise<void>;
        /**
         * Like `write` but prevents future writes and terminates the publisher.
         *
         * @param {any} value
         * @returns {Promise<void>}
         */
        writeFinal(value: any): Promise<void>;
    }>;
    makeRecorderKit: <T>(storageNode: StorageNode | Awaited<import("@endo/far").FarRef<StorageNode>>, valueShape?: TypedPattern<T> | undefined) => RecorderKit<T>;
    makeERecorderKit: <T>(storageNodeP: ERef<StorageNode>, valueShape?: TypedPattern<T> | undefined) => EventualRecorderKit<T>;
};
export namespace RecorderKitShape {
    let recorder: import("@endo/patterns").Matcher;
    let subscriber: import("@endo/patterns").Matcher;
}
export type Recorder<T> = {
    getStorageNode(): Awaited<import("@endo/far").FarRef<StorageNode>>;
    getStoragePath(): Promise<string>;
    write(value: T): Promise<void>;
    writeFinal(value: T): Promise<void>;
};
export type RecorderKit<T> = Pick<PublishKit<T>, "subscriber"> & {
    recorder: Recorder<T>;
};
export type EventualRecorderKit<T> = Pick<PublishKit<T>, "subscriber"> & {
    recorderP: ERef<Recorder<T>>;
};
export type MakeRecorder = ReturnType<typeof prepareRecorder>;
export type MakeRecorderKit = ReturnType<typeof defineRecorderKit>;
export type MakeERecorderKit = ReturnType<typeof defineERecorderKit>;
import type { TypedPattern } from '@agoric/internal';
import { prepareDurablePublishKit } from '@agoric/notifier';
//# sourceMappingURL=recorder.d.ts.map