import { $APP, shadow$provide } from "./shared.js";
import*as esm_import$node_events from"node:events";import*as esm_import$$libp2p$crypto$keys from"@libp2p/crypto/keys";import*as esm_import$node_path from"node:path";import*as esm_import$$libp2p$peer_id from"@libp2p/peer-id";$APP.ardegazu.rooms.chat={};$APP.ardegazu.rooms.chat.new_room_secret=$APP.ardegazu.rooms.lib.crypto.new_room_secret;$APP.ardegazu.rooms.chat.CHAT_SALT="chat.ardegazu.ro/v2";
$APP.ardegazu.rooms.chat.DEFAULTS=$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2("relayMultiaddr /dns4/signal.ardegazu.ro/tcp/443/tls/ws/p2p/12D3KooWQzZvygPwd2F4JAqqf6tfBSJ29YtjzzftUyJ37RLCG5WT turnCredsUrl https://signal.ardegazu.ro/turn-credentials discoveryTopic _peer-discovery._p2p._pubsub".split(" "),0));
$APP.ardegazu.rooms.chat.ChatClient=class extends esm_import$node_events.EventEmitter{constructor(a,b,c,d,e,f){super();this.net=a;this.log=b;this.roomId=c;this._name=d;this._identity=e;this._salt=f;this._messages=new Map;this._rx=new Map;this._peers=new Map}};$APP.ardegazu.rooms.chat.peers=function(a){return a._peers};
$APP.ardegazu.rooms.chat.history=function(a){var b=[];a._messages.forEach(function(c,d){return b.push(c)});b.sort(function(c,d){var e=c.ts-d.ts;return $APP.ardegazu.rooms.js.truthy_QMARK_(e)?e:c.id<d.id?-1:1});return b};
$APP.ardegazu.rooms.chat.send=function(a,b,c){b=$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["t","chat","ts",Date.now(),"name",a._name,"text",b],0));$APP.ardegazu.rooms.js.truthy_QMARK_(c)&&(b.thread=c);return $APP.ardegazu.rooms.lib.log.append(a.log,b)};
$APP.ardegazu.rooms.chat.react=function(a,b,c,d){return $APP.ardegazu.rooms.lib.log.append(a.log,$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["t","react","ts",Date.now(),"name",a._name,"target",b,"emoji",c,"op",d===void 0?"add":d],0)))};
$APP.ardegazu.rooms.chat.set_name=function(a,b){a._name=b;return($APP.ardegazu.rooms.chat.id_fields.cljs$core$IFn$_invoke$arity$1?$APP.ardegazu.rooms.chat.id_fields.cljs$core$IFn$_invoke$arity$1(a):$APP.ardegazu.rooms.chat.id_fields.call(null,a)).then(function(c){for(var d=$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["kind","name","name",b],0)),e=$APP.cljs.core.seq($APP.cljs.core.array_seq.cljs$core$IFn$_invoke$arity$1(Object.keys(c))),
f=null,g=0,h=0;;)if(h<g){var k=f.cljs$core$IIndexed$_nth$arity$2(null,h);d[k]=c[k];h+=1}else if(e=$APP.cljs.core.seq(e))f=e,$APP.cljs.core.chunked_seq_QMARK_(f)?(e=$APP.cljs.core.chunk_first(f),h=$APP.cljs.core.chunk_rest(f),f=e,g=$APP.cljs.core.count(e),e=h):(e=$APP.cljs.core.first(f),d[e]=c[e],e=$APP.cljs.core.next(f),f=null,g=0),h=0;else break;return $APP.ardegazu.rooms.lib.net.broadcast(a.net,d).then(function(l){})})};$APP.ardegazu.rooms.chat.close=function(a){return $APP.ardegazu.rooms.lib.log.close(a.log).then(function(b){return $APP.ardegazu.rooms.lib.net.close(a.net).then(function(c){})})};
$APP.ardegazu.rooms.chat.id_fields=function(a){var b=a._identity;return $APP.ardegazu.rooms.js.truthy_QMARK_(b)?b.assert(a._salt,a.roomId,$APP.ardegazu.rooms.lib.net.my_id(a.net)).then(function(c){return $APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["idPub",b.publicKeyB64,"idSig",c],0))}):Promise.resolve($APP.ardegazu.rooms.js.ordered())};
$APP.ardegazu.rooms.chat.send_hello=function(a,b){return $APP.ardegazu.rooms.chat.id_fields(a).then(function(c){for(var d=$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["kind","hello","name",a._name],0)),e=$APP.cljs.core.seq($APP.cljs.core.array_seq.cljs$core$IFn$_invoke$arity$1(Object.keys(c))),f=null,g=0,h=0;;)if(h<g){var k=f.cljs$core$IIndexed$_nth$arity$2(null,h);d[k]=c[k];h+=1}else if(e=$APP.cljs.core.seq(e))f=e,$APP.cljs.core.chunked_seq_QMARK_(f)?
(e=$APP.cljs.core.chunk_first(f),h=$APP.cljs.core.chunk_rest(f),f=e,g=$APP.cljs.core.count(e),e=h):(e=$APP.cljs.core.first(f),d[e]=c[e],e=$APP.cljs.core.next(f),f=null,g=0),h=0;else break;return Promise.resolve($APP.ardegazu.rooms.lib.net.send_to(a.net,b,d)).catch(function(l){return null}).then(function(l){})})};
$APP.ardegazu.rooms.chat.on_peer_state=function(a,b,c,d){var e=a._peers,f=e.get(b);f=f===void 0?$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["state",c],0)):f;f.state=c;$APP.ardegazu.rooms.js.truthy_QMARK_(d)&&(f.name=d);e.set(b,f);a.emit("peer",b,f)};
$APP.ardegazu.rooms.chat.on_live=function(a,b,c){var d=$APP.ardegazu.rooms.js.truthy_QMARK_(c)?c.kind:null;if($APP.ardegazu.rooms.js.truthy_QMARK_(c)&&("hello"===d||"name"===d)){d=a._peers;var e=d.get(b),f=e===void 0?$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["state","connecting"],0)):e;e=c.name;var g=c.idPub;c=c.idSig;"string"===typeof e&&(f.name=e.slice(0,40));d.set(b,f);"string"===typeof g&&"string"===typeof c&&$APP.ardegazu.id.identity.verify_assertion(a._salt,
a.roomId,b,g,c).then(function(h){$APP.ardegazu.rooms.js.truthy_QMARK_(h)&&(f.ident=$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["pub",g,"fp",h],0)),a.emit("peer",b,f))});a.emit("peer",b,f)}};$APP.ardegazu.rooms.chat.apply_reaction=function(a,b,c,d,e){$APP.ardegazu.rooms.js.truthy_QMARK_(d)&&(a=b.reactions,b=a.get(c),"add"===e?(b===void 0?(e=new Set,a.set(c,e),c=e):c=b,c.add(d)):b!==void 0&&(b.delete(d),0===b.size&&a.delete(c)))};
$APP.ardegazu.rooms.chat.fold_reactions_into=function(a,b){a._rx.forEach(function(c,d){d=d.split("|");var e=d[0],f=d[2];return d[1]===b.id?$APP.ardegazu.rooms.chat.apply_reaction(a,b,f,e,c.op):null})};
$APP.ardegazu.rooms.chat.apply_entry=function(a,b){var c=b.op,d=c.t;if("chat"===d)d=$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["id",b.hash,"from",b.from,"name",c.name,"ts",c.ts,"text",c.text],0)),$APP.ardegazu.rooms.js.truthy_QMARK_(c.thread)&&(d.thread=c.thread),d.reactions=new Map,a._messages.set(b.hash,d),$APP.ardegazu.rooms.chat.fold_reactions_into(a,d),a.emit("message",d);else if("img"===d)d=$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["id",
b.hash,"from",b.from,"name",c.name,"ts",c.ts,"img",$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["cid",c.cid,"mime",c.mime,"bytes",c.bytes,"w",c.w,"h",c.h],0))],0)),$APP.ardegazu.rooms.js.truthy_QMARK_(c.thread)&&(d.thread=c.thread),d.reactions=new Map,a._messages.set(b.hash,d),a.emit("message",d);else if("react"===d){d=""+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(b.from)+"|"+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(c.target)+
"|"+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(c.emoji);var e=a._rx,f=e.get(d);f!==void 0&&$APP.ardegazu.rooms.js.truthy_QMARK_(f)&&(f.clock>b.clock||f.clock===b.clock&&f.hash>b.hash)||(e.set(d,$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["clock",b.clock,"hash",b.hash,"op",c.op],0))),d=a._messages.get(c.target),d!==void 0&&($APP.ardegazu.rooms.chat.apply_reaction(a,d,c.emoji,b.from,c.op),a.emit("reaction",c.target,
c.emoji,b.from,c.op)))}};
$APP.ardegazu.rooms.chat.join=function(a){return Promise.resolve(null).then(function(b){var c=$APP.ardegazu.rooms.js.nn(a.origin,"https://chat.ardegazu.ro"),d=a.dataDir,e=$APP.ardegazu.rooms.js.nn(a.appSalt,$APP.ardegazu.rooms.chat.CHAT_SALT),f=$APP.ardegazu.rooms.js.nn(a.identity,null);$APP.ardegazu.rooms.node.env.install_origin.cljs$core$IFn$_invoke$arity$1(c);$APP.ardegazu.rooms.node.env.install_browser_globals.cljs$core$IFn$_invoke$arity$1(esm_import$node_path.join(d,"kv.json"));return esm_import$$libp2p$crypto$keys.generateKeyPair("Ed25519").then(function(g){var h=
esm_import$$libp2p$peer_id.peerIdFromPrivateKey(g).toString();return $APP.ardegazu.rooms.lib.crypto.create.cljs$core$IFn$_invoke$arity$3(a.roomSecret,e,h).then(function(k){return $APP.ardegazu.rooms.lib.descriptor.resolve_relay_config.cljs$core$IFn$_invoke$arity$1(Object.assign({},$APP.ardegazu.rooms.chat.DEFAULTS,a.relay)).then(function(l){l=Object.assign({},l,a.relay);var m=new $APP.ardegazu.rooms.lib.turn.IceConfig(l.turnCredsUrl,!1),n=[null];return $APP.ardegazu.rooms.lib.net.create($APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["privateKey",
g,"crypto",k,"ice",m,"wsOrigin",c,"relayMultiaddr",l.relayMultiaddr,"discoveryTopic",l.discoveryTopic,"myName",function(){var p=n[0];return $APP.ardegazu.rooms.js.truthy_QMARK_(p)?p._name:a.name},"events",$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["peerState",function(p,q,r){var t=n[0];if($APP.ardegazu.rooms.js.truthy_QMARK_(t))$APP.ardegazu.rooms.chat.on_peer_state(t,p,q,r)},"peerGone",function(p){var q=n[0];$APP.ardegazu.rooms.js.truthy_QMARK_(q)&&
(q._peers.delete(p),q.emit("peerGone",p))},"message",function(p,q){var r=n[0];if($APP.ardegazu.rooms.js.truthy_QMARK_(r))$APP.ardegazu.rooms.chat.on_live(r,p,q)},"binary",function(p,q){},"peerReady",function(p){var q=n[0];$APP.ardegazu.rooms.js.truthy_QMARK_(q)&&$APP.ardegazu.rooms.chat.send_hello(q,p)},"status",function(p){var q=n[0];$APP.ardegazu.rooms.js.truthy_QMARK_(q)&&q.emit("status",p)}],0))],0))).then(function(p){return $APP.ardegazu.rooms.node.stores.open_fs_helia(p.libp2p,$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["blocks",
esm_import$node_path.join(d,"blocks"),"data",esm_import$node_path.join(d,"data")],0))).then(function(q){var r=[];return $APP.ardegazu.rooms.lib.log.open(q,k,f,$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["onEntry",function(t){var v=n[0];$APP.ardegazu.rooms.js.truthy_QMARK_(v)?$APP.ardegazu.rooms.chat.apply_entry(v,t):r.push(t)},"onError",function(t){},"directory",esm_import$node_path.join(d,"orbitdb")],0))).then(function(t){var v=
new $APP.ardegazu.rooms.chat.ChatClient(p,t,k.roomId,a.name,f,e);n[0]=v;for(var w=$APP.cljs.core.seq($APP.cljs.core.array_seq.cljs$core$IFn$_invoke$arity$1(r.splice(0))),C=null,J=0,N=0;;)if(N<J){var T=C.cljs$core$IIndexed$_nth$arity$2(null,N);$APP.ardegazu.rooms.chat.apply_entry(v,T);N+=1}else if(w=$APP.cljs.core.seq(w))C=w,$APP.cljs.core.chunked_seq_QMARK_(C)?(w=$APP.cljs.core.chunk_first(C),N=$APP.cljs.core.chunk_rest(C),C=w,J=$APP.cljs.core.count(w),w=N):(w=$APP.cljs.core.first(C),$APP.ardegazu.rooms.chat.apply_entry(v,
w),w=$APP.cljs.core.next(C),C=null,J=0),N=0;else break;return $APP.ardegazu.rooms.lib.log.load_tail(t,500).then(function(X){v.emit("ready");return v})})})})})})})})};$APP.ardegazu.rooms.chat.ChatClient.join=function(a){return $APP.ardegazu.rooms.chat.join(a)};var proto_23825=$APP.ardegazu.rooms.chat.ChatClient.prototype;
Object.defineProperty(proto_23825,"myAuthorId",$APP.ardegazu.rooms.js.ordered.cljs$core$IFn$_invoke$arity$variadic($APP.cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["get",function(){return this.log.myAuthorId},"configurable",!0],0)));proto_23825.peers=function(){return $APP.ardegazu.rooms.chat.peers(this)};proto_23825.history=function(){return $APP.ardegazu.rooms.chat.history(this)};proto_23825.send=function(a,b){return $APP.ardegazu.rooms.chat.send(this,a,b)};
proto_23825.react=function(a,b,c){return $APP.ardegazu.rooms.chat.react(this,a,b,c)};proto_23825.setName=function(a){return $APP.ardegazu.rooms.chat.set_name(this,a)};proto_23825.close=function(){return $APP.ardegazu.rooms.chat.close(this)};proto_23825._applyEntry=function(a){return $APP.ardegazu.rooms.chat.apply_entry(this,a)};proto_23825._onLive=function(a,b){return $APP.ardegazu.rooms.chat.on_live(this,a,b)};
proto_23825._onPeerState=function(a,b,c){return $APP.ardegazu.rooms.chat.on_peer_state(this,a,b,c)};proto_23825._applyReaction=function(a,b,c,d){return $APP.ardegazu.rooms.chat.apply_reaction(this,a,b,c,d)};proto_23825._foldReactionsInto=function(a){return $APP.ardegazu.rooms.chat.fold_reactions_into(this,a)};proto_23825._idFields=function(){return $APP.ardegazu.rooms.chat.id_fields(this)};proto_23825._sendHello=function(a){return $APP.ardegazu.rooms.chat.send_hello(this,a)};export const ChatClient=$APP.ardegazu.rooms.chat.ChatClient;export const newRoomSecret=$APP.ardegazu.rooms.chat.new_room_secret;export const CHAT_SALT=$APP.ardegazu.rooms.chat.CHAT_SALT;