docs: function GraphistryJS(iFrame) {
  
      if (!iFrame) {
          throw new Error('No iframe provided to Graphistry');
      }
  
      return Graphistry
          .fromEvent(iFrame, 'load', ({ target }) => target)
          .startWith(iFrame) // say hello first and on each load
          .map((target) => target.contentWindow)
          .do((target) => target && target.postMessage && (
              console.log(`Graphistry API: connecting to client`) ||
              target.postMessage({
                  type: 'ready', agent: 'graphistryjs'
              }, '*'))
          )
          .switchMap(
              (target) => Graphistry
                  .fromEvent(window, 'message')
                  .filter(({ data }) => data && data.type === 'init' && data.cache),
              (target, { cache }) => ({ target, cache })
          )
          .switchMap(({ target, cache }) => {
  
              const model = new Model({
                  cache,
                  recycleJSON: true,
                  scheduler: Scheduler.async,
                  allowFromWhenceYouCame: true
              });
  
              model._source = new PostMessageDataSource(window, target, model, '*');
  
              class InstalledGraphistry extends Graphistry {
                  static model = model;
                  lift(operator) {
                      const observable = new InstalledGraphistry(this);
                      observable.operator = operator;
                      return observable;
                  }
              }
  
              InstalledGraphistry = wrapStaticObservableMethods(Observable, InstalledGraphistry);
  
              return model.get(`workbooks.open.views.current.id`).map(({ json }) => {
                  InstalledGraphistry.workbook = model.deref(json.workbooks.open);
                  InstalledGraphistry.view = model.deref(json.workbooks.open.views.current);
                  console.log(`Graphistry API: connected to client`);
                  return InstalledGraphistry;
              });
          })
          .multicast(() => new ReplaySubject(1))
          .refCount();
  }