const e=require("path"),r=require("rocksdb-blobs"),t=require("hyperblobs"),o=require("hyperdb"),s=require("../../../schema/spec"),{contract:{hyperdispatch:{Router:i,encode:c},hyperdb:b}}=s,n=require("./identity"),a=require("./internal"),l=require("./members"),u=require("./members/labels"),d=require("./chat"),h=require("./reactions"),p=require("./config"),E=require("./labels"),q=require("./calls"),w=require("./testing"),m=require("./registration");class A{constructor(e,{abi:r,bootstrap:t,router:o,hostcalls:s,writer:i,genesis:c,dryRun:b,trace:n,fork:a}){if(this.db=e,this.writer=i,this.genesis=!!c,this.bootstrap=t,this.router=o,this.hostcalls=s,this.dryRun=b,this.trace=n,this.fork=a,this.abi=r,!s.addWriter)throw new Error("An addWriter hostcall must be provided as context");if(!s.removeWriter)throw new Error("A removeWriter hostcall must be provided as context");if(!s.removeable)throw new Error("A removeable hostcall must be provided as context");if(!s.interrupt)throw new Error("An interrupt hostcall must be provided as context");if(!s.createAnchor)throw new Error("A createAnchor hostcall must be provided as context")}}class v{static OpContext=A;static bee(e,r={}){const s=e.get(v.DB_VIEW_NAME),i=e.get(v.BLOB_VIEW_NAME),c=o.bee(s,b,r.hyperdb);return{blobs:new t(i),db:c,cores:{db:s,blobs:i}}}static bee2(e,r={}){return{blobs:null,db:o.bee2(e,b,r.hyperdb),cores:{db:e.core,blobs:e.core}}}static rocks(t,s={}){const i=e.join(t,"db"),c=e.join(t,"blobs"),n=o.rocks(i,b,s.hyperdb);return{blobs:new r(c),db:n}}static DB_VIEW_NAME="keet/v3/db";static DB_VIEW_NAME_AUTOBEE="view";static BLOB_VIEW_NAME="keet/v3/blobs"}module.exports={KeetContract:v,createRouter:function(){const e=new i;return n[m](e),a[m](e),l[m](e),u[m](e),d[m](e),h[m](e),p[m](e),E[m](e),q[m](e),w[m](e),e},encodeOperation:c,spec:s};