Convenience wrapper for DurablePublishKit and Recorder kinds.

NB: this defines two durable kinds. Must be called at most once per baggage.

makeRecorderKit is suitable for making a durable RecorderKit which can be held in Exo state. makeERecorderKit is for closures that must return a subscriber synchronously but can defer the recorder.

  • Parameters

    • baggage: Baggage
    • marshaller: ERef<{
          fromCapData: FromCapData<unknown>;
          serialize: ToCapData<unknown>;
          toCapData: ToCapData<unknown>;
          unserialize: FromCapData<unknown>;
      }>

    Returns {
        makeDurablePublishKit: ((...args: [options: {
            valueDurability: undefined | "mandatory";
        }]) => GuardedKit<{
            publisher: {
                fail(reason: any): void;
                finish(finalValue: any): void;
                publish(value: any): void;
            };
            subscriber: {
                getUpdateSince(updateCount: any): any;
                subscribeAfter(publishCount?: bigint): Promise<any>;
            };
        }>);
        makeERecorderKit: (<T>(storageNodeP: ERef<StorageNode>, valueShape?: TypedPattern<T>) => EventualRecorderKit<T>);
        makeRecorder: ((...args: [publisher: Publisher<unknown>, storageNode: DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>, valueShape: TypedPattern<any>]) => Guarded<{
            getStorageNode(): DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>;
            getStoragePath(): Promise<string>;
            write(value: any): Promise<void>;
            writeFinal(value: any): Promise<void>;
        }>);
        makeRecorderKit: (<T>(storageNode: StorageNode | DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>, valueShape?: TypedPattern<T>) => RecorderKit<T>);
    }

    • makeDurablePublishKit: ((...args: [options: {
          valueDurability: undefined | "mandatory";
      }]) => GuardedKit<{
          publisher: {
              fail(reason: any): void;
              finish(finalValue: any): void;
              publish(value: any): void;
          };
          subscriber: {
              getUpdateSince(updateCount: any): any;
              subscribeAfter(publishCount?: bigint): Promise<any>;
          };
      }>)
        • (...args): GuardedKit<{
              publisher: {
                  fail(reason: any): void;
                  finish(finalValue: any): void;
                  publish(value: any): void;
              };
              subscriber: {
                  getUpdateSince(updateCount: any): any;
                  subscribeAfter(publishCount?: bigint): Promise<any>;
              };
          }>
        • Parameters

          • Rest...args: [options: {
                valueDurability: undefined | "mandatory";
            }]

          Returns GuardedKit<{
              publisher: {
                  fail(reason: any): void;
                  finish(finalValue: any): void;
                  publish(value: any): void;
              };
              subscriber: {
                  getUpdateSince(updateCount: any): any;
                  subscribeAfter(publishCount?: bigint): Promise<any>;
              };
          }>

    • makeERecorderKit: (<T>(storageNodeP: ERef<StorageNode>, valueShape?: TypedPattern<T>) => EventualRecorderKit<T>)
    • makeRecorder: ((...args: [publisher: Publisher<unknown>, storageNode: DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>, valueShape: TypedPattern<any>]) => Guarded<{
          getStorageNode(): DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>;
          getStoragePath(): Promise<string>;
          write(value: any): Promise<void>;
          writeFinal(value: any): Promise<void>;
      }>)
        • (...args): Guarded<{
              getStorageNode(): DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>;
              getStoragePath(): Promise<string>;
              write(value: any): Promise<void>;
              writeFinal(value: any): Promise<void>;
          }>
        • Parameters

          • Rest...args: [publisher: Publisher<unknown>, storageNode: DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>, valueShape: TypedPattern<any>]

          Returns Guarded<{
              getStorageNode(): DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>;
              getStoragePath(): Promise<string>;
              write(value: any): Promise<void>;
              writeFinal(value: any): Promise<void>;
          }>

    • makeRecorderKit: (<T>(storageNode: StorageNode | DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>, valueShape?: TypedPattern<T>) => RecorderKit<T>)
        • <T>(storageNode, valueShape?): RecorderKit<T>
        • Type Parameters

          • T

          Parameters

          • storageNode: StorageNode | DataOnly<StorageNode> & RemotableBrand<DataOnly<StorageNode>, StorageNode>
          • OptionalvalueShape: TypedPattern<T>

          Returns RecorderKit<T>