@agoric/zoe
Version:
Zoe: the Smart Contract Framework for Offer Enforcement
117 lines • 6.72 kB
TypeScript
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