@ibgib/space-gib 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/bootstrap.mjs +25 -23
- package/dist/client/bootstrap.mjs.map +2 -2
- package/dist/client/{chunk-ROJZUPPE.mjs → chunk-AOGR25NW.mjs} +9 -9
- package/dist/client/{chunk-ROJZUPPE.mjs.map → chunk-AOGR25NW.mjs.map} +3 -3
- package/dist/client/{chunk-WJHRARK6.mjs → chunk-SXMTWH6R.mjs} +77 -49
- package/dist/client/{chunk-WJHRARK6.mjs.map → chunk-SXMTWH6R.mjs.map} +3 -3
- package/dist/client/index.mjs +14 -15
- package/dist/client/index.mjs.map +4 -4
- package/dist/client/script.mjs +1 -1
- package/dist/server/server.mjs +2129 -1208
- package/dist/server/server.mjs.map +4 -4
- package/package.json +4 -4
- package/src/client/AUTO-GENERATED-version.mts +1 -1
- package/src/client/bootstrap.mts +4 -0
- package/src/client/ui/shell/space-gib-shell-service.mts +17 -16
- package/src/server/server.mts +6 -0
package/dist/client/index.mjs
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import{$a as ya,$b as Ia,A as ga,Ac as fe,Ba as Kt,Bc as rt,Cc as ke,D as _t,Dc as ot,E as Gt,Ec as Na,F as je,Fc as La,Gb as L,Hc as Wt,Ia as Me,J as V,Jc as ge,Ka as ua,Kc as qt,Lc as Da,Mc as ka,Xa as at,Yb as wa,Zb as Sa,a as h,ac as ut,bc as yt,c as mt,cc as ee,d as ht,dc as ze,e as Ue,eb as nt,f as jt,fb as qe,fc as M,g as ne,gc as _a,h as z,hb as le,hc as Ga,i as ma,ib as gt,ic as Ca,j as u,jb as Ea,jc as Aa,kb as Xt,lb as De,lc as va,oc as Ta,r as H,tb as Yt,tc as $a,ub as Ht,uc as Ct,vc as Ba,w as p,wc as Je,ya as re,z as ha,za as Ie}from"./chunk-ROJZUPPE.mjs";var At="sync",oe="syncmsg",zt="@payloadAddrsDomain",jn="init",Kn="ack",Xn="delta",Yn="commit",Y={init:jn,ack:Kn,delta:Xn,commit:Yn},Ir=Object.values(Y),Hn="abort",Wn="optimistic-graft-longest-common-subsequence",Ee={abort:Hn,optimisticWithLCS:Wn},Ze=Object.values(Ee);function vt(r){return Ze.includes(r)}h(vt,"isValidSyncConflictStrategy");var qn="push",zn="pull",Jn="sync",Jt={push:qn,pull:zn,sync:Jn},vr=Object.values(Jt);var Zn="sender",Qn="receiver",Tt={sender:Zn,receiver:Qn},Tr=Object.values(Tt);var Pa=!1;function Zt({base:r,extended:t,throwIfExtendedDoesntContainBase:e}){let a=`[${Zt.name}]`;try{Pa&&console.log(`${a} starting... (I: 00d70d79a0249165c2a230389c962526)`);let s=!0;for(let o=0;o<r.length;o++)if(r[o]!==t[o]){s=!1;break}if(e&&!s)throw new Error(`base addrs do not correspond to extended addrs. We were expecting the base to be the exact start of the extended strand, e.g., base [a, b, c] with extended [a, b, c, d, e]. base: ${r}. extended: ${t}. (E: fb80b40003289bbf1aaedd4829fa1826)`);let i;if(s)i=t.slice(r.length);else{i=[];for(let o of t)r.includes(o)||i.push(o)}return i}catch(s){throw console.error(`${a} ${u(s)}`),s}finally{Pa&&console.log(`${a} complete.`)}}h(Zt,"getUniqueDnas");async function $t({src:r,createdIbGibs_Running:t,dnaAddrsToApplyToStoreVersion_MUTATES_IN_PLACE:e,allLocalIbGibs:a}){let s=`[${$t.name}]`;try{if(e.length>0){let i=e.splice(0,1)[0],o=a.filter(f=>p({ibGib:f})===i),c;if(o.length>0)c=o[0];else throw new Error(`dna ibGib not found in supplied allLocalIbGibs. dnaAddr: ${i}. (E: 7f56826852cf48a79ab8af16bf27e284)`);let d=ht(c.data);d.src=r,d.srcAddr=p({ibGib:r});let l;switch(d.type){case"mut8":l=await _t(d);break;case"rel8":l=await Gt(d);break;case"fork":throw new Error("fork transform not expected. atow only a single fork is expected at the beginning of the lifetime of a tjp ibgib. This fork defines the uniqueness of the tjp ibgib. When merging another tjp ibgib, we would only expect update transforms to be mut8 or rel8. (E: f8ad6996ac5545edad2d58a293d37d94)");default:throw new Error(`unknown dna argTransform.type (${d.type}) for dna address: ${i}. Expecting either mut8 or rel8. (fork transform is known but not expected either.) (E: 52a98db56e934e4cb42c64e2f45fa552)`)}if((l.intermediateIbGibs??[]).forEach(f=>t.push(f)),(l.dnas??[]).forEach(f=>t.push(f)),t.push(l.newIbGib),(l.dnas??[]).length>0){if(!l.dnas.some(f=>p(f)===i))throw new Error(`${s}(UNEXPECTED) Expected to generate exact dna that we applied in transform. dnaAddr: ${i} (E: 4a364c0b5d8d46c8af6bd540915fd973)`)}else console.warn(`${s}(UNEXPECTED) expected resTransform to include generated dna. dnaAddr: ${i}(W: 9648e2d5c40d42b7b9fb7efb09c5b13a)`);return await $t({src:l.newIbGib,createdIbGibs_Running:t,dnaAddrsToApplyToStoreVersion_MUTATES_IN_PLACE:e,allLocalIbGibs:a})}else return t.length===0&&console.warn(`${s} no dna transforms to apply but createdIbGibs_Running is empty. Dna is expected to start with at least one transform, otherwise don't call this function. (W: 52c7f2f6bd7e4bd0b31f53611b90268b)(UNEXPECTED)`),r}catch(i){throw console.error(`${s} ${u(i)}`),i}}h($t,"applyTransforms");var st="graftinfo",Te=st,Oa="latestcommonaddr",Ke="base",Pe="orphan",xa="dnaapplied",er="longest-common-subsequence",Qt={lcs:er},Rr=Object.values(Qt);var ue=!0;async function tr({data:r}){if(!r.conflictStrategy)throw new Error("(UNEXPECTED) data.conflictStrategy required for GraftInfoIb (E: 2c0968a0dac8d0ab3d67da9756d6df26)");if(!vt(r.conflictStrategy))throw new Error(`invalid data.conflictStrategy (${r.conflictStrategy}). valid conflict strategies: ${Ze} (E: 41e2680089786d4d28046b4c0884bd26)`);return[st,r.conflictStrategy].join(" ")}h(tr,"getGraftInfoIb");async function Ra({conflictStrategy:r,details:t,addlGraftDetails:e,latestCommonFrameAddr:a,baseAddrsSinceLCA:s,orphanAddrsSinceLCA:i,dnaAddrsApplied:o}){let c=`[${Ra.name}]`;try{if(ue&&console.log(`${c} starting... (I: 0030f62cbae28cf5882f87981edc3826)`),s.length===0)throw new Error("(UNEXPECTED) baseAddrsSinceLCA empty? (E: 005f8449a9236d445902a148f59fc826)");if(i.length===0)throw new Error("(UNEXPECTED) orphanAddrsSinceLCA empty? (E: 19e4082e82c67759c880392aca186826)");let d={conflictStrategy:r,description:t};e&&(d.addlGraftDetails=e);let l={[Oa]:[a],[Ke]:s.concat(),[Pe]:i.concat(),[xa]:o.concat()},f=await tr({data:d});return await V.stone({parentPrimitiveIb:st,ib:f,data:d,rel8ns:l,uuid:!0})}catch(d){throw console.error(`${c} ${u(d)}`),d}finally{ue&&console.log(`${c} complete.`)}}h(Ra,"createGraftInfo");async function ar({textA:r,textB:t}){if(r===t)return r;if(r==="")return t;if(t==="")return r;function e(l,f){let b=l.length,m=f.length,y=Array(b+1).fill(0).map(()=>Array(m+1).fill(0));for(let G=1;G<=b;G++)for(let T=1;T<=m;T++)l[G-1]===f[T-1]?y[G][T]=y[G-1][T-1]+1:y[G][T]=Math.max(y[G-1][T],y[G][T-1]);let g=b,w=m,C=[];for(;g>0&&w>0;)l[g-1]===f[w-1]?(C.unshift({line:l[g-1],indexA:g-1,indexB:w-1}),g--,w--):y[g-1][w]>y[g][w-1]?g--:w--;return C}h(e,"longestCommonSubsequence");let a=r.split(`
|
|
1
|
+
import{$a as wa,A as ya,Ba as ft,Bc as he,Cc as Ze,D as wt,Dc as Be,E as St,Ec as Qe,F as xe,Fc as ka,Gb as D,Gc as Da,Ia as Ae,Ic as Wt,J as U,Ka as Ea,Kc as ue,Lc as qt,Mc as Oa,Nc as Pa,Xa as ze,Zb as Ia,_b as _a,a as m,ac as Ga,bc as pt,c as dt,cc as mt,d as lt,dc as te,e as Pe,eb as Je,ec as Xe,f as Kt,fb as Ke,g as ie,gc as F,h as ee,hb as ge,hc as Ca,i as ha,ib as bt,ic as Aa,j as h,jb as Sa,jc as va,kb as Xt,kc as $a,lb as Te,mc as Ta,pc as Ba,r as q,tb as Yt,ub as Ht,uc as Na,vc as It,w as p,wc as La,xc as Ye,ya as ce,z as ua,za as _e}from"./chunk-AOGR25NW.mjs";var _t="sync",de="syncmsg",zt="@payloadAddrsDomain",Jn="init",Zn="ack",Qn="delta",er="commit",W={init:Jn,ack:Zn,delta:Qn,commit:er},Tr=Object.values(W),tr="abort",ar="optimistic-graft-longest-common-subsequence",we={abort:tr,optimisticWithLCS:ar},He=Object.values(we);function Gt(r){return He.includes(r)}m(Gt,"isValidSyncConflictStrategy");var nr="push",rr="pull",or="sync",Jt={push:nr,pull:rr,sync:or},Dr=Object.values(Jt);var sr="sender",ir="receiver",Ct={sender:sr,receiver:ir},Or=Object.values(Ct);var et="graftinfo",ve=et,xa="latestcommonaddr",Re="base",Ne="orphan",Ra="dnaapplied",cr="longest-common-subsequence",Zt={lcs:cr},Rr=Object.values(Zt);var Ma=!1;function Qt({base:r,extended:t,throwIfExtendedDoesntContainBase:e}){let a=`[${Qt.name}]`;try{Ma&&console.log(`${a} starting... (I: 00d70d79a0249165c2a230389c962526)`);let s=!0;for(let o=0;o<r.length;o++)if(r[o]!==t[o]){s=!1;break}if(e&&!s)throw new Error(`base addrs do not correspond to extended addrs. We were expecting the base to be the exact start of the extended strand, e.g., base [a, b, c] with extended [a, b, c, d, e]. base: ${r}. extended: ${t}. (E: fb80b40003289bbf1aaedd4829fa1826)`);let i;if(s)i=t.slice(r.length);else{i=[];for(let o of t)r.includes(o)||i.push(o)}return i}catch(s){throw console.error(`${a} ${h(s)}`),s}finally{Ma&&console.log(`${a} complete.`)}}m(Qt,"getUniqueDnas");async function At({src:r,createdIbGibs_Running:t,dnaAddrsToApplyToStoreVersion_MUTATES_IN_PLACE:e,allLocalIbGibs:a}){let s=`[${At.name}]`;try{if(e.length>0){let i=e.splice(0,1)[0],o=a.filter(f=>p({ibGib:f})===i),c;if(o.length>0)c=o[0];else throw new Error(`dna ibGib not found in supplied allLocalIbGibs. dnaAddr: ${i}. (E: 7f56826852cf48a79ab8af16bf27e284)`);let d=lt(c.data);d.src=r,d.srcAddr=p({ibGib:r});let l;switch(d.type){case"mut8":l=await wt(d);break;case"rel8":l=await St(d);break;case"fork":throw new Error("fork transform not expected. atow only a single fork is expected at the beginning of the lifetime of a tjp ibgib. This fork defines the uniqueness of the tjp ibgib. When merging another tjp ibgib, we would only expect update transforms to be mut8 or rel8. (E: f8ad6996ac5545edad2d58a293d37d94)");default:throw new Error(`unknown dna argTransform.type (${d.type}) for dna address: ${i}. Expecting either mut8 or rel8. (fork transform is known but not expected either.) (E: 52a98db56e934e4cb42c64e2f45fa552)`)}if((l.intermediateIbGibs??[]).forEach(f=>t.push(f)),(l.dnas??[]).forEach(f=>t.push(f)),t.push(l.newIbGib),(l.dnas??[]).length>0){if(!l.dnas.some(f=>p(f)===i))throw new Error(`${s}(UNEXPECTED) Expected to generate exact dna that we applied in transform. dnaAddr: ${i} (E: 4a364c0b5d8d46c8af6bd540915fd973)`)}else console.warn(`${s}(UNEXPECTED) expected resTransform to include generated dna. dnaAddr: ${i}(W: 9648e2d5c40d42b7b9fb7efb09c5b13a)`);return await At({src:l.newIbGib,createdIbGibs_Running:t,dnaAddrsToApplyToStoreVersion_MUTATES_IN_PLACE:e,allLocalIbGibs:a})}else return t.length===0&&console.warn(`${s} no dna transforms to apply but createdIbGibs_Running is empty. Dna is expected to start with at least one transform, otherwise don't call this function. (W: 52c7f2f6bd7e4bd0b31f53611b90268b)(UNEXPECTED)`),r}catch(i){throw console.error(`${s} ${h(i)}`),i}}m(At,"applyTransforms");var Me;(function(r){r.timestamp="timestamp",r.receiver="receiver",r.sender="sender"})(Me||(Me={}));var Fa=!1,vt=class{static{m(this,"GraftMergeStrategyBase_V1")}defaultGraftPreference;constructor(t){this.defaultGraftPreference=t?.defaultGraftPreference??Me.timestamp}resolveBaseAndOrphan({graftPreference:t,tipA_sender:e,branchA_sender_sinceLCA:a,tipB_receiver:s,branchB_receiver_sinceLCA:i}){let o=t||this.defaultGraftPreference;if(o===Me.receiver)return{baseTip:s,baseBranch:i,orphanTip:e,orphanBranch:a};if(o===Me.sender)return{baseTip:e,baseBranch:a,orphanTip:s,orphanBranch:i};{let c=Xt({ibGib:e}),d=c.valid?Number.parseInt(c.ticks):Number.MAX_SAFE_INTEGER,l=c.valid?c.ms??0:0,f=Xt({ibGib:s}),b=f.valid?Number.parseInt(f.ticks):Number.MAX_SAFE_INTEGER,g=f.valid?f.ms??0:0;return d<b||d===b&&l<=g?{baseTip:e,baseBranch:a,orphanTip:s,orphanBranch:i}:{baseTip:s,baseBranch:i,orphanTip:e,orphanBranch:a}}}async applyTransformAndRegister({resTransform:t,space:e,newGraftDnaIbGibs:a,newGraftedIntermediateIbGibs_ordered:s}){let i=`[${this.constructor.name}][${this.applyTransformAndRegister.name}]`;try{if(Fa&&console.log(`${i} starting... (I: 2e8a1d7f6c4342138901a1b2c3d4e5f6)`),!t)throw new Error("(UNEXPECTED) resTransform falsy (E: 83b27a8102f4423ab194e82f7c001826)");if(!t.newIbGib)throw new Error("(UNEXPECTED) resTransform.newIbGib falsy (E: a71823901bcf4502b4d9158bc7991826)");if(!t.dnas||t.dnas.length===0)throw new Error("(UNEXPECTED) resTransform.dnas falsy/empty (E: b65c19208a0d421297fb1c26b8911826)");for(let o of t.dnas)a.push(o);return s.push(t.newIbGib),e&&(await ft({resTransform:t,space:e}),await Ae({ibGib:t.newIbGib,space:e})),t.newIbGib}catch(o){throw console.error(`${i} ${h(o)} (E: d2384a8b792e42429bc7891234567826)`),o}finally{Fa&&console.log(`${i} complete.`)}}};var $t=!1,gt=class extends vt{static{m(this,"DefaultDnaReplayGraftStrategy")}strategyId="DefaultDnaReplayGraftStrategy";canGraft(t){return!0}async graft(t){let e=`[${this.strategyId}][${this.graft.name}]`;try{let $=function(J){let V=`${e}[${$.name}]`;for(let H of J){if(!H.rel8ns)throw new Error(`(UNEXPECTED) ${V} someIbGib.rel8ns falsy? All ibgibs with mergeable timelines are expected to have rel8ns. addr: ${p({ibGib:H})} (E: 5534a478cd183a5ee27b28487448b226)`);if(!H.rel8ns.dna)throw new Error(`(UNEXPECTED) someIbGib.rel8ns.dna falsy? We only have implemented grafting for dna. addr: ${p({ibGib:H})} (E: d86b388c627afd613f897e3819d8ab26)`);if(H.rel8ns.dna.length===0)throw new Error(`(UNEXPECTED) someIbGib.rel8ns.dna.length === 0? We only have implemented grafting for dna. addr: ${p({ibGib:H})} (E: bf973662a0689dd9089912b861af2826)`)}};var a=$;m($,"throwIfUnexpected"),$t&&console.log(`${e} starting default DNA replay graft... (I: 8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d)`);let{conflictStrategy:s,timelineAddrsA:i,timelineAddrsB:o,latestCommonFrameAddr:c,ibGibReadCache:d,space:l,graftPreference:f}=t,b=[],g=[];if(i.length===0)throw new Error("timelineAddrsA empty (E: 93a78cd1cd2a4a16ba99bd4820468f26)");if(o.length===0)throw new Error("timelineAddrsB empty (E: 76d53848152a66971b734068c3316826)");let E=i.lastIndexOf(c),u=i.slice(E+1),S=await Te({readCache_graph:d,addrs:u,space:l}),C=S.at(-1),_=o.lastIndexOf(c),A=o.slice(_+1),I=await Te({readCache_graph:d,addrs:A,space:l}),v=I.at(-1);$(S),$(I);let{baseTip:y,baseBranch:T,orphanTip:B,orphanBranch:N}=this.resolveBaseAndOrphan({graftPreference:f,tipA_sender:C,branchA_sender_sinceLCA:S,tipB_receiver:v,branchB_receiver_sinceLCA:I}),L=p({ibGib:y}),O=T.map(J=>p({ibGib:J})),k=p({ibGib:B}),x=N.map(J=>p({ibGib:J}));$t&&console.log(`${e} baseTipAddr: ${L} (I: 93353d9b9b68b17088f57958df85e826)`),$t&&console.log(`${e} orphanTipAddr: ${k} (I: 14df8867adc5dab97ff3c1e989b40e26)`);let[R]=await Te({addrs:[c],space:l});if(!R)throw new Error("(UNEXPECTED) latestCommonFrameIbGib falsy? (E: ead2020b7ab8e4c4f824573133e33826)");if(!R.rel8ns?.dna||R.rel8ns.dna.length===0)throw new Error("(UNEXPECTED) latestCommonFrameIbGib.rel8ns.dna falsy/empty? (E: 98fd8c725f484d85c8d23ceb181ce826)");let ae=R.rel8ns.dna.concat(),z=[];for(let J of N){if(!J.rel8ns)throw new Error("(UNEXPECTED) orphanFrame.rel8ns falsy? (E: ed910e3b930b1b5388d87c6f736a4826)");let V=Qt({base:ae,extended:J.rel8ns.dna??[],throwIfExtendedDoesntContainBase:!0});V.forEach(H=>ae.push(H)),V.forEach(H=>z.push(H))}let se=await Te({addrs:z,readCache_graph:d,space:l}),Ie=[],pe=await At({src:y,dnaAddrsToApplyToStoreVersion_MUTATES_IN_PLACE:z.concat(),allLocalIbGibs:se,createdIbGibs_Running:Ie});if(l&&Ie.length>0){await _e({space:l,ibGibs:Ie});let{mapWithTjp_YesDna:J}=Je({ibGibs:Ie}),V=Object.values(J),H=Ke({ibGibs:V});if(Object.keys(H).length>0){Object.values(H)[0].forEach(re=>b.push(re));for(let re of b)await Ae({ibGib:re,space:l})}}let me=[];if(s===we.optimisticWithLCS){let J=y.data?.text,V=B.data?.text;if(typeof J=="string"&&typeof V=="string"&&J!==V){let H=await Va({textA:J,textB:V});if(H!==pe.data?.text){let re=await wt({src:pe,dataToAddOrPatch:{text:H},dna:!0,nCounter:!!pe.data?.n});for(let ct of re.dnas??[])g.push(ct);b.push(re.newIbGib),l&&(await ft({resTransform:re,space:l}),await Ae({ibGib:re.newIbGib,space:l})),pe=re.newIbGib;let it={mergeTextStrategy:Zt.lcs,textAAddr:p({ibGib:y}),textBAddr:p({ibGib:B})};me.push(it)}}}let De=await ea({conflictStrategy:s,details:`Replayed ${z.length} transforms from orphan (${k}) onto base (${L}).`,addlGraftDetails:me.length>0?me:void 0,latestCommonFrameAddr:c,baseAddrsSinceLCA:O,orphanAddrsSinceLCA:x,dnaAddrsApplied:z});l&&await _e({ibGib:De,space:l});let ne=p({ibGib:De}),Ee=await St({src:pe,rel8nsToAddByAddr:{[ve]:[ne]},dna:!0,nCounter:!!pe.data?.n});for(let J of Ee.dnas??[])g.push(J);l&&(await ft({resTransform:Ee,space:l}),await Ae({ibGib:Ee.newIbGib,space:l}));let Ce=Ee.newIbGib;return{dnasReplayed:se,dnasCreatedInGraft:g,intermediateIbGibsCreatedInGraft:b,newGraftTip:Ce,graftInfoCreated:De}}catch(s){throw console.error(`${e} ${h(s)} (E: 7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f)`),s}finally{$t&&console.log(`${e} complete.`)}}};var ht=!1,Tt="[graft-strategy-service]",ut=class r{static{m(this,"GraftStrategyService")}static _instance;static get instance(){return this._instance||(this._instance=new r),this._instance}_customStrategies=[];_fallbackStrategy=new gt;registerStrategy(t){let e=`${Tt}[${this.registerStrategy.name}]`;if(!t)throw new Error("(UNEXPECTED) strategy falsy (E: 7c8b9a0d1e2f3a4b5c6d7e8f9a0b1c2d)");this._customStrategies.some(a=>a.strategyId===t.strategyId)||(ht&&console.log(`${e} registering custom strategy ${t.strategyId} (I: 8b9a0c1d2e3f4a5b6c7d8e9f0a1b2c3d)`),this._customStrategies.push(t))}setFallbackStrategy(t){let e=`${Tt}[${this.setFallbackStrategy.name}]`;if(!t)throw new Error("(UNEXPECTED) fallback strategy falsy (E: 9c0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c)");ht&&console.log(`${e} setting fallback strategy ${t.strategyId} (I: 0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d)`),this._fallbackStrategy=t}getFallbackStrategy(){return this._fallbackStrategy}getCustomStrategies(){return this._customStrategies.slice()}reset(){let t=`${Tt}[${this.reset.name}]`;ht&&console.log(`${t} resetting strategies to default fallback... (I: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d)`),this._customStrategies=[],this._fallbackStrategy=new gt}async selectStrategy(t){let e=`${Tt}[${this.selectStrategy.name}]`;try{for(let a of this._customStrategies)if(await a.canGraft(t))return ht&&console.log(`${e} selected custom strategy: ${a.strategyId} (I: 2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e)`),a;return ht&&console.log(`${e} using fallback strategy: ${this._fallbackStrategy.strategyId} (I: 3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f)`),this._fallbackStrategy}catch(a){throw console.error(`${e} ${h(a)} (E: 4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a)`),a}}};var Fe=!1;async function dr({data:r}){if(!r.conflictStrategy)throw new Error("(UNEXPECTED) data.conflictStrategy required for GraftInfoIb (E: 2c0968a0dac8d0ab3d67da9756d6df26)");if(!Gt(r.conflictStrategy))throw new Error(`invalid data.conflictStrategy (${r.conflictStrategy}). valid conflict strategies: ${He} (E: 41e2680089786d4d28046b4c0884bd26)`);return[et,r.conflictStrategy].join(" ")}m(dr,"getGraftInfoIb");async function ea({conflictStrategy:r,details:t,addlGraftDetails:e,latestCommonFrameAddr:a,baseAddrsSinceLCA:s,orphanAddrsSinceLCA:i,dnaAddrsApplied:o}){let c=`[${ea.name}]`;try{if(Fe&&console.log(`${c} starting... (I: 0030f62cbae28cf5882f87981edc3826)`),s.length===0)throw new Error("(UNEXPECTED) baseAddrsSinceLCA empty? (E: 005f8449a9236d445902a148f59fc826)");if(i.length===0)throw new Error("(UNEXPECTED) orphanAddrsSinceLCA empty? (E: 19e4082e82c67759c880392aca186826)");let d={conflictStrategy:r,description:t};e&&(d.addlGraftDetails=e);let l={[xa]:[a],[Re]:s.concat(),[Ne]:i.concat(),[Ra]:o.concat()},f=await dr({data:d});return await U.stone({parentPrimitiveIb:et,ib:f,data:d,rel8ns:l,uuid:!0})}catch(d){throw console.error(`${c} ${h(d)}`),d}finally{Fe&&console.log(`${c} complete.`)}}m(ea,"createGraftInfo");async function Va({textA:r,textB:t}){if(r===t)return r;if(r==="")return t;if(t==="")return r;function e(l,f){let b=l.length,g=f.length,E=Array(b+1).fill(0).map(()=>Array(g+1).fill(0));for(let _=1;_<=b;_++)for(let A=1;A<=g;A++)l[_-1]===f[A-1]?E[_][A]=E[_-1][A-1]+1:E[_][A]=Math.max(E[_-1][A],E[_][A-1]);let u=b,S=g,C=[];for(;u>0&&S>0;)l[u-1]===f[S-1]?(C.unshift({line:l[u-1],indexA:u-1,indexB:S-1}),u--,S--):E[u-1][S]>E[u][S-1]?u--:S--;return C}m(e,"longestCommonSubsequence");let a=r.split(`
|
|
2
2
|
`),s=t.split(`
|
|
3
3
|
`),i=e(a,s),o=[],c=0,d=0;for(let l of i){for(;c<l.indexA;)o.push(a[c]),c++;for(;d<l.indexB;)o.push(s[d]),d++;o.push(l.line),c++,d++}for(;c<a.length;)o.push(a[c]),c++;for(;d<s.length;)o.push(s[d]),d++;return o.join(`
|
|
4
|
-
`)}
|
|
5
|
-
${
|
|
6
|
-
${
|
|
7
|
-
${z(i).split(`
|
|
4
|
+
`)}m(Va,"mergeTextByLongestCommonSubsequence");async function ta({timelineAddrsA:r,timelineAddrsB:t,latestCommonFrameAddr:e,conflictStrategy:a,ibGibReadCache:s,space:i,graftPreference:o,strategies:c}){let d=`[${ta.name}]`;try{if(Fe&&console.log(`${d} starting... (I: 3b4c3e8e59c883d9d3c352efd6380826)`),r.length===0)throw new Error("timelineAddrsA empty (E: 93a78cd1cd2a4a16ba99bd4820468f26)");if(t.length===0)throw new Error("timelineAddrsB empty (E: 76d53848152a66971b734068c3316826)");if(e){if(!r.includes(e))throw new Error(`timelineAddrsA does not include latestCommonFrameAddr (${e}). timelineAddrsA: ${r} (E: c5a9afe371888da2a79963983426e826)`);if(!t.includes(e))throw new Error(`timelineAddrsB does not include latestCommonFrameAddr (${e}). timelineAddrsB: ${t} (E: 7e641f67c452b67d582d78484a88c826)`)}else if(e=r.findLast(b=>t.includes(b)),!e)throw new Error(`timelines do not share a common frame. A: ${r}. B: ${t} (E: 4c0e78a88a375d8588736668573f1e26)`);if(r.at(-1)===e)throw new Error("timelineAddrsA.at(-1) === latestCommonFrameAddr. Graft requires a branch BEYOND the LCA (E: 3796fc4074a8c5899d549bb8c2e68826)");if(t.at(-1)===e)throw new Error("timelineAddrsB.at(-1) === latestCommonFrameAddr. Graft requires a branch BEYOND the LCA (E: 66fbb86e9e98531549888bf10a344f26)");let l={conflictStrategy:a,timelineAddrsA:r,timelineAddrsB:t,latestCommonFrameAddr:e,ibGibReadCache:s,space:i,graftPreference:o,strategies:c},f;if(c&&c.length>0){for(let b of c)if(await b.canGraft(l)){f=b;break}f||(f=ut.instance.getFallbackStrategy())}else f=await ut.instance.selectStrategy(l);return Fe&&console.log(`${d} executing graft strategy ${f.strategyId} (I: 5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f)`),await f.graft(l)}catch(l){throw console.error(`${d} ${h(l)} (E: 9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d)`),l}finally{Fe&&console.log(`${d} complete.`)}}m(ta,"graftTimelines");function aa(r){let t=`[${aa.name}]`;try{if(Fe&&console.log(`${t} starting... (I: fe9adfe1a3175d87982507c8851f5826)`),!r)throw new Error("(UNEXPECTED) not a graft info, ibGib falsy? (E: bf06cdd700788e777f72fe5a5bdb0e26)");if(!r.data)throw new Error("not a graft info, ibGib.data falsy (E: 5e1b28843ec8571a7623046a06195826)");if(!r.ib.startsWith(et))throw new Error(`not graft info, ibgib.ib does not start with ${et} (E: cec6a8e25ff8746aef813e38cbebce26)`);return!0}catch(e){return Fe&&console.error(`${t} ${h(e)}`),!1}finally{Fe&&console.log(`${t} complete.`)}}m(aa,"isGraftInfo");var Q=!1;async function na({data:r}){let t=`[${na.name}]`;try{return[_t,r.uuid].join(" ")}catch(e){throw console.error(`${t} ${h(e)}`),e}}m(na,"getSyncIb");async function Ua(){return`tmp_sync_space_${(await ie()).substring(0,8)}`}m(Ua,"getTempSpaceName");async function tt({olderAddr:r,newerAddr:t,space:e}){let a=`[${tt.name}]`;try{if(Q&&console.log(`${a} starting... (I: 4b3548cbc9a2eb749f447ed82fdcf826)`),r===t)return!0;let s,i=await ce({space:e,addr:t});if(i.success&&i.ibGibs?.length===1)s=i.ibGibs[0];else throw new Error(`couldn't get newerAddr (${t}) from space (${e.ib}). (E: 36c758c22b181b2c89a1cd28937a6826)`);if(!s.rel8ns)return console.warn(`${a} newerIbGib.rel8ns falsy? newerAddr: ${t}. (W: 6f920811f7080281189f767813814826)`),!1;let o=s.rel8ns.past??[];if(o.length===0)return!1;if(o.includes(r))return!0;let c=o[0];return await tt({olderAddr:r,newerAddr:c,space:e})}catch(s){throw console.error(`${a} ${h(s)}`),s}finally{Q&&console.log(`${a} complete.`)}}m(tt,"isPastFrame");async function Bt({sagaIbGib:r,localSpace:t}){let e=`[${Bt.name}]`,a=m(async c=>{let d=await ce({space:t,addrs:c});if(d.success&&d.ibGibs?.length===c.length)return d.ibGibs;{let l=d.rawResultIbGib;throw l.data?new Error(`(UNEXPECTED) couldn't find addrs? addrsNotFound: ${l.data.addrsNotFound}? space.ib: ${t.ib} (E: 43b7b5a6ad982715c8f3eed69bfa0d26)`):new Error("(UNEXPECTED) resGet.rawResultIbGib.data falsy? (E: c26c681d2f831fc537ba6f48fee36d26)")}},"fnGet"),s=await Nt({sagaIbGib:r});if(s.length>0)throw new Error(`invalid sync sagaIbGib. validationErrors: ${s} (E: 19f9e8c9643858ff41312b62293d2126)`);if(!r.rel8ns)throw new Error("(UNEXPECTED) validated sagaIbGib.rel8ns falsy? (E: 73af48be8bbf271ec5cf78187ce8c826)");let i=r.rel8ns[de],o=await a(i);return{sagaIbGib:r,msgStones:o}}m(Bt,"getSyncSagaFrameDependencyGraph");async function at({sagaIbGib:r,space:t}){let e=`[${at.name}]`;try{if(Q&&console.log(`${e} starting... (I: 1ea3f804dd07d1e917a2afaaad497826)`),!r.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: fe0a0d0965e87ac852fe7ba4710cc826)");if(!r.rel8ns)throw new Error("(UNEXPECTED) sagaIbGib.rel8ns falsy? (E: b79ff82a732346bdf8a9e1eb9ac96826)");let a=p({ibGib:r}),s=r.rel8ns.past&&r.rel8ns.past.length>0?[...r.rel8ns.past,a]:[a],i=[];for(let o of s){let c,d=await ce({addr:o,space:t});if(d.success&&d.ibGibs&&d.ibGibs.length===1)c=d.ibGibs[0];else throw Q&&console.log(`${e} failed getting full history of sagaIbGib:
|
|
5
|
+
${ee(r)} (I: 2a35685bfe038f63182c7db39b44c826)`),new Error(`couldn't get saga addr (${o}) from space (${t.ib}) (E: 865b78ecd918c244158813650bea7d26)`);let l=await Bt({sagaIbGib:c,localSpace:t});i.push(l)}return Q&&console.log(`${e} resGraphs:...
|
|
6
|
+
${ee(i).split(`
|
|
8
7
|
`).join(`
|
|
9
8
|
`)}
|
|
10
|
-
...(I: d8e11827d88a3454d887ff05fb4ff526)`),i}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{Z&&console.log(`${e} complete.`)}}h(ct,"getFullSyncSagaHistory");async function Nt({sagaIbGib:r}){let t=`[${Nt.name}]`;try{Z&&console.log(`${t} starting... (I: dac978e9ec5820f128fbbff817b82826)`);let e=await je({ibGib:r})??[];if(e.length>0)return e;if(r.data){let{data:a}=r;a.uuid||e.push("data.uuid required (E: aa24eeda7b88d22e5832a2e8083c0826)"),a.timestamp||e.push("data.timestamp required (E: 9c82a88548f4b63c38687428754b3826)"),a.timestampMs||a.timestampMs===0||e.push("data.timestampMs required (E: 9c82a88548f4b63c38687428754b3826)"),a.conflictStrategy?vt(a.conflictStrategy)||e.push(`data.conflictStrategy (${a.conflictStrategy}) is invalid. Must be one of "${Ze}". (E: 6223a8813b688fa2c8644fa8a491bf26)`):e.push("data.conflictStrategy required (E: 9c82a88548f4b63c38687428754b3826)"),a.expirationTimestamp,a.errors,a.successCount}else e.push("sagaIbGib.data falsy (E: 4de5e8de589d0af7245600fb4fe30926)");if(r.rel8ns){let a=r.rel8ns[oe];a&&a.length>0||e.push("sagaIbGib.rel8ns[SYNC_MSG_REL8N_NAME] required. (E: df648dc18148e718682acb4842ecf826)")}else e.push("sagaIbGib.rel8ns falsy (E: da37aa492a7275b68a5e1912c7a5e126)");return e}catch(e){throw console.error(`${t} ${u(e)}`),e}finally{Z&&console.log(`${t} complete.`)}}h(Nt,"validateSyncSagaFrame");async function Lt({history:r}){let t=`[${Lt.name}]`;try{return Z&&console.log(`${t} starting... (I: df02b802f6989096b8d8f728e2c0a526)`),console.error(`${t} NAG ERROR (NOT THROWN) need to implement more validation on full saga history. (E: 9bfcc9247a1c783fd361a4a8216fef26)`),[]}catch(e){throw console.error(`${t} ${u(e)}`),e}finally{Z&&console.log(`${t} complete.`)}}h(Lt,"validateFullSyncSagaHistory");async function Dt({ibGibs:r,space:t}){let e=`[${Dt.name}]`;try{Z&&console.log(`${e} starting... (I: aa3ab828402836b3914800a8ffa1b826)`);let a=[],s=[];for(let i of r)ga({ibGib:i})||(ha({ibGib:i})?a.push(i):s.push(i));return a.length>0&&await Ie({ibGibs:a,isDna:!0,space:t}),s.length>0&&await Ie({ibGibs:s,isDna:!1,space:t}),{payload_Dnas:a,payload_NonDnas:s}}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{Z&&console.log(`${e} complete.`)}}h(Dt,"putInSpace_dnasThenNonDnas");function dt({sagaFrame:r}){let t=`[${dt.name}]`;try{if(Z&&console.log(`${t} starting... (I: 93521332d0dd2f5e88398b7db95e8126)`),!r)throw new Error("(UNEXPECTED) sagaFrame falsy? (E: 01fb28be6668d88ea49bb298c739c926)");if(!r.data)throw new Error("(UNEXPECTED) sagaFrame.data falsy? (E: 998298eb17685bdb9a85b46488ccd826)");if(!r.data.n&&r.data.n!==0)throw new Error("(UNEXPECTED) sagaFrame.data.n falsy and not 0? (E: 0394919d5b58300ceb09ba6a264ad826)");let e=r.data.n%2;if(e===0)return Tt.sender;if(e===1)return Tt.receiver;throw new Error("(UNEXPECTED) modulo is neither 0 nor 1? my logic sucks! This was way too defensive on my part... (E: 559488a2eef8d17b57079ca8886ee826)")}catch(e){throw console.error(`${t} ${u(e)}`),e}finally{Z&&console.log(`${t} complete.`)}}h(dt,"getSyncSagaFrameOrigin");async function kt({sagaHistory:r}){let t=`[${kt.name}]`;try{Z&&console.log(`${t} starting... (I: fe93a8f29e5d8ab2c8bd0e08e56f7826)`);let e=r.findLast(i=>i.msgStones.some(o=>o.data.stage===Y.delta));if(!e)throw new Error("(UNEXPECTED) no delta frame? What are we calling this function for? (E: 9b3201207908f79868b93cd893a91626)");let a=e.msgStones.filter(i=>i.data.stage===Y.delta);if(a.length>1)throw new Error("(UNEXPECTED) multiple delta stones in history slice? we're expecting a single delta stone per saga frame. (E: a4bd5860b4aa0743753d4798d3163826)");return a[0].data.conflicts}catch(e){throw console.error(`${t} ${u(e)}`),e}finally{Z&&console.log(`${t} complete.`)}}h(kt,"getFinalConflictsInfo");async function na({sagaHistory:r,myTempSpace:t}){let e=`[${na.name}]`;try{Z&&console.log(`${e} starting... (I: b755627e99c9a221566d86a81b0da526)`);let a=await kt({sagaHistory:r});if(!a||a.length===0)return Z&&console.log(`${e} no conflicts found. returning empty array (I: 5dce98010128a284c8ec92cd466a3826)`),[];let s=[];for(let i of a){if(!i.resolved)throw new Error("(UNEXPECTED) conflict.resolved falsy? we're expecting all conflicts to be resolved when getting orphaned addresses. (E: 3861e89a18c8ff405eb2117f6d4b9b26)");if(!i.graftInfoAddr)throw new Error("(UNEXPECTED) conflict.graftInfoAddr falsy? we're expecting a resolved conflict whose final ibgib (graft tip) was the graft info and for this addr to be in conflict.graftInfoAddr. (E: 80d86e333028585908f4757bc4d6f826)");let o=await De({addrs:[i.graftInfoAddr],space:t});if(o.length!==1)throw new Error(`(UNEXPECTED) couldn't get conflict.graftInfoAddr (${i.graftInfoAddr}) from myTempSpace (${t.ib})? (E: cf1fe87096f8ea22f84f250d7ab30226)`);let c=o[0];if(!ta(c))throw new Error(`(UNEXPECTED) graft info from conflict.graftInfoAddr (${i.graftInfoAddr}) does not pass the isGraftInfo guard? We're expecting this addr to point to a valid GraftInfoIbGib_V1 (E: 6aa9ecb9a428d92be8d1bdbe0696f826)`);let d=c.rel8ns[Pe];if(!d||d.length===0)throw new Error(`(UNEXPECTED) orphanedAddrs empty for conflict graftInfo (${i.graftInfoAddr})? we're expecting a graft to always necessarily orphan one or other branches, otherwise what are we "grafting"? (E: 3ed1284f6ca84754582801484d751926)`);d.forEach(l=>s.push(l))}return s}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{Z&&console.log(`${e} complete.`)}}h(na,"getAllOrphanedAddresses");async function Qe({senderSecret:r,sagaId:t}){let e=`[${Qe.name}]`;try{if(Z&&console.log(`${e} starting... (I: 0de03f8dcd3e32f1fca244e8f2a8a826)`),!r)throw new Error("(UNEXPECTED) senderSecret falsy? (E: 8ce053fe59825a6678713128953b9d26)");if(!t)throw new Error("(UNEXPECTED) sagaId falsy? (E: 3a17e0c1b2f849de8a42cd15b8ee6826)");return await La({masterSecret:r,kdfOpts:{strategy:Na.recursive_salt_wrap,salt:t,rounds:1e4,algorithm:"SHA-256"}})}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{Z&&console.log(`${e} complete.`)}}h(Qe,"deriveSessionSecret");var Pt="sync_sagacontext";var Et=!1;async function ra({data:r}){let t=`[${ra.name}]`;try{if(!r)throw new Error("data required (E: 839d82138c234b3e89582855594191fe)");let e=r["@payloadAddrsDomain"]?r["@payloadAddrsDomain"].length:0;return[Pt,r.sagaN,e].join(" ")}catch(e){throw console.error(`${t} ${u(e)}`),e}}h(ra,"getSyncSagaContextIb");async function Xe({context:r}){let t=`[${Xe.name}]`;try{Et&&console.log(`${t} starting... (I: 7797f8294bd8f7e5089cb722ad468226)`);let e=[],a=await je({ibGib:r});if(a&&a.length>0)return a.forEach(s=>e.push(s)),e;if(r.sagaFrame?(await Nt({sagaIbGib:r.sagaFrame})).forEach(i=>e.push(i)):e.push("context.sagaFrame is falsy. (E: b4edd88f4963f493789f83b29ba2df26)"),r.sagaFrameMsg){if((await je({ibGib:r.sagaFrameMsg})??[]).forEach(i=>e.push(i)),r.sagaFrame){let i=r.sagaFrame.rel8ns?.[oe]?.[0];if(i){let o=p({ibGib:r.sagaFrameMsg});o!==i&&e.push(`context.sagaFrameMsg address (${o}) does not match the stone address referenced in sagaFrame relations (${i}). (E: a983b271fcae46bbad7e82098bc24826)`)}else e.push(`context.sagaFrame is missing the message stone relation '${oe}'. (E: da872cf3a8d46dbbad89d0a68d712826)`)}}else e.push("context.sagaFrameMsg is falsy. (E: ed405a72ab0d8bbdca7b9605d8f9a26)");return e.length>0?e:(console.error(`${t} NAG ERROR MSG (NOT THROWN): not fully implemented yet (E: d574d85cb578637648ed403857f7a826)`),[])}catch(e){throw console.error(`${t} ${u(e)}`),e}finally{Et&&console.log(`${t} complete.`)}}h(Xe,"validateContextAndSagaFrame");async function oa({context:r,space:t}){let e=`[${oa.name}]`;try{Et&&console.log(`${e} starting... (I: 3c34e8f1d6ef965f98725c88459ea926)`);let a=[];if(!r.data)throw new Error("(UNEXPECTED) context.data falsy? (E: 3e4ddd0eb4b828ad489658d88d9a6326)");if(!r.rel8ns)throw new Error("(UNEXPECTED) context.rel8ns falsy? (E: 8026589d4fed69c828334ee842074326)");let{sagaFrame:s,signedSessionIdentity:i}=r;if(!s.data)throw new Error("(UNEXPECTED) sagaFrame.data falsy? (E: b61cc82d25984c92f75db74a5a855b26)");if(!i)return console.error(`${e}[NAG][not thrown] sagaFrame.data.sessionIdentityTjpAddr logic needs to be added in coordinator (E: 4fc47800a1086c917a47381824280826)`),s.data.sessionIdentityTjpAddr?(a.push("Context has no session identity, but sync saga frame shows a session identity (sagaFrame.data.sessionIdentityTjpAddr is truthy). (E: 69dd6cdc2e1859c0f3d62958c4339826)"),a):r.rel8ns.sessionIdentity?(a.push("Context has no signed session identity, but context.rel8ns.sessionIdentity is truthy. (E: 96a04a8a6c88ea8bf88118f89ad8e326)"),a):(Et&&console.log(`${e} context has no signedSessionIdentity and sync saga frame doesn't state there should be session identity. So nothing further to authenticate - returning early with no authentication errors. (I: d708735f9a2899ee98f762b8a09ed826)`),[]);let o=p({ibGib:i}),c=r.rel8ns?.sessionIdentity??[];if(c.length===0)return a.push("context.rel8ns.sessionIdentity is falsy/empty but context.signedSessionIdentity is present. (E: 66f906421eb2468c0b33f908a3cf2826)"),a;if(c.length>1)return a.push("context.rel8ns.sessionIdentity has multiple identity addrs. (E: 489428bfe6fdaa4cd885b938dc4c5826)"),a;let d=c[0],l=await at({addrs:[d],space:t});if(!l)throw new Error(`(UNEXPECTED) resGetLatestAddr for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: 7b207e5cbcec9037ea5adbe822ead826)`);if(!l.data)throw new Error(`(UNEXPECTED) resGetLatestAddr.data for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: de4eb8d730c8c4dcb59c8b9c79277826)`);if(!l.data.success)throw new Error("(UNEXPECTED) resGetLatestAddr.data.success falsy? (E: c94298dfd9684ad6a87eb748459aa826)");let{latestAddrsMap:f}=l.data;if(!f)throw new Error("(UNEXPECTED) resGetLatestAddr.data.latestAddrsMap falsy? (E: 19f1fd5fe798cf2e5fa923919169d826)");if(Object.keys(f).length!==1)throw new Error("(UNEXPECTED) Object.keys(latestAddrsMap).length !== 1? (E: fe526a0747589c6427a8bcc86da34a26)");let b=f[d];if(!b)return a.push(`prevSessionIdentityAddr (${d}) not found in space (${t.ib}). this should have been the incoming prevSessionIdentityAddr (E: f6d042bd6b54819998653228dee34226)`),a;if(d!==b&&b!==o)return a.push(`context.rel8ns.sessionIdentity does not point to the most recent in the space (${t.ib}). (E: 2f8288f53c87b6aa47bd2178d9df0c26)`),console.log(`context: ${z(gt({ibGib:r}))}`),console.log(`prevSessionIdentityAddr (context.rel8ns.sessionIdentity): ${d}`),console.log(`prevSessionIdentityAddr_latest: ${b}`),console.log(`currSessionIdentity (context.signedSessionIdentity): ${z(gt({ibGib:{ib:i.ib,gib:i.gib,rel8ns:i.rel8ns,data:{...i.data,challengePools:i.data.challengePools.map(F=>({...F,challenges:{}}))}}}))}`),console.log(`currSessionIdentityAddr: ${o}`),a;let m=await re({addr:d,space:t});if(!m.success||m.ibGibs?.length!==1)return a.push(`could not fetch latest sender identity ${d} from space (${t.ib}). (E: fd48c3e64c9fa4efd8a1f8280af18226)`),a;let y=m.ibGibs[0],g=await ua({ibGib:y,naive:!0,space:t});if(!g)throw new Error(`(UNEXPECTED) couldn't get sessionIdentityTjp in space (${t.ib})? we have already gotten the identity itself in the space, so we would expect the entire timeline to exist in it. (E: 9be0382ff1c8a0e77645ea38c096f826)`);let w=p({ibGib:g});if(w!==s.data.sessionIdentityTjpAddr)throw new Error("(UNEXPECTED) sessionIdentityTjpAddr !== sagaFrame.data.sessionIdentityTjpAddr? (E: c9a4ad5c2728fe38e86afc58e4abaf26)");let C=g.data.frameDetails;if(!C)return a.push("Invalid session identity tjp: sessionIdentityTjp.data.frameDetails is falsy. (E: 0187f8f804a84256281720586620b826)"),a;let{senderIdentityAddr:G,senderIdentityTjpAddr:T}=C;if(!G)throw new Error("sessionGenesisFrameDetails.senderIdentityAddr falsy (E: 02a0c80a3ead9e3af8af4cf3b156e826)");if(!T)throw new Error("sessionGenesisFrameDetails.senderIdentityTjpAddr falsy (E: 271928090ff5dc56d4bb63d8d5c68826)");let I=await at({addrs:[T,G],space:t});if(!I)throw new Error(`(UNEXPECTED) resGetLatestAddr_senderIdentity for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: 2e4ae8083b6fb7cbb8fae2a519062926)`);if(!I.data)throw new Error(`(UNEXPECTED) resGetLatestAddr_senderIdentity.data for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: 2e231850c2a898cc282b4b2841056826)`);if(!I.data.success)throw new Error("(UNEXPECTED) resGetLatestAddr_senderIdentity.data.success falsy? (E: e93508f03e0475925875b00746ffd826)");let{latestAddrsMap:v}=I.data;if(!v)throw new Error("(UNEXPECTED) resGetLatestAddr_senderIdentity.data.latestAddrsMap falsy? (E: 87a91e3f9968ad9ba79cdfe8cd878326)");if(Object.keys(v).length!==2&&T!==G)throw new Error("(UNEXPECTED) Object.keys(latestAddrsMap_senderIdentity).length !== 2 && senderIdentityTjpAddr !== senderIdentityAddr? (E: fe46bd584853d8e1e8e2d11f52012826)");let _=v[T],S=v[G];if(!S)throw new Error("(UNEXPECTED) senderIdentityAddr_latest falsy? (E: e151798ae2e9241578d09948937c4b26)");if(_!==S)throw new Error("senderIdentityTjpAddr_latest !== senderIdentityAddr_latest (E: 52478a1053589e72665031a853cc1826)");let $=await re({addr:S,space:t});if(!$.success||$.ibGibs?.length!==1)return a.push(`could not fetch latest sender identity ${d} from space (${t.ib}). (E: 3565ff0ed458f5a2384c40b16e849826)`),a;let B=$.ibGibs[0];if(!B.data.proofs)return a.push("Invalid sender identity. Proofs empty/falsy. (E: ebf488853061614d2b5b137828119526)"),a;let P=B.data.proofs.find(F=>F.claim.verb===fe)?.claim;if(!P)return a.push(`Most recent senderIdentity has no proof whose claim.verb === ${fe}. (E: b0f488ecccbbfe43d9a0b7c8a29d7826)`),a;if(P.target!==w)return a.push(`Most recent sender identity claim has claim.verb === ${fe} but DOES NOT target expected session identity addr ${d}. (E: 3e7f18d99848969be8586423d5ccb826)`),a;let k=await new ge().validate({currentIbGib:i,prevIbGib:y});k.length>0&&a.push(`Invalid session identity transition: ${k.join(", ")} (E: da1c81c6d3c86aec3254f48fe7514226)`);let D=p({ibGib:r});return i.data?.proofs?.some(F=>F.claim.target===D)||a.push(`Session identity signature does not target current context ibgib (${D}). (E: acae68938c287178c878d1b88bebb826)`),a}catch(a){let s=`${e} ${u(a)}`;return console.error(s),[`authentication produced an error: ${s} (E: 45e014b82af81993d936611ca6fc4d26)`]}finally{Et&&console.log(`${e} complete.`)}}h(oa,"authenticateContextIntrinsically");var se=!1,Ot=class r extends $a{static{h(this,"SyncPeer_V1")}lc=`[${r.name}]`;opts;payloadIbGibsDomainReceived$;currentSessionIdentity;get currentSessionIdentityAddr(){return this.currentSessionIdentity?p({ibGib:this.currentSessionIdentity}):void 0}async signContext({contextAddr:t}){let e=`${this.lc}[${this.signContext.name}]`;try{if(!this.currentSessionIdentity)return;if(!this.opts)throw new Error("opts not initialized. (E: bcf5978aed789b0ebcbdc51971ebe826)");let{fnSenderSecret:a,sagaId:s,localMetaspace:i,localSpace:o}=this.opts;if(!a)throw new Error("fnSenderSecret not initialized. (E: 207fd292a2e8c53c05fd0a74a4ae6d26)");if(!s)throw new Error("sagaId not initialized. (E: f2e35cc13ed873b638116188119d1826)");let c=await a(),d=await Qe({senderSecret:c,sagaId:s}),f=await new ge().sign({latestKeystone:this.currentSessionIdentity,masterSecret:d,claim:{verb:fe,target:t},metaspace:i,space:o});return this.currentSessionIdentity=f,f}catch(a){throw console.error(`${e} ${u(a)}`),a}}async signContextConnect({challengeUuid:t,demandedIds:e}){let a=`${this.lc}[${this.signContextConnect.name}]`;try{if(!this.currentSessionIdentity)return;if(!this.opts)throw new Error("opts not initialized. (E: bcf5978aed789b0ebcbdc51971ebe826)");let{fnSenderSecret:s,sagaId:i,localMetaspace:o,localSpace:c}=this.opts;if(!s)throw new Error("fnSenderSecret not initialized. (E: 207fd292a2e8c53c05fd0a74a4ae6d26)");if(!i)throw new Error("sagaId not initialized. (E: f2e35cc13ed873b638116188119d1826)");let d=await s(),l=await Qe({senderSecret:d,sagaId:i}),b=await new ge().sign({latestKeystone:this.currentSessionIdentity,masterSecret:l,poolId:ke,requiredChallengeIds:e,claim:{verb:rt,target:t},metaspace:o,space:c});return this.currentSessionIdentity=b,b}catch(s){throw console.error(`${a} ${u(s)}`),s}}get classname(){if(!this.data)throw new Error("(UNEXPECTED) this.data falsy? (E: 1ab1841e9338b54f3aa615fa37024826)");if(!this.data.classname)throw new Error("invalid peer. this.data.classname is falsy (E: b0ee28a0abb84a06588d9de7afcef826)");return this.data.classname}constructor(t,e){super(t,e)}async initialize(){this.payloadIbGibsDomainReceived$=await Ct()}async connect(t){let e=`${this.lc}[${this.connect.name}]`;try{se&&console.log(`${e} starting... (I: ad89d8137351662fb8a30114a1fa4826)`),await this.preConnectCheck(t),await this.connectImpl(t)}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{se&&console.log(`${e} complete.`)}}async establishSessionIdentity(){let t=`${this.lc}[${this.establishSessionIdentity.name}]`;try{if(se&&console.log(`${t} starting... (I: f2a1b3c4d5e6f7a8b9c0d1e2f3a4b526)`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? Call initializeOpts first. (E: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c526)");let{senderIdentity:e,fnSenderSecret:a,senderDomainAddr:s,sagaId:i,localMetaspace:o,localSpace:c}=this.opts;if(!e||!a){se&&console.log(`${t} no senderIdentity/fnSenderSecret \u2014 skipping establish (I: f29348a77d1542326d14043ea4b69126)`);return}if(!s)throw new Error("(UNEXPECTED) senderDomainAddr falsy but senderIdentity/fnSenderSecret truthy? if identity is used, senderDomainAddr must be provided. (E: c288fa8e9d3d82fc)");let d=p({ibGib:e}),l=le({ibGib:e});if(!l)throw new Error("(UNEXPECTED) senderIdentityTjpAddr falsy? (E: d5d8c3ab25a83a2c127904fe96de1526)");if(!i)throw new Error("(UNEXPECTED) sagaId falsy? Must be set in initializeOpts before calling establishSessionIdentity. (E: c6ba389d51b8af07d82458f875cf9826)");let f=await a();if(!f)throw new Error("senderSecret falsy. senderSecret required. (E: 1a8b0298bf78cbdf284b7988983b9826)");let b=await Qe({senderSecret:f,sagaId:i}),m=new ge;if(!this.opts.sessionConnectPoolConfig)throw new Error("(UNEXPECTED) opts.sessionConnectPoolConfig falsy? (E: 3351fd566eb8bbd2f821bb08c4419826)");if(!this.opts.sessionSyncPoolConfig)throw new Error("(UNEXPECTED) opts.sessionSyncPoolConfig falsy? (E: dbffa810d9e7ff6079088deb5b8e7826)");let y={senderIdentityAddr:d,senderIdentityTjpAddr:l};this.opts.targetAddrs&&(y.targetAddrs=this.opts.targetAddrs);let g=await m.genesis({masterSecret:b,configs:[this.opts.sessionConnectPoolConfig,this.opts.sessionSyncPoolConfig],frameDetails:y,metaspace:o,space:c}),w=p({ibGib:g}),C=await m.sign({latestKeystone:e,masterSecret:f,claim:{verb:fe,target:w},metaspace:o,space:c});await this.postEstablishToReceiver({newSenderIdentity:C,sessionIdentity:g}),this.currentSessionIdentity=g}catch(e){throw console.error(`${t} ${u(e)}`),e}finally{se&&console.log(`${t} complete.`)}}async initializeOpts(t){let e=`${this.lc}[${this.initializeOpts.name}]`;try{se&&console.log(`${e} starting... (I: 31bd5fda37c89fa37fbaf14daf5fe726)`),this.opts=t}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{se&&console.log(`${e} complete.`)}}setOptionalOpts(t){let e=`${this.lc}[${this.setOptionalOpts.name}]`;try{if(se&&console.log(`${e} starting... (I: ae5ddbd3577db267f84743175a736626)`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? (E: 0dd4d6080a6e2f31d86cf4d86e11b826)");se&&console.log(`${e} updating opts. arg keys: ${Object.keys(t)} (I: 452d78a558f8fc3468c8e2e68c70b226)`),this.opts={...this.opts,...t}}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{se&&console.log(`${e} complete.`)}}async authenticateAndValidate({context:t}){let e=`${this.lc}[${this.authenticateAndValidate.name}]`;try{if(se&&console.log(`${e} starting... (I: add238055cd84a222c5b8c89913af526)`),!this.opts)throw new Error("(UNEXPECTED) opts falsy in authenticateValidateAuthorize (E: b7e5a8ad99d84e1ba8d8f7facd288826)");let{localSpace:a}=this.opts,s=await oa({context:t,space:a});if(s.length>0)throw new Error(`invalid context authentication. authenticationErrors: ${s} (E: da89da5ee1269aeb78952d475d607526)`);let i=await Xe({context:t});if(i.length>0)throw new Error(`invalid context received. validationErrors: ${i} (E: 8b34c875c968af29bc433138e57a7826)`)}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{se&&console.log(`${e} complete.`)}}async witness(t){let e=`${this.lc}[${this.witness.name}]`;try{if(se&&console.log(`${e} starting...`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? Concrete class should have initialized sender opts by now. (E: 0b9e28287318fdf8bf9f5a6886a24826)");if(!t.sagaFrame)throw new Error("context.sagaFrame falsy. (E: a33dd88aa108e2bad9e885885731ce26)");await this.authenticateAndValidate({context:t});let a=await this.sendContextRequest(t);if(a){let s=await ct({sagaIbGib:t.sagaFrame,space:this.opts.localSpace});return a}else{se&&console.log(`${e} No response from peer. this may be normal if we just sent the very last commit frame. (I: 1855b7728c8898e1f9c001f8170ba826)`);return}}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{se&&console.log(`${e} complete.`)}}async getLocalIbGib(t){let e=`${this.lc}[${this.getLocalIbGib.name}]`;try{if(se&&console.log(`${e} starting... (I: 27b248cb9801eeb2386b71485389a826)`),console.warn(`${e} possibly a bottleneck here, getLocalIbGib only gets a single ibgib... (W: 2fd448a435480e6b128f6b8bcbef4826)`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? (E: cfb9431f2fb851f24a6c88e80c3b3326)");let a=await re({space:this.opts.localSpace,addr:t});if(a.success&&a.ibGibs&&a.ibGibs.length===1)return a.ibGibs[0];throw new Error(`couldn't get addr (${t}) from local space ${this.opts.localSpace}. reason: ${a.errorMsg??"unknown error (E: 926ef8bf4fcc299ab89dba34ea691a26)"} (E: d8a89807e471d3f8b938ab21df44cb26)`)}catch(a){throw console.error(`${e} ${u(a)}`),a}finally{se&&console.log(`${e} complete.`)}}};var Fa=!1,Ye={COMMON:{ALGO:mt.sha_256,TYPE:Ba.hash_reveal_v1,ROUNDS:2,REPLENISH:Je.topUp},CONNECT_POOL:{ID:ke,VERB:rt,SIZE:10,SELECT_SEQUENTIALLY:2,SELECT_RANDOMLY:2,TARGET_BINDING_COUNT:0,SERVER_DEMAND_COUNT:3}};function xt(r){let t=`[${xt.name}]`;try{Fa&&console.log(`${t} starting... (I: 3c791af2f978a00a087dfdde90884826)`);let e=(r.data?.challengePools??[]).find(o=>o.id===Ye.CONNECT_POOL.ID);if(!e)throw new Error(`Keystone missing "${Ye.CONNECT_POOL.ID}" pool (E: 6382e29260e4ddbac42ed18f49733526)`);let a=Object.keys(e.challenges).sort();if(a.length===0)throw new Error("Connect pool has no challenges (E: 1ef62fdbda182a790835c8c796475226)");let s=a[0],i=e.challenges[s];return{challengeId:s,challenge:i}}catch(e){throw console.error(`${t} ${u(e)}`),e}finally{Fa&&console.log(`${t} complete.`)}}h(xt,"getConnectChallenge");var nr="auth-challenge-init",rr="auth-init",or="auth-challenge",sr="auth-proof",ir="auth-ok",cr="auth-fail",dr="sync-frame",lr="sync-frame-response",fr="sync-frame-authenticated",br="sync-frame-response-authenticated",pr="domain-payload",mr="sync-error",U={auth_challenge_init:nr,auth_init:rr,auth_challenge:or,auth_proof:sr,auth_ok:ir,auth_fail:cr,sync_frame:dr,sync_frame_response:lr,sync_frame_authenticated:fr,sync_frame_response_authenticated:br,domain_payload:pr,sync_error:mr},Rt=Object.values(U);function sa(r){return Rt.includes(r)}h(sa,"isSyncWebSocketMsgType");function Va(r){throw new Error(`Unhandled message type: ${r} (E: e928a3f82cd7469a98ef1bc248a3f826)`)}h(Va,"assertUnreachable");var $e=!0,lt=class r extends Ot{static{h(this,"SyncPeerWebSocketSender_V1")}lc=`[${r.name}]`;get classname(){return r.name}get isSocketOpen(){return this.ws!==void 0&&this.ws.readyState===WebSocket.OPEN}ws;activeResolve;activeReject;pendingPayloadsToSend=[];handshakeMessageListener;constructor(t,e){super(t,e)}async preConnectCheck(t){let e=`${this.lc}[${this.preConnectCheck.name}]`;if(!this.data?.wsUrl)throw new Error("Missing wsUrl in peer data (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c910)");if(!this.data?.httpEvolveUrl)throw new Error("Missing httpEvolveUrl in peer data (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c911)")}async postEstablishToReceiver({newSenderIdentity:t,sessionIdentity:e}){let a=`${this.lc}[${this.postEstablishToReceiver.name}]`;try{if($e&&console.log(`${a} posting evolved keystones to ${this.data.httpEvolveUrl}...`),!this.data)throw new Error("(UNEXPECTED) this.data falsy? (E: d642e8a9af18b532c87c6f581aa53b26)");if(!this.data.httpEvolveUrl)throw new Error("(UNEXPECTED) this.data.httpEvolveUrl falsy? (E: 8589ddbb155914d85c09658881da2c26)");let s=await fetch(this.data.httpEvolveUrl,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({keystoneIbGib:t,relatedKeystoneIbGibs:[e]})});if(!s.ok){let i=await s.json().catch(()=>({})),o=i.message||i.error||"Unknown error";throw new Error(`HTTP ${s.status} evolution post rejected. errorMsg: ${o} (E: e8a478291b88d05c68cf6b385684b826)`)}$e&&console.log(`${a} evolve post accepted by server.`)}catch(s){throw console.error(`${a} establish post failed: ${u(s)}`),s}}async connectImpl(t){let e=`${this.lc}[${this.connectImpl.name}]`;try{$e&&console.log(`${e} starting...`);let{senderIdentity:a,fnSenderSecret:s,sagaId:i,localMetaspace:o,localSpace:c}=this.opts;if(!a||!s||!i)throw new Error("Missing identity parameters in peer options (E: ed49b6711ac82efcdb42b8a28c5b6826)");let d=await s(),l=await Qe({senderSecret:d,sagaId:i}),f=p({ibGib:a}),b=p({ibGib:(a.rel8ns?.past,a)}),m=await o.getLatestAddr({ibGib:a,space:c});if(!m)throw new Error("senderIdentityLatestAddr falsy. we should have a latest addr that is different than the sender identity at this point (done in the peer establish phase) (E: 225607318bef485d7821f82de97b6826)");let w=((await o.get({addrs:[m],space:c})).ibGibs?.[0]).data.proofs.at(0)?.claim.target;if(!w)throw new Error("Could not locate session keystone target from identity (E: 5ec4882f7e5e4c33fbd00ab8b3166726)");let G=(await o.get({addrs:[w],space:c})).ibGibs?.[0];if(!G)throw new Error(`Session keystone not found in local space: ${w} (E: 9ba818e6622808bb4ae749be31f80b26)`);let T=(G.data?.challengePools??[]).find(P=>P.id===Ye.CONNECT_POOL.ID);if(!T)throw new Error("Session keystone missing connect pool (E: f50968afca04b6d38ec19824ea201826)");let{challengeId:I}=xt(G),v=Wt.create({config:T.config}),_=await v.derivePoolSecret({masterSecret:l}),S=await v.generateSolution({poolSecret:_,poolId:Ye.CONNECT_POOL.ID,challengeId:I}),$=`${this.data.wsUrl}?sAddr=${encodeURIComponent(w)}&solution=${encodeURIComponent(S.value)}`;$e&&console.log(`${e} connecting to WebSocket: ${$}`);let B=new WebSocket($);return this.ws=B,new Promise((P,N)=>{let k=!1;B.addEventListener("open",()=>{$e&&console.log(`${e} WebSocket opened. Awaiting challenge...`)}),this.handshakeMessageListener=async D=>{try{let O=JSON.parse(D.data);$e&&console.log(`${e} received handshake frame: ${O.type}`);let F=O.type;if(!sa(F)){let J=Rt.join(", ");throw new Error(`Unknown message type '${F}' received during connection handshake. Valid types are: ${J} (E: e983271bc84f46928e4695be2409826)`)}switch(F){case U.auth_challenge_init:await this.handleHandshakeAuthChallengeInit(B,w);break;case U.auth_challenge:await this.handleHandshakeAuthChallenge(B,O,G,l);break;case U.auth_ok:k=!0,this.handleHandshakeAuthOk(B,P);break;case U.auth_fail:this.handleHandshakeAuthFail(O,N);break;case U.sync_error:this.handleHandshakeSyncError(O,N);break;case U.auth_init:case U.auth_proof:case U.sync_frame:case U.sync_frame_response:case U.sync_frame_authenticated:case U.sync_frame_response_authenticated:case U.domain_payload:throw new Error(`Unexpected message type '${F}' during connection handshake (E: e3f80c68ab2a46c2b1858c8a1e2f8926)`);default:Va(F)}}catch(O){console.error(`${e} ${u(O)}`),N(O)}},B.addEventListener("message",this.handshakeMessageListener),B.addEventListener("close",D=>{k||(this.disconnect(),N(new Error(`WebSocket closed before connect completed (code: ${D.code})`)))}),B.addEventListener("error",D=>{k||(this.disconnect(),N(new Error("WebSocket connection error")))})})}catch(a){throw console.error(`${e} connect failed: ${u(a)}`),a}}disconnect(){let t=`${this.lc}[${this.disconnect.name}]`;try{if($e&&console.log(`${t} starting... (I: 35c4b85fca0c6e9d042f5ff87cde3826)`),this.ws){this.handshakeMessageListener&&(this.ws.removeEventListener("message",this.handshakeMessageListener),this.handshakeMessageListener=void 0);try{this.ws.close()}catch(e){console.error(`${t} failed to close websocket: ${u(e)}`)}this.ws=void 0}}catch(e){console.error(`${t} ${u(e)}`)}finally{$e&&console.log(`${t} complete.`)}}async handleRuntimeMessage(t){let e=`${this.lc}[${this.handleRuntimeMessage.name}]`;try{let a=JSON.parse(t.data);$e&&console.log(`${e} received runtime frame: ${a.type}`);let s=a.type;if(!sa(s)){let i=Rt.join(", ");throw new Error(`Unknown message type '${s}' received during active sync saga loop. Valid types are: ${i} (E: e23a8d10b74d47fb90518f8e3f4b826)`)}switch(s){case U.sync_frame_response:await this.handleRuntimeSyncFrameResponse(a);break;case U.sync_frame_authenticated:this.handleRuntimeSyncFrameAuthenticated();break;case U.domain_payload:this.handleRuntimeDomainPayload(a);break;case U.sync_error:this.handleRuntimeSyncError(a);break;case U.auth_challenge_init:case U.auth_init:case U.auth_challenge:case U.auth_proof:case U.auth_ok:case U.auth_fail:case U.sync_frame:case U.sync_frame_response_authenticated:throw new Error(`Unexpected message type '${s}' during active sync saga loop (E: e982b12cf92c448bbad0e84b7263c826)`);default:Va(s)}}catch(a){if(console.error(`${e} failed parsing/handling runtime frame: ${u(a)}`),this.disconnect(),this.activeReject){let s=this.activeReject;this.activeResolve=void 0,this.activeReject=void 0,s(a)}}}async handleHandshakeAuthChallengeInit(t,e){t.send(JSON.stringify({type:U.auth_init,sAddr:e}))}async handleHandshakeAuthChallenge(t,e,a,s){let{challengeUuid:i,demandedIds:o}=e;$e&&console.log(`${this.lc} solving demanded challenges: ${o.join(", ")}`);let c=await this.signContextConnect({challengeUuid:i,demandedIds:o});if(!c)throw new Error("Failed to sign connect challenge proof (E: e9807f28ae9248bbadd0a7f1a8e9826)");t.send(JSON.stringify({type:U.auth_proof,proofFrame:c}))}handleHandshakeAuthOk(t,e){$e&&console.log(`${this.lc} WebSocket connect SUCCESS!`),this.handshakeMessageListener&&(t.removeEventListener("message",this.handshakeMessageListener),this.handshakeMessageListener=void 0),t.addEventListener("message",a=>this.handleRuntimeMessage(a)),e()}handleHandshakeAuthFail(t,e){this.disconnect(),e(new Error(`Handshake auth failed: ${t.message||"Unknown fail reason"} (E: f380b271a2be498db257bc8209fa8926)`))}handleHandshakeSyncError(t,e){this.disconnect(),e(new Error(`Handshake sync error: ${t.message||t.error||"Unknown sync error"} (E: f9208a01fe434cbbad83f210ea8f3426)`))}async handleRuntimeSyncFrameResponse(t){let e=t.context,a=await Xe({context:e});if(a.length>0)throw new Error(`Invalid response context received: ${a.join(", ")} (E: d7b5a283cf4c43ba8659c803800cf826)`);let s=[gt({ibGib:e}),e.sagaFrame,e.sagaFrameMsg];e.signedSessionIdentity&&s.push(e.signedSessionIdentity);let{localSpace:i}=this.opts;for(let c of s)await Ie({space:i,ibGibs:[c]}),await Me({space:i,ibGib:c});if((e.data?.["@payloadAddrsDomain"]||[]).length>0&&this.ws.send(JSON.stringify({type:U.sync_frame_response_authenticated,contextAddr:p({ibGib:e})})),this.activeResolve){let c=this.activeResolve;this.activeResolve=void 0,this.activeReject=void 0,c(e)}}handleRuntimeSyncFrameAuthenticated(){let t=this.pendingPayloadsToSend||[];this.pendingPayloadsToSend=[];for(let e of t)this.ws.send(JSON.stringify({type:U.domain_payload,ibGib:e}))}handleRuntimeDomainPayload(t){let e=t.ibGib;this.payloadIbGibsDomainReceived$.next(e)}handleRuntimeSyncError(t){let e=t.message||t.error||"Unknown sync runtime error",a=new Error(`Sync runtime error from receiver: ${e} (E: e983bc1c828d447fa0581da2b8004f26)`);if(this.activeReject){let s=this.activeReject;this.activeResolve=void 0,this.activeReject=void 0,s(a)}else throw a}async sendContextRequest(t){let e=`${this.lc}[${this.sendContextRequest.name}]`;try{if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error("WebSocket is not connected or open (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c915)");let a=t.payloadIbGibsDomain??[];this.pendingPayloadsToSend=[...a];let s={...t};return delete s.payloadIbGibsDomain,new Promise((i,o)=>{this.activeResolve=i,this.activeReject=o,this.ws.send(JSON.stringify({type:U.sync_frame,context:s}))})}catch(a){throw console.error(`${e} sendContextRequest failed: ${u(a)}`),a}}};var Mt="sync_sagamsg";async function ia({data:r}){let t=`[${ia.name}]`;try{return[Mt,r.sagaId,r.stage].join(" ")}catch(e){throw console.error(`${t} ${u(e)}`),e}}h(ia,"getSyncSagaMessageIb");async function ca({frameIbGib:r,space:t}){let e=`[${ca.name}]`;try{let s=(await ya({ibGib:r,rel8nNames:[oe],space:t}))[oe];if(!s||s.length===0)throw new Error(`(UNEXPECTED) No sync message stone found found for frame: ${r.ib} (E: 8a4b2c1d3e5f6a9b7c8d9e0f1a2b3c4d)`);if(s.length>1)throw new Error(`(UNEXPECTED) Multiple sync message stones found (${s.length}) for frame: ${r.ib}. logic not currently equipped to handle multiple messages per frame. (E: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d)`);return s[0]}catch(a){throw console.error(`${e} ${u(a)}`),a}}h(ca,"getSyncSagaMessageFromFrame");var A=!0,Ft=!0,we="[ControlDomain]",ae=class r{static{h(this,"SyncSagaCoordinator")}lc=`[${r.name}]`;constructor(){}defaultSessionConnectPoolConfig(){return qt({id:ke,salt:`session-connect-${Date.now()}`,verbs:[rt],size:20,sequential:2,random:2,targetBinding:0,replenishStrategy:Je.deleteAll})}defaultSessionSyncPoolConfig(){return qt({id:ot,salt:`session-sync-${Date.now()}`,verbs:[fe],size:200,sequential:3,random:3,targetBinding:3,replenishStrategy:Je.topUp})}async sync({peer:t,domainIbGibs:e,senderIdentityInfo:a,fnSenderSecret:s,conflictStrategy:i=Ee.abort,metaspace:o,localSpace:c}){let d=`${this.lc}[${this.sync.name}]`;if(A&&console.log(`${d} starting...`),!c){debugger;throw new Error(`${d} source (or localSpace) required (E: 25df3761f7686a1099a552f83c95d326)`)}if(a||s){if(!a)throw new Error("(UNEXPECTED) senderIdentityInfo falsy but fnSenderSecret truthy? if either is used, both must be truthy. (E: e366628a4919c7d727d2cbd8e5b75e26)");if(!s)throw new Error("(UNEXPECTED) fnSenderSecret falsy but senderIdentityInfo truthy? if either is used, both must be truthy. (E: 7d55ce37ae482fec48e3398158161926)");let{senderIdentity:I,senderDomainAddr:v}=a;if(!I)throw new Error("(UNEXPECTED) senderIdentity falsy in senderIdentityInfo? if senderIdentityInfo is provided, both senderIdentity and senderDomainAddr must be truthy. (E: a3c17fae2978926d)");if(!v)throw new Error("(UNEXPECTED) senderDomainAddr falsy in senderIdentityInfo? if senderIdentityInfo is provided, both senderIdentity and senderDomainAddr must be truthy. (E: d288fae39b7d825c)")}let{senderIdentity:l,senderDomainAddr:f}=a??{},b=await ne(),m=await Ct();if(!m.next)throw new Error("(UNEXPECTED) updates$.next falsy? (E: d24cd82184aec130c89a320819b39126)");let y,g,w=new Promise((I,v)=>{y=I,g=v}),C=await Ma(),G=await o.createNewLocalSpace({opts:{allowCancel:!1,spaceName:C,getFnPrompt:o.getFnPrompt,logalot:A}});if(!G)throw new Error("Failed to create temp space (E: 8f4e2f3d6c1b4b1a8f4e2f3d6c1b4b1a)");await G.initialized;let T=h(async()=>{},"cleanup");return(async()=>{try{let I=e?e.map(S=>p({ibGib:S})):void 0;t.setOptionalOpts({sagaId:b,senderIdentity:l,senderDomainAddr:f,fnSenderSecret:s,sessionConnectPoolConfig:this.defaultSessionConnectPoolConfig(),sessionSyncPoolConfig:this.defaultSessionSyncPoolConfig(),targetAddrs:I}),await t.establishSessionIdentity(),await t.connect({sagaId:b});let{initFrame:v,initDomainGraph:_}=await this.createInitFrame({sagaId:b,domainIbGibs:e,conflictStrategy:i,metaspace:o,localSpace:c,tempSpace:G,peer:t});if(await this.executeSagaLoop({initFrame:v,initDomainGraph:_,peer:t,updates$:m,localSpace:c,tempSpace:G,metaspace:o}),y(),!m.complete)throw new Error("(UNEXPECTED) updates$.complete falsy? (E: d24cd82184aec130c89a320819b39126)");m.complete()}catch(I){if(console.error(`${d} ${u(I)}`),g(I),!m.error)throw new Error("(UNEXPECTED) updates$.error falsy? (E: 392ce77c073272e4c398c3e86583ce26)");m.error(I)}finally{await T()}})(),{sagaId:b,updates$:m,done:w}}async continueSync({sagaContext:t,mySpace:e,myTempSpace:a,metaspace:s,peer:i}){let o=`${this.lc}[${this.continueSync.name}]`;try{A&&console.log(`${o} starting... (I: f64e08bf77d1425378601f380384ec26)`);let c=await this.handleResponseSagaContext({sagaContext:t,mySpace:e,myTempSpace:a,metaspace:s});if(c){if(c.nextFrameInfo?.sagaComplete)return null}else return A&&console.log(`${o} Handler returned null (Saga End). (I: 43da8bb6c846b1fe7766332643be0e26)`),null;if(c.errorMsg)throw new Error(`Couldn't handle response saga context. errorMsg: ${c.errorMsg} (E: 7b41a183cf3cb58a5859c803800cf826)`);if(!c.nextFrameInfo)throw new Error("(UNEXPECTED) contextResult.nextFrameInfo falsy? (E: 5740542f5eb8ccb41dfec188d87c1e26)");let{frame:d,payloadIbGibsDomain:l}=c.nextFrameInfo,f=await this.createSyncSagaContext({sagaFrame:d,localSpace:e,payloadIbGibsDomain:l,metaspace:s,sessionIdentityAddr:t.rel8ns?.sessionIdentity?.[0],peer:i,skipSign:!0}),b=await Xe({context:f});if(b.length>0)throw new Error(`(UNEXPECTED) just created sync saga context () and there were immediateValidationErrors? immediateValidationErrors: ${b} (E: c120e8e0aa98673d685267a8a36e5826)`);return f}catch(c){throw console.error(`${o} ${u(c)}`),c}finally{A&&console.log(`${o} complete.`)}}async executeSagaLoop({initFrame:t,initDomainGraph:e,peer:a,updates$:s,localSpace:i,tempSpace:o,metaspace:c}){let d=`${this.lc}[${this.executeSagaLoop.name}]`,l=t,f=[];for(;l;){let b=new Map,m=`${d}[peer.payloadIbGibsDomainReceived$]`,y=await a.payloadIbGibsDomainReceived$.subscribe(Ta({next:h(async g=>{A&&console.log(`${m} next fired. (I: 2b4bdf502a38a90ba33d9711e7cb7826)`);let w=p({ibGib:g});Ft&&console.log(`${d}${we} DOMAIN STREAM RECEIVED <- observable: ${w} (I: d69ee80fcaece272483ec33b2d289826)`),b.set(w,g)},"next"),error:h(async g=>{Ea(g)?console.error(`${m} error fired. error: ${JSON.stringify(g.data)} (E: 01cc08ba05ad99682831174fd7c31a26)`):(console.dir(g),console.error(`${m} error fired. error: ${u(g)} (E: 73d3d61464e8e4ce4cd6efd8b9675826)`))},"error"),complete:h(async()=>{A&&console.log(`${m} complete fired. (I: a47218aa9e4433fdb97c068880a45826)`),await y.unsubscribe()},"complete")}));try{let g=await this.createSyncSagaContext({sagaFrame:l,payloadIbGibsDomain:f,localSpace:i,metaspace:c,sessionIdentityAddr:a.currentSessionIdentityAddr,peer:a});if(Ft){let S=f.map($=>p({ibGib:$}));console.log(`${d}${we} SENDER TRANSMIT -> peer.witness (I: 5b0081803698770f0bf64992220b312)`),console.log(`${d}${we} Context: ${p({ibGib:g})}`),console.log(`${d}${we} Frame: ${p({ibGib:l})}`),console.log(`${d}${we} DOMAIN Payloads (${S.length}): ${S.join(", ")||"(none)"}`)}s.next(g),a.setOptionalOpts({localSpace:i,localTempSpace:o});let w=await a.witness(g);if(!w)if(l)if((await ca({frameIbGib:l,space:i}))?.data?.stage===Y.commit){A&&console.log(`${d} Sender sent Commit. Peer returned no response. Saga Complete. (I: 26f9ee073858ca78b8284753368b5226)`),l=null;break}else throw new Error("(UNEXPECTED) responseCtx falsy and currentFrame truthy, but we're not in the commit stage? This may be expected ultimately, but atow I am not seeing this as being expected. (E: cc34498962bd370deeff351fac939f26)");else throw new Error("(UNEXPECTED) no response and currentFrame falsy? (E: 8d1085ea2f28cfc3f9c922649864a826)");if(!w.data)throw new Error("(UNEXPECTED) responseCtx.data falsy? (E: a969992bae53ab18a827ec58aec15826)");s.next(w);let C=await Xe({context:w});if(C.length>0)throw new Error(`contextAndSagaFrameValidationErrors: ${C} (E: 6eebe8e7fa437c00a8cde3ada3c66826)`);let G=await this.validateReturnContext({requestCtx:g,responseCtx:w,localSpace:i});if(G.length>0)throw new Error(`validateReturnContext errors: ${G.join(", ")} (E: cb8a023b9d0728cceb09fa3da0bb8226)`);let T=w.data[zt]||[];if(T.length>0&&(w.payloadIbGibsDomain=await this.pollForDomainPayloads({expectedAddrs:T,pollIntervalMs:20,domainPayloadsMap:b,tempSpace:o})),!w.sagaFrame)throw new Error("(UNEXPECTED) responseCtx.sagaFrame falsy? the Peer should have set this when it got the response back from the remote. (E: e650adadf9a2063ec6764a1e31d3d826)");if(Ft){let S=w.data?.["@payloadAddrsControl"]||[];console.log(`${d}${we} SENDER RECEIVED <- peer.witness (I: 3dc76a9744d89a4fc3e2f076c2be4826)`),console.log(`${d}${we} Response Context: ${p({ibGib:w})}`),console.log(`${d}${we} Response Saga Frame: ${p({ibGib:w.sagaFrame})}`),console.log(`${d}${we} CONTROL Payloads (${S.length}): ${S.join(", ")||"(none)"}`),console.log(`${d}${we} DOMAIN Payloads (${T.length}): ${T.join(", ")||"(none)"}`)}let I=await this.handleResponseSagaContext({sagaContext:w,initDomainGraph:e,mySpace:i,myTempSpace:o,metaspace:c});if(I){if(I.nextFrameInfo?.sagaComplete){A&&console.log(`${d} Handler returned null (Saga End). (I: 123bf9e7dca8886de72553a8d4f29e26)`);break}}else{console.error(`${d} NAG ERROR (DOES NOT THROW): does this ever hit now? (E: e04d02efc2a8e72a88b79f1f0f95ca26)`);break}if(I.errorMsg)throw new Error(`Couldn't handle response saga context. errorMsg: ${I.errorMsg} (E: c948e81d513b2a0eb8b8afa878edc626)`);if(!I.nextFrameInfo)throw new Error("(UNEXPECTED) contextResult.nextFrameInfo falsy? (E: c287a82e823e662a77923278e2418826)");let{frame:v,payloadIbGibsDomain:_}=I.nextFrameInfo;if(l=v,f=[..._||[]],Ft){let S=f.map($=>p({ibGib:$}));console.log(`${d}${we} HANDLER RESULT -> next iteration (I: 6b0d88c4c28857ccd812381515bd7826)`),console.log(`${d}${we} Next Frame: ${p({ibGib:l})}`),console.log(`${d}${we} DOMAIN for next (${S.length}): ${S.join(", ")||"(none)"}`)}}finally{await y.unsubscribe()}}}async createSyncSagaContext({sagaFrame:t,payloadIbGibsDomain:e,metaspace:a,localSpace:s,sessionIdentityAddr:i,peer:o,skipSign:c}){let d=`[${this.createSyncSagaContext.name}]`;try{if(A&&console.log(`${d} starting... (I: 6b87bee313e811d1d2fc90e87fbec826)`),!t.data)throw new Error("(UNEXPECTED) sagaFrame.data falsy? (E: 04c49b4cccba6842a8b52e4c6f570726)");if(!t.data.n&&t.data.n!==0)throw new Error("(UNEXPECTED) sagaFrame.data.n falsy and not 0? (E: 45b508da64a8b28428b11765d684b826)");let l=new Date,f=Ue(l),b=l.getMilliseconds(),m={timestamp:f,timestampMs:b,sagaN:t.data.n},y=e?e?.map(_=>p({ibGib:_})):void 0;y&&y.length>0&&(m[zt]=y);let g={sagaFrame:[p({ibGib:t})]},w;if(i){i=await a.getLatestAddr({addr:i,space:s})??i;let _=await re({addr:i,space:s});if(_.success&&_.ibGibs?.length===1)w=_.ibGibs[0],g.sessionIdentity=[i];else{debugger;throw new Error(`Couldn't get sessionIdentityAddr (${i}) in space: ${s.ib} (E: 5c29e80d68dbd1749866c358be093826)`)}}let C=await ra({data:m}),G=await V.stone({parentPrimitiveIb:Pt,ib:C,data:m,rel8ns:g}),T=p({ibGib:G}),I;w&&!c&&(I=await o.signContext({contextAddr:T})),await Ie({ibGib:G,space:s}),await Me({ibGib:G,space:s,fnBroadcast:void 0}),G.sagaFrame=t;let{msgStones:v}=await Bt({sagaIbGib:t,localSpace:s});if(v.length!==1)throw new Error("(UNEXPECTED) msgStones.length !== 1 inside createSyncSagaContext? (E: a98165cf46ab4e82b7bd5e45a273b826)");return G.sagaFrameMsg=v[0],e&&e.length>0&&(G.payloadIbGibsDomain=e),I&&(G.signedSessionIdentity=I),G}catch(l){throw console.error(`${d} ${u(l)}`),l}finally{A&&console.log(`${d} complete.`)}}async getKnowledgeMap({space:t,metaspace:e,domainIbGibs:a,tjpAddrs:s}){let i=`${this.lc}[${this.getKnowledgeMap.name}]`;try{if(A&&console.log(`${i} starting... (I: e184f8a7818666febfbbd2d841ed3826)`),!(a&&a.length>0)&&!(s&&s.length>0))throw new Error("(UNEXPECTED) domainIbGibs and tjpAddrs falsy/empty? we need one or the other (E: f674285111c8648398cd79d8c08ec826)");if(a&&a.length>0&&s&&s.length>0)throw new Error("(UNEXPECTED) both domainIbGibs and tjpAddrs truthy? only pass in one or the other. (E: f674285111c8648398cd79d8c08ec826)");let o=[];if(s)o=s;else if(a&&a.length>0){let{mapWithTjp_YesDna:d,mapWithTjp_NoDna:l}=nt({ibGibs:a}),f=[...Object.values(d),...Object.values(l)],b=qe({ibGibs:f});o=Object.keys(b)}else return console.warn(`${i} No domainIbGibs or tjpAddrs provided. Returning empty Knowledge. (W: 2b0e115e7578a83d1b26f7c726bf9426)`),{};if(o.length===0)return{};let c=await at({space:t,tjpAddrs:o});if(!c.data||!c.data.latestAddrsMap)throw new Error(`${i} Failed to get latest addrs. (E: 7d395940c0e1419165c5196c39c6c826)`);return c.data.latestAddrsMap}catch(o){throw console.error(`${i} ${u(o)}`),o}finally{A&&console.log(`${i} complete.`)}}async analyzeDomainIbGibs({domainIbGibs:t,space:e}){let a=`${this.lc}[${this.analyzeDomainIbGibs.name}]`;if(t.length===0)throw new Error("invalid domainIbGibs. expected at least one, but array is empty. (E: 820a719bcac5a16878a2af697113b826)");let s=await ut({ibGibs:t,live:!0,space:e}),i=s&&Object.keys(s).length>0;A&&console.log(`${a} graph generated. nodes: ${i?Object.keys(s).length:0}`);let o=i?Object.values(s):[],{mapWithTjp_YesDna:c,mapWithTjp_NoDna:d,mapWithoutTjps:l}=nt({ibGibs:o}),f=Object.values(l),b=[...Object.values(c),...Object.values(d)],m=qe({ibGibs:b}),y=this.sortTimelinesTopologically(m);return{stones:f,timelinesMap:m,topologicallySortedTjpAddrs:y,fullGraph:s}}async createInitFrame({sagaId:t,domainIbGibs:e,conflictStrategy:a,metaspace:s,localSpace:i,tempSpace:o,peer:c}){let d=`${this.lc}[${this.createInitFrame.name}]`;try{A&&console.log(`${d} starting... (I: 551af8b411ae9be712ce3358d43ee726)`);let l=await this.analyzeDomainIbGibs({domainIbGibs:e,space:i}),{timelinesMap:f,fullGraph:b,stones:m}=l;await Ie({ibGibs:Object.values(b),space:o});let y={};Object.keys(f).forEach(G=>{let I=f[G].at(-1);y[G]=p({ibGib:I})});let g={sagaId:t,stage:Y.init,knowledgeMap:y,mode:Jt.sync,stones:m.map(G=>p({ibGib:G}))};A&&(console.log(`${d} SyncStage.init: ${Y.init}, SyncStage.commit: ${Y.commit}`),console.log(`${d} initData.stage: ${g.stage}`));let w=await this.createSyncMsgStone({data:g,localSpace:i,metaspace:s}),C=await this.evolveSyncSagaIbGib({msgStones:[w],conflictStrategy:a,metaspace:s,localSpace:i,sessionIdentity:c.currentSessionIdentity});return A&&console.log(`${d} sagaFrame (init): ${z(C)} (I: b3d6a8be69248f18713cc3073cb08626)`),{initFrame:C,initDomainGraph:b}}catch(l){throw console.error(`${d} ${u(l)}`),l}finally{A&&console.log(`${d} complete.`)}}async validateReturnContext({requestCtx:t,responseCtx:e,localSpace:a}){let s=`${this.lc}[${this.validateReturnContext.name}]`,i=[];try{if(t.sagaFrame&&e.sagaFrame){let d=p({ibGib:t.sagaFrame}),l=p({ibGib:e.sagaFrame});await it({olderAddr:d,newerAddr:l,space:a})||i.push(`Response saga frame (${l}) is not a valid continuation of request saga frame (${d}). (E: 2c85e8d97318ff24ac8a02bd3a068226)`)}else i.push("Missing sagaFrame on requestCtx or responseCtx. (E: b65c68ff891000ddca8d22384a088226)");let o=t.signedSessionIdentity?p({ibGib:t.signedSessionIdentity}):t.rel8ns?.sessionIdentity?.[0],c=e.rel8ns?.sessionIdentity?.[0];o!==c&&i.push(`Session identity mismatch. Expected ${o}, got ${c}. (E: ab98716bca88d2243cc822187768226)`)}catch(o){i.push(`Error during validateReturnContext: ${u(o)} (E: da878e1239aa88ee27bdfca005c28226)`)}return i}async pollForDomainPayloads({expectedAddrs:t,pollIntervalMs:e,domainPayloadsMap:a,tempSpace:s}){let i=`${this.lc}[${this.pollForDomainPayloads.name}]`;try{A&&console.log(`${i} starting... (I: 26dce86bfca572939885798802d6e926)`);let o=[],c=[...new Set(t)],d=[...c],l=Date.now(),f=5*60*1e3;for(;d.length>0;){if(Date.now()-l>f)throw new Error(`Timeout waiting for payloads: ${d.join(", ")} (E: 46e1683c9578095261aaf798bd5e1826)`);let b=[],m=[];for(let y of d)a.has(y)?(m.push(a.get(y)),a.delete(y)):b.push(y);m.length>0&&(await Ie({space:s,ibGibs:m}),m.forEach(y=>o.push(y))),d=b,d.length>0&&await ma(e)}if(c.length!==o.length)throw new Error("(UNEXPECTED) uniqueExpectedAddrs.length !== resultDomainPayloads.length? at this point, we expect all of the payload ibgibs to have been received. (E: 03749a7478c4b8b28bfc86951887a826)");return o}catch(o){throw console.error(`${i} ${u(o)}`),o}finally{A&&console.log(`${i} complete.`)}}async handleResponseSagaContext({sagaContext:t,initDomainGraph:e,mySpace:a,myTempSpace:s,metaspace:i}){let o=`${this.lc}[${this.handleResponseSagaContext.name}]`;try{A&&console.log(`${o} starting... (I: 5deec8a1f7a6d263c88cd458ad990826)`);let c=t.sagaFrame;if(!c.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 71b938adf1d87c2527bfd4f86dfd0826)");A&&console.log(`${o} sagaIbGib: ${z(c)} (I: 1b99d87d262e9d18d8a607a80b1a0126)`);let{stage:d,messageData:l}=await this.getStageAndPayloadFromFrame({sagaFrame:c,space:a});A&&console.log(`${o} handling frame stage: ${d}`);let f;switch(d){case Y.init:f=await this.handleInitFrame({sagaIbGib:c,messageData:l,metaspace:i,mySpace:a,myTempSpace:s});break;case Y.ack:if(!e)throw new Error("(UNEXPECTED) initDomainGraph falsy on the sender? (E: a3d758ad954829aba88663188eafc826)");f=await this.handleAckFrame({sagaContext:t,sagaIbGib:c,initDomainGraph:e,metaspace:i,mySpace:a,myTempSpace:s});break;case Y.delta:f=await this.handleDeltaFrame({sagaContext:t,sagaIbGib:c,metaspace:i,mySpace:a,myTempSpace:s});break;case Y.commit:A&&console.log(`${o}[${dt({sagaFrame:c})}] mySpace.ib: ${a.ib} (I: 5b270996d848907238d817fffa64a126)`),f=await this.handleCommitFrame({sagaIbGib:c,metaspace:i,mySpace:a,myTempSpace:s});break;default:throw new Error(`${o} (UNEXPECTED) Unknown sync stage: ${d} (E: 9c2b4c8a6d34469f8263544710183355)`)}return A&&console.log(`${o} nextFrameInfo: ${f?z(f):"undefined"} (I: a8ad281ca8e89385686d18327a105726)`),{errorMsg:void 0,nextFrameInfo:f}}catch(c){let d=`${o} ${u(c)}`;return console.error(d),{errorMsg:d}}finally{A&&console.log(`${o} complete.`)}}async handleInitFrame({sagaIbGib:t,messageData:e,mySpace:a,myTempSpace:s,metaspace:i}){let o=`${this.lc}[${this.handleInitFrame.name}]`;try{A&&console.log(`${o} starting... (I: 9d88dcad0408c029e898a4bcf3b08426)`),A&&console.log(`${o} [TEST DEBUG] Receiver mySpace: ${a.ib}`);let c=e;if(c.stage!==Y.init)throw new Error(`${o} Invalid init frame: initData.stage !== SyncStage.init (E: c91be82970e4decc58f56bf8fc1ffc26)`);if(!c||!c.knowledgeMap)throw new Error(`${o} Invalid init frame: missing knowledgeMap (E: ed02c869e028d2d06841b9c7f80f2826)`);let d=t.data.conflictStrategy||Ee.abort,l=[],f=[],b=[],m=c.stones||[];if(m.length>0){A&&console.log(`${o} processing stones: ${m.length}`);let $=(await re({space:a,addrs:m})).rawResultIbGib;if(!$.data)throw new Error("(UNEXPECTED) rawResultIbGib.data falsy? (E: f3c40b492adc02c3f480b998fc7a5926)");let B=$.data.addrsNotFound;B&&B.length>0&&(A&&console.log(`${o} stones missing (requesting): ${B.length}`),B.forEach(P=>{f.some(N=>N.addr===P)||f.push({addr:P})}))}let y=c.knowledgeMap;A&&console.log(`${o} senderKnowledge: ${z(y)} (I: 9f957862356dfeae183c200854e86e26)`);let g=Object.keys(y);A&&console.log(`${o} [TEST DEBUG] senderTjpAddrs: ${JSON.stringify(g)}`),A&&console.log(`${o} senderTjpAddrs: ${z(g)} (I: 86ea4c53db0dc184c8b253386c402126)`);let w={};if(g.length>0){let S=await at({space:a,tjpAddrs:g});if(!S.data)throw new Error("(UNEXPECTED) resGetLatestAddrs.data falsy? (E: b180d813c088042b38e1e02e06a16926)");if(!S.data.latestAddrsMap)throw new Error("(UNEXPECTED) resGetLatestAddrs.data.latestAddrsMap falsy? (E: 16bc386dd51d0ff53a49620b1e641826)");w=S.data.latestAddrsMap,A&&console.log(`${o} [TEST DEBUG] receiverLatestAddrsMap: ${JSON.stringify(w)}`),A&&console.log(`${o} receiverLatestAddrsMap: ${z(w)} (I: 980975642cbccd8018cf0cd808d30826)`)}for(let S of g){let $=y[S],B=w[S];if(!B){A&&console.log(`${o} [TEST DEBUG] Missing receiver timeline for TJP: ${S}. Requesting remoteAddr: ${$}`),f.push({addr:$,tjpAddr:S});continue}if(B===$){A&&console.log(`${o} [TEST DEBUG] TJP ${S}: Synced (receiverTipAddr === remoteAddr)`);continue}if(A&&console.log(`${o} [TEST DEBUG] TJP ${S}: receiverTipAddr=${B}, remoteAddr=${$} - checking for divergence...`),await it({olderAddr:$,newerAddr:B,space:a})){A&&console.log(`${o} [TEST DEBUG] TJP ${S}: Remote (sender) is in past - offering push`);let N=await yt({ibGibAddr:B,live:!1,latestCommonFrameAddr:$,space:a});b.push({tjpAddr:S,addrs:Object.keys(N)})}else{let N=!1;try{N=await it({olderAddr:B,newerAddr:$,space:a})}catch(k){A&&console.log(`${o} expected error if we don't have remote. verbose logging error though: ${u(k)} (I: 47ea08d0b418cf4aa8a502a7bcb80826)`)}if(N)A&&console.log(`${o} [TEST DEBUG] TJP ${S}: receiver is in past - requesting delta`),f.push({addr:$,tjpAddr:S,latestAddrAlreadyHave:B});else if(A&&console.log(`${o} [TEST DEBUG] TJP ${S}: DIVERGENCE DETECTED! conflictStrategy=${d}`),d==="abort")l.push({tjpAddr:S,receiverTipAddr:B,senderTipAddr:$,receiverKnowledgeTimelineAddrs:[],reason:"divergence",terminal:!0});else if(d===Ee.optimisticWithLCS){let k=await re({addr:B,space:a});if(!k.success||k.ibGibs?.length!==1)throw new Error(`couldn't get local tip (${B}) from space (${a.ib}). errorMsg: ${k.errorMsg??"[unknown error (E: b3c3d823276300aa384ebdba4a8eb826)]"} (E: 83cb88a767e22bbda99c6788bec50526)`);let D=k.ibGibs[0],O=await Ca({timeline:D,space:a,metaspace:i});l.push({tjpAddr:S,receiverTipAddr:B,senderTipAddr:$,receiverKnowledgeTimelineAddrs:[...O,B],reason:"divergence",terminal:!1})}else throw new Error(`${o} Unsupported conflict strategy: ${d}. Only these currently implemented: ${Ze} (E: 8f12384180f8a718a983a749fe0adf26)`)}}if(l.some(S=>S.terminal))throw A&&console.warn(`${o} ABORTING Sync Saga due to terminal conflicts: ${JSON.stringify(l)}`),new Error(`the saga has terminal conflicts. conflicts: ${JSON.stringify(l)} (E: f2edbe93cc07a63b38bfc013d2213b26)`);if(!t.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 24203af4600fb226ae6c1afbde442826)");let T={sagaId:t.data.uuid,stage:Y.ack,deltaRequestAddrInfos:f,pushOfferInfos:b};l?.length>0&&(T.conflicts=l);let I=await this.createSyncMsgStone({data:T,localSpace:a,metaspace:i});A&&console.log(`${o} ackStone created: ${z(I)} (I: 313708132dd53ff946befb7833657826)`);let v=await this.evolveSyncSagaIbGib({prevSagaIbGib:t,msgStones:[I],localSpace:a,metaspace:i}),_;if(b.length>0){let S=[];_=[];let $=b.flatMap(D=>D.addrs),B=await re({addrs:$,space:a}),P=B.rawResultIbGib?.data;if(!P)throw new Error("(UNEXPECTED) resGet.rawResultIbGib.data falsy? (E: 1a2cc8cb99a1ffa60837e45a8229b826)");let N=P.addrsNotFound??[],k=P.addrsErrored??[];if(B.ibGibs&&B.ibGibs.length===$.length)B.ibGibs.forEach(D=>{_.push(D)});else if(B.ibGibs&&B.ibGibs.length>0)if(B.ibGibs.forEach(O=>{_.push(O)}),_.length+N.length+k.length===$.length)N.forEach(O=>S.push(O)),k.forEach(O=>S.push(O));else throw N.length===0&&k.length===0?new Error("(UNEXPECTED) found some but not all addrs but addrsNotFound and addrsErrored both empty? (E: ef1b2cf5bab8de2298ec507abe04e826)"):new Error("(UNEXPECTED) found some but not all addrs but addrsNotFound and addrsErrored don't contain the addrs not found? (E: ae9e015109f8c3c3a813da584cd98826)");else console.warn(`${o} we were expecting all domainAddrs in mySpace (${a.ib}) but we couldn't get all of them. addrsNotFound: ${N??[]}. addrsErrored: ${k??[]}. Trying temp space (${s.ib}). (W: f61908e264f8dddd2e3fb9084463d826)`),$.forEach(D=>S.push(D));if(S.length>0){A&&console.log(`${o} couldn't get all addrs in mySpace (${a.ib}). searchSecondSpaceAddrs: ${S} (I: 233fd954dbd84e51bca02fa8eed5f826)`);let D=await re({addrs:S,space:s});if(D.success&&D.ibGibs&&D.ibGibs.length===S.length)D.ibGibs.forEach(O=>_.push(O));else{D.ibGibs?.forEach(F=>_.push(F));let O=$.filter(F=>!_.map(J=>p({ibGib:J})).includes(F));throw new Error(`couldn't get some or all of addrs from either mySpace (${a.ib}) or myTempSpace (${s.ib}). addrsFailed: ${O} (E: 1394d412c4ffa4dd085f269b43338826)`)}}}return{frame:v,payloadIbGibsDomain:_}}catch(c){throw console.error(`${o} ${u(c)}`),c}finally{A&&console.log(`${o} complete.`)}}async handleAckFrame({sagaContext:t,sagaIbGib:e,initDomainGraph:a,mySpace:s,myTempSpace:i,metaspace:o}){let c=`${this.lc}[${this.handleAckFrame.name}]`;try{A&&console.log(`${c} starting... (I: 605b6860e898267a5b50c6d85704be26)`);let{messageData:d}=await this.getStageAndPayloadFromFrame({sagaFrame:e,space:s}),l=d,f=!0;if(!l)throw new Error(`${c} ackData falsy (E: 3b8415edc876084c88a25b98e2d55826)`);if(l.stage!==Y.ack)throw new Error(`${c} Invalid ack frame: ackData.stage !== SyncStage.ack (E: 2e8b0a94b5954a66a6a1a7a0b3f5b7a1)`);if(A&&console.log(`${c} ackData: ${z(l)} (I: b817c5571c5e916fe8f90b892b3e8e26)`),!e.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: e3f2e8f162484859787651b85c011826)");let b=l.conflicts?ht(l.conflicts):[];A&&console.log(`${c} [CONFLICT DEBUG] Received conflicts from Ack: ${b.length}`),A&&b.length>0&&console.log(`${c} [CONFLICT DEBUG] Conflicts detail: ${JSON.stringify(b,null,2)}`);let m=b.filter(S=>S.terminal);if(m.length>0)throw A&&console.warn(`${c} Received terminal conflicts from Ack: ${JSON.stringify(m)}`),new Error(`${c} Peer reported terminal conflicts. (E: 23a0096ee05a2ccfa89334e8f156b426)`);let y=[],g=[];if(b.length>0){A&&console.log(`${c} [CONFLICT DEBUG] Processing ${b.length} non-terminal conflicts`);for(let S of b){let{receiverTipAddr:$,reason:B,senderTipAddr:P,terminal:N,receiverKnowledgeTimelineAddrs:k,tjpAddr:D}=S;if(N)throw new Error("(UNEXPECTED) conflict.terminal truthy? We expect this to already throw/abort the saga before this point in execution. (E: b42e982edca8b1156765de38f9e74626)");let O=a[P];if(!O)throw new Error(`(UNEXPECTED) senderTipIbGib falsy? initDomainGraph should have had the senderTipAddr (${P}) that was included in the ack frame conflicts. tjpAddr: ${D}. reason: ${B} (E: 3bd80f2054a924be98e6a7421bff4626)`);let{headIbGib:F,orderedPastIbGibs:J}=await Ga({timeline:O,getLatest:!0,metaspace:o,space:s}),de=J.map(W=>p({ibGib:W})),Q=p({ibGib:F});if(S.senderKnowledgeTimelineAddrs=[...de,Q],F.gib!==O.gib&&(S.senderTipAddr=Q,!Object.keys(a).includes(Q))){let W=await ut({ibGibAddr:Q,live:!0,space:s}),Ce=Object.keys(W);for(let Be of Ce)a[Be]||(a[Be]=W[Be])}let Ge=k.findLast(W=>de.includes(W));if(!Ge)throw new Error(`(UNEXPECTED) no latestCommonFrameAddr in the conflicts.receiverKnowledgeTimelineAddrs (${k.join(`
|
|
11
|
-
`)})? This would mean that it doesn't even have the tjpAddr (${D}). So what are we doing here? (E: 8931d1bdd6d8e100bf55f7c8a6924826)`);let pe=await yt({ibGibAddr:Q,live:!0,latestCommonFrameAddr:Ge,space:s}),me=[];if(Object.keys(pe).forEach(W=>{me.push(W);let Ce=pe[W];y.push(Ce)}),Ge===$)A&&console.log(`${c} [CONFLICT DEBUG] TJP ${D}: Fast-forward detected (receiver behind sender). Excluding from active conflicts and sending delta payload.`);else{if(S.accretivePayloadAddrs)throw new Error("(UNEXPECTED) conflict.accretivePayloadAddrs already truthy? This is expected to be falsy at this point in the sync. (E: 6b6b1846779867849cbde208f4374326)");S.accretivePayloadAddrs=me,g.push(S)}}g.length>0?f=!1:f=!0,A&&console.log(`${c} [CONFLICT DEBUG] Finished processing ${b.length} conflicts. Active (divergent) conflicts: ${g.length}. outgoingPayloadIbGibsDomain_conflicts.length (total outgoing payload ibgibs for ALL conflicts): ${y.length}`)}else A&&console.log(`${c} [CONFLICT DEBUG] No optimistic conflicts to process`);let w=await this.getPayloadsForRequestedInfos({deltaRequestAddrInfos:l.deltaRequestAddrInfos||[],mySpace:s}),C=[...y,...w],G;C.length===0?C=void 0:G=C.map(S=>p({ibGib:S}));let T={sagaId:e.data.uuid,stage:Y.delta,conflicts:g,payloadAddrsDomain:G,deltaRequestAddrInfos:void 0,proposeCommit:f},I;A&&console.log(`${c} Creating Delta Stone. Data stage: ${T.stage}`);let v=await this.createSyncMsgStone({data:T,rel8ns:I,localSpace:s,metaspace:o}),_=await this.evolveSyncSagaIbGib({prevSagaIbGib:e,msgStones:[v],localSpace:s,metaspace:o});return A&&console.log(`${c} Delta Frame created. Rel8ns: ${JSON.stringify(_.rel8ns)}`),{frame:_,payloadIbGibsDomain:C}}catch(d){throw console.error(`${c} ${u(d)}`),d}finally{A&&console.log(`${c} complete.`)}}async handleDeltaFrame({sagaContext:t,sagaIbGib:e,mySpace:a,myTempSpace:s,metaspace:i}){let o=`${this.lc}[${this.handleDeltaFrame.name}]`;try{A&&console.log(`${o} starting... (I: a1d0a85eb4189466f86dfd61e3df2626)`);let{messageData:c}=await this.getStageAndPayloadFromFrame({sagaFrame:e,space:a}),d=c;if(!e.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 8874e83e1a1b307938ee832862ec5826)");if(!e.data.conflictStrategy)throw new Error("(UNEXPECTED) sagaIbGib.data.conflictStrategy falsy? (E: 636205ab5b78fcb31d0cb1880770c826)");if(!d)throw new Error(`${o} deltaData falsy (E: 7c28c8d8f08a4421b8344e6727271421)`);if(d.stage!==Y.delta)throw new Error(`${o} Invalid delta frame: deltaData.stage !== SyncStage.delta (E: 0c28c8d8f08a4421b8344e6727271421)`);A&&console.log(`${o} deltaData: ${z(d)} (I: a76008681df458cfbcdc4848f825a826)`),A&&console.log(`${o} [CONFLICT DEBUG] deltaData.payloadAddrsDomain count: ${d.payloadAddrsDomain?.length||0}`);let{conflictStrategy:l}=e.data,{deltaRequestAddrInfos:f,payloadAddrsDomain:b,proposeCommit:m}=d,y=d.proposeCommit??!1,g=t.payloadIbGibsDomain??[];A&&console.log(`${o} [CONFLICT DEBUG] Fulfilling ${(d.deltaRequestAddrInfos||[]).length} peer requests`);let w=await this.getPayloadsForRequestedInfos({deltaRequestAddrInfos:d.deltaRequestAddrInfos||[],mySpace:a});A&&console.log(`${o} [CONFLICT DEBUG] Outgoing payload size (with deps): ${w.length}`);let C=d.conflicts?ht(d.conflicts):[],G=C.filter(_=>!_.resolved);if(G.length>0){if(l!==Ee.optimisticWithLCS)throw new Error(`(UNEXPECTED) conflictStrategy (${l}) is not ${Ee.optimisticWithLCS}? right now, this is the only one we've implemented. (E: ba3e08d92a66b24075016208a0f83226)`);for(let _ of G){let S={};for(let q of _.accretivePayloadAddrs??[]){let Ae=g.find(Ne=>p({ibGib:Ne})===q);if(!Ae)throw new Error("(UNEXPECTED) conflictPayloadIbGib falsy? At this time in dev (01/27/2026), we're expecting this to be populated because we're only expecting one iteration of conflict resolution. If dev is later, this may no longer be the case. (E: b197417e762639089827aa3edaece826)");S[q]=Ae}_.latestCommonFrameAddr;let{receiverKnowledgeTimelineAddrs:$,senderKnowledgeTimelineAddrs:B,reason:P,receiverTipAddr:N,senderTipAddr:k,tjpAddr:D}=_;if(!B)throw new Error("(UNEXPECTED) senderKnowledgeTimelineAddrs falsy? (E: 2a608892d11bd848e8f0c7a8d676d826)");let O=await ut({ibGibAddrs:[N],live:!0,space:a}),F=Object.values(O);await Dt({ibGibs:F,space:s});for(let q of $){let Ae=O[q];await Me({ibGib:Ae,space:s})}let J=B.findLast(q=>$.includes(q));if(!J)throw new Error("(UNEXPECTED) latestCommonFrameAddr falsy? how we can have a conflict without a common point in history? (E: 53de0a181838b3e5bf98d0887994b826)");let de=await yt({ibGibAddr:_.receiverTipAddr,latestCommonFrameAddr:J,live:!0,space:a});Object.values(de).forEach(q=>w.push(q));let Q=await ea({conflictStrategy:l,timelineAddrsA:B,timelineAddrsB:$,latestCommonFrameAddr:J,ibGibReadCache:S,space:s}),{dnasCreatedInGraft:Ge,dnasReplayed:pe,intermediateIbGibsCreatedInGraft:me,newGraftTip:Se,graftInfoCreated:W}=Q;if(_.createdDnaAddrs=Ge.map(q=>p({ibGib:q})),_.replayedDnaAddrs=pe.map(q=>p({ibGib:q})),_.createdDomainAddrs=[...me.map(q=>p({ibGib:q})),p({ibGib:W}),p({ibGib:Se})],!Se.rel8ns)throw new Error("(UNEXPECTED) newGraftTip.rel8ns falsy? we expect this to have graftinfo rel8ns, let alone dna (E: 718788f5a44e815618ac1ba621c8a826)");let Ce=Se.rel8ns[Te];if(!Ce||Ce.length===0)throw new Error(`(UNEXPECTED) newGraftTip.rel8ns.${Te} falsy/empty? we expect to always have graft info attached to timelines that are grafted. (E: 45abf31654c8aa517df4d0882b996826)`);_.graftInfoAddr=Ce.at(-1);let Be=[Ge,pe,me,[W,Se]];for(let q of Be.flat())if((await je({ibGib:q})??[]).length>0){console.dir(q);debugger;console.log(z(q))}_.accretivePayloadAddrs??=[],Be.forEach(q=>q.forEach(Ae=>{let Ne=p({ibGib:Ae});_.accretivePayloadAddrs.includes(Ne)||_.accretivePayloadAddrs.push(Ne),w.some(tt=>p({ibGib:tt})===Ne)||w.push(Ae)})),_.resolved=!0}}let T=[],I=w.length>0,v=T.length>0;if(I||v){let _={sagaId:d.sagaId,stage:Y.delta,payloadAddrsDomain:w.map(B=>p({ibGib:B})),requests:v?T:void 0,conflicts:C},S=await this.createSyncMsgStone({data:_,localSpace:a,metaspace:i});return{frame:await this.evolveSyncSagaIbGib({prevSagaIbGib:e,msgStones:[S],localSpace:a,metaspace:i}),payloadIbGibsDomain:w}}else if(y){let _=await ct({sagaIbGib:e,space:a}),S=await Lt({history:_});return S.length>0?{frame:await this.createCommitFrame({sagaIbGib:e,errors:S,metaspace:i,mySpace:a})}:(await this.executeLocalCommit({sagaHistory:_,deltaFrame:e,localTempSpace:s,localSpace:a,metaspace:i}),{frame:await this.createCommitFrame({sagaIbGib:e,errors:void 0,metaspace:i,mySpace:a})})}else{let _={sagaId:d.sagaId,stage:Y.delta,proposeCommit:!0,conflicts:C},S=await this.createSyncMsgStone({data:_,localSpace:a,metaspace:i}),$=await this.evolveSyncSagaIbGib({prevSagaIbGib:e,msgStones:[S],localSpace:a,metaspace:i});if(d.proposeCommit){A&&console.log(`${o} Peer proposed commit. Accepting & Committing.`);let B={sagaId:d.sagaId,stage:Y.commit,success:!0},P=await this.createSyncMsgStone({data:B,localSpace:a,metaspace:i});return{frame:await this.evolveSyncSagaIbGib({prevSagaIbGib:$,msgStones:[P],localSpace:a,metaspace:i})}}return{frame:$,payloadIbGibsDomain:w}}}catch(c){throw console.error(`${o} ${u(c)}`),c}finally{A&&console.log(`${o} complete.`)}}async executeLocalCommit({deltaFrame:t,commitFrame:e,sagaHistory:a,metaspace:s,localSpace:i,localTempSpace:o}){let c=`${this.lc}[${this.executeLocalCommit.name}]`;try{if(A&&console.log(`${c} starting... (I: 6734980446b86a63c1af6e2e206de826)`),!t&&!e)throw new Error("(UNEXPECTED) !deltaFrame && !commitFrame? we're expecting to execute the commit based off of EITHER a delta OR a commit frame. (E: 10cae319a2685a672866f5583514e326)");if(t&&e)throw new Error("(UNEXPECTED) deltaFrame && commitFrame? we're expecting to execute the commit based off of EITHER a delta OR a commit frame. (E: b9037b1ed6d8684ac8a5d01328bad826)");let l=!!t?t:e;if(!l)throw new Error("(UNEXPECTED) !currentFrame? something wrong with my logic. (E: 4ec0ce6625cc1d677bc902c839ca1a26)");let f=dt({sagaFrame:l});if(A&&console.log(`${c} currentFrameOrigin: ${f} (I: 3add8f8390c89743ae554bd3cc60b826)`),!l.data)throw new Error("(UNEXPECTED) currentFrame.data falsy? (E: a8be68d48668d93d992d793834823826)");let b=[],m=h(I=>{b.includes(I)||b.push(I)},"fnAddPayloadAddr"),y=a.filter(I=>{let v=dt({sagaFrame:I.sagaIbGib});return f!==v});a.filter(I=>{let v=dt({sagaFrame:I.sagaIbGib});return f===v}).forEach(I=>{if(!I.sagaIbGib.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 34d7f8cdee14717ce828878d98f89826)");I.msgStones.forEach(v=>{if(!v.data)throw new Error("(UNEXPECTED) msgStone.data falsy? (E: 21406101f91847514cc759c8a7382f26)");if(v.data.stage===Y.ack){let _=v.data;_.pushOfferInfos&&_.pushOfferInfos.length>0&&_.pushOfferInfos.forEach(S=>{S.addrs.forEach($=>m($))})}else if(v.data.stage===Y.delta){let _=v.data;_.payloadAddrsDomain&&_.payloadAddrsDomain.length>0&&_.payloadAddrsDomain.forEach(S=>m(S))}})}),A&&console.log(`${c}[${f}] allPayloadAddrsDomainTransferred: ${b.length>0?b.join(", "):"none"} (I: a1950eb3ca95bdc9ec18a4b8823e9826)`);let w=[];if(b.length>0){let I=await re({addrs:b,space:o});if(I.success&&I.ibGibs&&I.ibGibs.length===b.length)w=I.ibGibs.concat();else{if(!I.rawResultIbGib)throw new Error("(UNEXPECTED) !resGetAllTransferred.rawResultIbGib falsy? (E: dc6cf8729668f4fbe8c024f887d97a26)");let{addrsNotFound:v,addrsErrored:_,errors:S}=I.rawResultIbGib.data;throw new Error(`(UNEXPECTED) we couldn't get all addrs transferred throughout the saga from the tempspace (${o.ib})? addrsNotFound: ${v??[]}. addrsErrored: ${_??[]}. errors: ${S??[]}(E: 222e341e634862b4d88ae7282584d826)`)}}let C=[],G=await kt({sagaHistory:a});if(G)for(let I of G){if(!I.resolved)throw new Error("(UNEXPECTED) finalConflict.resolved falsy? right now, we're expecting to resolve all conflicts. (E: a40ca8f1f54665407892ec21123a4f26)");if(!I.graftInfoAddr)throw new Error("(UNEXPECTED) finalConflict resolved but graftInfoAddr falsy? we're expecting all resolved conflicts to have a graftInfoAddr (E: d082488347570947b82008a835200126)");if(!(await De({addrs:[I.graftInfoAddr],space:o})).at(0))throw new Error(`(UNEXPECTED) couldn't get finalConflictGraftInfo from localTempSpace (${o})? (E: 35e3c8130608d991e8fb295807812826)`);let{createdDnaAddrs:S,replayedDnaAddrs:$,createdDomainAddrs:B}=I;if(!S||S.length===0)throw new Error("(UNEXPECTED) finalConflict.createdDnaAddrs falsy/empty? (E: 9689f8be5bd19650b8d4a058b65db826)");if(!$||$.length===0)throw new Error("(UNEXPECTED) finalConflict.replayedDnaAddrs falsy/empty? (E: f42878ed1cee3e9828567c5ab8179526)");if(!B||B.length===0)throw new Error("(UNEXPECTED) finalConflict.createdDomainAddrs falsy/empty? (E: cc41251d1acfe91a48d1b6080259ed26)");(await De({addrs:[...S,...$,...B],space:o})).forEach(N=>C.push(N))}let T=[];if(w.forEach(I=>T.push(I)),C.forEach(I=>T.push(I)),T.length===0)A&&console.log(`${c}[${f}] no changes on this end (I: fa30d18e83a87ee9e8487fbb5d632b26)`);else{A&&console.log(`${c}[${f}] ${T.length} changes detected (I: fa30d18e83a87ee9e8487fbb5d632b26)`),A&&console.log(`${c} put all into localSpace (${i.ib}) starting... (I: d5e0d9870e380b61e80c729660058826)`);let{payload_Dnas:I,payload_NonDnas:v}=await Dt({ibGibs:T,space:i});A&&console.log(`${c} put all into localSpace (${i.ib}) complete. (I: d5e0d9870e380b61e80c729660058826)`);let _=await na({sagaHistory:a,myTempSpace:o}),{mapWithTjp_NoDna:S,mapWithTjp_YesDna:$,mapWithoutTjps:B}=nt({ibGibs:v,filterPrimitives:!0});A&&console.log(`${c} register mapWithoutTjps starting... (I: 2b84d8f8dda85adde88696d8419bf726)`);let P=Object.values(B);for(let F of P)A&&console.log(`${c} registering ${p({ibGib:F})} (I: 4647b4f42d27cffe0fbfce8846755826)`),await s.registerNewIbGib({ibGib:F,space:i});A&&console.log(`${c} mapWithoutTjps complete. (I: 2b84d8f8dda85adde88696d8419bf726)`),A&&console.log(`${c} register mapWithTjp_NoDna starting... (I: 96e648e4db382499b8bfaa1b37c24826)`);let N=qe({ibGibs:Object.values(S)}),k=Object.keys(N);for(let F of k){let J=N[F];for(let de of J)await s.registerNewIbGib({ibGib:de,space:i})}A&&console.log(`${c} register mapWithTjp_NoDna complete. (I: 96e648e4db382499b8bfaa1b37c24826)`),A&&console.log(`${c} register mapWithTjp_YesDna starting... (I: d54a820e9442dee4681f6228a6795926)`);let D=qe({ibGibs:Object.values($)}),O=Object.keys(D);for(let F of O){let J=D[F];for(let de of J)_.includes(p({ibGib:de}))||await s.registerNewIbGib({ibGib:de,space:i})}A&&console.log(`${c} register mapWithTjp_YesDna complete. (I: d54a820e9442dee4681f6228a6795926)`)}}catch(d){throw console.error(`${c} ${u(d)}`),d}finally{A&&console.log(`${c} complete.`)}}async createCommitFrame({sagaIbGib:t,errors:e,metaspace:a,mySpace:s}){let i=`[${this.createCommitFrame.name}]`;try{A&&console.log(`${i} starting... (I: 48fc57c023f80122135a284855757526)`);let o=e&&e.length>0?{sagaId:t.data.uuid,stage:Y.commit,success:!1,errors:e}:{sagaId:t.data.uuid,stage:Y.commit,success:!0},c=await this.createSyncMsgStone({data:o,localSpace:s,metaspace:a});return await this.evolveSyncSagaIbGib({prevSagaIbGib:t,msgStones:[c],localSpace:s,metaspace:a})}catch(o){throw console.error(`${i} ${u(o)}`),o}finally{A&&console.log(`${i} complete.`)}}async handleCommitFrame({sagaIbGib:t,mySpace:e,myTempSpace:a,metaspace:s}){let i=`${this.lc}[${this.handleCommitFrame.name}]`;try{if(A&&console.log(`${i} starting... (I: e179573bdd881202f8ba3168da1c3826)`),!t.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: cbc31dbb7d28b5b8c8cddb510d7d2826)");if(t.data.errors&&t.data.errors.length>0)throw new Error("not implemented...saga errored out on other end but we've already committed our changes. we need to implement undoing our changes, i.e., rollback commit, which basically is deleting all the payloads that we already put in in our previous commit. (E: e8eb789e0c08f0b3cf93607cb73e9f26)");{let o=await ct({sagaIbGib:t,space:e}),c=await Lt({history:o});return c.length>0?{frame:await this.createCommitFrame({sagaIbGib:t,metaspace:s,mySpace:e,errors:c})}:(await this.executeLocalCommit({commitFrame:t,sagaHistory:o,localSpace:e,localTempSpace:a,metaspace:s}),console.error(`${i} NAG ERROR (NOT THROWN): implement cleanup logic, including add a cleanup method to the peer (E: 3a9a24befb98a981a88fbdbf52920e26)`),A&&console.log(`${i} Peer committed. Finalizing saga locally. Saga Complete.`),{sagaComplete:!0})}}catch(o){let c=`${i} ${u(o)}`;return console.error(c),{frame:await this.createCommitFrame({sagaIbGib:t,errors:[c],metaspace:s,mySpace:e})}}finally{A&&console.log(`${i} complete.`)}}async createSyncMsgStone({data:t,rel8ns:e,localSpace:a,metaspace:s}){let i=`${this.lc}[${this.createSyncMsgStone.name}]`;try{A&&console.log(`${i} starting... (I: 5f7f98e8ff980364f7191fcee4531e26)`);let o=await ia({data:t}),c=await V.stone({ib:o,parentPrimitiveIb:Mt,data:t,rel8ns:e,uuid:!0});return A&&console.log(`${i} Created stone: ${p({ibGib:c})}`),await s.put({ibGib:c,space:a}),await s.registerNewIbGib({ibGib:c}),c}catch(o){throw console.error(`${i} ${u(o)}`),o}finally{A&&console.log(`${i} complete.`)}}async getPayloadsForRequestedInfos({deltaRequestAddrInfos:t,mySpace:e}){let a=`${this.lc}[${this.getPayloadsForRequestedInfos.name}]`;try{A&&console.log(`${a} starting... (I: 4fe13d0d80050f20a8b74ba80cee5826)`);let s={};for(let{addr:o,latestAddrAlreadyHave:c}of t){let d;if(c?d=await yt({ibGibAddr:o,latestCommonFrameAddr:c,space:e,live:!0}):d=await ut({ibGibAddr:o,space:e,live:!0}),Object.keys(d).length===0)throw new Error(`(UNEXPECTED) couldn't get requested addrs in mySpace (${e.ib})? How did the receiver know to ask for these addrs if they weren't in our original graph? (E: 281eaebcdf77dd73e8245b2872100826)`);Object.values(d).forEach(f=>{s[p({ibGib:f})]=f})}return Object.values(s)}catch(s){throw console.error(`${a} ${u(s)}`),s}finally{A&&console.log(`${a} complete.`)}}async evolveSyncSagaIbGib({prevSagaIbGib:t,conflictStrategy:e,msgStones:a,localSpace:s,metaspace:i,sessionIdentity:o}){let c=`${this.lc}[${this.evolveSyncSagaIbGib.name}]`;try{if(!a||a.length===0)throw new Error(`${c} msgStones required (E: d13f8afcfb8816aeb26baae7df3ef726)`);let d=a[0].data;if(!d?.sagaId||!d?.stage)throw new Error(`${c} Invalid stone data (missing sagaId or stage) (E: c004f85ce8f8958b11839f8d68c38826)`);let l=d.sagaId,f=d.stage;for(let b of a){let m=b.data;if(m.sagaId!==l)throw new Error(`${c} Mismatched sagaId in stones. Expected ${l}, got ${m.sagaId} (E: 29e02719e426ecbbf8ee66887a2be226)`);if(m.stage!==f)throw new Error(`${c} Mismatched stage in stones. Expected ${f}, got ${m.stage} (E: d12c6571b0882f762921b60880c3f826)`)}if(t){let b=[{rel8nName:oe,ibGibs:a}];if(!t.rel8ns)throw new Error("(UNEXPECTED) prevSagaIbGib.rel8ns falsy? (E: 81375841aff85b1e48ea42ca218e6826)");if(!t.rel8ns[oe]||t.rel8ns[oe].length===0)throw new Error("(UNEXPECTED) prevSagaIbGib.rel8ns[SYNC_MSG_REL8N_NAME] falsy/empty? (E: 15156baad26fcccda80aa3a31718c726)");let m=[{rel8nName:oe,ibGibAddrs:t.rel8ns[oe]}];return await ze({timeline:t,rel8nInfos:b,rel8nRemovalInfos:m,metaspace:i,space:s,noDna:!0})}else{let b={uuid:l,n:0,isTjp:!0,conflictStrategy:e};if(o){let C=le({ibGib:o});if(!C)throw new Error("(UNEXPECTED) sessionIdentity is truthy but sessionIdentityTjpAddr falsy? (E: f52004c10288987a6886f4e8fdf90826)");b.sessionIdentityTjpAddr=C}let m=await aa({data:b}),y=a.map(C=>p({ibGib:C})),g={[oe]:y},w=await _a({space:s,metaspace:i,ib:m,data:b,rel8ns:g,parentIb:At,noDna:!0});if(w.intermediateIbGibs)throw new Error("(UNEXPECTED) resNew.intermediateIbGibs? we were assuming we were creating a single frame. (E: 456818147235d991ccb4d10d0bbe4826)");return w.newIbGib}}catch(d){throw console.error(`${c} ${u(d)}`),d}}async getStageAndPayloadFromFrame({sagaFrame:t,space:e}){let a=`${this.lc}[${this.getStageAndPayloadFromFrame.name}]`;try{if(A&&console.log(`${a} starting... (I: fddc287bd4d55253dc50e519fd352226)`),!t.rel8ns)throw new Error("(UNEXPECTED) sagaFrame.rel8ns falsy? (E: 725bc8eb5dfe5c7058907ad8e3063826)");let s=t.rel8ns?.[oe];if(s&&s.length>0){let i=s[0],o=await re({addr:i,space:e});if(o.ibGibs&&o.ibGibs.length>0){let c=o.ibGibs[0];if(!c.data)throw new Error("(UNEXPECTED) message stone.data falsy? (E: 4d4abcea90d87ba1328434e83d0d0826)");if(!c.data.stage)throw new Error("(UNEXPECTED) message stone.data.stage falsy? (E: 72c8d22310996644ecdd2b5fdb288c26)");return{stage:c.data.stage,messageData:c.data}}else throw new Error(`couldn't get stoneAddr (${i}) from space (${e.ib}) (E: f3c826e756f8a5c358beb88aa4a65e26)`)}else throw new Error(`(UNEXPECTED) no stone addrs rel8d to sync saga ibgib frame? sagaFrame addr: ${p(t)} (E: 43eae8579e289d016741b5526052f226)`)}catch(s){throw console.error(`${a} ${u(s)}`),s}finally{A&&console.log(`${a} complete.`)}}sortTimelinesTopologically(t){let e=`${this.lc}[${this.sortTimelinesTopologically.name}]`,a=Object.keys(t);if(a.length===0)return[];let s={};a.forEach(f=>{t[f].forEach(b=>{let m=p({ibGib:b});s[m]=f})});let i={};a.forEach(f=>i[f]=new Set),a.forEach(f=>{t[f].forEach(b=>{b.rel8ns&&Object.values(b.rel8ns).flat().forEach(m=>{if(!m)return;let y=s[m];y&&y!==f&&i[f].add(y)})})});let o=new Set,c=new Set,d=[],l=h(f=>{if(c.has(f)){console.warn(`${e} Cycle detected involving ${f}. Ignoring edge to break cycle. (W: 7e7352347102431aa5318db962459929)`);return}o.has(f)||(c.add(f),i[f].forEach(b=>l(b)),o.add(f),c.delete(f),d.push(f))},"visit");return a.forEach(f=>{o.has(f)||l(f)}),d}};var Ua={$schema:"../../../../libs/core-gib/dist/keystone/policy/schemas/keystone.medium.schema.json",metadata:{name:"Space-Gib Default Identity Policy",securityLevel:"medium"},pools:{sync:{id:"sync",allowedVerbs:["sync"],algo:"SHA-256",rounds:1,behavior:{size:200,replenish:"top-up",selectSequentially:2,selectRandomly:2,targetBindingCount:5}},manage:{id:"manage",allowedVerbs:["manage"],algo:"SHA-512",rounds:10,behavior:{size:2e3,replenish:"replace-all",selectSequentially:5,selectRandomly:5,targetBindingCount:16}},revoke:{id:"revoke",allowedVerbs:["revoke"],algo:"SHA-512",rounds:10,behavior:{size:2e3,replenish:"delete-all",selectSequentially:5,selectRandomly:5,targetBindingCount:16}},connect:{id:"connect",allowedVerbs:["connect"],algo:"SHA-256",rounds:1,behavior:{size:20,replenish:"top-up",selectSequentially:2,selectRandomly:2,targetBindingCount:3}}}};var gr=Ua.pools;function Vt(r,t){let e=gr[r];if(!e)throw new Error(`Pool template not found in space-gib JSON config: ${r}`);return ka({template:e,salt:t})}h(Vt,"getSpaceGibPoolConfig");var K={COMMON:Ye.COMMON,DEFAULT_POOL:{ID:"default",SIZE:20,SELECT_SEQUENTIALLY:2,SELECT_RANDOMLY:2,TARGET_BINDING_COUNT:3},CONNECT_POOL:Ye.CONNECT_POOL},pi={MIN_DEFAULT_POOL_SIZE:50,ALLOWED_ALGORITHMS:[mt.sha_256,mt.sha_512]};var R=class extends Aa{static{h(this,"SpaceGibApiBridge")}lc="[SpaceGibApiBridge]"},ur=new R;va(ur);var X="[dev-tools]",E={};window.ibgibDebugState=E;function n(r){let t=document.getElementById("dev-panel-log");if(!t)return;let e=new Date().toISOString().slice(11,23);t.textContent=`[${e}] ${r}
|
|
12
|
-
`+t.textContent}h(n,"devLog");async function ja({domainI:r,masterSecret:t,syncSalt:e,metaspace:a,space:s,apiBridge:i}){let o=new ge,c=await jt({s:`${t}-sync-delegate`}),d=await o.genesis({masterSecret:c,configs:[Vt("sync",`${e}-delegate`)],metaspace:a,space:s,frameDetails:{client:"space-gib-web-dev-delegate",timestamp:Ue()}}),l=await o.registerDelegate({parentKeystone:r,delegateKeystone:d,masterSecret:t,metaspace:a,space:s,allowedVerbs:[fe]}),f=p({ibGib:r}),b=await i.putEvolveKeystone({domainAddr:f,keystoneIbGib:l,relatedKeystoneIbGibs:[d]});if(!b.success)throw new Error(`Server rejected delegate evolution: ${b.message}`);return{evolvedDomainI:l,delegateKeystone:d,delegateSecret:c}}h(ja,"createAndRegisterSyncDelegate");async function da({domainI:r,masterSecret:t,metaspace:e,space:a}){let s=r,i=h(async()=>t,"fnSenderSecret"),o=Object.values(r.data?.delegates??{}).find(c=>c.allowedVerbs?.includes(fe));if(o){let c=o.delegateTjpAddr;if(c){let d=await e.getLatestAddr({addr:c,space:a});if(d){let l=await e.get({addr:d,space:a});if(l.success&&l.ibGibs&&l.ibGibs.length>0){s=l.ibGibs[0];let f=await jt({s:`${t}-sync-delegate`});i=h(async()=>f,"fnSenderSecret")}}}}return{senderIdentity:s,fnSenderSecret:i}}h(da,"getSenderIdentityInfo");async function Oe(r){let t=`${X}[performPhaseSetup(${r.phaseText})]`,e=document.getElementById(r.btnId);if(e)try{e.disabled=!0,n(`${r.phaseText} Setup: Generating Alice's long-lived Domain Keystone (I) and Target (X)...`);let a=await L(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space found in metaspace.");let o=await new ge().genesis({masterSecret:r.masterSecret,configs:[Vt("manage",r.manageSalt)],metaspace:a,space:s,frameDetails:{client:"space-gib-web-dev",timestamp:Ue()}});n(`${r.phaseText} Setup: \u2713 Domain Keystone (I) created locally: ${p({ibGib:o})}`),n(`${r.phaseText} Setup: Starting postGenesisKeystone...`);let c=new R,d=await c.postGenesisKeystone(o);if(d.success)n(`${r.phaseText} Setup: \u2713 Domain Keystone registered and stored on receiver (server).`);else throw n(`${r.phaseText} Setup: X postGenesisKeystone failed: ${d.message}.`),new Error(`${r.phaseText} Setup: Server rejected genesis domain keystone: ${d.message}`);n(`${r.phaseText} Setup: Generating and registering sync delegate...`);let{evolvedDomainI:l,delegateKeystone:f}=await ja({domainI:o,masterSecret:r.masterSecret,syncSalt:r.syncSalt,metaspace:a,space:s,apiBridge:c});E.domainI=l,E.domainIMasterSecret=r.masterSecret,n(`${r.phaseText} Setup: \u2713 Registered Sync Delegate: ${p({ibGib:f})}`);let b=await V.firstGen({parentIbGib:H,ib:r.ib,data:r.data,dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),m=b.newIbGib;await a.persistTransformResult({resTransform:b,space:s}),await a.registerNewIbGib({ibGib:m}),E.targetX=m,n(`${r.phaseText} Setup: \u2713 Target (X) created and persisted locally: ${p({ibGib:m})}`),n(`\u2713 ${r.phaseText} Setup Complete! Ready for ${r.phaseText} Sync.`),e.textContent=`\u2713 ${r.phaseText} Setup Complete`;let y=document.getElementById(r.nextBtnId);y&&(y.disabled=!1)}catch(a){n(`\u2717 ${r.phaseText} Setup FAILED: ${u(a)}`),console.error(`${t} ${r.phaseText} Setup error:`,a),e.disabled=!1}}h(Oe,"performPhaseSetup");async function He(r){let t=`${X}[performPhaseSync(${r.phaseText})]`,e=document.getElementById(r.btnId);if(e)try{e.disabled=!0,n(`${r.phaseText} Sync: Executing senderCoordinator.sync(...) using WebSocket Peer...`);let a=E.domainI,s=E.targetX;if(!a||!s){n(`\u26A0 ${r.phaseText} Sync: Missing setup state. Please run Setup first.`),e.disabled=!1;return}let i=p({ibGib:a}),o=await L(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let d=location.protocol==="https:"?"wss:":"ws:",l=new lt({classname:"SyncPeerWebSocketSender_V1",httpEvolveUrl:`${location.protocol}//${location.host}/api/keystone/evolve/${encodeURIComponent(i)}`,wsUrl:`${d}//${location.host}/api/sync/ws/${encodeURIComponent(i)}`}),f=new ae,b=await ne();E.sagaId=b,E.senderPeer=l;let{senderIdentity:m,fnSenderSecret:y}=await da({domainI:a,masterSecret:E.domainIMasterSecret,metaspace:o,space:c});await l.initializeOpts({localMetaspace:o,localSpace:c,senderIdentity:m,fnSenderSecret:y,sagaId:b,sessionConnectPoolConfig:K.CONNECT_POOL,sessionSyncPoolConfig:K.DEFAULT_POOL,targetAddrs:[i]});try{await(await f.sync({domainIbGibs:[s],senderIdentityInfo:{senderIdentity:m,senderDomainAddr:i},fnSenderSecret:y,peer:l,localSpace:c,metaspace:o,conflictStrategy:Ee.optimisticWithLCS})).done}catch(w){if(r.expectSyncFailure)n(`${r.phaseText} Sync: Coordinator sync executed (${r.failureMessageSuffix??"errors expected"}): ${u(w)}`);else throw w}n(`\u2713 ${r.phaseText} Sync Execution Complete! Ready for State Checks.`),e.textContent=`\u2713 ${r.phaseText} Sync Run`;let g=document.getElementById(r.nextBtnId);g&&(g.disabled=!1)}catch(a){n(`\u2717 ${r.phaseText} Sync FAILED: ${u(a)}`),console.error(`${t} ${r.phaseText} Sync error:`,a),e.disabled=!1}}h(He,"performPhaseSync");async function la({localI:r,metaspace:t,space:e}){let a=Object.values(r.data?.delegates??{}).find(f=>f.allowedVerbs?.includes(fe));if(!a)return{};let s=a.delegateTjpAddr;if(!s)return{};let i=await t.getLatestAddr({addr:s,space:e});if(!i)return{delegateTjpAddr:s};let c=(await t.get({addrs:[i],space:e})).ibGibs?.[0];if(!c)return{delegateTjpAddr:s,latestLocalDelegateAddr:i};let l=c.data?.proofs?.find(f=>f.claim?.verb==="sync")?.claim?.target;return{delegateTjpAddr:s,latestLocalDelegateAddr:i,localDelegate:c,sessionIdentityTjpAddr:l}}h(la,"getDelegateAndSessionInfo");async function j({domainIbGibs:r,passLabel:t,metaspace:e,space:a}){let s=E.domainI,i=E.domainIMasterSecret;if(!s||!i)throw new Error(`runSyncPass[${t}]: Missing domain identity or secret in debugState. Run Setup first.`);let o=p({ibGib:s}),c=location.protocol==="https:"?"wss:":"ws:",{senderIdentity:d,fnSenderSecret:l}=await da({domainI:s,masterSecret:i,metaspace:e,space:a});n(`Sync: ${t} \u2014 using sender: ${p({ibGib:d}).slice(0,40)}...`);let f=new lt({classname:"SyncPeerWebSocketSender_V1",httpEvolveUrl:`${location.protocol}//${location.host}/api/keystone/evolve/${encodeURIComponent(o)}`,wsUrl:`${c}//${location.host}/api/sync/ws/${encodeURIComponent(o)}`}),b=new ae,m=await ne();E.sagaId=m,E.senderPeer=f,await f.initializeOpts({localMetaspace:e,localSpace:a,senderIdentity:d,fnSenderSecret:l,sagaId:m,sessionConnectPoolConfig:K.CONNECT_POOL,sessionSyncPoolConfig:K.DEFAULT_POOL,targetAddrs:[o]}),await(await b.sync({domainIbGibs:r,senderIdentityInfo:{senderIdentity:d,senderDomainAddr:o},fnSenderSecret:l,peer:f,localSpace:a,metaspace:e,conflictStrategy:Ee.optimisticWithLCS})).done;let g=await e.getLatestAddr({addr:o,space:a});if(g&&g!==p({ibGib:s})){let w=await e.get({addrs:[g],space:a});w.ibGibs?.[0]&&(E.domainI=w.ibGibs[0])}}h(j,"runSyncPass");async function ye({domainIbGibs:r,passLabel:t,metaspace:e,space:a,primarySpace:s,domainI:i,masterSecret:o}){let c=p({ibGib:i}),d=location.protocol==="https:"?"wss:":"ws:",{senderIdentity:l,fnSenderSecret:f}=await da({domainI:i,masterSecret:o,metaspace:e,space:a});n(`Sync: ${t} \u2014 using sender: ${p({ibGib:l}).slice(0,40)}...`);let b=new lt({classname:"SyncPeerWebSocketSender_V1",httpEvolveUrl:`${location.protocol}//${location.host}/api/keystone/evolve/${encodeURIComponent(c)}`,wsUrl:`${d}//${location.host}/api/sync/ws/${encodeURIComponent(c)}`}),m=new ae,y=await ne();E.sagaId=y,E.senderPeer=b,await b.initializeOpts({localMetaspace:e,localSpace:a,senderIdentity:l,fnSenderSecret:f,sagaId:y,sessionConnectPoolConfig:K.CONNECT_POOL,sessionSyncPoolConfig:K.DEFAULT_POOL,targetAddrs:[c]}),await(await m.sync({domainIbGibs:r,senderIdentityInfo:{senderIdentity:l,senderDomainAddr:c},fnSenderSecret:f,peer:b,localSpace:a,metaspace:e,conflictStrategy:Ee.optimisticWithLCS})).done;let w=await e.getLatestAddr({addr:c,space:a});if(w){let G=(await e.get({addrs:[w],space:a})).ibGibs?.[0];G&&(E.domainI=G,s&&await ce({domainI:G,metaspace:e,fromSpace:a,toSpace:s}))}}h(ye,"runSyncPassFromSpace");async function ie({masterSecret:r,syncSalt:t,manageSalt:e,metaspace:a,space:s,apiBridge:i,phaseText:o}){let d=await new ge().genesis({masterSecret:r,configs:[Vt("manage",e)],metaspace:a,space:s,frameDetails:{client:"space-gib-web-dev",timestamp:Ue()}});n(`${o} Setup: \u2713 Domain Keystone (I) created locally: ${p({ibGib:d})}`),n(`${o} Setup: Starting postGenesisKeystone...`);let l=await i.postGenesisKeystone(d);if(l.success)n(`${o} Setup: \u2713 Domain Keystone registered and stored on receiver (server).`);else throw n(`${o} Setup: X postGenesisKeystone failed: ${l.message}.`),new Error(`${o} Setup: Server rejected genesis domain keystone: ${l.message}`);n(`${o} Setup: Generating and registering sync delegate...`);let{evolvedDomainI:f,delegateKeystone:b}=await ja({domainI:d,masterSecret:r,syncSalt:t,metaspace:a,space:s,apiBridge:i});return E.domainI=f,E.domainIMasterSecret=r,{domainI:f,delegateKeystone:b}}h(ie,"setupDomainAndDelegateIdentities");async function ft({localI:r,metaspace:t,space:e,apiBridge:a,domainAddr:s}){let i=await t.getLatestAddr({addr:s,space:e});if(!i)throw new Error("Evolved domain keystone tip NOT found in local space!");n("\u2713 Check: Evolved Domain Keystone exists locally.");let{latestLocalDelegateAddr:o,sessionIdentityTjpAddr:c}=await la({localI:r,metaspace:t,space:e});if(!o)throw new Error("Evolved delegate keystone tip NOT found in local space!");if(!c)throw new Error("Delegate sync claim does not target a session keystone.");n("\u2713 Check: Delegate Keystone and Sync Claim to Session verified locally.");let d=await a.getIbGib(s,o);if(!d.success||!d.ibGib)throw new Error("Evolved Delegate Keystone NOT found on server!");n("\u2713 Check: Evolved Delegate Keystone exists on server.");let l=await a.getIbGib(s,i);if(!l.success||!l.ibGib)throw new Error("Evolved Domain Keystone NOT found on server!");return n("\u2713 Check: Evolved Domain Keystone exists on server."),{latestLocalIAddr:i,latestLocalDelegateAddr:o,sessionIdentityTjpAddr:c}}h(ft,"verifyIdentitiesOnServer");async function ce({domainI:r,metaspace:t,fromSpace:e,toSpace:a}){let s=p({ibGib:r}),i=await t.getLatestAddr({addr:s,space:e});if(!i)throw new Error("Could not find latest domain I address.");let c=(await t.get({addrs:[i],space:e})).ibGibs?.[0];if(!c)throw new Error("Could not get latest domain I.");let d=await t.getDependencyGraph({ibGibAddr:i,space:e});await t.put({ibGibs:Object.values(d),space:a}),await t.registerNewIbGib({ibGib:c,space:a});let l=Object.values(c.data?.delegates??{}).find(f=>f.allowedVerbs?.includes(fe));if(l){let f=l.delegateTjpAddr;if(f){let b=await t.getLatestAddr({addr:f,space:e});if(b){let y=(await t.get({addrs:[b],space:e})).ibGibs?.[0];if(y){let g=await t.getDependencyGraph({ibGibAddr:b,space:e});await t.put({ibGibs:Object.values(g),space:a}),await t.registerNewIbGib({ibGib:y,space:a})}}}}}h(ce,"copyIdentitiesToSpace");var Fe=null;function Ka(){let r=`${X}[initWsTestButton]`,t=document.getElementById("btn-test-ws");if(!t){console.warn(`${r} btn-test-ws not found \u2014 skipping`);return}t.addEventListener("click",()=>{try{if(Fe&&Fe.readyState===WebSocket.OPEN){Fe.send(JSON.stringify({ping:"hello from client",ts:Date.now()})),n("\u2192 sent ping on existing connection");return}let a=`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/debug/ws-echo`;n(`\u2192 connecting to ${a}`),Fe=new WebSocket(a),Fe.addEventListener("open",()=>{n("\u2713 WebSocket connected"),t.textContent="Send WS Ping"}),Fe.addEventListener("message",s=>{n(`\u2190 ${s.data}`)}),Fe.addEventListener("close",s=>{n(`\u2717 WebSocket closed (code ${s.code})`),t.textContent="Test WebSocket",Fe=null}),Fe.addEventListener("error",s=>{n("\u2717 WebSocket error \u2014 check console"),console.error(`${r} WebSocket error`,s)})}catch(e){n(`\u2717 ${u(e)}`),console.error(`${r} ${u(e)}`)}})}h(Ka,"initWsTestButton");function Xa(){let r=document.getElementById("btn-print-dev-state");r&&r.addEventListener("click",()=>{n("Printing debug state to console..."),console.dir(E)})}h(Xa,"initPrintStateButton");function Ya(){let r=`${X}[initCreateDomainKeystoneButton]`,t=document.getElementById("btn-create-domain-keystone");t&&t.addEventListener("click",async()=>{try{t.disabled=!0,n("Generating dummy Domain Keystone (I)...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space found in metaspace.");let s="password",o=await new ge().genesis({masterSecret:s,configs:[Da({id:"default",salt:await ne(),replenishStrategy:Je.topUp})],metaspace:e,space:a,frameDetails:{client:"space-gib-web-dev",timestamp:Ue()}}),c=p({ibGib:o});n(`\u2713 Local genesis complete: ${c}`),E.domainI=o,E.domainIMasterSecret=s,n("Posting genesis keystone to server...");let l=await new R().postGenesisKeystone(o);if(!l.success){n(`\u2717 Server rejected genesis keystone: ${l.message}`),t.disabled=!1;return}n("\u2713 Server accepted Domain Keystone (I)"),t.textContent="\u2713 Domain Keystone Created";let f=document.getElementById("btn-create-test-ibgib");f&&(f.disabled=!1)}catch(e){n(`\u2717 ${u(e)}`),console.error(`${r} ${u(e)}`),t.disabled=!1}})}h(Ya,"initCreateDomainKeystoneButton");function Ha(){let r=`${X}[initCreateTestIbGibButton]`,t=document.getElementById("btn-create-test-ibgib");if(!t){console.warn(`${r} btn-create-test-ibgib not found \u2014 skipping`);return}t.addEventListener("click",async()=>{try{n("Generating dummy X^Xtjp ibgib...");let a=(await V.firstGen({parentIbGib:H,ib:"test data",data:{hello:"world",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}})).newIbGib,s=p({ibGib:a});E.targetX=a,n(`\u2713 Created X: ${s}`),t.textContent="\u2713 Test IbGib (X) Created";let i=document.getElementById("btn-create-session-keystone");i&&(i.disabled=!1)}catch(e){n(`\u2717 ${u(e)}`),console.error(`${r} ${u(e)}`)}})}h(Ha,"initCreateTestIbGibButton");function Wa(){let r=`${X}[initCreateSessionKeystoneButton]`,t=document.getElementById("btn-create-session-keystone");if(!t){console.warn(`${r} btn-create-session-keystone not found \u2014 skipping`);return}t.addEventListener("click",async()=>{try{n("Generating Session Keystone (S^Stjp)...");let e=E.domainI,a=E.targetX;if(!e){n("\u26A0 No domain keystone (I) found in state. Please Create Domain Keystone first.");return}if(!a){n("\u26A0 No target ibgib (X) found in state. Please Create Test IbGib first.");return}let s=await L(),i=await s.getLocalUserSpace({});if(!i)throw new Error("No default space found in metaspace.");let o="ephemeral-"+Math.random().toString(),c=new ge;console.warn(`${X}[NAG] placeholder genesis keystone config right now (W: 69b108687cf8bec0f9a8e148bcca8d26)`);let d=await c.genesis({masterSecret:o,configs:[{id:K.DEFAULT_POOL.ID,salt:await ne(),type:K.COMMON.TYPE,algo:K.COMMON.ALGO,rounds:K.COMMON.ROUNDS,behavior:{size:K.DEFAULT_POOL.SIZE,replenish:K.COMMON.REPLENISH,selectSequentially:K.DEFAULT_POOL.SELECT_SEQUENTIALLY,selectRandomly:K.DEFAULT_POOL.SELECT_RANDOMLY,targetBindingCount:K.DEFAULT_POOL.TARGET_BINDING_COUNT},allowedVerbs:[]},{id:K.CONNECT_POOL.ID,salt:await ne(),type:K.COMMON.TYPE,algo:K.COMMON.ALGO,rounds:K.COMMON.ROUNDS,behavior:{size:K.CONNECT_POOL.SIZE,replenish:K.COMMON.REPLENISH,selectSequentially:K.CONNECT_POOL.SELECT_SEQUENTIALLY,selectRandomly:K.CONNECT_POOL.SELECT_RANDOMLY,targetBindingCount:K.CONNECT_POOL.TARGET_BINDING_COUNT},allowedVerbs:[K.CONNECT_POOL.VERB]}],metaspace:s,space:i,frameDetails:{client:"space-gib-web-session",target_I:e?p({ibGib:e}):void 0,target_X:a?p({ibGib:a}):void 0}}),l=p({ibGib:d});E.sessionS=d,E.sessionSecret=o,n(`\u2713 Created Session Keystone: ${l}`),t.textContent="\u2713 Session Keystone Created"}catch(e){n(`\u2717 ${u(e)}`),console.error(`${r} ${u(e)}`)}})}h(Wa,"initCreateSessionKeystoneButton");function qa(){let r=document.getElementById("btn-1b-setup");r&&r.addEventListener("click",()=>{Oe({phaseText:"1B",btnId:"btn-1b-setup",nextBtnId:"btn-1b-sync",masterSecret:"test-sender-secret-phase1",syncSalt:"senderidentitysyncsaltphase1",manageSalt:"senderidentitymanagesaltphase1",ib:"test data",data:{hello:"world",random:Math.random()}})})}h(qa,"init1bSetupButton");function za(){let r=document.getElementById("btn-1b-sync");r&&r.addEventListener("click",()=>{He({phaseText:"1B",btnId:"btn-1b-sync",nextBtnId:"btn-1b-check",expectSyncFailure:!0,failureMessageSuffix:"establish phase successfully run; connection/sync errors expected in 1B"})})}h(za,"init1bSyncButton");function Ja(){let r=`${X}[init1bCheckButton]`,t=document.getElementById("btn-1b-check");t&&t.addEventListener("click",async()=>{try{n("1B Check: Asserting cryptographic and durable state expectations from respec...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=E.domainI,i=E.targetX,o=await e.getLatestAddr({addr:p({ibGib:s}),space:a});if(!o){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) created and stored locally.");let d=(await e.get({addrs:[o],space:a})).ibGibs?.[0];if(!d){n("\u2717 Check: Failed to load I1 from local space.");return}let l=d.data?.proofs?.find($=>$.claim?.verb==="sync");l?n("\u2713 Check: I1 contains valid sync-verb claim proof."):n("\u2717 Check: I1 is missing sync-verb claim proof!");let f=l?.claim?.target;if(!f){n("\u2717 Check: I1 sync claim does not target a session keystone.");return}n(`\u2713 Check: Sync claim targets session keystone: ${f}`);let m=(await e.get({addrs:[f],space:a})).ibGibs?.[0];if(!m){n("\u2717 Check: Session Keystone (S) NOT found in local space.");return}n("\u2713 Check: Session Keystone (S) successfully created locally.");let y=m.data?.challengePools??[],g=y.some($=>$.id===ke),w=y.some($=>$.id===ot);g&&w?n("\u2713 Check: S contains both connect and sync challenge pools."):n(`\u2717 Check: S is missing challenge pools! (connect: ${g}, sync: ${w})`),n("Check: Verifying registrations on server (receiver metaspace)...");let C=new R,G=!1,T=!1,I=!1,v=p({ibGib:s}),_=await C.getKeystoneGraph(v);if(_.success&&_.graph){let $=_.graph;G=$[v]!==void 0,T=$[o]!==void 0}else n(`\u2717 Check Server: Failed to fetch keystone graph from server: ${_.message}`);let S=await C.getIbGib(v,f);if(S.success&&S.ibGib?I=!0:n(`\u2717 Check Server: Failed to fetch session keystone from server: ${S.message}`),G?n("\u2713 Check Server: Genesis Domain Keystone (I) registered on server."):n("\u2717 Check Server: Genesis Domain Keystone (I) missing on server!"),T?n("\u2713 Check Server: Evolved Domain Keystone (I1) accepted and stored on server."):n("\u2717 Check Server: Evolved Domain Keystone (I1) missing on server!"),I?n("\u2713 Check Server: Session Keystone (S) accepted and stored on server."):n("\u2717 Check Server: Session Keystone (S) missing on server!"),G&&T&&I){n("\u{1F389} ALL PHASE 1B ESTABLISH CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 1B All Passed";let $=document.getElementById("btn-2b-setup");$&&($.disabled=!1)}}catch(e){n(`\u2717 1B Check FAILED: ${u(e)}`),console.error(`${r} 1B Check error:`,e)}})}h(Ja,"init1bCheckButton");function Za(){let r=document.getElementById("btn-2b-setup");r&&r.addEventListener("click",()=>{Oe({phaseText:"2B",btnId:"btn-2b-setup",nextBtnId:"btn-2b-sync",masterSecret:"test-sender-secret-phase2",syncSalt:"senderidentitysyncsaltphase2",manageSalt:"senderidentitymanagesaltphase2",ib:"test data",data:{hello:"world2",random:Math.random()}})})}h(Za,"init2bSetupButton");function Qa(){let r=document.getElementById("btn-2b-sync");r&&r.addEventListener("click",()=>{He({phaseText:"2B",btnId:"btn-2b-sync",nextBtnId:"btn-2b-check",expectSyncFailure:!0,failureMessageSuffix:"connect phase successfully run; subsequent sync errors expected in 2B"})})}h(Qa,"init2bSyncButton");function en(){let r=`${X}[init2bCheckButton]`,t=document.getElementById("btn-2b-check");t&&t.addEventListener("click",async()=>{try{n("2B Check: Asserting cryptographic and WebSocket state expectations...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=E.domainI,i=p({ibGib:s}),o=await e.getLatestAddr({addr:i,space:a});if(!o){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) created and stored locally.");let d=(await e.get({addrs:[o],space:a})).ibGibs?.[0];if(!d){n("\u2717 Check: Failed to load I1 from local space.");return}let f=d.data?.proofs?.find(I=>I.claim?.verb==="sync")?.claim?.target;if(!f){n("\u2717 Check: I1 sync claim does not target a session keystone.");return}n(`\u2713 Check: Sync claim targets session keystone: ${f}`);let b=await e.getLatestAddr({addr:f,space:a});if(!b){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n("\u2713 Check: Found latest session keystone (S) locally.");let y=(await e.get({addrs:[b],space:a})).ibGibs?.[0];if(!y){n("\u2717 Check: Failed to load latest Session Keystone (S).");return}let g=y.data?.challengePools??[],w=g.find(I=>I.id===ke),C=g.find(I=>I.id===ot);if(w&&C)n("\u2713 Check: S contains both connect and sync challenge pools.");else{n(`\u2717 Check: S is missing challenge pools! (connect: ${!!w}, sync: ${!!C})`);return}let G=Object.keys(w.challenges).length;if(G===0)n("\u2713 Check: S connect pool successfully depleted (0 challenges remaining).");else{n(`\u2717 Check: S connect pool not depleted! (${G} challenges remaining)`);return}if(E.senderPeer&&E.senderPeer.isSocketOpen)n("\u2713 Check: WebSocket connection is active and OPEN.");else{n("\u2717 Check: WebSocket connection is NOT open or peer is missing!");return}n("\u{1F389} ALL PHASE 2B CONNECT CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 2B All Passed";let T=document.getElementById("btn-3b-setup");T&&(T.disabled=!1)}catch(e){n(`\u2717 2B Check FAILED: ${u(e)}`),console.error(`${r} 2B Check error:`,e)}})}h(en,"init2bCheckButton");function tn(){let r=document.getElementById("btn-3b-setup");r&&r.addEventListener("click",()=>{Oe({phaseText:"3B",btnId:"btn-3b-setup",nextBtnId:"btn-3b-sync",masterSecret:"test-sender-secret-phase3",syncSalt:"senderidentitysyncsaltphase3",manageSalt:"senderidentitymanagesaltphase3",ib:"test data 3b",data:{hello:"world3",random:Math.random()}})})}h(tn,"init3bSetupButton");function an(){let r=document.getElementById("btn-3b-sync");r&&r.addEventListener("click",()=>{He({phaseText:"3B",btnId:"btn-3b-sync",nextBtnId:"btn-3b-check"})})}h(an,"init3bSyncButton");function nn(){let r=`${X}[init3bCheckButton]`,t=document.getElementById("btn-3b-check");t&&t.addEventListener("click",async()=>{try{n("3B Check: Asserting cryptographic and WebSocket state expectations...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=E.domainI,i=E.targetX,o=p({ibGib:i}),c=p({ibGib:s}),d=await e.getLatestAddr({addr:o,space:a});if(!d){n("\u2717 Check: Evolved target X NOT found in local space!");return}n(`\u2713 Check: Evolved target X found locally at: ${d}`);let l=await e.getDependencyGraph({ibGibAddr:d,space:a});if(!l||Object.keys(l).length===0){n("\u2717 Check: Failed to load target X dependency graph locally.");return}n(`\u2713 Check: Target X local graph loaded (${Object.keys(l).length} nodes).`);let f=new R,b=await f.getIbGibGraph(c,o,!0);if(!b.success||!b.graph){n(`\u2717 Check: Failed to fetch target X graph from server: ${b.message}`);return}let m=b.graph;if(n(`\u2713 Check: Target X server graph loaded (${Object.keys(m).length} nodes).`),ee({graphA:l,graphB:m}))n("\u2713 Check: Target X dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Target X dependency graphs mismatch between client and server!");return}let g=await e.getLatestAddr({addr:c,space:a});if(!g){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists locally.");let C=(await e.get({addrs:[g],space:a})).ibGibs?.[0];if(!C){n("\u2717 Check: Failed to load I1 from local space.");return}let T=C.data?.proofs?.find(O=>O.claim?.verb==="sync")?.claim?.target;if(!T){n("\u2717 Check: I1 sync claim does not target a session keystone.");return}let I=await f.getIbGib(c,g);if(!I.success||!I.ibGib){n("\u2717 Check: Evolved Domain Keystone (I1) NOT found on server!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists on server.");let v=await e.getLatestAddr({addr:T,space:a});if(!v){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${v}`);let S=(await e.get({addrs:[v],space:a})).ibGibs?.[0];if(!S){n("\u2717 Check: Failed to load latest Session Keystone (S) locally.");return}let $=S.data?.n;n(`\u2713 Check: S tip evolved to n = ${$}.`),$!==3&&$!==4&&n(`\u26A0 Check: Expected S to evolve to n = 3 or 4, got n = ${$}. Continuing anyway...`);let B=await f.getIbGib(c,v);if(!B.success||!B.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let P=await e.getDependencyGraph({ibGibAddr:v,space:a}),N=await f.getIbGibGraph(c,T,!0);if(!N.success||!N.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${N.message}`);return}let k=N.graph;if(ee({graphA:P,graphB:k}))n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u{1F389} ALL PHASE 3B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 3B All Passed"}catch(e){n(`\u2717 3B Check FAILED: ${u(e)}`),console.error(`${r} 3B Check error:`,e)}})}h(nn,"init3bCheckButton");function rn(){let r=document.getElementById("btn-4-1b-setup");r&&r.addEventListener("click",()=>{Oe({phaseText:"4.1B",btnId:"btn-4-1b-setup",nextBtnId:"btn-4-1b-sync",masterSecret:"test-sender-secret-phase4-1",syncSalt:"senderidentitysyncsaltphase4-1",manageSalt:"senderidentitymanagesaltphase4-1",ib:"test data 4.1b",data:{hello:"world4_1",random:Math.random()}})})}h(rn,"init4_1bSetupButton");function on(){let r=document.getElementById("btn-4-1b-sync");r&&r.addEventListener("click",()=>{He({phaseText:"4.1B",btnId:"btn-4-1b-sync",nextBtnId:"btn-4-1b-check"})})}h(on,"init4_1bSyncButton");function sn(){let r=`${X}[init4_1bCheckButton]`,t=document.getElementById("btn-4-1b-check");t&&t.addEventListener("click",async()=>{try{n("4.1B Check: Asserting cryptographic and WebSocket state expectations...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=E.domainI,i=E.targetX,o=p({ibGib:i}),c=p({ibGib:s}),d=await e.getLatestAddr({addr:o,space:a});if(!d){n("\u2717 Check: Evolved target X NOT found in local space!");return}n(`\u2713 Check: Evolved target X found locally at: ${d}`);let l=await e.getDependencyGraph({ibGibAddr:d,space:a});if(!l||Object.keys(l).length===0){n("\u2717 Check: Failed to load target X dependency graph locally.");return}n(`\u2713 Check: Target X local graph loaded (${Object.keys(l).length} nodes).`);let f=new R,b=await f.getIbGibGraph(c,o,!0);if(!b.success||!b.graph){n(`\u2717 Check: Failed to fetch target X graph from server: ${b.message}`);return}let m=b.graph;if(n(`\u2713 Check: Target X server graph loaded (${Object.keys(m).length} nodes).`),ee({graphA:l,graphB:m}))n("\u2713 Check: Target X dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Target X dependency graphs mismatch between client and server!");return}let g=await e.getLatestAddr({addr:c,space:a});if(!g){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists locally.");let C=(await e.get({addrs:[g],space:a})).ibGibs?.[0];if(!C){n("\u2717 Check: Failed to load I1 from local space.");return}let{latestLocalDelegateAddr:G,sessionIdentityTjpAddr:T}=await la({localI:C,metaspace:e,space:a});if(!G){n("\u2717 Check: Evolved delegate keystone tip NOT found in local space!");return}if(!T){n("\u2717 Check: Delegate sync claim does not target a session keystone.");return}n("\u2713 Check: Delegate Keystone and Sync Claim to Session verified locally.");let I=await f.getIbGib(c,G);if(!I.success||!I.ibGib){n("\u2717 Check: Evolved Delegate Keystone NOT found on server!");return}n("\u2713 Check: Evolved Delegate Keystone exists on server.");let v=await f.getIbGib(c,g);if(!v.success||!v.ibGib){n("\u2717 Check: Evolved Domain Keystone (I1) NOT found on server!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists on server.");let _=await e.getLatestAddr({addr:T,space:a});if(!_){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${_}`);let $=(await e.get({addrs:[_],space:a})).ibGibs?.[0];if(!$){n("\u2717 Check: Failed to load latest Session Keystone (S) locally.");return}let B=$.data?.n;n(`\u2713 Check: S tip evolved to n = ${B}.`),B!==3&&B!==4&&n(`\u26A0 Check: Expected S to evolve to n = 3 or 4, got n = ${B}. Continuing anyway...`);let P=await f.getIbGib(c,_);if(!P.success||!P.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let N=await e.getDependencyGraph({ibGibAddr:_,space:a}),k=await f.getIbGibGraph(c,T,!0);if(!k.success||!k.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${k.message}`);return}let D=k.graph;if(ee({graphA:N,graphB:D}))n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u{1F389} ALL PHASE 4.1B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.1B All Passed"}catch(e){n(`\u2717 4.1B Check FAILED: ${u(e)}`),console.error(`${r} 4.1B Check error:`,e)}})}h(sn,"init4_1bCheckButton");function cn(){let r=document.getElementById("btn-4-2b-setup");r&&r.addEventListener("click",()=>{Oe({phaseText:"4.2B",btnId:"btn-4-2b-setup",nextBtnId:"btn-4-2b-sync",masterSecret:"test-sender-secret-phase4-2",syncSalt:"senderidentitysyncsaltphase4-2",manageSalt:"senderidentitymanagesaltphase4-2",ib:"dummy target 4.2b",data:{hello:"dummy"}})})}h(cn,"init4_2bSetupButton");async function yr(){let r=`${X}[performPhaseSync4_2b]`,t=document.getElementById("btn-4-2b-sync");if(t)try{if(t.disabled=!0,n("4.2B Sync: Creating Constants and executing three-pass WebSocket Sync..."),!E.domainI){n("\u26A0 4.2B Sync: Missing setup state. Please run Setup first."),t.disabled=!1;return}let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=await V.constant({parentPrimitiveIb:"root",ib:"constant_c1_"+(await ne()).slice(0,8),data:{some:"data_4_2b",random:Math.random()}}),i=p({ibGib:s});await e.put({ibGib:s,space:a}),await e.registerNewIbGib({ibGib:s}),E.targetC1=s,n(`4.2B Sync: \u2713 Constant C1 created: ${i}`),n("4.2B Sync: Starting Pass 1 (Sync C1)..."),await j({domainIbGibs:[s],passLabel:"Pass 1 (Sync C1)",metaspace:e,space:a}),n("4.2B Sync: \u2713 Pass 1 Complete."),n("4.2B Sync: Starting Pass 2 (Sync C1 - Idempotent)..."),await j({domainIbGibs:[s],passLabel:"Pass 2 (Sync C1 idempotent)",metaspace:e,space:a}),n("4.2B Sync: \u2713 Pass 2 Complete.");let o=await V.constant({ib:"constant_c2_"+(await ne()).slice(0,8),parentPrimitiveIb:"root",rel8ns:{link:[i]}}),c=p({ibGib:o});await e.put({ibGib:o,space:a}),await e.registerNewIbGib({ibGib:o}),E.targetC2=o,n(`4.2B Sync: \u2713 Constant C2 created linking to C1: ${c}`),n("4.2B Sync: Starting Pass 3 (Sync C2)..."),await j({domainIbGibs:[o],passLabel:"Pass 3 (Sync C2)",metaspace:e,space:a}),n("4.2B Sync: \u2713 Pass 3 Complete."),n("\u2713 4.2B Sync Sequence Complete! Ready for State Checks."),t.textContent="\u2713 4.2B Sync Run";let d=document.getElementById("btn-4-2b-check");d&&(d.disabled=!1)}catch(e){n(`\u2717 4.2B Sync FAILED: ${u(e)}`),console.error(`${r} 4.2B Sync error:`,e),t.disabled=!1}}h(yr,"performPhaseSync4_2b");function dn(){let r=document.getElementById("btn-4-2b-sync");r&&r.addEventListener("click",()=>{yr()})}h(dn,"init4_2bSyncButton");function ln(){let r=`${X}[init4_2bCheckButton]`,t=document.getElementById("btn-4-2b-check");t&&t.addEventListener("click",async()=>{try{n("4.2B Check: Asserting cryptographic and WebSocket state expectations...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=E.domainI,i=E.targetC1,o=E.targetC2,c=p({ibGib:i}),d=p({ibGib:o}),l=p({ibGib:s}),f=new R,b=await e.get({addrs:[c],space:a}),m=await e.get({addrs:[d],space:a});if(!b.success||!b.ibGibs?.[0]){n("\u2717 Check: Constant C1 NOT found locally.");return}if(!m.success||!m.ibGibs?.[0]){n("\u2717 Check: Constant C2 NOT found locally.");return}n("\u2713 Check: Constants C1 and C2 exist locally.");let y=await f.getIbGib(l,c),g=await f.getIbGib(l,d);if(!y.success||!y.ibGib){n(`\u2717 Check: Constant C1 NOT found on server: ${y.message}`);return}if(!g.success||!g.ibGib){n(`\u2717 Check: Constant C2 NOT found on server: ${g.message}`);return}n("\u2713 Check: Constants C1 and C2 exist on server.");let w=await e.getDependencyGraph({ibGibAddr:d,space:a}),C=await f.getIbGibGraph(l,d,!0);if(!C.success||!C.graph){n(`\u2717 Check: Failed to fetch C2 graph from server: ${C.message}`);return}if(!ee({graphA:w,graphB:C.graph})){n("\u2717 Check: C2 dependency graphs mismatch between client and server!");return}n("\u2713 Check: C2 dependency graphs are equivalent on client and server.");let G=await e.getLatestAddr({addr:l,space:a});if(!G){n("\u2717 Check: Domain keystone tip not found locally!");return}let I=(await e.get({addrs:[G],space:a})).ibGibs?.[0];if(!I){n("\u2717 Check: Failed to load domain keystone!");return}let v=I.data?.n;if(n(`\u2713 Check: Evolved I tip is at n = ${v}.`),v!==1){n(`\u2717 Check: Expected I to evolve to n = 1 (delegate registration only), got n = ${v}.`);return}let{sessionIdentityTjpAddr:_}=await ft({localI:I,metaspace:e,space:a,apiBridge:f,domainAddr:l}),S=await e.getLatestAddr({addr:_,space:a});if(!S){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${S}`);let B=(await e.get({addrs:[S],space:a})).ibGibs?.[0];if(!B){n("\u2717 Check: Failed to load Session Keystone (S) locally.");return}let P=B.data?.n;if(n(`\u2713 Check: Latest session S tip evolved to n = ${P}.`),P!==3){n(`\u2717 Check: Expected latest session S to evolve to n = 3 (connect+sync+disconnect), got n = ${P}.`);return}let N=await f.getIbGib(l,S);if(!N.success||!N.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let k=await e.getDependencyGraph({ibGibAddr:S,space:a}),D=await f.getIbGibGraph(l,_,!0);if(!D.success||!D.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${D.message}`);return}if(!ee({graphA:k,graphB:D.graph})){n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server."),n("\u{1F389} ALL PHASE 4.2B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.2B All Passed"}catch(e){n(`\u2717 4.2B Check FAILED: ${u(e)}`),console.error(`${r} 4.2B Check error:`,e)}})}h(ln,"init4_2bCheckButton");function fn(){let r=document.getElementById("btn-4-3b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.3B Setup: Generating Domain Keystone (I) and Target timeline V0 -> V1...");let t=await L(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new R;await ie({masterSecret:"test-sender-secret-phase4-3",syncSalt:"senderidentitysyncsaltphase4-3",manageSalt:"senderidentitymanagesaltphase4-3",metaspace:t,space:e,apiBridge:a,phaseText:"4.3B"});let s=await V.firstGen({parentIbGib:H,ib:"timeline_root_partial_4_3b",data:{type:"root",label:"Root4_3b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i});let o=await M({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1_4_3b"}},metaspace:t,space:e});E.targetC1=o,E.targetX=o,n(`4.3B Setup: \u2713 Timeline V0 -> V1 created and stored locally. V1: ${p({ibGib:o})}`),n("\u2713 4.3B Setup Complete! Ready for 4.3B Sync."),r.textContent="\u2713 4.3B Setup Complete";let c=document.getElementById("btn-4-3b-sync");c&&(c.disabled=!1)}catch(t){n(`\u2717 4.3B Setup FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(fn,"init4_3bSetupButton");async function Er(){let r=`${X}[performPhaseSync4_3b]`,t=document.getElementById("btn-4-3b-sync");if(t)try{t.disabled=!0;let e=E.targetX;if(!E.domainI||!e){n("\u26A0 4.3B Sync: Missing setup state. Please run Setup first."),t.disabled=!1;return}let a=await L(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");n("4.3B Sync: Starting Pass 1 (Sync V1 to server)..."),await j({domainIbGibs:[e],passLabel:"Pass 1 (Sync V1)",metaspace:a,space:s}),n("4.3B Sync: \u2713 Pass 1 Complete (V1 synced)."),n("4.3B Sync: Mutating V1 to V2 locally...");let i=await M({timeline:e,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V2_4_3b"}},metaspace:a,space:s});E.targetX=i,n(`4.3B Sync: \u2713 V2 created locally: ${p({ibGib:i})}`),n("4.3B Sync: Starting Pass 2 (Sync V2 delta to server)..."),await j({domainIbGibs:[i],passLabel:"Pass 2 (Sync V2)",metaspace:a,space:s}),n("4.3B Sync: \u2713 Pass 2 Complete (V2 synced)."),n("\u2713 4.3B Sync Sequence Complete! Ready for State Checks."),t.textContent="\u2713 4.3B Sync Run";let o=document.getElementById("btn-4-3b-check");o&&(o.disabled=!1)}catch(e){n(`\u2717 4.3B Sync FAILED: ${u(e)}`),console.error(e),t.disabled=!1}}h(Er,"performPhaseSync4_3b");function bn(){let r=document.getElementById("btn-4-3b-sync");r&&r.addEventListener("click",()=>{Er()})}h(bn,"init4_3bSyncButton");function pn(){let r=`${X}[init4_3bCheckButton]`,t=document.getElementById("btn-4-3b-check");t&&t.addEventListener("click",async()=>{try{n("4.3B Check: Asserting cryptographic and WebSocket state expectations...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=E.domainI,i=E.targetC1,o=E.targetX,c=p({ibGib:i}),d=p({ibGib:o}),l=p({ibGib:s}),f=new R,b=await e.get({addrs:[c],space:a}),m=await e.get({addrs:[d],space:a});if(!b.success||!b.ibGibs?.[0]){n("\u2717 Check: Timeline frame V1 NOT found locally.");return}if(!m.success||!m.ibGibs?.[0]){n("\u2717 Check: Timeline frame V2 NOT found locally.");return}n("\u2713 Check: Timeline frames V1 and V2 exist locally.");let y=await f.getIbGib(l,d);if(!y.success||!y.ibGib){n(`\u2717 Check: Timeline frame V2 NOT found on server: ${y.message}`);return}n("\u2713 Check: Timeline frame V2 exists on server.");let g=y.ibGib.rel8ns?.past?.at(-1);if(g===c)n("\u2713 Check: Server V2 correctly references V1 in its past relation.");else{n(`\u2717 Check: Server V2 does not reference V1 in past relation! got: ${g}`);return}let w=await e.getDependencyGraph({ibGibAddr:d,space:a}),C=await f.getIbGibGraph(l,d,!0);if(!C.success||!C.graph){n(`\u2717 Check: Failed to fetch V2 graph from server: ${C.message}`);return}if(!ee({graphA:w,graphB:C.graph})){n("\u2717 Check: V2 timeline dependency graphs mismatch between client and server!");return}n("\u2713 Check: V2 timeline dependency graphs are equivalent on client and server.");let G=await e.getLatestAddr({addr:l,space:a});if(!G){n("\u2717 Check: Domain keystone tip not found locally!");return}let I=(await e.get({addrs:[G],space:a})).ibGibs?.[0];if(!I){n("\u2717 Check: Failed to load domain keystone!");return}let v=I.data?.n;if(n(`\u2713 Check: Evolved I tip is at n = ${v}.`),v!==1){n(`\u2717 Check: Expected I to evolve to n = 1 (delegate registration only), got n = ${v}.`);return}let{sessionIdentityTjpAddr:_}=await ft({localI:I,metaspace:e,space:a,apiBridge:f,domainAddr:l}),S=await e.getLatestAddr({addr:_,space:a});if(!S){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${S}`);let B=(await e.get({addrs:[S],space:a})).ibGibs?.[0];if(!B){n("\u2717 Check: Failed to load Session Keystone (S) locally.");return}let P=B.data?.n;if(n(`\u2713 Check: Latest session S tip evolved to n = ${P}.`),P!==3){n(`\u2717 Check: Expected latest session S to evolve to n = 3, got n = ${P}.`);return}let N=await f.getIbGib(l,S);if(!N.success||!N.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let k=await e.getDependencyGraph({ibGibAddr:S,space:a}),D=await f.getIbGibGraph(l,_,!0);if(!D.success||!D.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${D.message}`);return}if(!ee({graphA:k,graphB:D.graph})){n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server."),n("\u{1F389} ALL PHASE 4.3B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.3B All Passed"}catch(e){n(`\u2717 4.3B Check FAILED: ${u(e)}`),console.error(`${r} 4.3B Check error:`,e)}})}h(pn,"init4_3bCheckButton");function mn(){let r=document.getElementById("btn-4-4b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.4B Setup: Generating Domain Keystone (I) and Target timeline V0 -> V1 -> V2...");let t=await L(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new R;await ie({masterSecret:"test-sender-secret-phase4-4",syncSalt:"senderidentitysyncsaltphase4-4",manageSalt:"senderidentitymanagesaltphase4-4",metaspace:t,space:e,apiBridge:a,phaseText:"4.4B"});let s=await V.firstGen({parentIbGib:H,ib:"timeline_root_deep_4_4b",data:{type:"root",label:"Root4_4b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i}),E.targetC1=i;let o=await M({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1_4_4b"}},metaspace:t,space:e});E.targetC2=o;let c=await M({timeline:o,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V2_4_4b"}},metaspace:t,space:e});E.targetX=c,n(`4.4B Setup: \u2713 Timeline V0 -> V1 -> V2 created locally. V2 Tip: ${p({ibGib:c})}`),n("\u2713 4.4B Setup Complete! Ready for 4.4B Sync."),r.textContent="\u2713 4.4B Setup Complete";let d=document.getElementById("btn-4-4b-sync");d&&(d.disabled=!1)}catch(t){n(`\u2717 4.4B Setup FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(mn,"init4_4bSetupButton");async function wr(){let r=`${X}[performPhaseSync4_4b]`,t=document.getElementById("btn-4-4b-sync");if(t)try{t.disabled=!0,n("4.4B Sync: Initiating WebSocket Sync of V2 Tip...");let e=E.targetX;if(!E.domainI||!e){n("\u26A0 4.4B Sync: Missing setup state. Please run Setup first."),t.disabled=!1;return}let a=await L(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");await j({domainIbGibs:[e],passLabel:"Pass 1 (Sync V2 tip)",metaspace:a,space:s}),n("4.4B Sync: \u2713 WebSocket Sync completed."),n("\u2713 4.4B Sync Sequence Complete! Ready for State Checks."),t.textContent="\u2713 4.4B Sync Run";let i=document.getElementById("btn-4-4b-check");i&&(i.disabled=!1)}catch(e){n(`\u2717 4.4B Sync FAILED: ${u(e)}`),console.error(e),t.disabled=!1}}h(wr,"performPhaseSync4_4b");function hn(){let r=document.getElementById("btn-4-4b-sync");r&&r.addEventListener("click",()=>{wr()})}h(hn,"init4_4bSyncButton");function gn(){let r=`${X}[init4_4bCheckButton]`,t=document.getElementById("btn-4-4b-check");t&&t.addEventListener("click",async()=>{try{n("4.4B Check: Asserting cryptographic and WebSocket state expectations...");let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=E.domainI,i=E.targetC1,o=E.targetC2,c=E.targetX,d=p({ibGib:i}),l=p({ibGib:o}),f=p({ibGib:c}),b=p({ibGib:s}),m=new R,y=await e.get({addrs:[d],space:a}),g=await e.get({addrs:[l],space:a}),w=await e.get({addrs:[f],space:a});if(!y.success||!y.ibGibs?.[0]){n("\u2717 Check: Timeline frame V0 NOT found locally.");return}if(!g.success||!g.ibGibs?.[0]){n("\u2717 Check: Timeline frame V1 NOT found locally.");return}if(!w.success||!w.ibGibs?.[0]){n("\u2717 Check: Timeline frame V2 NOT found locally.");return}n("\u2713 Check: Timeline frames V0, V1, and V2 exist locally.");let C=await m.getIbGib(b,f);if(!C.success||!C.ibGib){n(`\u2717 Check: Timeline frame V2 NOT found on server: ${C.message}`);return}n("\u2713 Check: Timeline frame V2 exists on server.");let G=C.ibGib.rel8ns?.past?.at(-1);if(G===l)n("\u2713 Check: Server V2 correctly references V1 in its past relation.");else{n(`\u2717 Check: Server V2 does not reference V1 in past relation! got: ${G}`);return}let T=await m.getIbGib(b,l);if(!T.success||!T.ibGib){n(`\u2717 Check: Timeline frame V1 NOT found on server: ${T.message}`);return}n("\u2713 Check: Timeline frame V1 exists on server.");let I=T.ibGib.rel8ns?.past?.at(-1);if(I===d)n("\u2713 Check: Server V1 correctly references V0 in its past relation.");else{n(`\u2717 Check: Server V1 does not reference V0 in past relation! got: ${I}`);return}let v=await e.getDependencyGraph({ibGibAddr:f,space:a}),_=await m.getIbGibGraph(b,f,!0);if(!_.success||!_.graph){n(`\u2717 Check: Failed to fetch V2 graph from server: ${_.message}`);return}if(!ee({graphA:v,graphB:_.graph})){n("\u2717 Check: V2 timeline dependency graphs mismatch between client and server!");return}n("\u2713 Check: V2 timeline dependency graphs are equivalent on client and server.");let S=await e.getLatestAddr({addr:b,space:a});if(!S){n("\u2717 Check: Domain keystone tip not found locally!");return}let B=(await e.get({addrs:[S],space:a})).ibGibs?.[0];if(!B){n("\u2717 Check: Failed to load domain keystone!");return}n(`\u2713 Check: Evolved Domain Keystone exists locally: ${S}`);let P=B.data?.n;if(n(`\u2713 Check: Evolved I tip is at n = ${P}.`),P!==1){n(`\u2717 Check: Expected I to evolve to n = 1, got n = ${P}.`);return}let{sessionIdentityTjpAddr:N}=await ft({localI:B,metaspace:e,space:a,apiBridge:m,domainAddr:b}),k=await e.getLatestAddr({addr:N,space:a});if(!k){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${k}`);let O=(await e.get({addrs:[k],space:a})).ibGibs?.[0];if(!O){n("\u2717 Check: Failed to load Session Keystone (S) locally.");return}let F=O.data?.n;if(n(`\u2713 Check: Latest session S tip evolved to n = ${F}.`),F!==3){n(`\u2717 Check: Expected latest session S to evolve to n = 3, got n = ${F}.`);return}let J=await m.getIbGib(b,k);if(!J.success||!J.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let de=await e.getDependencyGraph({ibGibAddr:k,space:a}),Q=await m.getIbGibGraph(b,N,!0);if(!Q.success||!Q.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${Q.message}`);return}if(!ee({graphA:de,graphB:Q.graph})){n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server."),n("\u{1F389} ALL PHASE 4.4B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.4B All Passed"}catch(e){n(`\u2717 4.4B Check FAILED: ${u(e)}`),console.error(`${r} 4.4B Check error:`,e)}})}h(gn,"init4_4bCheckButton");var yn={},un="test-sender-secret-phase4-5b";function En(){let r=document.getElementById("btn-4-5b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.5B Setup: Generating Domain Keystone (I), target timeline, and seeding server from two spaces...");let t=await L(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new R;await ie({masterSecret:un,syncSalt:"senderidentitysyncsaltphase4-5b",manageSalt:"senderidentitymanagesaltphase4-5b",metaspace:t,space:e,apiBridge:a,phaseText:"4.5B"});let s=await V.firstGen({parentIbGib:H,ib:"timeline_root_partial_4_5b",data:{type:"root",label:"Root4_5b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i,space:e});let o=await M({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1_4_5b"}},metaspace:t,space:e});E.targetC1=o,n(`4.5B Setup: \u2713 Local timeline V0 -> V1 created. V1 Tip: ${p({ibGib:o})}`),n("4.5B Setup: Seeding V1 to the server via WebSocket..."),await j({domainIbGibs:[o],passLabel:"Seed V1 to server",metaspace:t,space:e}),n("4.5B Setup: \u2713 Pass 1 Sync (V1 to server) complete."),n('4.5B Setup: Creating secondary local space simulating "remote" client...');let c=`remote-${await ne()}`,d=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:c,getFnPrompt:t.getFnPrompt}});if(!d)throw new Error("Failed to create remote space");await d.initialized;let l=await t.getDependencyGraph({ibGibAddr:p({ibGib:o}),space:e});await t.put({ibGibs:Object.values(l),space:d}),await t.registerNewIbGib({ibGib:o,space:d});let f=E.domainI;await ce({domainI:f,metaspace:t,fromSpace:e,toSpace:d}),n("4.5B Setup: \u2713 Copied V1 and identities (domain and delegate) to remoteSpace."),n("4.5B Setup: Mutating V1 -> V2 in remoteSpace...");let b=await M({timeline:o,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V2_4_5b"}},metaspace:t,space:d});yn.targetV2=b,n(`4.5B Setup: \u2713 Mutated to V2 in remoteSpace: ${p({ibGib:b})}`),n("4.5B Setup: Syncing V2 from remoteSpace to the server..."),await ye({domainIbGibs:[b],passLabel:"Seed V2 from remoteSpace",metaspace:t,space:d,primarySpace:e,domainI:f,masterSecret:un}),n("4.5B Setup: \u2713 Pass 2 Sync (V2 to server) complete. debugState.domainI updated."),n("\u2713 4.5B Setup Complete! Server has V2, default local space has V1. Ready for 4.5B Sync."),r.textContent="\u2713 4.5B Setup Complete";let m=document.getElementById("btn-4-5b-sync");m&&(m.disabled=!1)}catch(t){n(`\u2717 4.5B Setup FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(En,"init4_5bSetupButton");function wn(){let r=document.getElementById("btn-4-5b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.5B Sync: Initiating WebSocket Sync from default local space (which has V1, server has V2)...");let t=E.targetC1;if(!E.domainI||!t){n("\u26A0 4.5B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");await j({domainIbGibs:[t],passLabel:"Pull V2 from server",metaspace:e,space:a}),n("\u2713 4.5B Sync Execution Complete! Ready for 4.5B Check."),r.textContent="\u2713 4.5B Sync Run";let s=document.getElementById("btn-4-5b-check");s&&(s.disabled=!1)}catch(t){n(`\u2717 4.5B Sync FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(wn,"init4_5bSyncButton");function Sn(){let r=document.getElementById("btn-4-5b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.5B Check: Verifying that V2 was pulled down to default local space...");let t=yn.targetV2;if(!t||!E.domainI){n("\u26A0 4.5B Check: Missing target V2 in state. Did Setup run?"),r.disabled=!1;return}let e=p({ibGib:t}),a=p({ibGib:E.domainI}),s=await L(),i=await s.getLocalUserSpace({});if(!i)throw new Error("No default space.");let o=await s.get({addr:e,space:i});if(!o.success||o.ibGibs?.length!==1)throw new Error(`V2 tip (${e}) is NOT present in local space!`);let c=o.ibGibs[0];n(`4.5B Check: \u2713 V2 Tip found locally. Label: "${c.data?.label}"`);let d=await s.getDependencyGraph({ibGibAddr:e,space:i});n("4.5B Check: Fetching V2 dependency graph from server...");let f=await new R().getIbGibGraph(a,e,!0);if(!f.success||!f.graph)throw new Error(`Failed to fetch V2 graph from server: ${f.message}`);if(ee({graphA:d,graphB:f.graph}))n("\u2713 4.5B Check SUCCESS: V2 and all dependencies are fully equivalent on client and server!"),r.textContent="\u2713 4.5B Check Success";else throw new Error("Dependency graphs on local space and server are NOT equivalent.")}catch(t){n(`\u2717 4.5B Check FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(Sn,"init4_5bCheckButton");var bt={},Sr="test-sender-secret-phase4-6b";function In(){let r=document.getElementById("btn-4-6b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.6B Setup: Generating Domain Keystone (I) and two independent target timelines (Alpha and Beta)...");let t=await L(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new R;await ie({masterSecret:Sr,syncSalt:"senderidentitysyncsaltphase4-6b",manageSalt:"senderidentitymanagesaltphase4-6b",metaspace:t,space:e,apiBridge:a,phaseText:"4.6B"});let s=await V.firstGen({parentIbGib:H,ib:"timeline_root_alpha_4_6b",data:{type:"root",label:"Alpha4_6b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i,space:e});let o=await M({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"A1_4_6b"}},metaspace:t,space:e});bt.targetAlphaV1=o,E.targetC1=o,n(`4.6B Setup: \u2713 Local Timeline A created. A1 Tip: ${p({ibGib:o})}`);let c=await V.firstGen({parentIbGib:H,ib:"timeline_root_beta_4_6b",data:{type:"root",label:"Beta4_6b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),d=c.newIbGib;await t.persistTransformResult({resTransform:c,space:e}),await t.registerNewIbGib({ibGib:d,space:e});let l=await M({timeline:d,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"B1_4_6b"}},metaspace:t,space:e}),f=await M({timeline:l,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"B2_4_6b"}},metaspace:t,space:e});bt.targetBetaV2=f,E.targetC2=f,n(`4.6B Setup: \u2713 Local Timeline B created. B2 Tip: ${p({ibGib:f})}`),n("\u2713 4.6B Setup Complete! Timelines created locally. Ready for 4.6B Sync."),r.textContent="\u2713 4.6B Setup Complete";let b=document.getElementById("btn-4-6b-sync");b&&(b.disabled=!1)}catch(t){n(`\u2717 4.6B Setup FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(In,"init4_6bSetupButton");function _n(){let r=document.getElementById("btn-4-6b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.6B Sync: Initiating WebSocket Sync for both Timeline A and Timeline B in one call...");let t=bt.targetAlphaV1,e=bt.targetBetaV2;if(!E.domainI||!t||!e){n("\u26A0 4.6B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let a=await L(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");await j({domainIbGibs:[t,e],passLabel:"Sync Alpha A1 + Beta B2",metaspace:a,space:s}),n("\u2713 4.6B Sync Execution Complete! Ready for 4.6B Check."),r.textContent="\u2713 4.6B Sync Run";let i=document.getElementById("btn-4-6b-check");i&&(i.disabled=!1)}catch(t){n(`\u2717 4.6B Sync FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(_n,"init4_6bSyncButton");function Gn(){let r=document.getElementById("btn-4-6b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.6B Check: Verifying both Timeline A and Timeline B exist on the server with matching dependency graphs...");let t=bt.targetAlphaV1,e=bt.targetBetaV2;if(!E.domainI||!t||!e){n("\u26A0 4.6B Check: Missing state. Did Setup and Sync run?"),r.disabled=!1;return}let a=p({ibGib:E.domainI}),s=p({ibGib:t}),i=p({ibGib:e}),o=await L(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let d=new R;n("4.6B Check: Fetching Timeline A dependency graph from server...");let l=await d.getIbGibGraph(a,s,!0);if(!l.success||!l.graph)throw new Error(`Failed to fetch Timeline A graph from server: ${l.message}`);let f=await o.getDependencyGraph({ibGibAddr:s,space:c});if(!ee({graphA:f,graphB:l.graph}))throw new Error("Timeline A dependency graphs on local space and server are NOT equivalent.");n("4.6B Check: \u2713 Timeline A graphs are equivalent."),n("4.6B Check: Fetching Timeline B dependency graph from server...");let b=await d.getIbGibGraph(a,i,!0);if(!b.success||!b.graph)throw new Error(`Failed to fetch Timeline B graph from server: ${b.message}`);let m=await o.getDependencyGraph({ibGibAddr:i,space:c});if(!ee({graphA:m,graphB:b.graph}))throw new Error("Timeline B dependency graphs on local space and server are NOT equivalent.");n("4.6B Check: \u2713 Timeline B graphs are equivalent."),n("\u2713 4.6B Check SUCCESS: Both independent timelines are fully synced and identical on client and server!"),r.textContent="\u2713 4.6B Check Success"}catch(t){n(`\u2717 4.6B Check FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(Gn,"init4_6bCheckButton");var et={},Cn="test-sender-secret-phase4-7b";function An(){let r=document.getElementById("btn-4-7b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.7B Setup: Setting up identities, seeding history, and creating divergent branches...");let t=await L(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new R;await ie({masterSecret:Cn,syncSalt:"senderidentitysyncsaltphase4-7b",manageSalt:"senderidentitymanagesaltphase4-7b",metaspace:t,space:e,apiBridge:a,phaseText:"4.7B"});let s=E.domainI,i=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:"remote_space_4_7b",getFnPrompt:t.getFnPrompt}});await i.initialized,await t.put({ibGib:s,space:i}),await t.registerNewIbGib({ibGib:s,space:i});let o=await V.firstGen({parentIbGib:H,ib:"timeline_root_conflict_4_7b",data:{type:"root",label:"CommonRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),c=o.newIbGib;await t.persistTransformResult({resTransform:o,space:e}),await t.registerNewIbGib({ibGib:c,space:e}),et.testRoot=c;let d=await M({timeline:c,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1Common"}},metaspace:t,space:e}),l=await t.getDependencyGraph({ibGibAddr:p({ibGib:c}),space:e}),f=await t.getDependencyGraph({ibGibAddr:p({ibGib:d}),space:e});await t.put({ibGibs:Object.values({...l,...f}),space:i}),await t.registerNewIbGib({ibGib:c,space:i}),await t.registerNewIbGib({ibGib:d,space:i}),n("4.7B Setup: Syncing v1_common to server..."),await j({domainIbGibs:[d],passLabel:"Seed v1_common",metaspace:t,space:e}),n("4.7B Setup: \u2713 Seeding complete on server.");let b=E.domainI;await ce({domainI:b,metaspace:t,fromSpace:e,toSpace:i});let m=await M({timeline:d,mut8Opts:{dataToAddOrPatch:{fieldA:"source_edit"}},metaspace:t,space:e});et.targetAlphaV2a=m,n(`4.7B Setup: \u2713 Created client divergent edit V2a: ${p({ibGib:m})}`);let y=await M({timeline:d,mut8Opts:{dataToAddOrPatch:{fieldB:"dest_edit"}},metaspace:t,space:i});et.targetBetaV2b=y,n(`4.7B Setup: \u2713 Created remote divergent edit V2b: ${p({ibGib:y})}`),n("4.7B Setup: Pushing V2b from remote space to server..."),await ye({domainIbGibs:[y],passLabel:"Push V2b from remoteSpace",metaspace:t,space:i,primarySpace:e,domainI:b,masterSecret:Cn}),n("4.7B Setup: \u2713 Server tip is now V2b."),n("\u2713 4.7B Setup Complete! Ready for 4.7B Sync."),r.textContent="\u2713 4.7B Setup Complete";let g=document.getElementById("btn-4-7b-sync");g&&(g.disabled=!1)}catch(t){n(`\u2717 4.7B Setup FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(An,"init4_7bSetupButton");function vn(){let r=document.getElementById("btn-4-7b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.7B Sync: Initiating WebSocket Sync for divergent edit V2a...");let t=et.targetAlphaV2a;if(!E.domainI||!t){n("\u26A0 4.7B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let e=await L(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");await j({domainIbGibs:[t],passLabel:"Sync V2a (conflict merge)",metaspace:e,space:a}),n("\u2713 4.7B Sync Execution Complete! Ready for 4.7B Check."),r.textContent="\u2713 4.7B Sync Run";let s=document.getElementById("btn-4-7b-check");s&&(s.disabled=!1)}catch(t){n(`\u2717 4.7B Sync FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(vn,"init4_7bSyncButton");function Tn(){let r=document.getElementById("btn-4-7b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.7B Check: Verifying merged tip (V3) contains both edits on client and server...");let t=et.testRoot,e=et.targetAlphaV2a,a=et.targetBetaV2b;if(!E.domainI||!t||!e||!a){n("\u26A0 4.7B Check: Missing state. Did Setup and Sync run?"),r.disabled=!1;return}let s=p({ibGib:E.domainI}),i=le({ibGib:t,defaultIfNone:"incomingAddr"})??p({ibGib:t}),o=await L(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let l=(await o.getLocalUserSpace({}).then(T=>new ae().getKnowledgeMap({space:T,metaspace:o,domainIbGibs:[t]})))[i];if(n(`4.7B Check: Client tip address: ${l}`),!l)throw new Error("Client default space is missing the timeline tip.");let f=await o.get({addr:l,space:c});if(!f.success||!f.ibGibs?.length)throw new Error("Client tip not found in default local space.");let b=f.ibGibs[0];if(!b.data?.fieldA||!b.data?.fieldB)throw new Error(`Merged client tip missing edits: fieldA: ${b.data?.fieldA}, fieldB: ${b.data?.fieldB}`);n("4.7B Check: \u2713 Client tip has both fieldA and fieldB edits.");let m=b.rel8ns?.[Te];if(!m?.[0])throw new Error("Client tip is missing graftinfo relations.");let y=await o.get({addr:m[0],space:c});if(!y.success||!y.ibGibs?.length)throw new Error("GraftInfo not found in local space.");let g=y.ibGibs[0];if(!g.rel8ns?.[Ke]||!g.rel8ns?.[Pe])throw new Error("GraftInfo is missing graftbase or graftorphan relations.");n("4.7B Check: \u2713 Client graft base and orphan relations are correctly set.");let C=await new R().getIbGibGraph(s,l,!0);if(!C.success||!C.graph)throw new Error(`Failed to fetch merged graph from server: ${C.message}`);let G=C.graph[l];if(!G)throw new Error("Merged V3 tip is not present on the server!");if(G.data?.fieldA!=="source_edit"||G.data?.fieldB!=="dest_edit")throw new Error("Server tip data edits do not match merged values.");n("4.7B Check: \u2713 Server tip has matching merged edits."),n("\u2713 4.7B Check SUCCESS: Divergent branches merged successfully via optimistic graft!"),r.textContent="\u2713 4.7B Check Success"}catch(t){n(`\u2717 4.7B Check FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(Tn,"init4_7bCheckButton");var _e={};function $n(){let r=document.getElementById("btn-4-8b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.8B Setup: Setting up identities, seeding history, and creating divergent branches in client and remote...");let t=await L(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new R;await ie({masterSecret:"test-sender-secret-phase4-8b",syncSalt:"senderidentitysyncsaltphase4-8b",manageSalt:"senderidentitymanagesaltphase4-8b",metaspace:t,space:e,apiBridge:a,phaseText:"4.8B"});let s=E.domainI;_e.domainI_latest=s;let i=p({ibGib:s});n("4.8B Setup: Creating temporary remote space...");let o=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:"remote_space_4_8b",getFnPrompt:t.getFnPrompt}});await o.initialized,await ce({domainI:s,metaspace:t,fromSpace:e,toSpace:o});let c=await V.firstGen({parentIbGib:H,ib:"timeline_root_conflict_4_8b",data:{type:"root",label:"CommonRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),d=c.newIbGib;await t.persistTransformResult({resTransform:c,space:e}),await t.registerNewIbGib({ibGib:d,space:e}),_e.testRoot=d;let l=await M({timeline:d,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1Common"}},metaspace:t,space:e}),f=await t.getDependencyGraph({ibGibAddr:p({ibGib:d}),space:e}),b=await t.getDependencyGraph({ibGibAddr:p({ibGib:l}),space:e}),m={...f,...b};await t.put({ibGibs:Object.values(m),space:o}),await t.registerNewIbGib({ibGib:d,space:o}),await t.registerNewIbGib({ibGib:l,space:o}),n("4.8B Setup: Syncing v1_common to server..."),await j({domainIbGibs:[l],passLabel:"Seed v1_common",metaspace:t,space:e}),n("4.8B Setup: \u2713 Seeding complete on server."),await ce({domainI:E.domainI,metaspace:t,fromSpace:e,toSpace:o});let y=await V.firstGen({parentIbGib:H,ib:"beta_multitimelines_withid_4_8b",data:{fieldA:"beta field A created on source"},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),g=y.newIbGib;await t.persistTransformResult({resTransform:y,space:e}),await t.registerNewIbGib({ibGib:g,space:e}),_e.targetBetaV0=g,n(`4.8B Setup: \u2713 Created client independent related timeline Beta: ${p({ibGib:g})}`);let w=await M({timeline:l,mut8Opts:{dataToAddOrPatch:{fieldA:"source_edit"}},metaspace:t,space:e}),C=await ze({timeline:w,metaspace:t,space:e,rel8nInfos:[{rel8nName:"testrel8n",ibGibs:[g]}]});_e.targetAlphaV3a=C,n(`4.8B Setup: \u2713 Created client divergent edit V3a: ${p({ibGib:C})}`);let G=await M({timeline:l,mut8Opts:{dataToAddOrPatch:{fieldB:"dest_edit"}},metaspace:t,space:o});n(`4.8B Setup: \u2713 Created remote divergent edit V2b: ${p({ibGib:G})}`),n("4.8B Setup: Pushing V2b from remote space to server..."),await ye({domainIbGibs:[G],passLabel:"Push V2b from remoteSpace",metaspace:t,space:o,primarySpace:e,domainI:E.domainI,masterSecret:"test-sender-secret-phase4-8b"}),_e.domainI_latest=E.domainI,n("4.8B Setup: \u2713 Server tip is now V2b. Evolved identity copied back."),n("\u2713 4.8B Setup Complete! Ready for 4.8B Sync."),r.textContent="\u2713 4.8B Setup Complete";let T=document.getElementById("btn-4-8b-sync");T&&(T.disabled=!1)}catch(t){n(`\u2717 4.8B Setup FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h($n,"init4_8bSetupButton");function Bn(){let r=document.getElementById("btn-4-8b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.8B Sync: Initiating WebSocket Sync for divergent edit V3a (with related timeline Beta)...");let t=_e.domainI_latest,e=_e.targetAlphaV3a;if(!t||!e){n("\u26A0 4.8B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let a=await L(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");await j({domainIbGibs:[e],passLabel:"Sync V3a and merge",metaspace:a,space:s}),_e.domainI_latest=E.domainI,n("\u2713 4.8B Sync Execution Complete! Ready for 4.8B Check."),r.textContent="\u2713 4.8B Sync Run";let i=document.getElementById("btn-4-8b-check");i&&(i.disabled=!1)}catch(t){n(`\u2717 4.8B Sync FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(Bn,"init4_8bSyncButton");function Nn(){let r=document.getElementById("btn-4-8b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.8B Check: Verifying merged tip (V4) contains both edits on client and server...");let t=_e.domainI_latest,e=_e.testRoot,a=_e.targetAlphaV3a,s=_e.targetBetaV0;if(!t||!e||!a||!s){n("\u26A0 4.8B Check: Missing state. Did Setup and Sync run?"),r.disabled=!1;return}let i=p({ibGib:t}),o=le({ibGib:e,defaultIfNone:"incomingAddr"})??p({ibGib:e}),c=p({ibGib:s}),d=await L(),l=await d.getLocalUserSpace({});if(!l)throw new Error("No default space.");let b=(await d.getLocalUserSpace({}).then($=>new ae().getKnowledgeMap({space:$,metaspace:d,domainIbGibs:[e]})))[o];if(n(`4.8B Check: Client tip address: ${b}`),!b)throw new Error("Client default space is missing the timeline tip.");let m=await d.get({addr:b,space:l});if(!m.success||!m.ibGibs||m.ibGibs.length===0)throw new Error("Client tip not found in default local space.");let y=m.ibGibs[0];if(!y.data||!y.data.fieldA||!y.data.fieldB)throw new Error(`Merged client tip is missing expected data edits: fieldA: ${y.data?.fieldA}, fieldB: ${y.data?.fieldB}`);n("4.8B Check: \u2713 Client tip has both fieldA and fieldB edits.");let g=y.rel8ns?.[Te];if(!g?.[0])throw new Error("Client tip is missing graftinfo relations.");let w=await d.get({addr:g[0],space:l});if(!w.success||!w.ibGibs||w.ibGibs.length===0)throw new Error("GraftInfo not found in local space.");let C=w.ibGibs[0],G=C.rel8ns?.[Ke],T=C.rel8ns?.[Pe];if(!G||!T)throw new Error("GraftInfo is missing graftbase or graftorphan relations.");n("4.8B Check: \u2713 Client graft base and orphan relations are correctly set.");let I=new R;n("4.8B Check: Fetching server timeline graph...");let v=await I.getIbGibGraph(i,b,!0);if(!v.success||!v.graph)throw new Error(`Failed to fetch merged graph from server: ${v.message}`);let _=v.graph[b];if(!_)throw new Error("Merged V4 tip is not present on the server!");if(_.data?.fieldA!=="source_edit"||_.data?.fieldB!=="dest_edit")throw new Error("Server tip data edits do not match merged values.");n("4.8B Check: \u2713 Server tip has matching merged edits."),n("4.8B Check: Verifying related timeline Beta is present on the server...");let S=await I.getIbGibGraph(i,c,!0);if(!S.success||!S.graph||!S.graph[c])throw new Error(`Related timeline Beta (${c}) is missing from the server!`);n("4.8B Check: \u2713 Related timeline Beta successfully verified on the server."),n("\u2713 4.8B Check SUCCESS: Divergent branches merged successfully and related timeline synced on server!"),r.textContent="\u2713 4.8B Check Success"}catch(t){n(`\u2717 4.8B Check FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(Nn,"init4_8bCheckButton");var xe={},Ut=`This is the initial quiz question.
|
|
9
|
+
...(I: d8e11827d88a3454d887ff05fb4ff526)`),i}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{Q&&console.log(`${e} complete.`)}}m(at,"getFullSyncSagaHistory");async function Nt({sagaIbGib:r}){let t=`[${Nt.name}]`;try{Q&&console.log(`${t} starting... (I: dac978e9ec5820f128fbbff817b82826)`);let e=await xe({ibGib:r})??[];if(e.length>0)return e;if(r.data){let{data:a}=r;a.uuid||e.push("data.uuid required (E: aa24eeda7b88d22e5832a2e8083c0826)"),a.timestamp||e.push("data.timestamp required (E: 9c82a88548f4b63c38687428754b3826)"),a.timestampMs||a.timestampMs===0||e.push("data.timestampMs required (E: 9c82a88548f4b63c38687428754b3826)"),a.conflictStrategy?Gt(a.conflictStrategy)||e.push(`data.conflictStrategy (${a.conflictStrategy}) is invalid. Must be one of "${He}". (E: 6223a8813b688fa2c8644fa8a491bf26)`):e.push("data.conflictStrategy required (E: 9c82a88548f4b63c38687428754b3826)"),a.expirationTimestamp,a.errors,a.successCount}else e.push("sagaIbGib.data falsy (E: 4de5e8de589d0af7245600fb4fe30926)");if(r.rel8ns){let a=r.rel8ns[de];a&&a.length>0||e.push("sagaIbGib.rel8ns[SYNC_MSG_REL8N_NAME] required. (E: df648dc18148e718682acb4842ecf826)")}else e.push("sagaIbGib.rel8ns falsy (E: da37aa492a7275b68a5e1912c7a5e126)");return e}catch(e){throw console.error(`${t} ${h(e)}`),e}finally{Q&&console.log(`${t} complete.`)}}m(Nt,"validateSyncSagaFrame");async function Lt({history:r}){let t=`[${Lt.name}]`;try{return Q&&console.log(`${t} starting... (I: df02b802f6989096b8d8f728e2c0a526)`),console.error(`${t} NAG ERROR (NOT THROWN) need to implement more validation on full saga history. (E: 9bfcc9247a1c783fd361a4a8216fef26)`),[]}catch(e){throw console.error(`${t} ${h(e)}`),e}finally{Q&&console.log(`${t} complete.`)}}m(Lt,"validateFullSyncSagaHistory");async function yt({ibGibs:r,space:t}){let e=`[${yt.name}]`;try{Q&&console.log(`${e} starting... (I: aa3ab828402836b3914800a8ffa1b826)`);let a=[],s=[];for(let i of r)ya({ibGib:i})||(ua({ibGib:i})?a.push(i):s.push(i));return a.length>0&&await _e({ibGibs:a,isDna:!0,space:t}),s.length>0&&await _e({ibGibs:s,isDna:!1,space:t}),{payload_Dnas:a,payload_NonDnas:s}}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{Q&&console.log(`${e} complete.`)}}m(yt,"putInSpace_dnasThenNonDnas");function nt({sagaFrame:r}){let t=`[${nt.name}]`;try{if(Q&&console.log(`${t} starting... (I: 93521332d0dd2f5e88398b7db95e8126)`),!r)throw new Error("(UNEXPECTED) sagaFrame falsy? (E: 01fb28be6668d88ea49bb298c739c926)");if(!r.data)throw new Error("(UNEXPECTED) sagaFrame.data falsy? (E: 998298eb17685bdb9a85b46488ccd826)");if(!r.data.n&&r.data.n!==0)throw new Error("(UNEXPECTED) sagaFrame.data.n falsy and not 0? (E: 0394919d5b58300ceb09ba6a264ad826)");let e=r.data.n%2;if(e===0)return Ct.sender;if(e===1)return Ct.receiver;throw new Error("(UNEXPECTED) modulo is neither 0 nor 1? my logic sucks! This was way too defensive on my part... (E: 559488a2eef8d17b57079ca8886ee826)")}catch(e){throw console.error(`${t} ${h(e)}`),e}finally{Q&&console.log(`${t} complete.`)}}m(nt,"getSyncSagaFrameOrigin");async function kt({sagaHistory:r}){let t=`[${kt.name}]`;try{Q&&console.log(`${t} starting... (I: fe93a8f29e5d8ab2c8bd0e08e56f7826)`);let e=r.findLast(i=>i.msgStones.some(o=>o.data.stage===W.delta));if(!e)throw new Error("(UNEXPECTED) no delta frame? What are we calling this function for? (E: 9b3201207908f79868b93cd893a91626)");let a=e.msgStones.filter(i=>i.data.stage===W.delta);if(a.length>1)throw new Error("(UNEXPECTED) multiple delta stones in history slice? we're expecting a single delta stone per saga frame. (E: a4bd5860b4aa0743753d4798d3163826)");return a[0].data.conflicts}catch(e){throw console.error(`${t} ${h(e)}`),e}finally{Q&&console.log(`${t} complete.`)}}m(kt,"getFinalConflictsInfo");async function ra({sagaHistory:r,myTempSpace:t}){let e=`[${ra.name}]`;try{Q&&console.log(`${e} starting... (I: b755627e99c9a221566d86a81b0da526)`);let a=await kt({sagaHistory:r});if(!a||a.length===0)return Q&&console.log(`${e} no conflicts found. returning empty array (I: 5dce98010128a284c8ec92cd466a3826)`),[];let s=[];for(let i of a){if(!i.resolved)throw new Error("(UNEXPECTED) conflict.resolved falsy? we're expecting all conflicts to be resolved when getting orphaned addresses. (E: 3861e89a18c8ff405eb2117f6d4b9b26)");if(!i.graftInfoAddr)throw new Error("(UNEXPECTED) conflict.graftInfoAddr falsy? we're expecting a resolved conflict whose final ibgib (graft tip) was the graft info and for this addr to be in conflict.graftInfoAddr. (E: 80d86e333028585908f4757bc4d6f826)");let o=await Te({addrs:[i.graftInfoAddr],space:t});if(o.length!==1)throw new Error(`(UNEXPECTED) couldn't get conflict.graftInfoAddr (${i.graftInfoAddr}) from myTempSpace (${t.ib})? (E: cf1fe87096f8ea22f84f250d7ab30226)`);let c=o[0];if(!aa(c))throw new Error(`(UNEXPECTED) graft info from conflict.graftInfoAddr (${i.graftInfoAddr}) does not pass the isGraftInfo guard? We're expecting this addr to point to a valid GraftInfoIbGib_V1 (E: 6aa9ecb9a428d92be8d1bdbe0696f826)`);let d=c.rel8ns[Ne];if(!d||d.length===0)throw new Error(`(UNEXPECTED) orphanedAddrs empty for conflict graftInfo (${i.graftInfoAddr})? we're expecting a graft to always necessarily orphan one or other branches, otherwise what are we "grafting"? (E: 3ed1284f6ca84754582801484d751926)`);d.forEach(l=>s.push(l))}return s}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{Q&&console.log(`${e} complete.`)}}m(ra,"getAllOrphanedAddresses");async function We({senderSecret:r,sagaId:t}){let e=`[${We.name}]`;try{if(Q&&console.log(`${e} starting... (I: 0de03f8dcd3e32f1fca244e8f2a8a826)`),!r)throw new Error("(UNEXPECTED) senderSecret falsy? (E: 8ce053fe59825a6678713128953b9d26)");if(!t)throw new Error("(UNEXPECTED) sagaId falsy? (E: 3a17e0c1b2f849de8a42cd15b8ee6826)");return await Da({masterSecret:r,kdfOpts:{strategy:ka.recursive_salt_wrap,salt:t,rounds:1e4,algorithm:"SHA-256"}})}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{Q&&console.log(`${e} complete.`)}}m(We,"deriveSessionSecret");var Dt="sync_sagacontext";var Et=!1;async function oa({data:r}){let t=`[${oa.name}]`;try{if(!r)throw new Error("data required (E: 839d82138c234b3e89582855594191fe)");let e=r["@payloadAddrsDomain"]?r["@payloadAddrsDomain"].length:0;return[Dt,r.sagaN,e].join(" ")}catch(e){throw console.error(`${t} ${h(e)}`),e}}m(oa,"getSyncSagaContextIb");async function Ve({context:r}){let t=`[${Ve.name}]`;try{Et&&console.log(`${t} starting... (I: 7797f8294bd8f7e5089cb722ad468226)`);let e=[],a=await xe({ibGib:r});if(a&&a.length>0)return a.forEach(s=>e.push(s)),e;if(r.sagaFrame?(await Nt({sagaIbGib:r.sagaFrame})).forEach(i=>e.push(i)):e.push("context.sagaFrame is falsy. (E: b4edd88f4963f493789f83b29ba2df26)"),r.sagaFrameMsg){if((await xe({ibGib:r.sagaFrameMsg})??[]).forEach(i=>e.push(i)),r.sagaFrame){let i=r.sagaFrame.rel8ns?.[de]?.[0];if(i){let o=p({ibGib:r.sagaFrameMsg});o!==i&&e.push(`context.sagaFrameMsg address (${o}) does not match the stone address referenced in sagaFrame relations (${i}). (E: a983b271fcae46bbad7e82098bc24826)`)}else e.push(`context.sagaFrame is missing the message stone relation '${de}'. (E: da872cf3a8d46dbbad89d0a68d712826)`)}}else e.push("context.sagaFrameMsg is falsy. (E: ed405a72ab0d8bbdca7b9605d8f9a26)");return e.length>0?e:(console.error(`${t} NAG ERROR MSG (NOT THROWN): not fully implemented yet (E: d574d85cb578637648ed403857f7a826)`),[])}catch(e){throw console.error(`${t} ${h(e)}`),e}finally{Et&&console.log(`${t} complete.`)}}m(Ve,"validateContextAndSagaFrame");async function sa({context:r,space:t}){let e=`[${sa.name}]`;try{Et&&console.log(`${e} starting... (I: 3c34e8f1d6ef965f98725c88459ea926)`);let a=[];if(!r.data)throw new Error("(UNEXPECTED) context.data falsy? (E: 3e4ddd0eb4b828ad489658d88d9a6326)");if(!r.rel8ns)throw new Error("(UNEXPECTED) context.rel8ns falsy? (E: 8026589d4fed69c828334ee842074326)");let{sagaFrame:s,signedSessionIdentity:i}=r;if(!s.data)throw new Error("(UNEXPECTED) sagaFrame.data falsy? (E: b61cc82d25984c92f75db74a5a855b26)");if(!i)return console.error(`${e}[NAG][not thrown] sagaFrame.data.sessionIdentityTjpAddr logic needs to be added in coordinator (E: 4fc47800a1086c917a47381824280826)`),s.data.sessionIdentityTjpAddr?(a.push("Context has no session identity, but sync saga frame shows a session identity (sagaFrame.data.sessionIdentityTjpAddr is truthy). (E: 69dd6cdc2e1859c0f3d62958c4339826)"),a):r.rel8ns.sessionIdentity?(a.push("Context has no signed session identity, but context.rel8ns.sessionIdentity is truthy. (E: 96a04a8a6c88ea8bf88118f89ad8e326)"),a):(Et&&console.log(`${e} context has no signedSessionIdentity and sync saga frame doesn't state there should be session identity. So nothing further to authenticate - returning early with no authentication errors. (I: d708735f9a2899ee98f762b8a09ed826)`),[]);let o=p({ibGib:i}),c=r.rel8ns?.sessionIdentity??[];if(c.length===0)return a.push("context.rel8ns.sessionIdentity is falsy/empty but context.signedSessionIdentity is present. (E: 66f906421eb2468c0b33f908a3cf2826)"),a;if(c.length>1)return a.push("context.rel8ns.sessionIdentity has multiple identity addrs. (E: 489428bfe6fdaa4cd885b938dc4c5826)"),a;let d=c[0],l=await ze({addrs:[d],space:t});if(!l)throw new Error(`(UNEXPECTED) resGetLatestAddr for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: 7b207e5cbcec9037ea5adbe822ead826)`);if(!l.data)throw new Error(`(UNEXPECTED) resGetLatestAddr.data for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: de4eb8d730c8c4dcb59c8b9c79277826)`);if(!l.data.success)throw new Error("(UNEXPECTED) resGetLatestAddr.data.success falsy? (E: c94298dfd9684ad6a87eb748459aa826)");let{latestAddrsMap:f}=l.data;if(!f)throw new Error("(UNEXPECTED) resGetLatestAddr.data.latestAddrsMap falsy? (E: 19f1fd5fe798cf2e5fa923919169d826)");if(Object.keys(f).length!==1)throw new Error("(UNEXPECTED) Object.keys(latestAddrsMap).length !== 1? (E: fe526a0747589c6427a8bcc86da34a26)");let b=f[d];if(!b)return a.push(`prevSessionIdentityAddr (${d}) not found in space (${t.ib}). this should have been the incoming prevSessionIdentityAddr (E: f6d042bd6b54819998653228dee34226)`),a;if(d!==b&&b!==o)return a.push(`context.rel8ns.sessionIdentity does not point to the most recent in the space (${t.ib}). (E: 2f8288f53c87b6aa47bd2178d9df0c26)`),console.log(`context: ${ee(bt({ibGib:r}))}`),console.log(`prevSessionIdentityAddr (context.rel8ns.sessionIdentity): ${d}`),console.log(`prevSessionIdentityAddr_latest: ${b}`),console.log(`currSessionIdentity (context.signedSessionIdentity): ${ee(bt({ibGib:{ib:i.ib,gib:i.gib,rel8ns:i.rel8ns,data:{...i.data,challengePools:i.data.challengePools.map(R=>({...R,challenges:{}}))}}}))}`),console.log(`currSessionIdentityAddr: ${o}`),a;let g=await ce({addr:d,space:t});if(!g.success||g.ibGibs?.length!==1)return a.push(`could not fetch latest sender identity ${d} from space (${t.ib}). (E: fd48c3e64c9fa4efd8a1f8280af18226)`),a;let E=g.ibGibs[0],u=await Ea({ibGib:E,naive:!0,space:t});if(!u)throw new Error(`(UNEXPECTED) couldn't get sessionIdentityTjp in space (${t.ib})? we have already gotten the identity itself in the space, so we would expect the entire timeline to exist in it. (E: 9be0382ff1c8a0e77645ea38c096f826)`);let S=p({ibGib:u});if(S!==s.data.sessionIdentityTjpAddr)throw new Error("(UNEXPECTED) sessionIdentityTjpAddr !== sagaFrame.data.sessionIdentityTjpAddr? (E: c9a4ad5c2728fe38e86afc58e4abaf26)");let C=u.data.frameDetails;if(!C)return a.push("Invalid session identity tjp: sessionIdentityTjp.data.frameDetails is falsy. (E: 0187f8f804a84256281720586620b826)"),a;let{senderIdentityAddr:_,senderIdentityTjpAddr:A}=C;if(!_)throw new Error("sessionGenesisFrameDetails.senderIdentityAddr falsy (E: 02a0c80a3ead9e3af8af4cf3b156e826)");if(!A)throw new Error("sessionGenesisFrameDetails.senderIdentityTjpAddr falsy (E: 271928090ff5dc56d4bb63d8d5c68826)");let I=await ze({addrs:[A,_],space:t});if(!I)throw new Error(`(UNEXPECTED) resGetLatestAddr_senderIdentity for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: 2e4ae8083b6fb7cbb8fae2a519062926)`);if(!I.data)throw new Error(`(UNEXPECTED) resGetLatestAddr_senderIdentity.data for prevSessionIdentityAddr in space (${t.ib}) falsy? (E: 2e231850c2a898cc282b4b2841056826)`);if(!I.data.success)throw new Error("(UNEXPECTED) resGetLatestAddr_senderIdentity.data.success falsy? (E: e93508f03e0475925875b00746ffd826)");let{latestAddrsMap:v}=I.data;if(!v)throw new Error("(UNEXPECTED) resGetLatestAddr_senderIdentity.data.latestAddrsMap falsy? (E: 87a91e3f9968ad9ba79cdfe8cd878326)");if(Object.keys(v).length!==2&&A!==_)throw new Error("(UNEXPECTED) Object.keys(latestAddrsMap_senderIdentity).length !== 2 && senderIdentityTjpAddr !== senderIdentityAddr? (E: fe46bd584853d8e1e8e2d11f52012826)");let $=v[A],y=v[_];if(!y)throw new Error("(UNEXPECTED) senderIdentityAddr_latest falsy? (E: e151798ae2e9241578d09948937c4b26)");if($!==y)throw new Error("senderIdentityTjpAddr_latest !== senderIdentityAddr_latest (E: 52478a1053589e72665031a853cc1826)");let T=await ce({addr:y,space:t});if(!T.success||T.ibGibs?.length!==1)return a.push(`could not fetch latest sender identity ${d} from space (${t.ib}). (E: 3565ff0ed458f5a2384c40b16e849826)`),a;let B=T.ibGibs[0];if(!B.data.proofs)return a.push("Invalid sender identity. Proofs empty/falsy. (E: ebf488853061614d2b5b137828119526)"),a;let N=B.data.proofs.find(R=>R.claim.verb===he)?.claim;if(!N)return a.push(`Most recent senderIdentity has no proof whose claim.verb === ${he}. (E: b0f488ecccbbfe43d9a0b7c8a29d7826)`),a;if(N.target!==S)return a.push(`Most recent sender identity claim has claim.verb === ${he} but DOES NOT target expected session identity addr ${d}. (E: 3e7f18d99848969be8586423d5ccb826)`),a;let O=await new ue().validate({currentIbGib:i,prevIbGib:E});O.length>0&&a.push(`Invalid session identity transition: ${O.join(", ")} (E: da1c81c6d3c86aec3254f48fe7514226)`);let k=p({ibGib:r});return i.data?.proofs?.some(R=>R.claim.target===k)||a.push(`Session identity signature does not target current context ibgib (${k}). (E: acae68938c287178c878d1b88bebb826)`),a}catch(a){let s=`${e} ${h(a)}`;return console.error(s),[`authentication produced an error: ${s} (E: 45e014b82af81993d936611ca6fc4d26)`]}finally{Et&&console.log(`${e} complete.`)}}m(sa,"authenticateContextIntrinsically");var le=!1,Ot=class r extends Na{static{m(this,"SyncPeer_V1")}lc=`[${r.name}]`;opts;payloadIbGibsDomainReceived$;currentSessionIdentity;get currentSessionIdentityAddr(){return this.currentSessionIdentity?p({ibGib:this.currentSessionIdentity}):void 0}async signContext({contextAddr:t}){let e=`${this.lc}[${this.signContext.name}]`;try{if(!this.currentSessionIdentity)return;if(!this.opts)throw new Error("opts not initialized. (E: bcf5978aed789b0ebcbdc51971ebe826)");let{fnSenderSecret:a,sagaId:s,localMetaspace:i,localSpace:o}=this.opts;if(!a)throw new Error("fnSenderSecret not initialized. (E: 207fd292a2e8c53c05fd0a74a4ae6d26)");if(!s)throw new Error("sagaId not initialized. (E: f2e35cc13ed873b638116188119d1826)");let c=await a(),d=await We({senderSecret:c,sagaId:s}),f=await new ue().sign({latestKeystone:this.currentSessionIdentity,masterSecret:d,claim:{verb:he,target:t},metaspace:i,space:o});return this.currentSessionIdentity=f,f}catch(a){throw console.error(`${e} ${h(a)}`),a}}async signContextConnect({challengeUuid:t,demandedIds:e}){let a=`${this.lc}[${this.signContextConnect.name}]`;try{if(!this.currentSessionIdentity)return;if(!this.opts)throw new Error("opts not initialized. (E: bcf5978aed789b0ebcbdc51971ebe826)");let{fnSenderSecret:s,sagaId:i,localMetaspace:o,localSpace:c}=this.opts;if(!s)throw new Error("fnSenderSecret not initialized. (E: 207fd292a2e8c53c05fd0a74a4ae6d26)");if(!i)throw new Error("sagaId not initialized. (E: f2e35cc13ed873b638116188119d1826)");let d=await s(),l=await We({senderSecret:d,sagaId:i}),b=await new ue().sign({latestKeystone:this.currentSessionIdentity,masterSecret:l,poolId:Be,requiredChallengeIds:e,claim:{verb:Ze,target:t},metaspace:o,space:c});return this.currentSessionIdentity=b,b}catch(s){throw console.error(`${a} ${h(s)}`),s}}get classname(){if(!this.data)throw new Error("(UNEXPECTED) this.data falsy? (E: 1ab1841e9338b54f3aa615fa37024826)");if(!this.data.classname)throw new Error("invalid peer. this.data.classname is falsy (E: b0ee28a0abb84a06588d9de7afcef826)");return this.data.classname}constructor(t,e){super(t,e)}async initialize(){this.payloadIbGibsDomainReceived$=await It()}async connect(t){let e=`${this.lc}[${this.connect.name}]`;try{le&&console.log(`${e} starting... (I: ad89d8137351662fb8a30114a1fa4826)`),await this.preConnectCheck(t),await this.connectImpl(t)}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{le&&console.log(`${e} complete.`)}}async establishSessionIdentity(){let t=`${this.lc}[${this.establishSessionIdentity.name}]`;try{if(le&&console.log(`${t} starting... (I: f2a1b3c4d5e6f7a8b9c0d1e2f3a4b526)`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? Call initializeOpts first. (E: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c526)");let{senderIdentity:e,fnSenderSecret:a,senderDomainAddr:s,sagaId:i,localMetaspace:o,localSpace:c}=this.opts;if(!e||!a){le&&console.log(`${t} no senderIdentity/fnSenderSecret \u2014 skipping establish (I: f29348a77d1542326d14043ea4b69126)`);return}if(!s)throw new Error("(UNEXPECTED) senderDomainAddr falsy but senderIdentity/fnSenderSecret truthy? if identity is used, senderDomainAddr must be provided. (E: c288fa8e9d3d82fc)");let d=p({ibGib:e}),l=ge({ibGib:e});if(!l)throw new Error("(UNEXPECTED) senderIdentityTjpAddr falsy? (E: d5d8c3ab25a83a2c127904fe96de1526)");if(!i)throw new Error("(UNEXPECTED) sagaId falsy? Must be set in initializeOpts before calling establishSessionIdentity. (E: c6ba389d51b8af07d82458f875cf9826)");let f=await a();if(!f)throw new Error("senderSecret falsy. senderSecret required. (E: 1a8b0298bf78cbdf284b7988983b9826)");let b=await We({senderSecret:f,sagaId:i}),g=new ue;if(!this.opts.sessionConnectPoolConfig)throw new Error("(UNEXPECTED) opts.sessionConnectPoolConfig falsy? (E: 3351fd566eb8bbd2f821bb08c4419826)");if(!this.opts.sessionSyncPoolConfig)throw new Error("(UNEXPECTED) opts.sessionSyncPoolConfig falsy? (E: dbffa810d9e7ff6079088deb5b8e7826)");let E={senderIdentityAddr:d,senderIdentityTjpAddr:l};this.opts.targetAddrs&&(E.targetAddrs=this.opts.targetAddrs);let u=await g.genesis({masterSecret:b,configs:[this.opts.sessionConnectPoolConfig,this.opts.sessionSyncPoolConfig],frameDetails:E,metaspace:o,space:c}),S=p({ibGib:u}),C=await g.sign({latestKeystone:e,masterSecret:f,claim:{verb:he,target:S},metaspace:o,space:c});await this.postEstablishToReceiver({newSenderIdentity:C,sessionIdentity:u}),this.currentSessionIdentity=u}catch(e){throw console.error(`${t} ${h(e)}`),e}finally{le&&console.log(`${t} complete.`)}}async initializeOpts(t){let e=`${this.lc}[${this.initializeOpts.name}]`;try{le&&console.log(`${e} starting... (I: 31bd5fda37c89fa37fbaf14daf5fe726)`),this.opts=t}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{le&&console.log(`${e} complete.`)}}setOptionalOpts(t){let e=`${this.lc}[${this.setOptionalOpts.name}]`;try{if(le&&console.log(`${e} starting... (I: ae5ddbd3577db267f84743175a736626)`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? (E: 0dd4d6080a6e2f31d86cf4d86e11b826)");le&&console.log(`${e} updating opts. arg keys: ${Object.keys(t)} (I: 452d78a558f8fc3468c8e2e68c70b226)`),this.opts={...this.opts,...t}}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{le&&console.log(`${e} complete.`)}}async authenticateAndValidate({context:t}){let e=`${this.lc}[${this.authenticateAndValidate.name}]`;try{if(le&&console.log(`${e} starting... (I: add238055cd84a222c5b8c89913af526)`),!this.opts)throw new Error("(UNEXPECTED) opts falsy in authenticateValidateAuthorize (E: b7e5a8ad99d84e1ba8d8f7facd288826)");let{localSpace:a}=this.opts,s=await sa({context:t,space:a});if(s.length>0)throw new Error(`invalid context authentication. authenticationErrors: ${s} (E: da89da5ee1269aeb78952d475d607526)`);let i=await Ve({context:t});if(i.length>0)throw new Error(`invalid context received. validationErrors: ${i} (E: 8b34c875c968af29bc433138e57a7826)`)}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{le&&console.log(`${e} complete.`)}}async witness(t){let e=`${this.lc}[${this.witness.name}]`;try{if(le&&console.log(`${e} starting...`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? Concrete class should have initialized sender opts by now. (E: 0b9e28287318fdf8bf9f5a6886a24826)");if(!t.sagaFrame)throw new Error("context.sagaFrame falsy. (E: a33dd88aa108e2bad9e885885731ce26)");await this.authenticateAndValidate({context:t});let a=await this.sendContextRequest(t);if(a){let s=await at({sagaIbGib:t.sagaFrame,space:this.opts.localSpace});return a}else{le&&console.log(`${e} No response from peer. this may be normal if we just sent the very last commit frame. (I: 1855b7728c8898e1f9c001f8170ba826)`);return}}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{le&&console.log(`${e} complete.`)}}async getLocalIbGib(t){let e=`${this.lc}[${this.getLocalIbGib.name}]`;try{if(le&&console.log(`${e} starting... (I: 27b248cb9801eeb2386b71485389a826)`),console.warn(`${e} possibly a bottleneck here, getLocalIbGib only gets a single ibgib... (W: 2fd448a435480e6b128f6b8bcbef4826)`),!this.opts)throw new Error("(UNEXPECTED) this.opts falsy? (E: cfb9431f2fb851f24a6c88e80c3b3326)");let a=await ce({space:this.opts.localSpace,addr:t});if(a.success&&a.ibGibs&&a.ibGibs.length===1)return a.ibGibs[0];throw new Error(`couldn't get addr (${t}) from local space ${this.opts.localSpace}. reason: ${a.errorMsg??"unknown error (E: 926ef8bf4fcc299ab89dba34ea691a26)"} (E: d8a89807e471d3f8b938ab21df44cb26)`)}catch(a){throw console.error(`${e} ${h(a)}`),a}finally{le&&console.log(`${e} complete.`)}}};var ja=!1,Ue={COMMON:{ALGO:dt.sha_256,TYPE:La.hash_reveal_v1,ROUNDS:2,REPLENISH:Ye.topUp},CONNECT_POOL:{ID:Be,VERB:Ze,SIZE:10,SELECT_SEQUENTIALLY:2,SELECT_RANDOMLY:2,TARGET_BINDING_COUNT:0,SERVER_DEMAND_COUNT:3}};function Pt(r){let t=`[${Pt.name}]`;try{ja&&console.log(`${t} starting... (I: 3c791af2f978a00a087dfdde90884826)`);let e=(r.data?.challengePools??[]).find(o=>o.id===Ue.CONNECT_POOL.ID);if(!e)throw new Error(`Keystone missing "${Ue.CONNECT_POOL.ID}" pool (E: 6382e29260e4ddbac42ed18f49733526)`);let a=Object.keys(e.challenges).sort();if(a.length===0)throw new Error("Connect pool has no challenges (E: 1ef62fdbda182a790835c8c796475226)");let s=a[0],i=e.challenges[s];return{challengeId:s,challenge:i}}catch(e){throw console.error(`${t} ${h(e)}`),e}finally{ja&&console.log(`${t} complete.`)}}m(Pt,"getConnectChallenge");var lr="auth-challenge-init",fr="auth-init",br="auth-challenge",pr="auth-proof",mr="auth-ok",gr="auth-fail",hr="sync-frame",ur="sync-frame-response",yr="sync-frame-authenticated",Er="sync-frame-response-authenticated",wr="domain-payload",Sr="sync-error",j={auth_challenge_init:lr,auth_init:fr,auth_challenge:br,auth_proof:pr,auth_ok:mr,auth_fail:gr,sync_frame:hr,sync_frame_response:ur,sync_frame_authenticated:yr,sync_frame_response_authenticated:Er,domain_payload:wr,sync_error:Sr},xt=Object.values(j);function ia(r){return xt.includes(r)}m(ia,"isSyncWebSocketMsgType");function Ka(r){throw new Error(`Unhandled message type: ${r} (E: e928a3f82cd7469a98ef1bc248a3f826)`)}m(Ka,"assertUnreachable");var $e=!1,rt=class r extends Ot{static{m(this,"SyncPeerWebSocketSender_V1")}lc=`[${r.name}]`;get classname(){return r.name}get isSocketOpen(){return this.ws!==void 0&&this.ws.readyState===WebSocket.OPEN}ws;activeResolve;activeReject;pendingPayloadsToSend=[];handshakeMessageListener;constructor(t,e){super(t,e)}async preConnectCheck(t){let e=`${this.lc}[${this.preConnectCheck.name}]`;if(!this.data?.wsUrl)throw new Error("Missing wsUrl in peer data (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c910)");if(!this.data?.httpEvolveUrl)throw new Error("Missing httpEvolveUrl in peer data (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c911)")}async postEstablishToReceiver({newSenderIdentity:t,sessionIdentity:e}){let a=`${this.lc}[${this.postEstablishToReceiver.name}]`;try{if($e&&console.log(`${a} posting evolved keystones to ${this.data.httpEvolveUrl}...`),!this.data)throw new Error("(UNEXPECTED) this.data falsy? (E: d642e8a9af18b532c87c6f581aa53b26)");if(!this.data.httpEvolveUrl)throw new Error("(UNEXPECTED) this.data.httpEvolveUrl falsy? (E: 8589ddbb155914d85c09658881da2c26)");let s=await fetch(this.data.httpEvolveUrl,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({keystoneIbGib:t,relatedKeystoneIbGibs:[e]})});if(!s.ok){let i=await s.json().catch(()=>({})),o=i.message||i.error||"Unknown error";throw new Error(`HTTP ${s.status} evolution post rejected. errorMsg: ${o} (E: e8a478291b88d05c68cf6b385684b826)`)}$e&&console.log(`${a} evolve post accepted by server.`)}catch(s){throw console.error(`${a} establish post failed: ${h(s)}`),s}}async connectImpl(t){let e=`${this.lc}[${this.connectImpl.name}]`;try{$e&&console.log(`${e} starting...`);let{senderIdentity:a,fnSenderSecret:s,sagaId:i,localMetaspace:o,localSpace:c}=this.opts;if(!a||!s||!i)throw new Error("Missing identity parameters in peer options (E: ed49b6711ac82efcdb42b8a28c5b6826)");let d=await s(),l=await We({senderSecret:d,sagaId:i}),f=p({ibGib:a}),b=p({ibGib:(a.rel8ns?.past,a)}),g=await o.getLatestAddr({ibGib:a,space:c});if(!g)throw new Error("senderIdentityLatestAddr falsy. we should have a latest addr that is different than the sender identity at this point (done in the peer establish phase) (E: 225607318bef485d7821f82de97b6826)");let S=((await o.get({addrs:[g],space:c})).ibGibs?.[0]).data.proofs.at(0)?.claim.target;if(!S)throw new Error("Could not locate session keystone target from identity (E: 5ec4882f7e5e4c33fbd00ab8b3166726)");let _=(await o.get({addrs:[S],space:c})).ibGibs?.[0];if(!_)throw new Error(`Session keystone not found in local space: ${S} (E: 9ba818e6622808bb4ae749be31f80b26)`);let A=(_.data?.challengePools??[]).find(N=>N.id===Ue.CONNECT_POOL.ID);if(!A)throw new Error("Session keystone missing connect pool (E: f50968afca04b6d38ec19824ea201826)");let{challengeId:I}=Pt(_),v=Wt.create({config:A.config}),$=await v.derivePoolSecret({masterSecret:l}),y=await v.generateSolution({poolSecret:$,poolId:Ue.CONNECT_POOL.ID,challengeId:I}),T=`${this.data.wsUrl}?sAddr=${encodeURIComponent(S)}&solution=${encodeURIComponent(y.value)}`;$e&&console.log(`${e} connecting to WebSocket: ${T}`);let B=new WebSocket(T);return this.ws=B,new Promise((N,L)=>{let O=!1;B.addEventListener("open",()=>{$e&&console.log(`${e} WebSocket opened. Awaiting challenge...`)}),this.handshakeMessageListener=async k=>{try{let x=JSON.parse(k.data);$e&&console.log(`${e} received handshake frame: ${x.type}`);let R=x.type;if(!ia(R)){let ae=xt.join(", ");throw new Error(`Unknown message type '${R}' received during connection handshake. Valid types are: ${ae} (E: e983271bc84f46928e4695be2409826)`)}switch(R){case j.auth_challenge_init:await this.handleHandshakeAuthChallengeInit(B,S);break;case j.auth_challenge:await this.handleHandshakeAuthChallenge(B,x,_,l);break;case j.auth_ok:O=!0,this.handleHandshakeAuthOk(B,N);break;case j.auth_fail:this.handleHandshakeAuthFail(x,L);break;case j.sync_error:this.handleHandshakeSyncError(x,L);break;case j.auth_init:case j.auth_proof:case j.sync_frame:case j.sync_frame_response:case j.sync_frame_authenticated:case j.sync_frame_response_authenticated:case j.domain_payload:throw new Error(`Unexpected message type '${R}' during connection handshake (E: e3f80c68ab2a46c2b1858c8a1e2f8926)`);default:Ka(R)}}catch(x){console.error(`${e} ${h(x)}`),L(x)}},B.addEventListener("message",this.handshakeMessageListener),B.addEventListener("close",k=>{O||(this.disconnect(),L(new Error(`WebSocket closed before connect completed (code: ${k.code})`)))}),B.addEventListener("error",k=>{O||(this.disconnect(),L(new Error("WebSocket connection error")))})})}catch(a){throw console.error(`${e} connect failed: ${h(a)}`),a}}disconnect(){let t=`${this.lc}[${this.disconnect.name}]`;try{if($e&&console.log(`${t} starting... (I: 35c4b85fca0c6e9d042f5ff87cde3826)`),this.ws){this.handshakeMessageListener&&(this.ws.removeEventListener("message",this.handshakeMessageListener),this.handshakeMessageListener=void 0);try{this.ws.close()}catch(e){console.error(`${t} failed to close websocket: ${h(e)}`)}this.ws=void 0}}catch(e){console.error(`${t} ${h(e)}`)}finally{$e&&console.log(`${t} complete.`)}}async handleRuntimeMessage(t){let e=`${this.lc}[${this.handleRuntimeMessage.name}]`;try{let a=JSON.parse(t.data);$e&&console.log(`${e} received runtime frame: ${a.type}`);let s=a.type;if(!ia(s)){let i=xt.join(", ");throw new Error(`Unknown message type '${s}' received during active sync saga loop. Valid types are: ${i} (E: e23a8d10b74d47fb90518f8e3f4b826)`)}switch(s){case j.sync_frame_response:await this.handleRuntimeSyncFrameResponse(a);break;case j.sync_frame_authenticated:this.handleRuntimeSyncFrameAuthenticated();break;case j.domain_payload:this.handleRuntimeDomainPayload(a);break;case j.sync_error:this.handleRuntimeSyncError(a);break;case j.auth_challenge_init:case j.auth_init:case j.auth_challenge:case j.auth_proof:case j.auth_ok:case j.auth_fail:case j.sync_frame:case j.sync_frame_response_authenticated:throw new Error(`Unexpected message type '${s}' during active sync saga loop (E: e982b12cf92c448bbad0e84b7263c826)`);default:Ka(s)}}catch(a){if(console.error(`${e} failed parsing/handling runtime frame: ${h(a)}`),this.disconnect(),this.activeReject){let s=this.activeReject;this.activeResolve=void 0,this.activeReject=void 0,s(a)}}}async handleHandshakeAuthChallengeInit(t,e){t.send(JSON.stringify({type:j.auth_init,sAddr:e}))}async handleHandshakeAuthChallenge(t,e,a,s){let{challengeUuid:i,demandedIds:o}=e;$e&&console.log(`${this.lc} solving demanded challenges: ${o.join(", ")}`);let c=await this.signContextConnect({challengeUuid:i,demandedIds:o});if(!c)throw new Error("Failed to sign connect challenge proof (E: e9807f28ae9248bbadd0a7f1a8e9826)");t.send(JSON.stringify({type:j.auth_proof,proofFrame:c}))}handleHandshakeAuthOk(t,e){$e&&console.log(`${this.lc} WebSocket connect SUCCESS!`),this.handshakeMessageListener&&(t.removeEventListener("message",this.handshakeMessageListener),this.handshakeMessageListener=void 0),t.addEventListener("message",a=>this.handleRuntimeMessage(a)),e()}handleHandshakeAuthFail(t,e){this.disconnect(),e(new Error(`Handshake auth failed: ${t.message||"Unknown fail reason"} (E: f380b271a2be498db257bc8209fa8926)`))}handleHandshakeSyncError(t,e){this.disconnect(),e(new Error(`Handshake sync error: ${t.message||t.error||"Unknown sync error"} (E: f9208a01fe434cbbad83f210ea8f3426)`))}async handleRuntimeSyncFrameResponse(t){let e=t.context,a=await Ve({context:e});if(a.length>0)throw new Error(`Invalid response context received: ${a.join(", ")} (E: d7b5a283cf4c43ba8659c803800cf826)`);let s=[bt({ibGib:e}),e.sagaFrame,e.sagaFrameMsg];e.signedSessionIdentity&&s.push(e.signedSessionIdentity);let{localSpace:i}=this.opts;for(let c of s)await _e({space:i,ibGibs:[c]}),await Ae({space:i,ibGib:c});if((e.data?.["@payloadAddrsDomain"]||[]).length>0&&this.ws.send(JSON.stringify({type:j.sync_frame_response_authenticated,contextAddr:p({ibGib:e})})),this.activeResolve){let c=this.activeResolve;this.activeResolve=void 0,this.activeReject=void 0,c(e)}}handleRuntimeSyncFrameAuthenticated(){let t=this.pendingPayloadsToSend||[];this.pendingPayloadsToSend=[];for(let e of t)this.ws.send(JSON.stringify({type:j.domain_payload,ibGib:e}))}handleRuntimeDomainPayload(t){let e=t.ibGib;this.payloadIbGibsDomainReceived$.next(e)}handleRuntimeSyncError(t){let e=t.message||t.error||"Unknown sync runtime error",a=new Error(`Sync runtime error from receiver: ${e} (E: e983bc1c828d447fa0581da2b8004f26)`);if(this.activeReject){let s=this.activeReject;this.activeResolve=void 0,this.activeReject=void 0,s(a)}else throw a}async sendContextRequest(t){let e=`${this.lc}[${this.sendContextRequest.name}]`;try{if(!this.ws||this.ws.readyState!==WebSocket.OPEN)throw new Error("WebSocket is not connected or open (E: a3b2c1d0e9f8e7d6c5b4a3f2e1d0c915)");let a=t.payloadIbGibsDomain??[];this.pendingPayloadsToSend=[...a];let s={...t};return delete s.payloadIbGibsDomain,new Promise((i,o)=>{this.activeResolve=i,this.activeReject=o,this.ws.send(JSON.stringify({type:j.sync_frame,context:s}))})}catch(a){throw console.error(`${e} sendContextRequest failed: ${h(a)}`),a}}};var Rt="sync_sagamsg";async function ca({data:r}){let t=`[${ca.name}]`;try{return[Rt,r.sagaId,r.stage].join(" ")}catch(e){throw console.error(`${t} ${h(e)}`),e}}m(ca,"getSyncSagaMessageIb");async function da({frameIbGib:r,space:t}){let e=`[${da.name}]`;try{let s=(await wa({ibGib:r,rel8nNames:[de],space:t}))[de];if(!s||s.length===0)throw new Error(`(UNEXPECTED) No sync message stone found found for frame: ${r.ib} (E: 8a4b2c1d3e5f6a9b7c8d9e0f1a2b3c4d)`);if(s.length>1)throw new Error(`(UNEXPECTED) Multiple sync message stones found (${s.length}) for frame: ${r.ib}. logic not currently equipped to handle multiple messages per frame. (E: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d)`);return s[0]}catch(a){throw console.error(`${e} ${h(a)}`),a}}m(da,"getSyncSagaMessageFromFrame");var G=!1,Mt=!1,Se="[ControlDomain]",oe=class r{static{m(this,"SyncSagaCoordinator")}lc=`[${r.name}]`;constructor(){}defaultSessionConnectPoolConfig(){return qt({id:Be,salt:`session-connect-${Date.now()}`,verbs:[Ze],size:20,sequential:2,random:2,targetBinding:0,replenishStrategy:Ye.deleteAll})}defaultSessionSyncPoolConfig(){return qt({id:Qe,salt:`session-sync-${Date.now()}`,verbs:[he],size:200,sequential:3,random:3,targetBinding:3,replenishStrategy:Ye.topUp})}async sync({peer:t,domainIbGibs:e,senderIdentityInfo:a,fnSenderSecret:s,conflictStrategy:i=we.abort,graftPreference:o,metaspace:c,localSpace:d}){let l=`${this.lc}[${this.sync.name}]`;if(G&&console.log(`${l} starting...`),!d){debugger;throw new Error(`${l} source (or localSpace) required (E: 25df3761f7686a1099a552f83c95d326)`)}if(a||s){if(!a)throw new Error("(UNEXPECTED) senderIdentityInfo falsy but fnSenderSecret truthy? if either is used, both must be truthy. (E: e366628a4919c7d727d2cbd8e5b75e26)");if(!s)throw new Error("(UNEXPECTED) fnSenderSecret falsy but senderIdentityInfo truthy? if either is used, both must be truthy. (E: 7d55ce37ae482fec48e3398158161926)");let{senderIdentity:v,senderDomainAddr:$}=a;if(!v)throw new Error("(UNEXPECTED) senderIdentity falsy in senderIdentityInfo? if senderIdentityInfo is provided, both senderIdentity and senderDomainAddr must be truthy. (E: a3c17fae2978926d)");if(!$)throw new Error("(UNEXPECTED) senderDomainAddr falsy in senderIdentityInfo? if senderIdentityInfo is provided, both senderIdentity and senderDomainAddr must be truthy. (E: d288fae39b7d825c)")}let{senderIdentity:f,senderDomainAddr:b}=a??{},g=await ie(),E=await It();if(!E.next)throw new Error("(UNEXPECTED) updates$.next falsy? (E: d24cd82184aec130c89a320819b39126)");let u,S,C=new Promise((v,$)=>{u=v,S=$}),_=await Ua(),A=await c.createNewLocalSpace({opts:{allowCancel:!1,spaceName:_,getFnPrompt:c.getFnPrompt,logalot:G}});if(!A)throw new Error("Failed to create temp space (E: 8f4e2f3d6c1b4b1a8f4e2f3d6c1b4b1a)");await A.initialized;let I=m(async()=>{},"cleanup");return(async()=>{try{let v=e?e.map(T=>p({ibGib:T})):void 0;t.setOptionalOpts({sagaId:g,senderIdentity:f,senderDomainAddr:b,fnSenderSecret:s,sessionConnectPoolConfig:this.defaultSessionConnectPoolConfig(),sessionSyncPoolConfig:this.defaultSessionSyncPoolConfig(),targetAddrs:v}),await t.establishSessionIdentity(),await t.connect({sagaId:g});let{initFrame:$,initDomainGraph:y}=await this.createInitFrame({sagaId:g,domainIbGibs:e,conflictStrategy:i,graftPreference:o,metaspace:c,localSpace:d,tempSpace:A,peer:t});if(await this.executeSagaLoop({initFrame:$,initDomainGraph:y,peer:t,updates$:E,localSpace:d,tempSpace:A,metaspace:c}),u(),!E.complete)throw new Error("(UNEXPECTED) updates$.complete falsy? (E: d24cd82184aec130c89a320819b39126)");E.complete()}catch(v){if(console.error(`${l} ${h(v)}`),S(v),!E.error)throw new Error("(UNEXPECTED) updates$.error falsy? (E: 392ce77c073272e4c398c3e86583ce26)");E.error(v)}finally{await I()}})(),{sagaId:g,updates$:E,done:C}}async continueSync({sagaContext:t,mySpace:e,myTempSpace:a,metaspace:s,peer:i}){let o=`${this.lc}[${this.continueSync.name}]`;try{G&&console.log(`${o} starting... (I: f64e08bf77d1425378601f380384ec26)`);let c=await this.handleResponseSagaContext({sagaContext:t,mySpace:e,myTempSpace:a,metaspace:s});if(c){if(c.nextFrameInfo?.sagaComplete)return null}else return G&&console.log(`${o} Handler returned null (Saga End). (I: 43da8bb6c846b1fe7766332643be0e26)`),null;if(c.errorMsg)throw new Error(`Couldn't handle response saga context. errorMsg: ${c.errorMsg} (E: 7b41a183cf3cb58a5859c803800cf826)`);if(!c.nextFrameInfo)throw new Error("(UNEXPECTED) contextResult.nextFrameInfo falsy? (E: 5740542f5eb8ccb41dfec188d87c1e26)");let{frame:d,payloadIbGibsDomain:l}=c.nextFrameInfo,f=await this.createSyncSagaContext({sagaFrame:d,localSpace:e,payloadIbGibsDomain:l,metaspace:s,sessionIdentityAddr:t.rel8ns?.sessionIdentity?.[0],peer:i,skipSign:!0}),b=await Ve({context:f});if(b.length>0)throw new Error(`(UNEXPECTED) just created sync saga context () and there were immediateValidationErrors? immediateValidationErrors: ${b} (E: c120e8e0aa98673d685267a8a36e5826)`);return f}catch(c){throw console.error(`${o} ${h(c)}`),c}finally{G&&console.log(`${o} complete.`)}}async executeSagaLoop({initFrame:t,initDomainGraph:e,peer:a,updates$:s,localSpace:i,tempSpace:o,metaspace:c}){let d=`${this.lc}[${this.executeSagaLoop.name}]`,l=t,f=[];for(;l;){let b=new Map,g=`${d}[peer.payloadIbGibsDomainReceived$]`,E=await a.payloadIbGibsDomainReceived$.subscribe(Ba({next:m(async u=>{G&&console.log(`${g} next fired. (I: 2b4bdf502a38a90ba33d9711e7cb7826)`);let S=p({ibGib:u});Mt&&console.log(`${d}${Se} DOMAIN STREAM RECEIVED <- observable: ${S} (I: d69ee80fcaece272483ec33b2d289826)`),b.set(S,u)},"next"),error:m(async u=>{Sa(u)?console.error(`${g} error fired. error: ${JSON.stringify(u.data)} (E: 01cc08ba05ad99682831174fd7c31a26)`):(console.dir(u),console.error(`${g} error fired. error: ${h(u)} (E: 73d3d61464e8e4ce4cd6efd8b9675826)`))},"error"),complete:m(async()=>{G&&console.log(`${g} complete fired. (I: a47218aa9e4433fdb97c068880a45826)`),await E.unsubscribe()},"complete")}));try{let u=await this.createSyncSagaContext({sagaFrame:l,payloadIbGibsDomain:f,localSpace:i,metaspace:c,sessionIdentityAddr:a.currentSessionIdentityAddr,peer:a});if(Mt){let y=f.map(T=>p({ibGib:T}));console.log(`${d}${Se} SENDER TRANSMIT -> peer.witness (I: 5b0081803698770f0bf64992220b312)`),console.log(`${d}${Se} Context: ${p({ibGib:u})}`),console.log(`${d}${Se} Frame: ${p({ibGib:l})}`),console.log(`${d}${Se} DOMAIN Payloads (${y.length}): ${y.join(", ")||"(none)"}`)}s.next(u),a.setOptionalOpts({localSpace:i,localTempSpace:o});let S=await a.witness(u);if(!S)if(l)if((await da({frameIbGib:l,space:i}))?.data?.stage===W.commit){G&&console.log(`${d} Sender sent Commit. Peer returned no response. Saga Complete. (I: 26f9ee073858ca78b8284753368b5226)`),l=null;break}else throw new Error("(UNEXPECTED) responseCtx falsy and currentFrame truthy, but we're not in the commit stage? This may be expected ultimately, but atow I am not seeing this as being expected. (E: cc34498962bd370deeff351fac939f26)");else throw new Error("(UNEXPECTED) no response and currentFrame falsy? (E: 8d1085ea2f28cfc3f9c922649864a826)");if(!S.data)throw new Error("(UNEXPECTED) responseCtx.data falsy? (E: a969992bae53ab18a827ec58aec15826)");s.next(S);let C=await Ve({context:S});if(C.length>0)throw new Error(`contextAndSagaFrameValidationErrors: ${C} (E: 6eebe8e7fa437c00a8cde3ada3c66826)`);let _=await this.validateReturnContext({requestCtx:u,responseCtx:S,localSpace:i});if(_.length>0)throw new Error(`validateReturnContext errors: ${_.join(", ")} (E: cb8a023b9d0728cceb09fa3da0bb8226)`);let A=S.data[zt]||[];if(A.length>0&&(S.payloadIbGibsDomain=await this.pollForDomainPayloads({expectedAddrs:A,pollIntervalMs:20,domainPayloadsMap:b,tempSpace:o})),!S.sagaFrame)throw new Error("(UNEXPECTED) responseCtx.sagaFrame falsy? the Peer should have set this when it got the response back from the remote. (E: e650adadf9a2063ec6764a1e31d3d826)");if(Mt){let y=S.data?.["@payloadAddrsControl"]||[];console.log(`${d}${Se} SENDER RECEIVED <- peer.witness (I: 3dc76a9744d89a4fc3e2f076c2be4826)`),console.log(`${d}${Se} Response Context: ${p({ibGib:S})}`),console.log(`${d}${Se} Response Saga Frame: ${p({ibGib:S.sagaFrame})}`),console.log(`${d}${Se} CONTROL Payloads (${y.length}): ${y.join(", ")||"(none)"}`),console.log(`${d}${Se} DOMAIN Payloads (${A.length}): ${A.join(", ")||"(none)"}`)}let I=await this.handleResponseSagaContext({sagaContext:S,initDomainGraph:e,mySpace:i,myTempSpace:o,metaspace:c});if(I){if(I.nextFrameInfo?.sagaComplete){G&&console.log(`${d} Handler returned null (Saga End). (I: 123bf9e7dca8886de72553a8d4f29e26)`);break}}else{console.error(`${d} NAG ERROR (DOES NOT THROW): does this ever hit now? (E: e04d02efc2a8e72a88b79f1f0f95ca26)`);break}if(I.errorMsg)throw new Error(`Couldn't handle response saga context. errorMsg: ${I.errorMsg} (E: c948e81d513b2a0eb8b8afa878edc626)`);if(!I.nextFrameInfo)throw new Error("(UNEXPECTED) contextResult.nextFrameInfo falsy? (E: c287a82e823e662a77923278e2418826)");let{frame:v,payloadIbGibsDomain:$}=I.nextFrameInfo;if(l=v,f=[...$||[]],Mt){let y=f.map(T=>p({ibGib:T}));console.log(`${d}${Se} HANDLER RESULT -> next iteration (I: 6b0d88c4c28857ccd812381515bd7826)`),console.log(`${d}${Se} Next Frame: ${p({ibGib:l})}`),console.log(`${d}${Se} DOMAIN for next (${y.length}): ${y.join(", ")||"(none)"}`)}}finally{await E.unsubscribe()}}}async createSyncSagaContext({sagaFrame:t,payloadIbGibsDomain:e,metaspace:a,localSpace:s,sessionIdentityAddr:i,peer:o,skipSign:c}){let d=`[${this.createSyncSagaContext.name}]`;try{if(G&&console.log(`${d} starting... (I: 6b87bee313e811d1d2fc90e87fbec826)`),!t.data)throw new Error("(UNEXPECTED) sagaFrame.data falsy? (E: 04c49b4cccba6842a8b52e4c6f570726)");if(!t.data.n&&t.data.n!==0)throw new Error("(UNEXPECTED) sagaFrame.data.n falsy and not 0? (E: 45b508da64a8b28428b11765d684b826)");let l=new Date,f=Pe(l),b=l.getMilliseconds(),g={timestamp:f,timestampMs:b,sagaN:t.data.n},E=e?e?.map($=>p({ibGib:$})):void 0;E&&E.length>0&&(g[zt]=E);let u={sagaFrame:[p({ibGib:t})]},S;if(i){i=await a.getLatestAddr({addr:i,space:s})??i;let $=await ce({addr:i,space:s});if($.success&&$.ibGibs?.length===1)S=$.ibGibs[0],u.sessionIdentity=[i];else{debugger;throw new Error(`Couldn't get sessionIdentityAddr (${i}) in space: ${s.ib} (E: 5c29e80d68dbd1749866c358be093826)`)}}let C=await oa({data:g}),_=await U.stone({parentPrimitiveIb:Dt,ib:C,data:g,rel8ns:u}),A=p({ibGib:_}),I;S&&!c&&(I=await o.signContext({contextAddr:A})),await _e({ibGib:_,space:s}),await Ae({ibGib:_,space:s,fnBroadcast:void 0}),_.sagaFrame=t;let{msgStones:v}=await Bt({sagaIbGib:t,localSpace:s});if(v.length!==1)throw new Error("(UNEXPECTED) msgStones.length !== 1 inside createSyncSagaContext? (E: a98165cf46ab4e82b7bd5e45a273b826)");return _.sagaFrameMsg=v[0],e&&e.length>0&&(_.payloadIbGibsDomain=e),I&&(_.signedSessionIdentity=I),_}catch(l){throw console.error(`${d} ${h(l)}`),l}finally{G&&console.log(`${d} complete.`)}}async getKnowledgeMap({space:t,metaspace:e,domainIbGibs:a,tjpAddrs:s}){let i=`${this.lc}[${this.getKnowledgeMap.name}]`;try{if(G&&console.log(`${i} starting... (I: e184f8a7818666febfbbd2d841ed3826)`),!(a&&a.length>0)&&!(s&&s.length>0))throw new Error("(UNEXPECTED) domainIbGibs and tjpAddrs falsy/empty? we need one or the other (E: f674285111c8648398cd79d8c08ec826)");if(a&&a.length>0&&s&&s.length>0)throw new Error("(UNEXPECTED) both domainIbGibs and tjpAddrs truthy? only pass in one or the other. (E: f674285111c8648398cd79d8c08ec826)");let o=[];if(s)o=s;else if(a&&a.length>0){let{mapWithTjp_YesDna:d,mapWithTjp_NoDna:l}=Je({ibGibs:a}),f=[...Object.values(d),...Object.values(l)],b=Ke({ibGibs:f});o=Object.keys(b)}else return console.warn(`${i} No domainIbGibs or tjpAddrs provided. Returning empty Knowledge. (W: 2b0e115e7578a83d1b26f7c726bf9426)`),{};if(o.length===0)return{};let c=await ze({space:t,tjpAddrs:o});if(!c.data||!c.data.latestAddrsMap)throw new Error(`${i} Failed to get latest addrs. (E: 7d395940c0e1419165c5196c39c6c826)`);return c.data.latestAddrsMap}catch(o){throw console.error(`${i} ${h(o)}`),o}finally{G&&console.log(`${i} complete.`)}}async analyzeDomainIbGibs({domainIbGibs:t,space:e}){let a=`${this.lc}[${this.analyzeDomainIbGibs.name}]`;if(t.length===0)throw new Error("invalid domainIbGibs. expected at least one, but array is empty. (E: 820a719bcac5a16878a2af697113b826)");let s=await pt({ibGibs:t,live:!0,space:e}),i=s&&Object.keys(s).length>0;G&&console.log(`${a} graph generated. nodes: ${i?Object.keys(s).length:0}`);let o=i?Object.values(s):[],{mapWithTjp_YesDna:c,mapWithTjp_NoDna:d,mapWithoutTjps:l}=Je({ibGibs:o}),f=Object.values(l),b=[...Object.values(c),...Object.values(d)],g=Ke({ibGibs:b}),E=this.sortTimelinesTopologically(g);return{stones:f,timelinesMap:g,topologicallySortedTjpAddrs:E,fullGraph:s}}async createInitFrame({sagaId:t,domainIbGibs:e,conflictStrategy:a,graftPreference:s,metaspace:i,localSpace:o,tempSpace:c,peer:d}){let l=`${this.lc}[${this.createInitFrame.name}]`;try{G&&console.log(`${l} starting... (I: 551af8b411ae9be712ce3358d43ee726)`);let f=await this.analyzeDomainIbGibs({domainIbGibs:e,space:o}),{timelinesMap:b,fullGraph:g,stones:E}=f;await _e({ibGibs:Object.values(g),space:c});let u={};Object.keys(b).forEach(A=>{let v=b[A].at(-1);u[A]=p({ibGib:v})});let S={sagaId:t,stage:W.init,knowledgeMap:u,mode:Jt.sync,stones:E.map(A=>p({ibGib:A}))};G&&(console.log(`${l} SyncStage.init: ${W.init}, SyncStage.commit: ${W.commit}`),console.log(`${l} initData.stage: ${S.stage}`));let C=await this.createSyncMsgStone({data:S,localSpace:o,metaspace:i}),_=await this.evolveSyncSagaIbGib({msgStones:[C],conflictStrategy:a,graftPreference:s,metaspace:i,localSpace:o,sessionIdentity:d.currentSessionIdentity});return G&&console.log(`${l} sagaFrame (init): ${ee(_)} (I: b3d6a8be69248f18713cc3073cb08626)`),{initFrame:_,initDomainGraph:g}}catch(f){throw console.error(`${l} ${h(f)}`),f}finally{G&&console.log(`${l} complete.`)}}async validateReturnContext({requestCtx:t,responseCtx:e,localSpace:a}){let s=`${this.lc}[${this.validateReturnContext.name}]`,i=[];try{if(t.sagaFrame&&e.sagaFrame){let d=p({ibGib:t.sagaFrame}),l=p({ibGib:e.sagaFrame});await tt({olderAddr:d,newerAddr:l,space:a})||i.push(`Response saga frame (${l}) is not a valid continuation of request saga frame (${d}). (E: 2c85e8d97318ff24ac8a02bd3a068226)`)}else i.push("Missing sagaFrame on requestCtx or responseCtx. (E: b65c68ff891000ddca8d22384a088226)");let o=t.signedSessionIdentity?p({ibGib:t.signedSessionIdentity}):t.rel8ns?.sessionIdentity?.[0],c=e.rel8ns?.sessionIdentity?.[0];o!==c&&i.push(`Session identity mismatch. Expected ${o}, got ${c}. (E: ab98716bca88d2243cc822187768226)`)}catch(o){i.push(`Error during validateReturnContext: ${h(o)} (E: da878e1239aa88ee27bdfca005c28226)`)}return i}async pollForDomainPayloads({expectedAddrs:t,pollIntervalMs:e,domainPayloadsMap:a,tempSpace:s}){let i=`${this.lc}[${this.pollForDomainPayloads.name}]`;try{G&&console.log(`${i} starting... (I: 26dce86bfca572939885798802d6e926)`);let o=[],c=[...new Set(t)],d=[...c],l=Date.now(),f=5*60*1e3;for(;d.length>0;){if(Date.now()-l>f)throw new Error(`Timeout waiting for payloads: ${d.join(", ")} (E: 46e1683c9578095261aaf798bd5e1826)`);let b=[],g=[];for(let E of d)a.has(E)?(g.push(a.get(E)),a.delete(E)):b.push(E);g.length>0&&(await _e({space:s,ibGibs:g}),g.forEach(E=>o.push(E))),d=b,d.length>0&&await ha(e)}if(c.length!==o.length)throw new Error("(UNEXPECTED) uniqueExpectedAddrs.length !== resultDomainPayloads.length? at this point, we expect all of the payload ibgibs to have been received. (E: 03749a7478c4b8b28bfc86951887a826)");return o}catch(o){throw console.error(`${i} ${h(o)}`),o}finally{G&&console.log(`${i} complete.`)}}async handleResponseSagaContext({sagaContext:t,initDomainGraph:e,mySpace:a,myTempSpace:s,metaspace:i}){let o=`${this.lc}[${this.handleResponseSagaContext.name}]`;try{G&&console.log(`${o} starting... (I: 5deec8a1f7a6d263c88cd458ad990826)`);let c=t.sagaFrame;if(!c.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 71b938adf1d87c2527bfd4f86dfd0826)");G&&console.log(`${o} sagaIbGib: ${ee(c)} (I: 1b99d87d262e9d18d8a607a80b1a0126)`);let{stage:d,messageData:l}=await this.getStageAndPayloadFromFrame({sagaFrame:c,space:a});G&&console.log(`${o} handling frame stage: ${d}`);let f;switch(d){case W.init:f=await this.handleInitFrame({sagaIbGib:c,messageData:l,metaspace:i,mySpace:a,myTempSpace:s});break;case W.ack:if(!e)throw new Error("(UNEXPECTED) initDomainGraph falsy on the sender? (E: a3d758ad954829aba88663188eafc826)");f=await this.handleAckFrame({sagaContext:t,sagaIbGib:c,initDomainGraph:e,metaspace:i,mySpace:a,myTempSpace:s});break;case W.delta:f=await this.handleDeltaFrame({sagaContext:t,sagaIbGib:c,metaspace:i,mySpace:a,myTempSpace:s});break;case W.commit:G&&console.log(`${o}[${nt({sagaFrame:c})}] mySpace.ib: ${a.ib} (I: 5b270996d848907238d817fffa64a126)`),f=await this.handleCommitFrame({sagaIbGib:c,metaspace:i,mySpace:a,myTempSpace:s});break;default:throw new Error(`${o} (UNEXPECTED) Unknown sync stage: ${d} (E: 9c2b4c8a6d34469f8263544710183355)`)}return G&&console.log(`${o} nextFrameInfo: ${f?ee(f):"undefined"} (I: a8ad281ca8e89385686d18327a105726)`),{errorMsg:void 0,nextFrameInfo:f}}catch(c){let d=`${o} ${h(c)}`;return console.error(d),{errorMsg:d}}finally{G&&console.log(`${o} complete.`)}}async handleInitFrame({sagaIbGib:t,messageData:e,mySpace:a,myTempSpace:s,metaspace:i}){let o=`${this.lc}[${this.handleInitFrame.name}]`;try{G&&console.log(`${o} starting... (I: 9d88dcad0408c029e898a4bcf3b08426)`),G&&console.log(`${o} [TEST DEBUG] Receiver mySpace: ${a.ib}`);let c=e;if(c.stage!==W.init)throw new Error(`${o} Invalid init frame: initData.stage !== SyncStage.init (E: c91be82970e4decc58f56bf8fc1ffc26)`);if(!c||!c.knowledgeMap)throw new Error(`${o} Invalid init frame: missing knowledgeMap (E: ed02c869e028d2d06841b9c7f80f2826)`);let d=t.data.conflictStrategy||we.abort,l=[],f=[],b=[],g=c.stones||[];if(g.length>0){G&&console.log(`${o} processing stones: ${g.length}`);let T=(await ce({space:a,addrs:g})).rawResultIbGib;if(!T.data)throw new Error("(UNEXPECTED) rawResultIbGib.data falsy? (E: f3c40b492adc02c3f480b998fc7a5926)");let B=T.data.addrsNotFound;B&&B.length>0&&(G&&console.log(`${o} stones missing (requesting): ${B.length}`),B.forEach(N=>{f.some(L=>L.addr===N)||f.push({addr:N})}))}let E=c.knowledgeMap;G&&console.log(`${o} senderKnowledge: ${ee(E)} (I: 9f957862356dfeae183c200854e86e26)`);let u=Object.keys(E);G&&console.log(`${o} [TEST DEBUG] senderTjpAddrs: ${JSON.stringify(u)}`),G&&console.log(`${o} senderTjpAddrs: ${ee(u)} (I: 86ea4c53db0dc184c8b253386c402126)`);let S={};if(u.length>0){let y=await ze({space:a,tjpAddrs:u});if(!y.data)throw new Error("(UNEXPECTED) resGetLatestAddrs.data falsy? (E: b180d813c088042b38e1e02e06a16926)");if(!y.data.latestAddrsMap)throw new Error("(UNEXPECTED) resGetLatestAddrs.data.latestAddrsMap falsy? (E: 16bc386dd51d0ff53a49620b1e641826)");S=y.data.latestAddrsMap,G&&console.log(`${o} [TEST DEBUG] receiverLatestAddrsMap: ${JSON.stringify(S)}`),G&&console.log(`${o} receiverLatestAddrsMap: ${ee(S)} (I: 980975642cbccd8018cf0cd808d30826)`)}for(let y of u){let T=E[y],B=S[y];if(!B){G&&console.log(`${o} [TEST DEBUG] Missing receiver timeline for TJP: ${y}. Requesting remoteAddr: ${T}`),f.push({addr:T,tjpAddr:y});continue}if(B===T){G&&console.log(`${o} [TEST DEBUG] TJP ${y}: Synced (receiverTipAddr === remoteAddr)`);continue}if(G&&console.log(`${o} [TEST DEBUG] TJP ${y}: receiverTipAddr=${B}, remoteAddr=${T} - checking for divergence...`),await tt({olderAddr:T,newerAddr:B,space:a})){G&&console.log(`${o} [TEST DEBUG] TJP ${y}: Remote (sender) is in past - offering push`);let L=await mt({ibGibAddr:B,live:!1,latestCommonFrameAddr:T,space:a});b.push({tjpAddr:y,addrs:Object.keys(L)})}else{let L=!1;try{L=await tt({olderAddr:B,newerAddr:T,space:a})}catch(O){G&&console.log(`${o} expected error if we don't have remote. verbose logging error though: ${h(O)} (I: 47ea08d0b418cf4aa8a502a7bcb80826)`)}if(L)G&&console.log(`${o} [TEST DEBUG] TJP ${y}: receiver is in past - requesting delta`),f.push({addr:T,tjpAddr:y,latestAddrAlreadyHave:B});else if(G&&console.log(`${o} [TEST DEBUG] TJP ${y}: DIVERGENCE DETECTED! conflictStrategy=${d}`),d==="abort")l.push({tjpAddr:y,receiverTipAddr:B,senderTipAddr:T,receiverKnowledgeTimelineAddrs:[],reason:"divergence",terminal:!0});else if(d===we.optimisticWithLCS){let O=await ce({addr:B,space:a});if(!O.success||O.ibGibs?.length!==1)throw new Error(`couldn't get local tip (${B}) from space (${a.ib}). errorMsg: ${O.errorMsg??"[unknown error (E: b3c3d823276300aa384ebdba4a8eb826)]"} (E: 83cb88a767e22bbda99c6788bec50526)`);let k=O.ibGibs[0],x=await va({timeline:k,space:a,metaspace:i});l.push({tjpAddr:y,receiverTipAddr:B,senderTipAddr:T,receiverKnowledgeTimelineAddrs:[...x,B],reason:"divergence",terminal:!1})}else throw new Error(`${o} Unsupported conflict strategy: ${d}. Only these currently implemented: ${He} (E: 8f12384180f8a718a983a749fe0adf26)`)}}if(l.some(y=>y.terminal))throw G&&console.warn(`${o} ABORTING Sync Saga due to terminal conflicts: ${JSON.stringify(l)}`),new Error(`the saga has terminal conflicts. conflicts: ${JSON.stringify(l)} (E: f2edbe93cc07a63b38bfc013d2213b26)`);if(!t.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 24203af4600fb226ae6c1afbde442826)");let A={sagaId:t.data.uuid,stage:W.ack,deltaRequestAddrInfos:f,pushOfferInfos:b};l?.length>0&&(A.conflicts=l);let I=await this.createSyncMsgStone({data:A,localSpace:a,metaspace:i});G&&console.log(`${o} ackStone created: ${ee(I)} (I: 313708132dd53ff946befb7833657826)`);let v=await this.evolveSyncSagaIbGib({prevSagaIbGib:t,msgStones:[I],localSpace:a,metaspace:i}),$;if(b.length>0){let y=[];$=[];let T=b.flatMap(k=>k.addrs),B=await ce({addrs:T,space:a}),N=B.rawResultIbGib?.data;if(!N)throw new Error("(UNEXPECTED) resGet.rawResultIbGib.data falsy? (E: 1a2cc8cb99a1ffa60837e45a8229b826)");let L=N.addrsNotFound??[],O=N.addrsErrored??[];if(B.ibGibs&&B.ibGibs.length===T.length)B.ibGibs.forEach(k=>{$.push(k)});else if(B.ibGibs&&B.ibGibs.length>0)if(B.ibGibs.forEach(x=>{$.push(x)}),$.length+L.length+O.length===T.length)L.forEach(x=>y.push(x)),O.forEach(x=>y.push(x));else throw L.length===0&&O.length===0?new Error("(UNEXPECTED) found some but not all addrs but addrsNotFound and addrsErrored both empty? (E: ef1b2cf5bab8de2298ec507abe04e826)"):new Error("(UNEXPECTED) found some but not all addrs but addrsNotFound and addrsErrored don't contain the addrs not found? (E: ae9e015109f8c3c3a813da584cd98826)");else console.warn(`${o} we were expecting all domainAddrs in mySpace (${a.ib}) but we couldn't get all of them. addrsNotFound: ${L??[]}. addrsErrored: ${O??[]}. Trying temp space (${s.ib}). (W: f61908e264f8dddd2e3fb9084463d826)`),T.forEach(k=>y.push(k));if(y.length>0){G&&console.log(`${o} couldn't get all addrs in mySpace (${a.ib}). searchSecondSpaceAddrs: ${y} (I: 233fd954dbd84e51bca02fa8eed5f826)`);let k=await ce({addrs:y,space:s});if(k.success&&k.ibGibs&&k.ibGibs.length===y.length)k.ibGibs.forEach(x=>$.push(x));else{k.ibGibs?.forEach(R=>$.push(R));let x=T.filter(R=>!$.map(ae=>p({ibGib:ae})).includes(R));throw new Error(`couldn't get some or all of addrs from either mySpace (${a.ib}) or myTempSpace (${s.ib}). addrsFailed: ${x} (E: 1394d412c4ffa4dd085f269b43338826)`)}}}return{frame:v,payloadIbGibsDomain:$}}catch(c){throw console.error(`${o} ${h(c)}`),c}finally{G&&console.log(`${o} complete.`)}}async handleAckFrame({sagaContext:t,sagaIbGib:e,initDomainGraph:a,mySpace:s,myTempSpace:i,metaspace:o}){let c=`${this.lc}[${this.handleAckFrame.name}]`;try{G&&console.log(`${c} starting... (I: 605b6860e898267a5b50c6d85704be26)`);let{messageData:d}=await this.getStageAndPayloadFromFrame({sagaFrame:e,space:s}),l=d,f=!0;if(!l)throw new Error(`${c} ackData falsy (E: 3b8415edc876084c88a25b98e2d55826)`);if(l.stage!==W.ack)throw new Error(`${c} Invalid ack frame: ackData.stage !== SyncStage.ack (E: 2e8b0a94b5954a66a6a1a7a0b3f5b7a1)`);if(G&&console.log(`${c} ackData: ${ee(l)} (I: b817c5571c5e916fe8f90b892b3e8e26)`),!e.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: e3f2e8f162484859787651b85c011826)");let b=l.conflicts?lt(l.conflicts):[];G&&console.log(`${c} [CONFLICT DEBUG] Received conflicts from Ack: ${b.length}`),G&&b.length>0&&console.log(`${c} [CONFLICT DEBUG] Conflicts detail: ${JSON.stringify(b,null,2)}`);let g=b.filter(y=>y.terminal);if(g.length>0)throw G&&console.warn(`${c} Received terminal conflicts from Ack: ${JSON.stringify(g)}`),new Error(`${c} Peer reported terminal conflicts. (E: 23a0096ee05a2ccfa89334e8f156b426)`);let E=[],u=[];if(b.length>0){G&&console.log(`${c} [CONFLICT DEBUG] Processing ${b.length} non-terminal conflicts`);for(let y of b){let{receiverTipAddr:T,reason:B,senderTipAddr:N,terminal:L,receiverKnowledgeTimelineAddrs:O,tjpAddr:k}=y;if(L)throw new Error("(UNEXPECTED) conflict.terminal truthy? We expect this to already throw/abort the saga before this point in execution. (E: b42e982edca8b1156765de38f9e74626)");let x=a[N];if(!x)throw new Error(`(UNEXPECTED) senderTipIbGib falsy? initDomainGraph should have had the senderTipAddr (${N}) that was included in the ack frame conflicts. tjpAddr: ${k}. reason: ${B} (E: 3bd80f2054a924be98e6a7421bff4626)`);let{headIbGib:R,orderedPastIbGibs:ae}=await Aa({timeline:x,getLatest:!0,metaspace:o,space:s}),z=ae.map(ne=>p({ibGib:ne})),se=p({ibGib:R});if(y.senderKnowledgeTimelineAddrs=[...z,se],R.gib!==x.gib&&(y.senderTipAddr=se,!Object.keys(a).includes(se))){let ne=await pt({ibGibAddr:se,live:!0,space:s}),Ee=Object.keys(ne);for(let Ce of Ee)a[Ce]||(a[Ce]=ne[Ce])}let Ie=O.findLast(ne=>z.includes(ne));if(!Ie)throw new Error(`(UNEXPECTED) no latestCommonFrameAddr in the conflicts.receiverKnowledgeTimelineAddrs (${O.join(`
|
|
10
|
+
`)})? This would mean that it doesn't even have the tjpAddr (${k}). So what are we doing here? (E: 8931d1bdd6d8e100bf55f7c8a6924826)`);let pe=await mt({ibGibAddr:se,live:!0,latestCommonFrameAddr:Ie,space:s}),me=[];if(Object.keys(pe).forEach(ne=>{me.push(ne);let Ee=pe[ne];E.push(Ee)}),Ie===T)G&&console.log(`${c} [CONFLICT DEBUG] TJP ${k}: Fast-forward detected (receiver behind sender). Excluding from active conflicts and sending delta payload.`);else{if(y.accretivePayloadAddrs)throw new Error("(UNEXPECTED) conflict.accretivePayloadAddrs already truthy? This is expected to be falsy at this point in the sync. (E: 6b6b1846779867849cbde208f4374326)");y.accretivePayloadAddrs=me,u.push(y)}}u.length>0?f=!1:f=!0,G&&console.log(`${c} [CONFLICT DEBUG] Finished processing ${b.length} conflicts. Active (divergent) conflicts: ${u.length}. outgoingPayloadIbGibsDomain_conflicts.length (total outgoing payload ibgibs for ALL conflicts): ${E.length}`)}else G&&console.log(`${c} [CONFLICT DEBUG] No optimistic conflicts to process`);let S=await this.getPayloadsForRequestedInfos({deltaRequestAddrInfos:l.deltaRequestAddrInfos||[],mySpace:s}),C=[...E,...S],_;C.length===0?C=void 0:_=C.map(y=>p({ibGib:y}));let A={sagaId:e.data.uuid,stage:W.delta,conflicts:u,payloadAddrsDomain:_,deltaRequestAddrInfos:void 0,proposeCommit:f},I;G&&console.log(`${c} Creating Delta Stone. Data stage: ${A.stage}`);let v=await this.createSyncMsgStone({data:A,rel8ns:I,localSpace:s,metaspace:o}),$=await this.evolveSyncSagaIbGib({prevSagaIbGib:e,msgStones:[v],localSpace:s,metaspace:o});return G&&console.log(`${c} Delta Frame created. Rel8ns: ${JSON.stringify($.rel8ns)}`),{frame:$,payloadIbGibsDomain:C}}catch(d){throw console.error(`${c} ${h(d)}`),d}finally{G&&console.log(`${c} complete.`)}}async handleDeltaFrame({sagaContext:t,sagaIbGib:e,mySpace:a,myTempSpace:s,metaspace:i}){let o=`${this.lc}[${this.handleDeltaFrame.name}]`;try{G&&console.log(`${o} starting... (I: a1d0a85eb4189466f86dfd61e3df2626)`);let{messageData:c}=await this.getStageAndPayloadFromFrame({sagaFrame:e,space:a}),d=c;if(!e.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 8874e83e1a1b307938ee832862ec5826)");if(!e.data.conflictStrategy)throw new Error("(UNEXPECTED) sagaIbGib.data.conflictStrategy falsy? (E: 636205ab5b78fcb31d0cb1880770c826)");if(!d)throw new Error(`${o} deltaData falsy (E: 7c28c8d8f08a4421b8344e6727271421)`);if(d.stage!==W.delta)throw new Error(`${o} Invalid delta frame: deltaData.stage !== SyncStage.delta (E: 0c28c8d8f08a4421b8344e6727271421)`);G&&console.log(`${o} deltaData: ${ee(d)} (I: a76008681df458cfbcdc4848f825a826)`),G&&console.log(`${o} [CONFLICT DEBUG] deltaData.payloadAddrsDomain count: ${d.payloadAddrsDomain?.length||0}`);let{conflictStrategy:l,graftPreference:f}=e.data,{deltaRequestAddrInfos:b,payloadAddrsDomain:g,proposeCommit:E}=d,u=d.proposeCommit??!1,S=t.payloadIbGibsDomain??[];G&&console.log(`${o} [CONFLICT DEBUG] Fulfilling ${(d.deltaRequestAddrInfos||[]).length} peer requests`);let C=await this.getPayloadsForRequestedInfos({deltaRequestAddrInfos:d.deltaRequestAddrInfos||[],mySpace:a});G&&console.log(`${o} [CONFLICT DEBUG] Outgoing payload size (with deps): ${C.length}`);let _=d.conflicts?lt(d.conflicts):[],A=_.filter(y=>!y.resolved);if(A.length>0){if(l!==we.optimisticWithLCS)throw new Error(`(UNEXPECTED) conflictStrategy (${l}) is not ${we.optimisticWithLCS}? right now, this is the only one we've implemented. (E: ba3e08d92a66b24075016208a0f83226)`);for(let y of A){let T={};if(S.length>0){await yt({ibGibs:S,space:s});for(let V of S)T[p({ibGib:V})]=V}for(let V of y.accretivePayloadAddrs??[]){let H=S.find(re=>p({ibGib:re})===V);H&&(T[V]=H)}y.latestCommonFrameAddr;let{receiverKnowledgeTimelineAddrs:B,senderKnowledgeTimelineAddrs:N,reason:L,receiverTipAddr:O,senderTipAddr:k,tjpAddr:x}=y;if(!N)throw new Error("(UNEXPECTED) senderKnowledgeTimelineAddrs falsy? (E: 2a608892d11bd848e8f0c7a8d676d826)");let R=await pt({ibGibAddrs:[O],live:!0,space:a}),ae=Object.values(R);await yt({ibGibs:ae,space:s});for(let V of B){let H=R[V];await Ae({ibGib:H,space:s})}let z=N.findLast(V=>B.includes(V));if(!z)throw new Error("(UNEXPECTED) latestCommonFrameAddr falsy? how we can have a conflict without a common point in history? (E: 53de0a181838b3e5bf98d0887994b826)");let se=await mt({ibGibAddr:y.receiverTipAddr,latestCommonFrameAddr:z,live:!0,space:a});Object.values(se).forEach(V=>C.push(V));let Ie=await ta({conflictStrategy:l,timelineAddrsA:N,timelineAddrsB:B,latestCommonFrameAddr:z,ibGibReadCache:T,space:s,graftPreference:f||Me.timestamp}),{dnasCreatedInGraft:pe,dnasReplayed:me,intermediateIbGibsCreatedInGraft:De,newGraftTip:ne,graftInfoCreated:Ee}=Ie;if(y.createdDnaAddrs=pe.map(V=>p({ibGib:V})),y.replayedDnaAddrs=me.map(V=>p({ibGib:V})),y.createdDomainAddrs=[...De.map(V=>p({ibGib:V})),p({ibGib:Ee}),p({ibGib:ne})],!ne.rel8ns)throw new Error("(UNEXPECTED) newGraftTip.rel8ns falsy? we expect this to have graftinfo rel8ns, let alone dna (E: 718788f5a44e815618ac1ba621c8a826)");let Ce=ne.rel8ns[ve];if(!Ce||Ce.length===0)throw new Error(`(UNEXPECTED) newGraftTip.rel8ns.${ve} falsy/empty? we expect to always have graft info attached to timelines that are grafted. (E: 45abf31654c8aa517df4d0882b996826)`);y.graftInfoAddr=Ce.at(-1);let J=[pe,me,De,[Ee,ne]];for(let V of J.flat())if((await xe({ibGib:V})??[]).length>0){console.dir(V);debugger;console.log(ee(V))}y.accretivePayloadAddrs??=[],J.forEach(V=>V.forEach(H=>{let re=p({ibGib:H});y.accretivePayloadAddrs.includes(re)||y.accretivePayloadAddrs.push(re),C.some(Ut=>p({ibGib:Ut})===re)||C.push(H)})),y.resolved=!0}}let I=[],v=C.length>0,$=I.length>0;if(v||$){let y={sagaId:d.sagaId,stage:W.delta,payloadAddrsDomain:C.map(N=>p({ibGib:N})),requests:$?I:void 0,conflicts:_},T=await this.createSyncMsgStone({data:y,localSpace:a,metaspace:i});return{frame:await this.evolveSyncSagaIbGib({prevSagaIbGib:e,msgStones:[T],localSpace:a,metaspace:i}),payloadIbGibsDomain:C}}else if(u){let y=await at({sagaIbGib:e,space:a}),T=await Lt({history:y});return T.length>0?{frame:await this.createCommitFrame({sagaIbGib:e,errors:T,metaspace:i,mySpace:a})}:(await this.executeLocalCommit({sagaHistory:y,deltaFrame:e,localTempSpace:s,localSpace:a,metaspace:i}),{frame:await this.createCommitFrame({sagaIbGib:e,errors:void 0,metaspace:i,mySpace:a})})}else{let y={sagaId:d.sagaId,stage:W.delta,proposeCommit:!0,conflicts:_},T=await this.createSyncMsgStone({data:y,localSpace:a,metaspace:i}),B=await this.evolveSyncSagaIbGib({prevSagaIbGib:e,msgStones:[T],localSpace:a,metaspace:i});if(d.proposeCommit){G&&console.log(`${o} Peer proposed commit. Accepting & Committing.`);let N={sagaId:d.sagaId,stage:W.commit,success:!0},L=await this.createSyncMsgStone({data:N,localSpace:a,metaspace:i});return{frame:await this.evolveSyncSagaIbGib({prevSagaIbGib:B,msgStones:[L],localSpace:a,metaspace:i})}}return{frame:B,payloadIbGibsDomain:C}}}catch(c){throw console.error(`${o} ${h(c)}`),c}finally{G&&console.log(`${o} complete.`)}}async executeLocalCommit({deltaFrame:t,commitFrame:e,sagaHistory:a,metaspace:s,localSpace:i,localTempSpace:o}){let c=`${this.lc}[${this.executeLocalCommit.name}]`;try{if(G&&console.log(`${c} starting... (I: 6734980446b86a63c1af6e2e206de826)`),!t&&!e)throw new Error("(UNEXPECTED) !deltaFrame && !commitFrame? we're expecting to execute the commit based off of EITHER a delta OR a commit frame. (E: 10cae319a2685a672866f5583514e326)");if(t&&e)throw new Error("(UNEXPECTED) deltaFrame && commitFrame? we're expecting to execute the commit based off of EITHER a delta OR a commit frame. (E: b9037b1ed6d8684ac8a5d01328bad826)");let l=!!t?t:e;if(!l)throw new Error("(UNEXPECTED) !currentFrame? something wrong with my logic. (E: 4ec0ce6625cc1d677bc902c839ca1a26)");let f=nt({sagaFrame:l});if(G&&console.log(`${c} currentFrameOrigin: ${f} (I: 3add8f8390c89743ae554bd3cc60b826)`),!l.data)throw new Error("(UNEXPECTED) currentFrame.data falsy? (E: a8be68d48668d93d992d793834823826)");let b=[],g=m(I=>{b.includes(I)||b.push(I)},"fnAddPayloadAddr"),E=a.filter(I=>{let v=nt({sagaFrame:I.sagaIbGib});return f!==v});a.filter(I=>{let v=nt({sagaFrame:I.sagaIbGib});return f===v}).forEach(I=>{if(!I.sagaIbGib.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: 34d7f8cdee14717ce828878d98f89826)");I.msgStones.forEach(v=>{if(!v.data)throw new Error("(UNEXPECTED) msgStone.data falsy? (E: 21406101f91847514cc759c8a7382f26)");if(v.data.stage===W.ack){let $=v.data;$.pushOfferInfos&&$.pushOfferInfos.length>0&&$.pushOfferInfos.forEach(y=>{y.addrs.forEach(T=>g(T))})}else if(v.data.stage===W.delta){let $=v.data;$.payloadAddrsDomain&&$.payloadAddrsDomain.length>0&&$.payloadAddrsDomain.forEach(y=>g(y))}})}),G&&console.log(`${c}[${f}] allPayloadAddrsDomainTransferred: ${b.length>0?b.join(", "):"none"} (I: a1950eb3ca95bdc9ec18a4b8823e9826)`);let S=[];if(b.length>0){let I=await ce({addrs:b,space:o});if(I.success&&I.ibGibs&&I.ibGibs.length===b.length)S=I.ibGibs.concat();else{if(!I.rawResultIbGib)throw new Error("(UNEXPECTED) !resGetAllTransferred.rawResultIbGib falsy? (E: dc6cf8729668f4fbe8c024f887d97a26)");let{addrsNotFound:v,addrsErrored:$,errors:y}=I.rawResultIbGib.data;throw new Error(`(UNEXPECTED) we couldn't get all addrs transferred throughout the saga from the tempspace (${o.ib})? addrsNotFound: ${v??[]}. addrsErrored: ${$??[]}. errors: ${y??[]}(E: 222e341e634862b4d88ae7282584d826)`)}}let C=[],_=await kt({sagaHistory:a});if(_)for(let I of _){if(!I.resolved)throw new Error("(UNEXPECTED) finalConflict.resolved falsy? right now, we're expecting to resolve all conflicts. (E: a40ca8f1f54665407892ec21123a4f26)");if(!I.graftInfoAddr)throw new Error("(UNEXPECTED) finalConflict resolved but graftInfoAddr falsy? we're expecting all resolved conflicts to have a graftInfoAddr (E: d082488347570947b82008a835200126)");if(!(await Te({addrs:[I.graftInfoAddr],space:o})).at(0))throw new Error(`(UNEXPECTED) couldn't get finalConflictGraftInfo from localTempSpace (${o})? (E: 35e3c8130608d991e8fb295807812826)`);let{createdDnaAddrs:y,replayedDnaAddrs:T,createdDomainAddrs:B}=I;if(!y||y.length===0)throw new Error("(UNEXPECTED) finalConflict.createdDnaAddrs falsy/empty? (E: 9689f8be5bd19650b8d4a058b65db826)");if(!T||T.length===0)throw new Error("(UNEXPECTED) finalConflict.replayedDnaAddrs falsy/empty? (E: f42878ed1cee3e9828567c5ab8179526)");if(!B||B.length===0)throw new Error("(UNEXPECTED) finalConflict.createdDomainAddrs falsy/empty? (E: cc41251d1acfe91a48d1b6080259ed26)");(await Te({addrs:[...y,...T,...B],space:o})).forEach(L=>C.push(L))}let A=[];if(S.forEach(I=>A.push(I)),C.forEach(I=>A.push(I)),A.length===0)G&&console.log(`${c}[${f}] no changes on this end (I: fa30d18e83a87ee9e8487fbb5d632b26)`);else{G&&console.log(`${c}[${f}] ${A.length} changes detected (I: fa30d18e83a87ee9e8487fbb5d632b26)`),G&&console.log(`${c} put all into localSpace (${i.ib}) starting... (I: d5e0d9870e380b61e80c729660058826)`);let{payload_Dnas:I,payload_NonDnas:v}=await yt({ibGibs:A,space:i});G&&console.log(`${c} put all into localSpace (${i.ib}) complete. (I: d5e0d9870e380b61e80c729660058826)`);let $=await ra({sagaHistory:a,myTempSpace:o}),{mapWithTjp_NoDna:y,mapWithTjp_YesDna:T,mapWithoutTjps:B}=Je({ibGibs:v,filterPrimitives:!0});G&&console.log(`${c} register mapWithoutTjps starting... (I: 2b84d8f8dda85adde88696d8419bf726)`);let N=Object.values(B);for(let R of N)G&&console.log(`${c} registering ${p({ibGib:R})} (I: 4647b4f42d27cffe0fbfce8846755826)`),await s.registerNewIbGib({ibGib:R,space:i});G&&console.log(`${c} mapWithoutTjps complete. (I: 2b84d8f8dda85adde88696d8419bf726)`),G&&console.log(`${c} register mapWithTjp_NoDna starting... (I: 96e648e4db382499b8bfaa1b37c24826)`);let L=Ke({ibGibs:Object.values(y)}),O=Object.keys(L);for(let R of O){let ae=L[R];for(let z of ae)await s.registerNewIbGib({ibGib:z,space:i})}G&&console.log(`${c} register mapWithTjp_NoDna complete. (I: 96e648e4db382499b8bfaa1b37c24826)`),G&&console.log(`${c} register mapWithTjp_YesDna starting... (I: d54a820e9442dee4681f6228a6795926)`);let k=Ke({ibGibs:Object.values(T)}),x=Object.keys(k);for(let R of x){let ae=k[R];for(let z of ae)$.includes(p({ibGib:z}))||await s.registerNewIbGib({ibGib:z,space:i})}G&&console.log(`${c} register mapWithTjp_YesDna complete. (I: d54a820e9442dee4681f6228a6795926)`)}}catch(d){throw console.error(`${c} ${h(d)}`),d}finally{G&&console.log(`${c} complete.`)}}async createCommitFrame({sagaIbGib:t,errors:e,metaspace:a,mySpace:s}){let i=`[${this.createCommitFrame.name}]`;try{G&&console.log(`${i} starting... (I: 48fc57c023f80122135a284855757526)`);let o=e&&e.length>0?{sagaId:t.data.uuid,stage:W.commit,success:!1,errors:e}:{sagaId:t.data.uuid,stage:W.commit,success:!0},c=await this.createSyncMsgStone({data:o,localSpace:s,metaspace:a});return await this.evolveSyncSagaIbGib({prevSagaIbGib:t,msgStones:[c],localSpace:s,metaspace:a})}catch(o){throw console.error(`${i} ${h(o)}`),o}finally{G&&console.log(`${i} complete.`)}}async handleCommitFrame({sagaIbGib:t,mySpace:e,myTempSpace:a,metaspace:s}){let i=`${this.lc}[${this.handleCommitFrame.name}]`;try{if(G&&console.log(`${i} starting... (I: e179573bdd881202f8ba3168da1c3826)`),!t.data)throw new Error("(UNEXPECTED) sagaIbGib.data falsy? (E: cbc31dbb7d28b5b8c8cddb510d7d2826)");if(t.data.errors&&t.data.errors.length>0)throw new Error("not implemented...saga errored out on other end but we've already committed our changes. we need to implement undoing our changes, i.e., rollback commit, which basically is deleting all the payloads that we already put in in our previous commit. (E: e8eb789e0c08f0b3cf93607cb73e9f26)");{let o=await at({sagaIbGib:t,space:e}),c=await Lt({history:o});return c.length>0?{frame:await this.createCommitFrame({sagaIbGib:t,metaspace:s,mySpace:e,errors:c})}:(await this.executeLocalCommit({commitFrame:t,sagaHistory:o,localSpace:e,localTempSpace:a,metaspace:s}),console.error(`${i} NAG ERROR (NOT THROWN): implement cleanup logic, including add a cleanup method to the peer (E: 3a9a24befb98a981a88fbdbf52920e26)`),G&&console.log(`${i} Peer committed. Finalizing saga locally. Saga Complete.`),{sagaComplete:!0})}}catch(o){let c=`${i} ${h(o)}`;return console.error(c),{frame:await this.createCommitFrame({sagaIbGib:t,errors:[c],metaspace:s,mySpace:e})}}finally{G&&console.log(`${i} complete.`)}}async createSyncMsgStone({data:t,rel8ns:e,localSpace:a,metaspace:s}){let i=`${this.lc}[${this.createSyncMsgStone.name}]`;try{G&&console.log(`${i} starting... (I: 5f7f98e8ff980364f7191fcee4531e26)`);let o=await ca({data:t}),c=await U.stone({ib:o,parentPrimitiveIb:Rt,data:t,rel8ns:e,uuid:!0});return G&&console.log(`${i} Created stone: ${p({ibGib:c})}`),await s.put({ibGib:c,space:a}),await s.registerNewIbGib({ibGib:c}),c}catch(o){throw console.error(`${i} ${h(o)}`),o}finally{G&&console.log(`${i} complete.`)}}async getPayloadsForRequestedInfos({deltaRequestAddrInfos:t,mySpace:e}){let a=`${this.lc}[${this.getPayloadsForRequestedInfos.name}]`;try{G&&console.log(`${a} starting... (I: 4fe13d0d80050f20a8b74ba80cee5826)`);let s={};for(let{addr:o,latestAddrAlreadyHave:c}of t){let d;if(c?d=await mt({ibGibAddr:o,latestCommonFrameAddr:c,space:e,live:!0}):d=await pt({ibGibAddr:o,space:e,live:!0}),Object.keys(d).length===0)throw new Error(`(UNEXPECTED) couldn't get requested addrs in mySpace (${e.ib})? How did the receiver know to ask for these addrs if they weren't in our original graph? (E: 281eaebcdf77dd73e8245b2872100826)`);Object.values(d).forEach(f=>{s[p({ibGib:f})]=f})}return Object.values(s)}catch(s){throw console.error(`${a} ${h(s)}`),s}finally{G&&console.log(`${a} complete.`)}}async evolveSyncSagaIbGib({prevSagaIbGib:t,conflictStrategy:e,graftPreference:a,msgStones:s,localSpace:i,metaspace:o,sessionIdentity:c}){let d=`${this.lc}[${this.evolveSyncSagaIbGib.name}]`;try{if(!s||s.length===0)throw new Error(`${d} msgStones required (E: d13f8afcfb8816aeb26baae7df3ef726)`);let l=s[0].data;if(!l?.sagaId||!l?.stage)throw new Error(`${d} Invalid stone data (missing sagaId or stage) (E: c004f85ce8f8958b11839f8d68c38826)`);let f=l.sagaId,b=l.stage;for(let g of s){let E=g.data;if(E.sagaId!==f)throw new Error(`${d} Mismatched sagaId in stones. Expected ${f}, got ${E.sagaId} (E: 29e02719e426ecbbf8ee66887a2be226)`);if(E.stage!==b)throw new Error(`${d} Mismatched stage in stones. Expected ${b}, got ${E.stage} (E: d12c6571b0882f762921b60880c3f826)`)}if(t){let g=[{rel8nName:de,ibGibs:s}];if(!t.rel8ns)throw new Error("(UNEXPECTED) prevSagaIbGib.rel8ns falsy? (E: 81375841aff85b1e48ea42ca218e6826)");if(!t.rel8ns[de]||t.rel8ns[de].length===0)throw new Error("(UNEXPECTED) prevSagaIbGib.rel8ns[SYNC_MSG_REL8N_NAME] falsy/empty? (E: 15156baad26fcccda80aa3a31718c726)");let E=[{rel8nName:de,ibGibAddrs:t.rel8ns[de]}];return await Xe({timeline:t,rel8nInfos:g,rel8nRemovalInfos:E,metaspace:o,space:i,noDna:!0})}else{let g={uuid:f,n:0,isTjp:!0,conflictStrategy:e,graftPreference:a};if(c){let _=ge({ibGib:c});if(!_)throw new Error("(UNEXPECTED) sessionIdentity is truthy but sessionIdentityTjpAddr falsy? (E: f52004c10288987a6886f4e8fdf90826)");g.sessionIdentityTjpAddr=_}let E=await na({data:g}),u=s.map(_=>p({ibGib:_})),S={[de]:u},C=await Ca({space:i,metaspace:o,ib:E,data:g,rel8ns:S,parentIb:_t,noDna:!0});if(C.intermediateIbGibs)throw new Error("(UNEXPECTED) resNew.intermediateIbGibs? we were assuming we were creating a single frame. (E: 456818147235d991ccb4d10d0bbe4826)");return C.newIbGib}}catch(l){throw console.error(`${d} ${h(l)}`),l}}async getStageAndPayloadFromFrame({sagaFrame:t,space:e}){let a=`${this.lc}[${this.getStageAndPayloadFromFrame.name}]`;try{if(G&&console.log(`${a} starting... (I: fddc287bd4d55253dc50e519fd352226)`),!t.rel8ns)throw new Error("(UNEXPECTED) sagaFrame.rel8ns falsy? (E: 725bc8eb5dfe5c7058907ad8e3063826)");let s=t.rel8ns?.[de];if(s&&s.length>0){let i=s[0],o=await ce({addr:i,space:e});if(o.ibGibs&&o.ibGibs.length>0){let c=o.ibGibs[0];if(!c.data)throw new Error("(UNEXPECTED) message stone.data falsy? (E: 4d4abcea90d87ba1328434e83d0d0826)");if(!c.data.stage)throw new Error("(UNEXPECTED) message stone.data.stage falsy? (E: 72c8d22310996644ecdd2b5fdb288c26)");return{stage:c.data.stage,messageData:c.data}}else throw new Error(`couldn't get stoneAddr (${i}) from space (${e.ib}) (E: f3c826e756f8a5c358beb88aa4a65e26)`)}else throw new Error(`(UNEXPECTED) no stone addrs rel8d to sync saga ibgib frame? sagaFrame addr: ${p(t)} (E: 43eae8579e289d016741b5526052f226)`)}catch(s){throw console.error(`${a} ${h(s)}`),s}finally{G&&console.log(`${a} complete.`)}}sortTimelinesTopologically(t){let e=`${this.lc}[${this.sortTimelinesTopologically.name}]`,a=Object.keys(t);if(a.length===0)return[];let s={};a.forEach(f=>{t[f].forEach(b=>{let g=p({ibGib:b});s[g]=f})});let i={};a.forEach(f=>i[f]=new Set),a.forEach(f=>{t[f].forEach(b=>{b.rel8ns&&Object.values(b.rel8ns).flat().forEach(g=>{if(!g)return;let E=s[g];E&&E!==f&&i[f].add(E)})})});let o=new Set,c=new Set,d=[],l=m(f=>{if(c.has(f)){console.warn(`${e} Cycle detected involving ${f}. Ignoring edge to break cycle. (W: 7e7352347102431aa5318db962459929)`);return}o.has(f)||(c.add(f),i[f].forEach(b=>l(b)),o.add(f),c.delete(f),d.push(f))},"visit");return a.forEach(f=>{o.has(f)||l(f)}),d}};var Xa={$schema:"../../../../libs/core-gib/dist/keystone/policy/schemas/keystone.medium.schema.json",metadata:{name:"Space-Gib Default Identity Policy",securityLevel:"medium"},pools:{sync:{id:"sync",allowedVerbs:["sync"],algo:"SHA-256",rounds:1,behavior:{size:200,replenish:"top-up",selectSequentially:2,selectRandomly:2,targetBindingCount:5}},manage:{id:"manage",allowedVerbs:["manage"],algo:"SHA-512",rounds:10,behavior:{size:2e3,replenish:"replace-all",selectSequentially:5,selectRandomly:5,targetBindingCount:16}},revoke:{id:"revoke",allowedVerbs:["revoke"],algo:"SHA-512",rounds:10,behavior:{size:2e3,replenish:"delete-all",selectSequentially:5,selectRandomly:5,targetBindingCount:16}},connect:{id:"connect",allowedVerbs:["connect"],algo:"SHA-256",rounds:1,behavior:{size:20,replenish:"top-up",selectSequentially:2,selectRandomly:2,targetBindingCount:3}}}};var _r=Xa.pools;function Ft(r,t){let e=_r[r];if(!e)throw new Error(`Pool template not found in space-gib JSON config: ${r}`);return Pa({template:e,salt:t})}m(Ft,"getSpaceGibPoolConfig");var X={COMMON:Ue.COMMON,DEFAULT_POOL:{ID:"default",SIZE:20,SELECT_SEQUENTIALLY:2,SELECT_RANDOMLY:2,TARGET_BINDING_COUNT:3},CONNECT_POOL:Ue.CONNECT_POOL},Wi={MIN_DEFAULT_POOL_SIZE:50,ALLOWED_ALGORITHMS:[dt.sha_256,dt.sha_512]};var M=class extends $a{static{m(this,"SpaceGibApiBridge")}lc="[SpaceGibApiBridge]"},Gr=new M;Ta(Gr);var Y="[dev-tools]",w={};window.ibgibDebugState=w;function n(r){let t=document.getElementById("dev-panel-log");if(!t)return;let e=new Date().toISOString().slice(11,23);t.textContent=`[${e}] ${r}
|
|
11
|
+
`+t.textContent}m(n,"devLog");async function Ya({domainI:r,masterSecret:t,syncSalt:e,metaspace:a,space:s,apiBridge:i}){let o=new ue,c=await Kt({s:`${t}-sync-delegate`}),d=await o.genesis({masterSecret:c,configs:[Ft("sync",`${e}-delegate`)],metaspace:a,space:s,frameDetails:{client:"space-gib-web-dev-delegate",timestamp:Pe()}}),l=await o.registerDelegate({parentKeystone:r,delegateKeystone:d,masterSecret:t,metaspace:a,space:s,allowedVerbs:[he]}),f=p({ibGib:r}),b=await i.putEvolveKeystone({domainAddr:f,keystoneIbGib:l,relatedKeystoneIbGibs:[d]});if(!b.success)throw new Error(`Server rejected delegate evolution: ${b.message}`);return{evolvedDomainI:l,delegateKeystone:d,delegateSecret:c}}m(Ya,"createAndRegisterSyncDelegate");async function la({domainI:r,masterSecret:t,metaspace:e,space:a}){let s=r,i=m(async()=>t,"fnSenderSecret"),o=Object.values(r.data?.delegates??{}).find(c=>c.allowedVerbs?.includes(he));if(o){let c=o.delegateTjpAddr;if(c){let d=await e.getLatestAddr({addr:c,space:a});if(d){let l=await e.get({addr:d,space:a});if(l.success&&l.ibGibs&&l.ibGibs.length>0){s=l.ibGibs[0];let f=await Kt({s:`${t}-sync-delegate`});i=m(async()=>f,"fnSenderSecret")}}}}return{senderIdentity:s,fnSenderSecret:i}}m(la,"getSenderIdentityInfo");async function Le(r){let t=`${Y}[performPhaseSetup(${r.phaseText})]`,e=document.getElementById(r.btnId);if(e)try{e.disabled=!0,n(`${r.phaseText} Setup: Generating Alice's long-lived Domain Keystone (I) and Target (X)...`);let a=await D(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space found in metaspace.");let o=await new ue().genesis({masterSecret:r.masterSecret,configs:[Ft("manage",r.manageSalt)],metaspace:a,space:s,frameDetails:{client:"space-gib-web-dev",timestamp:Pe()}});n(`${r.phaseText} Setup: \u2713 Domain Keystone (I) created locally: ${p({ibGib:o})}`),n(`${r.phaseText} Setup: Starting postGenesisKeystone...`);let c=new M,d=await c.postGenesisKeystone(o);if(d.success)n(`${r.phaseText} Setup: \u2713 Domain Keystone registered and stored on receiver (server).`);else throw n(`${r.phaseText} Setup: X postGenesisKeystone failed: ${d.message}.`),new Error(`${r.phaseText} Setup: Server rejected genesis domain keystone: ${d.message}`);n(`${r.phaseText} Setup: Generating and registering sync delegate...`);let{evolvedDomainI:l,delegateKeystone:f}=await Ya({domainI:o,masterSecret:r.masterSecret,syncSalt:r.syncSalt,metaspace:a,space:s,apiBridge:c});w.domainI=l,w.domainIMasterSecret=r.masterSecret,n(`${r.phaseText} Setup: \u2713 Registered Sync Delegate: ${p({ibGib:f})}`);let b=await U.firstGen({parentIbGib:q,ib:r.ib,data:r.data,dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),g=b.newIbGib;await a.persistTransformResult({resTransform:b,space:s}),await a.registerNewIbGib({ibGib:g}),w.targetX=g,n(`${r.phaseText} Setup: \u2713 Target (X) created and persisted locally: ${p({ibGib:g})}`),n(`\u2713 ${r.phaseText} Setup Complete! Ready for ${r.phaseText} Sync.`),e.textContent=`\u2713 ${r.phaseText} Setup Complete`;let E=document.getElementById(r.nextBtnId);E&&(E.disabled=!1)}catch(a){n(`\u2717 ${r.phaseText} Setup FAILED: ${h(a)}`),console.error(`${t} ${r.phaseText} Setup error:`,a),e.disabled=!1}}m(Le,"performPhaseSetup");async function je(r){let t=`${Y}[performPhaseSync(${r.phaseText})]`,e=document.getElementById(r.btnId);if(e)try{e.disabled=!0,n(`${r.phaseText} Sync: Executing senderCoordinator.sync(...) using WebSocket Peer...`);let a=w.domainI,s=w.targetX;if(!a||!s){n(`\u26A0 ${r.phaseText} Sync: Missing setup state. Please run Setup first.`),e.disabled=!1;return}let i=p({ibGib:a}),o=await D(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let d=location.protocol==="https:"?"wss:":"ws:",l=new rt({classname:"SyncPeerWebSocketSender_V1",httpEvolveUrl:`${location.protocol}//${location.host}/api/keystone/evolve/${encodeURIComponent(i)}`,wsUrl:`${d}//${location.host}/api/sync/ws/${encodeURIComponent(i)}`}),f=new oe,b=await ie();w.sagaId=b,w.senderPeer=l;let{senderIdentity:g,fnSenderSecret:E}=await la({domainI:a,masterSecret:w.domainIMasterSecret,metaspace:o,space:c});await l.initializeOpts({localMetaspace:o,localSpace:c,senderIdentity:g,fnSenderSecret:E,sagaId:b,sessionConnectPoolConfig:X.CONNECT_POOL,sessionSyncPoolConfig:X.DEFAULT_POOL,targetAddrs:[i]});try{await(await f.sync({domainIbGibs:[s],senderIdentityInfo:{senderIdentity:g,senderDomainAddr:i},fnSenderSecret:E,peer:l,localSpace:c,metaspace:o,conflictStrategy:we.optimisticWithLCS})).done}catch(S){if(r.expectSyncFailure)n(`${r.phaseText} Sync: Coordinator sync executed (${r.failureMessageSuffix??"errors expected"}): ${h(S)}`);else throw S}n(`\u2713 ${r.phaseText} Sync Execution Complete! Ready for State Checks.`),e.textContent=`\u2713 ${r.phaseText} Sync Run`;let u=document.getElementById(r.nextBtnId);u&&(u.disabled=!1)}catch(a){n(`\u2717 ${r.phaseText} Sync FAILED: ${h(a)}`),console.error(`${t} ${r.phaseText} Sync error:`,a),e.disabled=!1}}m(je,"performPhaseSync");async function fa({localI:r,metaspace:t,space:e}){let a=Object.values(r.data?.delegates??{}).find(f=>f.allowedVerbs?.includes(he));if(!a)return{};let s=a.delegateTjpAddr;if(!s)return{};let i=await t.getLatestAddr({addr:s,space:e});if(!i)return{delegateTjpAddr:s};let c=(await t.get({addrs:[i],space:e})).ibGibs?.[0];if(!c)return{delegateTjpAddr:s,latestLocalDelegateAddr:i};let l=c.data?.proofs?.find(f=>f.claim?.verb==="sync")?.claim?.target;return{delegateTjpAddr:s,latestLocalDelegateAddr:i,localDelegate:c,sessionIdentityTjpAddr:l}}m(fa,"getDelegateAndSessionInfo");async function K({domainIbGibs:r,passLabel:t,metaspace:e,space:a}){let s=w.domainI,i=w.domainIMasterSecret;if(!s||!i)throw new Error(`runSyncPass[${t}]: Missing domain identity or secret in debugState. Run Setup first.`);let o=p({ibGib:s}),c=location.protocol==="https:"?"wss:":"ws:",{senderIdentity:d,fnSenderSecret:l}=await la({domainI:s,masterSecret:i,metaspace:e,space:a});n(`Sync: ${t} \u2014 using sender: ${p({ibGib:d}).slice(0,40)}...`);let f=new rt({classname:"SyncPeerWebSocketSender_V1",httpEvolveUrl:`${location.protocol}//${location.host}/api/keystone/evolve/${encodeURIComponent(o)}`,wsUrl:`${c}//${location.host}/api/sync/ws/${encodeURIComponent(o)}`}),b=new oe,g=await ie();w.sagaId=g,w.senderPeer=f,await f.initializeOpts({localMetaspace:e,localSpace:a,senderIdentity:d,fnSenderSecret:l,sagaId:g,sessionConnectPoolConfig:X.CONNECT_POOL,sessionSyncPoolConfig:X.DEFAULT_POOL,targetAddrs:[o]}),await(await b.sync({domainIbGibs:r,senderIdentityInfo:{senderIdentity:d,senderDomainAddr:o},fnSenderSecret:l,peer:f,localSpace:a,metaspace:e,conflictStrategy:we.optimisticWithLCS})).done;let u=await e.getLatestAddr({addr:o,space:a});if(u&&u!==p({ibGib:s})){let S=await e.get({addrs:[u],space:a});S.ibGibs?.[0]&&(w.domainI=S.ibGibs[0])}}m(K,"runSyncPass");async function ye({domainIbGibs:r,passLabel:t,metaspace:e,space:a,primarySpace:s,domainI:i,masterSecret:o}){let c=p({ibGib:i}),d=location.protocol==="https:"?"wss:":"ws:",{senderIdentity:l,fnSenderSecret:f}=await la({domainI:i,masterSecret:o,metaspace:e,space:a});n(`Sync: ${t} \u2014 using sender: ${p({ibGib:l}).slice(0,40)}...`);let b=new rt({classname:"SyncPeerWebSocketSender_V1",httpEvolveUrl:`${location.protocol}//${location.host}/api/keystone/evolve/${encodeURIComponent(c)}`,wsUrl:`${d}//${location.host}/api/sync/ws/${encodeURIComponent(c)}`}),g=new oe,E=await ie();w.sagaId=E,w.senderPeer=b,await b.initializeOpts({localMetaspace:e,localSpace:a,senderIdentity:l,fnSenderSecret:f,sagaId:E,sessionConnectPoolConfig:X.CONNECT_POOL,sessionSyncPoolConfig:X.DEFAULT_POOL,targetAddrs:[c]}),await(await g.sync({domainIbGibs:r,senderIdentityInfo:{senderIdentity:l,senderDomainAddr:c},fnSenderSecret:f,peer:b,localSpace:a,metaspace:e,conflictStrategy:we.optimisticWithLCS})).done;let S=await e.getLatestAddr({addr:c,space:a});if(S){let _=(await e.get({addrs:[S],space:a})).ibGibs?.[0];_&&(w.domainI=_,s&&await be({domainI:_,metaspace:e,fromSpace:a,toSpace:s}))}}m(ye,"runSyncPassFromSpace");async function fe({masterSecret:r,syncSalt:t,manageSalt:e,metaspace:a,space:s,apiBridge:i,phaseText:o}){let d=await new ue().genesis({masterSecret:r,configs:[Ft("manage",e)],metaspace:a,space:s,frameDetails:{client:"space-gib-web-dev",timestamp:Pe()}});n(`${o} Setup: \u2713 Domain Keystone (I) created locally: ${p({ibGib:d})}`),n(`${o} Setup: Starting postGenesisKeystone...`);let l=await i.postGenesisKeystone(d);if(l.success)n(`${o} Setup: \u2713 Domain Keystone registered and stored on receiver (server).`);else throw n(`${o} Setup: X postGenesisKeystone failed: ${l.message}.`),new Error(`${o} Setup: Server rejected genesis domain keystone: ${l.message}`);n(`${o} Setup: Generating and registering sync delegate...`);let{evolvedDomainI:f,delegateKeystone:b}=await Ya({domainI:d,masterSecret:r,syncSalt:t,metaspace:a,space:s,apiBridge:i});return w.domainI=f,w.domainIMasterSecret=r,{domainI:f,delegateKeystone:b}}m(fe,"setupDomainAndDelegateIdentities");async function ot({localI:r,metaspace:t,space:e,apiBridge:a,domainAddr:s}){let i=await t.getLatestAddr({addr:s,space:e});if(!i)throw new Error("Evolved domain keystone tip NOT found in local space!");n("\u2713 Check: Evolved Domain Keystone exists locally.");let{latestLocalDelegateAddr:o,sessionIdentityTjpAddr:c}=await fa({localI:r,metaspace:t,space:e});if(!o)throw new Error("Evolved delegate keystone tip NOT found in local space!");if(!c)throw new Error("Delegate sync claim does not target a session keystone.");n("\u2713 Check: Delegate Keystone and Sync Claim to Session verified locally.");let d=await a.getIbGib(s,o);if(!d.success||!d.ibGib)throw new Error("Evolved Delegate Keystone NOT found on server!");n("\u2713 Check: Evolved Delegate Keystone exists on server.");let l=await a.getIbGib(s,i);if(!l.success||!l.ibGib)throw new Error("Evolved Domain Keystone NOT found on server!");return n("\u2713 Check: Evolved Domain Keystone exists on server."),{latestLocalIAddr:i,latestLocalDelegateAddr:o,sessionIdentityTjpAddr:c}}m(ot,"verifyIdentitiesOnServer");async function be({domainI:r,metaspace:t,fromSpace:e,toSpace:a}){let s=p({ibGib:r}),i=await t.getLatestAddr({addr:s,space:e});if(!i)throw new Error("Could not find latest domain I address.");let c=(await t.get({addrs:[i],space:e})).ibGibs?.[0];if(!c)throw new Error("Could not get latest domain I.");let d=await t.getDependencyGraph({ibGibAddr:i,space:e});await t.put({ibGibs:Object.values(d),space:a}),await t.registerNewIbGib({ibGib:c,space:a});let l=Object.values(c.data?.delegates??{}).find(f=>f.allowedVerbs?.includes(he));if(l){let f=l.delegateTjpAddr;if(f){let b=await t.getLatestAddr({addr:f,space:e});if(b){let E=(await t.get({addrs:[b],space:e})).ibGibs?.[0];if(E){let u=await t.getDependencyGraph({ibGibAddr:b,space:e});await t.put({ibGibs:Object.values(u),space:a}),await t.registerNewIbGib({ibGib:E,space:a})}}}}}m(be,"copyIdentitiesToSpace");var Oe=null;function Ha(){let r=`${Y}[initWsTestButton]`,t=document.getElementById("btn-test-ws");if(!t){console.warn(`${r} btn-test-ws not found \u2014 skipping`);return}t.addEventListener("click",()=>{try{if(Oe&&Oe.readyState===WebSocket.OPEN){Oe.send(JSON.stringify({ping:"hello from client",ts:Date.now()})),n("\u2192 sent ping on existing connection");return}let a=`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/debug/ws-echo`;n(`\u2192 connecting to ${a}`),Oe=new WebSocket(a),Oe.addEventListener("open",()=>{n("\u2713 WebSocket connected"),t.textContent="Send WS Ping"}),Oe.addEventListener("message",s=>{n(`\u2190 ${s.data}`)}),Oe.addEventListener("close",s=>{n(`\u2717 WebSocket closed (code ${s.code})`),t.textContent="Test WebSocket",Oe=null}),Oe.addEventListener("error",s=>{n("\u2717 WebSocket error \u2014 check console"),console.error(`${r} WebSocket error`,s)})}catch(e){n(`\u2717 ${h(e)}`),console.error(`${r} ${h(e)}`)}})}m(Ha,"initWsTestButton");function Wa(){let r=document.getElementById("btn-print-dev-state");r&&r.addEventListener("click",()=>{n("Printing debug state to console..."),console.dir(w)})}m(Wa,"initPrintStateButton");function qa(){let r=`${Y}[initCreateDomainKeystoneButton]`,t=document.getElementById("btn-create-domain-keystone");t&&t.addEventListener("click",async()=>{try{t.disabled=!0,n("Generating dummy Domain Keystone (I)...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space found in metaspace.");let s="password",o=await new ue().genesis({masterSecret:s,configs:[Oa({id:"default",salt:await ie(),replenishStrategy:Ye.topUp})],metaspace:e,space:a,frameDetails:{client:"space-gib-web-dev",timestamp:Pe()}}),c=p({ibGib:o});n(`\u2713 Local genesis complete: ${c}`),w.domainI=o,w.domainIMasterSecret=s,n("Posting genesis keystone to server...");let l=await new M().postGenesisKeystone(o);if(!l.success){n(`\u2717 Server rejected genesis keystone: ${l.message}`),t.disabled=!1;return}n("\u2713 Server accepted Domain Keystone (I)"),t.textContent="\u2713 Domain Keystone Created";let f=document.getElementById("btn-create-test-ibgib");f&&(f.disabled=!1)}catch(e){n(`\u2717 ${h(e)}`),console.error(`${r} ${h(e)}`),t.disabled=!1}})}m(qa,"initCreateDomainKeystoneButton");function za(){let r=`${Y}[initCreateTestIbGibButton]`,t=document.getElementById("btn-create-test-ibgib");if(!t){console.warn(`${r} btn-create-test-ibgib not found \u2014 skipping`);return}t.addEventListener("click",async()=>{try{n("Generating dummy X^Xtjp ibgib...");let a=(await U.firstGen({parentIbGib:q,ib:"test data",data:{hello:"world",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}})).newIbGib,s=p({ibGib:a});w.targetX=a,n(`\u2713 Created X: ${s}`),t.textContent="\u2713 Test IbGib (X) Created";let i=document.getElementById("btn-create-session-keystone");i&&(i.disabled=!1)}catch(e){n(`\u2717 ${h(e)}`),console.error(`${r} ${h(e)}`)}})}m(za,"initCreateTestIbGibButton");function Ja(){let r=`${Y}[initCreateSessionKeystoneButton]`,t=document.getElementById("btn-create-session-keystone");if(!t){console.warn(`${r} btn-create-session-keystone not found \u2014 skipping`);return}t.addEventListener("click",async()=>{try{n("Generating Session Keystone (S^Stjp)...");let e=w.domainI,a=w.targetX;if(!e){n("\u26A0 No domain keystone (I) found in state. Please Create Domain Keystone first.");return}if(!a){n("\u26A0 No target ibgib (X) found in state. Please Create Test IbGib first.");return}let s=await D(),i=await s.getLocalUserSpace({});if(!i)throw new Error("No default space found in metaspace.");let o="ephemeral-"+Math.random().toString(),c=new ue;console.warn(`${Y}[NAG] placeholder genesis keystone config right now (W: 69b108687cf8bec0f9a8e148bcca8d26)`);let d=await c.genesis({masterSecret:o,configs:[{id:X.DEFAULT_POOL.ID,salt:await ie(),type:X.COMMON.TYPE,algo:X.COMMON.ALGO,rounds:X.COMMON.ROUNDS,behavior:{size:X.DEFAULT_POOL.SIZE,replenish:X.COMMON.REPLENISH,selectSequentially:X.DEFAULT_POOL.SELECT_SEQUENTIALLY,selectRandomly:X.DEFAULT_POOL.SELECT_RANDOMLY,targetBindingCount:X.DEFAULT_POOL.TARGET_BINDING_COUNT},allowedVerbs:[]},{id:X.CONNECT_POOL.ID,salt:await ie(),type:X.COMMON.TYPE,algo:X.COMMON.ALGO,rounds:X.COMMON.ROUNDS,behavior:{size:X.CONNECT_POOL.SIZE,replenish:X.COMMON.REPLENISH,selectSequentially:X.CONNECT_POOL.SELECT_SEQUENTIALLY,selectRandomly:X.CONNECT_POOL.SELECT_RANDOMLY,targetBindingCount:X.CONNECT_POOL.TARGET_BINDING_COUNT},allowedVerbs:[X.CONNECT_POOL.VERB]}],metaspace:s,space:i,frameDetails:{client:"space-gib-web-session",target_I:e?p({ibGib:e}):void 0,target_X:a?p({ibGib:a}):void 0}}),l=p({ibGib:d});w.sessionS=d,w.sessionSecret=o,n(`\u2713 Created Session Keystone: ${l}`),t.textContent="\u2713 Session Keystone Created"}catch(e){n(`\u2717 ${h(e)}`),console.error(`${r} ${h(e)}`)}})}m(Ja,"initCreateSessionKeystoneButton");function Za(){let r=document.getElementById("btn-1b-setup");r&&r.addEventListener("click",()=>{Le({phaseText:"1B",btnId:"btn-1b-setup",nextBtnId:"btn-1b-sync",masterSecret:"test-sender-secret-phase1",syncSalt:"senderidentitysyncsaltphase1",manageSalt:"senderidentitymanagesaltphase1",ib:"test data",data:{hello:"world",random:Math.random()}})})}m(Za,"init1bSetupButton");function Qa(){let r=document.getElementById("btn-1b-sync");r&&r.addEventListener("click",()=>{je({phaseText:"1B",btnId:"btn-1b-sync",nextBtnId:"btn-1b-check",expectSyncFailure:!0,failureMessageSuffix:"establish phase successfully run; connection/sync errors expected in 1B"})})}m(Qa,"init1bSyncButton");function en(){let r=`${Y}[init1bCheckButton]`,t=document.getElementById("btn-1b-check");t&&t.addEventListener("click",async()=>{try{n("1B Check: Asserting cryptographic and durable state expectations from respec...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=w.domainI,i=w.targetX,o=await e.getLatestAddr({addr:p({ibGib:s}),space:a});if(!o){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) created and stored locally.");let d=(await e.get({addrs:[o],space:a})).ibGibs?.[0];if(!d){n("\u2717 Check: Failed to load I1 from local space.");return}let l=d.data?.proofs?.find(T=>T.claim?.verb==="sync");l?n("\u2713 Check: I1 contains valid sync-verb claim proof."):n("\u2717 Check: I1 is missing sync-verb claim proof!");let f=l?.claim?.target;if(!f){n("\u2717 Check: I1 sync claim does not target a session keystone.");return}n(`\u2713 Check: Sync claim targets session keystone: ${f}`);let g=(await e.get({addrs:[f],space:a})).ibGibs?.[0];if(!g){n("\u2717 Check: Session Keystone (S) NOT found in local space.");return}n("\u2713 Check: Session Keystone (S) successfully created locally.");let E=g.data?.challengePools??[],u=E.some(T=>T.id===Be),S=E.some(T=>T.id===Qe);u&&S?n("\u2713 Check: S contains both connect and sync challenge pools."):n(`\u2717 Check: S is missing challenge pools! (connect: ${u}, sync: ${S})`),n("Check: Verifying registrations on server (receiver metaspace)...");let C=new M,_=!1,A=!1,I=!1,v=p({ibGib:s}),$=await C.getKeystoneGraph(v);if($.success&&$.graph){let T=$.graph;_=T[v]!==void 0,A=T[o]!==void 0}else n(`\u2717 Check Server: Failed to fetch keystone graph from server: ${$.message}`);let y=await C.getIbGib(v,f);if(y.success&&y.ibGib?I=!0:n(`\u2717 Check Server: Failed to fetch session keystone from server: ${y.message}`),_?n("\u2713 Check Server: Genesis Domain Keystone (I) registered on server."):n("\u2717 Check Server: Genesis Domain Keystone (I) missing on server!"),A?n("\u2713 Check Server: Evolved Domain Keystone (I1) accepted and stored on server."):n("\u2717 Check Server: Evolved Domain Keystone (I1) missing on server!"),I?n("\u2713 Check Server: Session Keystone (S) accepted and stored on server."):n("\u2717 Check Server: Session Keystone (S) missing on server!"),_&&A&&I){n("\u{1F389} ALL PHASE 1B ESTABLISH CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 1B All Passed";let T=document.getElementById("btn-2b-setup");T&&(T.disabled=!1)}}catch(e){n(`\u2717 1B Check FAILED: ${h(e)}`),console.error(`${r} 1B Check error:`,e)}})}m(en,"init1bCheckButton");function tn(){let r=document.getElementById("btn-2b-setup");r&&r.addEventListener("click",()=>{Le({phaseText:"2B",btnId:"btn-2b-setup",nextBtnId:"btn-2b-sync",masterSecret:"test-sender-secret-phase2",syncSalt:"senderidentitysyncsaltphase2",manageSalt:"senderidentitymanagesaltphase2",ib:"test data",data:{hello:"world2",random:Math.random()}})})}m(tn,"init2bSetupButton");function an(){let r=document.getElementById("btn-2b-sync");r&&r.addEventListener("click",()=>{je({phaseText:"2B",btnId:"btn-2b-sync",nextBtnId:"btn-2b-check",expectSyncFailure:!0,failureMessageSuffix:"connect phase successfully run; subsequent sync errors expected in 2B"})})}m(an,"init2bSyncButton");function nn(){let r=`${Y}[init2bCheckButton]`,t=document.getElementById("btn-2b-check");t&&t.addEventListener("click",async()=>{try{n("2B Check: Asserting cryptographic and WebSocket state expectations...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=w.domainI,i=p({ibGib:s}),o=await e.getLatestAddr({addr:i,space:a});if(!o){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) created and stored locally.");let d=(await e.get({addrs:[o],space:a})).ibGibs?.[0];if(!d){n("\u2717 Check: Failed to load I1 from local space.");return}let f=d.data?.proofs?.find(I=>I.claim?.verb==="sync")?.claim?.target;if(!f){n("\u2717 Check: I1 sync claim does not target a session keystone.");return}n(`\u2713 Check: Sync claim targets session keystone: ${f}`);let b=await e.getLatestAddr({addr:f,space:a});if(!b){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n("\u2713 Check: Found latest session keystone (S) locally.");let E=(await e.get({addrs:[b],space:a})).ibGibs?.[0];if(!E){n("\u2717 Check: Failed to load latest Session Keystone (S).");return}let u=E.data?.challengePools??[],S=u.find(I=>I.id===Be),C=u.find(I=>I.id===Qe);if(S&&C)n("\u2713 Check: S contains both connect and sync challenge pools.");else{n(`\u2717 Check: S is missing challenge pools! (connect: ${!!S}, sync: ${!!C})`);return}let _=Object.keys(S.challenges).length;if(_===0)n("\u2713 Check: S connect pool successfully depleted (0 challenges remaining).");else{n(`\u2717 Check: S connect pool not depleted! (${_} challenges remaining)`);return}if(w.senderPeer&&w.senderPeer.isSocketOpen)n("\u2713 Check: WebSocket connection is active and OPEN.");else{n("\u2717 Check: WebSocket connection is NOT open or peer is missing!");return}n("\u{1F389} ALL PHASE 2B CONNECT CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 2B All Passed";let A=document.getElementById("btn-3b-setup");A&&(A.disabled=!1)}catch(e){n(`\u2717 2B Check FAILED: ${h(e)}`),console.error(`${r} 2B Check error:`,e)}})}m(nn,"init2bCheckButton");function rn(){let r=document.getElementById("btn-3b-setup");r&&r.addEventListener("click",()=>{Le({phaseText:"3B",btnId:"btn-3b-setup",nextBtnId:"btn-3b-sync",masterSecret:"test-sender-secret-phase3",syncSalt:"senderidentitysyncsaltphase3",manageSalt:"senderidentitymanagesaltphase3",ib:"test data 3b",data:{hello:"world3",random:Math.random()}})})}m(rn,"init3bSetupButton");function on(){let r=document.getElementById("btn-3b-sync");r&&r.addEventListener("click",()=>{je({phaseText:"3B",btnId:"btn-3b-sync",nextBtnId:"btn-3b-check"})})}m(on,"init3bSyncButton");function sn(){let r=`${Y}[init3bCheckButton]`,t=document.getElementById("btn-3b-check");t&&t.addEventListener("click",async()=>{try{n("3B Check: Asserting cryptographic and WebSocket state expectations...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=w.domainI,i=w.targetX,o=p({ibGib:i}),c=p({ibGib:s}),d=await e.getLatestAddr({addr:o,space:a});if(!d){n("\u2717 Check: Evolved target X NOT found in local space!");return}n(`\u2713 Check: Evolved target X found locally at: ${d}`);let l=await e.getDependencyGraph({ibGibAddr:d,space:a});if(!l||Object.keys(l).length===0){n("\u2717 Check: Failed to load target X dependency graph locally.");return}n(`\u2713 Check: Target X local graph loaded (${Object.keys(l).length} nodes).`);let f=new M,b=await f.getIbGibGraph(c,o,!0);if(!b.success||!b.graph){n(`\u2717 Check: Failed to fetch target X graph from server: ${b.message}`);return}let g=b.graph;if(n(`\u2713 Check: Target X server graph loaded (${Object.keys(g).length} nodes).`),te({graphA:l,graphB:g}))n("\u2713 Check: Target X dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Target X dependency graphs mismatch between client and server!");return}let u=await e.getLatestAddr({addr:c,space:a});if(!u){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists locally.");let C=(await e.get({addrs:[u],space:a})).ibGibs?.[0];if(!C){n("\u2717 Check: Failed to load I1 from local space.");return}let A=C.data?.proofs?.find(x=>x.claim?.verb==="sync")?.claim?.target;if(!A){n("\u2717 Check: I1 sync claim does not target a session keystone.");return}let I=await f.getIbGib(c,u);if(!I.success||!I.ibGib){n("\u2717 Check: Evolved Domain Keystone (I1) NOT found on server!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists on server.");let v=await e.getLatestAddr({addr:A,space:a});if(!v){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${v}`);let y=(await e.get({addrs:[v],space:a})).ibGibs?.[0];if(!y){n("\u2717 Check: Failed to load latest Session Keystone (S) locally.");return}let T=y.data?.n;n(`\u2713 Check: S tip evolved to n = ${T}.`),T!==3&&T!==4&&n(`\u26A0 Check: Expected S to evolve to n = 3 or 4, got n = ${T}. Continuing anyway...`);let B=await f.getIbGib(c,v);if(!B.success||!B.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let N=await e.getDependencyGraph({ibGibAddr:v,space:a}),L=await f.getIbGibGraph(c,A,!0);if(!L.success||!L.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${L.message}`);return}let O=L.graph;if(te({graphA:N,graphB:O}))n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u{1F389} ALL PHASE 3B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 3B All Passed"}catch(e){n(`\u2717 3B Check FAILED: ${h(e)}`),console.error(`${r} 3B Check error:`,e)}})}m(sn,"init3bCheckButton");function cn(){let r=document.getElementById("btn-4-1b-setup");r&&r.addEventListener("click",()=>{Le({phaseText:"4.1B",btnId:"btn-4-1b-setup",nextBtnId:"btn-4-1b-sync",masterSecret:"test-sender-secret-phase4-1",syncSalt:"senderidentitysyncsaltphase4-1",manageSalt:"senderidentitymanagesaltphase4-1",ib:"test data 4.1b",data:{hello:"world4_1",random:Math.random()}})})}m(cn,"init4_1bSetupButton");function dn(){let r=document.getElementById("btn-4-1b-sync");r&&r.addEventListener("click",()=>{je({phaseText:"4.1B",btnId:"btn-4-1b-sync",nextBtnId:"btn-4-1b-check"})})}m(dn,"init4_1bSyncButton");function ln(){let r=`${Y}[init4_1bCheckButton]`,t=document.getElementById("btn-4-1b-check");t&&t.addEventListener("click",async()=>{try{n("4.1B Check: Asserting cryptographic and WebSocket state expectations...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=w.domainI,i=w.targetX,o=p({ibGib:i}),c=p({ibGib:s}),d=await e.getLatestAddr({addr:o,space:a});if(!d){n("\u2717 Check: Evolved target X NOT found in local space!");return}n(`\u2713 Check: Evolved target X found locally at: ${d}`);let l=await e.getDependencyGraph({ibGibAddr:d,space:a});if(!l||Object.keys(l).length===0){n("\u2717 Check: Failed to load target X dependency graph locally.");return}n(`\u2713 Check: Target X local graph loaded (${Object.keys(l).length} nodes).`);let f=new M,b=await f.getIbGibGraph(c,o,!0);if(!b.success||!b.graph){n(`\u2717 Check: Failed to fetch target X graph from server: ${b.message}`);return}let g=b.graph;if(n(`\u2713 Check: Target X server graph loaded (${Object.keys(g).length} nodes).`),te({graphA:l,graphB:g}))n("\u2713 Check: Target X dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Target X dependency graphs mismatch between client and server!");return}let u=await e.getLatestAddr({addr:c,space:a});if(!u){n("\u2717 Check: Evolved domain keystone tip I1 NOT found in local space!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists locally.");let C=(await e.get({addrs:[u],space:a})).ibGibs?.[0];if(!C){n("\u2717 Check: Failed to load I1 from local space.");return}let{latestLocalDelegateAddr:_,sessionIdentityTjpAddr:A}=await fa({localI:C,metaspace:e,space:a});if(!_){n("\u2717 Check: Evolved delegate keystone tip NOT found in local space!");return}if(!A){n("\u2717 Check: Delegate sync claim does not target a session keystone.");return}n("\u2713 Check: Delegate Keystone and Sync Claim to Session verified locally.");let I=await f.getIbGib(c,_);if(!I.success||!I.ibGib){n("\u2717 Check: Evolved Delegate Keystone NOT found on server!");return}n("\u2713 Check: Evolved Delegate Keystone exists on server.");let v=await f.getIbGib(c,u);if(!v.success||!v.ibGib){n("\u2717 Check: Evolved Domain Keystone (I1) NOT found on server!");return}n("\u2713 Check: Evolved Domain Keystone (I1) exists on server.");let $=await e.getLatestAddr({addr:A,space:a});if(!$){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${$}`);let T=(await e.get({addrs:[$],space:a})).ibGibs?.[0];if(!T){n("\u2717 Check: Failed to load latest Session Keystone (S) locally.");return}let B=T.data?.n;n(`\u2713 Check: S tip evolved to n = ${B}.`),B!==3&&B!==4&&n(`\u26A0 Check: Expected S to evolve to n = 3 or 4, got n = ${B}. Continuing anyway...`);let N=await f.getIbGib(c,$);if(!N.success||!N.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let L=await e.getDependencyGraph({ibGibAddr:$,space:a}),O=await f.getIbGibGraph(c,A,!0);if(!O.success||!O.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${O.message}`);return}let k=O.graph;if(te({graphA:L,graphB:k}))n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server.");else{n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u{1F389} ALL PHASE 4.1B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.1B All Passed"}catch(e){n(`\u2717 4.1B Check FAILED: ${h(e)}`),console.error(`${r} 4.1B Check error:`,e)}})}m(ln,"init4_1bCheckButton");function fn(){let r=document.getElementById("btn-4-2b-setup");r&&r.addEventListener("click",()=>{Le({phaseText:"4.2B",btnId:"btn-4-2b-setup",nextBtnId:"btn-4-2b-sync",masterSecret:"test-sender-secret-phase4-2",syncSalt:"senderidentitysyncsaltphase4-2",manageSalt:"senderidentitymanagesaltphase4-2",ib:"dummy target 4.2b",data:{hello:"dummy"}})})}m(fn,"init4_2bSetupButton");async function Cr(){let r=`${Y}[performPhaseSync4_2b]`,t=document.getElementById("btn-4-2b-sync");if(t)try{if(t.disabled=!0,n("4.2B Sync: Creating Constants and executing three-pass WebSocket Sync..."),!w.domainI){n("\u26A0 4.2B Sync: Missing setup state. Please run Setup first."),t.disabled=!1;return}let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=await U.constant({parentPrimitiveIb:"root",ib:"constant_c1_"+(await ie()).slice(0,8),data:{some:"data_4_2b",random:Math.random()}}),i=p({ibGib:s});await e.put({ibGib:s,space:a}),await e.registerNewIbGib({ibGib:s}),w.targetC1=s,n(`4.2B Sync: \u2713 Constant C1 created: ${i}`),n("4.2B Sync: Starting Pass 1 (Sync C1)..."),await K({domainIbGibs:[s],passLabel:"Pass 1 (Sync C1)",metaspace:e,space:a}),n("4.2B Sync: \u2713 Pass 1 Complete."),n("4.2B Sync: Starting Pass 2 (Sync C1 - Idempotent)..."),await K({domainIbGibs:[s],passLabel:"Pass 2 (Sync C1 idempotent)",metaspace:e,space:a}),n("4.2B Sync: \u2713 Pass 2 Complete.");let o=await U.constant({ib:"constant_c2_"+(await ie()).slice(0,8),parentPrimitiveIb:"root",rel8ns:{link:[i]}}),c=p({ibGib:o});await e.put({ibGib:o,space:a}),await e.registerNewIbGib({ibGib:o}),w.targetC2=o,n(`4.2B Sync: \u2713 Constant C2 created linking to C1: ${c}`),n("4.2B Sync: Starting Pass 3 (Sync C2)..."),await K({domainIbGibs:[o],passLabel:"Pass 3 (Sync C2)",metaspace:e,space:a}),n("4.2B Sync: \u2713 Pass 3 Complete."),n("\u2713 4.2B Sync Sequence Complete! Ready for State Checks."),t.textContent="\u2713 4.2B Sync Run";let d=document.getElementById("btn-4-2b-check");d&&(d.disabled=!1)}catch(e){n(`\u2717 4.2B Sync FAILED: ${h(e)}`),console.error(`${r} 4.2B Sync error:`,e),t.disabled=!1}}m(Cr,"performPhaseSync4_2b");function bn(){let r=document.getElementById("btn-4-2b-sync");r&&r.addEventListener("click",()=>{Cr()})}m(bn,"init4_2bSyncButton");function pn(){let r=`${Y}[init4_2bCheckButton]`,t=document.getElementById("btn-4-2b-check");t&&t.addEventListener("click",async()=>{try{n("4.2B Check: Asserting cryptographic and WebSocket state expectations...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=w.domainI,i=w.targetC1,o=w.targetC2,c=p({ibGib:i}),d=p({ibGib:o}),l=p({ibGib:s}),f=new M,b=await e.get({addrs:[c],space:a}),g=await e.get({addrs:[d],space:a});if(!b.success||!b.ibGibs?.[0]){n("\u2717 Check: Constant C1 NOT found locally.");return}if(!g.success||!g.ibGibs?.[0]){n("\u2717 Check: Constant C2 NOT found locally.");return}n("\u2713 Check: Constants C1 and C2 exist locally.");let E=await f.getIbGib(l,c),u=await f.getIbGib(l,d);if(!E.success||!E.ibGib){n(`\u2717 Check: Constant C1 NOT found on server: ${E.message}`);return}if(!u.success||!u.ibGib){n(`\u2717 Check: Constant C2 NOT found on server: ${u.message}`);return}n("\u2713 Check: Constants C1 and C2 exist on server.");let S=await e.getDependencyGraph({ibGibAddr:d,space:a}),C=await f.getIbGibGraph(l,d,!0);if(!C.success||!C.graph){n(`\u2717 Check: Failed to fetch C2 graph from server: ${C.message}`);return}if(!te({graphA:S,graphB:C.graph})){n("\u2717 Check: C2 dependency graphs mismatch between client and server!");return}n("\u2713 Check: C2 dependency graphs are equivalent on client and server.");let _=await e.getLatestAddr({addr:l,space:a});if(!_){n("\u2717 Check: Domain keystone tip not found locally!");return}let I=(await e.get({addrs:[_],space:a})).ibGibs?.[0];if(!I){n("\u2717 Check: Failed to load domain keystone!");return}let v=I.data?.n;if(n(`\u2713 Check: Evolved I tip is at n = ${v}.`),v!==1){n(`\u2717 Check: Expected I to evolve to n = 1 (delegate registration only), got n = ${v}.`);return}let{sessionIdentityTjpAddr:$}=await ot({localI:I,metaspace:e,space:a,apiBridge:f,domainAddr:l}),y=await e.getLatestAddr({addr:$,space:a});if(!y){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${y}`);let B=(await e.get({addrs:[y],space:a})).ibGibs?.[0];if(!B){n("\u2717 Check: Failed to load Session Keystone (S) locally.");return}let N=B.data?.n;if(n(`\u2713 Check: Latest session S tip evolved to n = ${N}.`),N!==3){n(`\u2717 Check: Expected latest session S to evolve to n = 3 (connect+sync+disconnect), got n = ${N}.`);return}let L=await f.getIbGib(l,y);if(!L.success||!L.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let O=await e.getDependencyGraph({ibGibAddr:y,space:a}),k=await f.getIbGibGraph(l,$,!0);if(!k.success||!k.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${k.message}`);return}if(!te({graphA:O,graphB:k.graph})){n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server."),n("\u{1F389} ALL PHASE 4.2B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.2B All Passed"}catch(e){n(`\u2717 4.2B Check FAILED: ${h(e)}`),console.error(`${r} 4.2B Check error:`,e)}})}m(pn,"init4_2bCheckButton");function mn(){let r=document.getElementById("btn-4-3b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.3B Setup: Generating Domain Keystone (I) and Target timeline V0 -> V1...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:"test-sender-secret-phase4-3",syncSalt:"senderidentitysyncsaltphase4-3",manageSalt:"senderidentitymanagesaltphase4-3",metaspace:t,space:e,apiBridge:a,phaseText:"4.3B"});let s=await U.firstGen({parentIbGib:q,ib:"timeline_root_partial_4_3b",data:{type:"root",label:"Root4_3b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i});let o=await F({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1_4_3b"}},metaspace:t,space:e});w.targetC1=o,w.targetX=o,n(`4.3B Setup: \u2713 Timeline V0 -> V1 created and stored locally. V1: ${p({ibGib:o})}`),n("\u2713 4.3B Setup Complete! Ready for 4.3B Sync."),r.textContent="\u2713 4.3B Setup Complete";let c=document.getElementById("btn-4-3b-sync");c&&(c.disabled=!1)}catch(t){n(`\u2717 4.3B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(mn,"init4_3bSetupButton");async function Ar(){let r=`${Y}[performPhaseSync4_3b]`,t=document.getElementById("btn-4-3b-sync");if(t)try{t.disabled=!0;let e=w.targetX;if(!w.domainI||!e){n("\u26A0 4.3B Sync: Missing setup state. Please run Setup first."),t.disabled=!1;return}let a=await D(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");n("4.3B Sync: Starting Pass 1 (Sync V1 to server)..."),await K({domainIbGibs:[e],passLabel:"Pass 1 (Sync V1)",metaspace:a,space:s}),n("4.3B Sync: \u2713 Pass 1 Complete (V1 synced)."),n("4.3B Sync: Mutating V1 to V2 locally...");let i=await F({timeline:e,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V2_4_3b"}},metaspace:a,space:s});w.targetX=i,n(`4.3B Sync: \u2713 V2 created locally: ${p({ibGib:i})}`),n("4.3B Sync: Starting Pass 2 (Sync V2 delta to server)..."),await K({domainIbGibs:[i],passLabel:"Pass 2 (Sync V2)",metaspace:a,space:s}),n("4.3B Sync: \u2713 Pass 2 Complete (V2 synced)."),n("\u2713 4.3B Sync Sequence Complete! Ready for State Checks."),t.textContent="\u2713 4.3B Sync Run";let o=document.getElementById("btn-4-3b-check");o&&(o.disabled=!1)}catch(e){n(`\u2717 4.3B Sync FAILED: ${h(e)}`),console.error(e),t.disabled=!1}}m(Ar,"performPhaseSync4_3b");function gn(){let r=document.getElementById("btn-4-3b-sync");r&&r.addEventListener("click",()=>{Ar()})}m(gn,"init4_3bSyncButton");function hn(){let r=`${Y}[init4_3bCheckButton]`,t=document.getElementById("btn-4-3b-check");t&&t.addEventListener("click",async()=>{try{n("4.3B Check: Asserting cryptographic and WebSocket state expectations...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=w.domainI,i=w.targetC1,o=w.targetX,c=p({ibGib:i}),d=p({ibGib:o}),l=p({ibGib:s}),f=new M,b=await e.get({addrs:[c],space:a}),g=await e.get({addrs:[d],space:a});if(!b.success||!b.ibGibs?.[0]){n("\u2717 Check: Timeline frame V1 NOT found locally.");return}if(!g.success||!g.ibGibs?.[0]){n("\u2717 Check: Timeline frame V2 NOT found locally.");return}n("\u2713 Check: Timeline frames V1 and V2 exist locally.");let E=await f.getIbGib(l,d);if(!E.success||!E.ibGib){n(`\u2717 Check: Timeline frame V2 NOT found on server: ${E.message}`);return}n("\u2713 Check: Timeline frame V2 exists on server.");let u=E.ibGib.rel8ns?.past?.at(-1);if(u===c)n("\u2713 Check: Server V2 correctly references V1 in its past relation.");else{n(`\u2717 Check: Server V2 does not reference V1 in past relation! got: ${u}`);return}let S=await e.getDependencyGraph({ibGibAddr:d,space:a}),C=await f.getIbGibGraph(l,d,!0);if(!C.success||!C.graph){n(`\u2717 Check: Failed to fetch V2 graph from server: ${C.message}`);return}if(!te({graphA:S,graphB:C.graph})){n("\u2717 Check: V2 timeline dependency graphs mismatch between client and server!");return}n("\u2713 Check: V2 timeline dependency graphs are equivalent on client and server.");let _=await e.getLatestAddr({addr:l,space:a});if(!_){n("\u2717 Check: Domain keystone tip not found locally!");return}let I=(await e.get({addrs:[_],space:a})).ibGibs?.[0];if(!I){n("\u2717 Check: Failed to load domain keystone!");return}let v=I.data?.n;if(n(`\u2713 Check: Evolved I tip is at n = ${v}.`),v!==1){n(`\u2717 Check: Expected I to evolve to n = 1 (delegate registration only), got n = ${v}.`);return}let{sessionIdentityTjpAddr:$}=await ot({localI:I,metaspace:e,space:a,apiBridge:f,domainAddr:l}),y=await e.getLatestAddr({addr:$,space:a});if(!y){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${y}`);let B=(await e.get({addrs:[y],space:a})).ibGibs?.[0];if(!B){n("\u2717 Check: Failed to load Session Keystone (S) locally.");return}let N=B.data?.n;if(n(`\u2713 Check: Latest session S tip evolved to n = ${N}.`),N!==3){n(`\u2717 Check: Expected latest session S to evolve to n = 3, got n = ${N}.`);return}let L=await f.getIbGib(l,y);if(!L.success||!L.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let O=await e.getDependencyGraph({ibGibAddr:y,space:a}),k=await f.getIbGibGraph(l,$,!0);if(!k.success||!k.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${k.message}`);return}if(!te({graphA:O,graphB:k.graph})){n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server."),n("\u{1F389} ALL PHASE 4.3B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.3B All Passed"}catch(e){n(`\u2717 4.3B Check FAILED: ${h(e)}`),console.error(`${r} 4.3B Check error:`,e)}})}m(hn,"init4_3bCheckButton");function un(){let r=document.getElementById("btn-4-4b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.4B Setup: Generating Domain Keystone (I) and Target timeline V0 -> V1 -> V2...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:"test-sender-secret-phase4-4",syncSalt:"senderidentitysyncsaltphase4-4",manageSalt:"senderidentitymanagesaltphase4-4",metaspace:t,space:e,apiBridge:a,phaseText:"4.4B"});let s=await U.firstGen({parentIbGib:q,ib:"timeline_root_deep_4_4b",data:{type:"root",label:"Root4_4b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i}),w.targetC1=i;let o=await F({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1_4_4b"}},metaspace:t,space:e});w.targetC2=o;let c=await F({timeline:o,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V2_4_4b"}},metaspace:t,space:e});w.targetX=c,n(`4.4B Setup: \u2713 Timeline V0 -> V1 -> V2 created locally. V2 Tip: ${p({ibGib:c})}`),n("\u2713 4.4B Setup Complete! Ready for 4.4B Sync."),r.textContent="\u2713 4.4B Setup Complete";let d=document.getElementById("btn-4-4b-sync");d&&(d.disabled=!1)}catch(t){n(`\u2717 4.4B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(un,"init4_4bSetupButton");async function vr(){let r=`${Y}[performPhaseSync4_4b]`,t=document.getElementById("btn-4-4b-sync");if(t)try{t.disabled=!0,n("4.4B Sync: Initiating WebSocket Sync of V2 Tip...");let e=w.targetX;if(!w.domainI||!e){n("\u26A0 4.4B Sync: Missing setup state. Please run Setup first."),t.disabled=!1;return}let a=await D(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");await K({domainIbGibs:[e],passLabel:"Pass 1 (Sync V2 tip)",metaspace:a,space:s}),n("4.4B Sync: \u2713 WebSocket Sync completed."),n("\u2713 4.4B Sync Sequence Complete! Ready for State Checks."),t.textContent="\u2713 4.4B Sync Run";let i=document.getElementById("btn-4-4b-check");i&&(i.disabled=!1)}catch(e){n(`\u2717 4.4B Sync FAILED: ${h(e)}`),console.error(e),t.disabled=!1}}m(vr,"performPhaseSync4_4b");function yn(){let r=document.getElementById("btn-4-4b-sync");r&&r.addEventListener("click",()=>{vr()})}m(yn,"init4_4bSyncButton");function En(){let r=`${Y}[init4_4bCheckButton]`,t=document.getElementById("btn-4-4b-check");t&&t.addEventListener("click",async()=>{try{n("4.4B Check: Asserting cryptographic and WebSocket state expectations...");let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");let s=w.domainI,i=w.targetC1,o=w.targetC2,c=w.targetX,d=p({ibGib:i}),l=p({ibGib:o}),f=p({ibGib:c}),b=p({ibGib:s}),g=new M,E=await e.get({addrs:[d],space:a}),u=await e.get({addrs:[l],space:a}),S=await e.get({addrs:[f],space:a});if(!E.success||!E.ibGibs?.[0]){n("\u2717 Check: Timeline frame V0 NOT found locally.");return}if(!u.success||!u.ibGibs?.[0]){n("\u2717 Check: Timeline frame V1 NOT found locally.");return}if(!S.success||!S.ibGibs?.[0]){n("\u2717 Check: Timeline frame V2 NOT found locally.");return}n("\u2713 Check: Timeline frames V0, V1, and V2 exist locally.");let C=await g.getIbGib(b,f);if(!C.success||!C.ibGib){n(`\u2717 Check: Timeline frame V2 NOT found on server: ${C.message}`);return}n("\u2713 Check: Timeline frame V2 exists on server.");let _=C.ibGib.rel8ns?.past?.at(-1);if(_===l)n("\u2713 Check: Server V2 correctly references V1 in its past relation.");else{n(`\u2717 Check: Server V2 does not reference V1 in past relation! got: ${_}`);return}let A=await g.getIbGib(b,l);if(!A.success||!A.ibGib){n(`\u2717 Check: Timeline frame V1 NOT found on server: ${A.message}`);return}n("\u2713 Check: Timeline frame V1 exists on server.");let I=A.ibGib.rel8ns?.past?.at(-1);if(I===d)n("\u2713 Check: Server V1 correctly references V0 in its past relation.");else{n(`\u2717 Check: Server V1 does not reference V0 in past relation! got: ${I}`);return}let v=await e.getDependencyGraph({ibGibAddr:f,space:a}),$=await g.getIbGibGraph(b,f,!0);if(!$.success||!$.graph){n(`\u2717 Check: Failed to fetch V2 graph from server: ${$.message}`);return}if(!te({graphA:v,graphB:$.graph})){n("\u2717 Check: V2 timeline dependency graphs mismatch between client and server!");return}n("\u2713 Check: V2 timeline dependency graphs are equivalent on client and server.");let y=await e.getLatestAddr({addr:b,space:a});if(!y){n("\u2717 Check: Domain keystone tip not found locally!");return}let B=(await e.get({addrs:[y],space:a})).ibGibs?.[0];if(!B){n("\u2717 Check: Failed to load domain keystone!");return}n(`\u2713 Check: Evolved Domain Keystone exists locally: ${y}`);let N=B.data?.n;if(n(`\u2713 Check: Evolved I tip is at n = ${N}.`),N!==1){n(`\u2717 Check: Expected I to evolve to n = 1, got n = ${N}.`);return}let{sessionIdentityTjpAddr:L}=await ot({localI:B,metaspace:e,space:a,apiBridge:g,domainAddr:b}),O=await e.getLatestAddr({addr:L,space:a});if(!O){n("\u2717 Check: Latest Session Keystone (S) NOT found in local space.");return}n(`\u2713 Check: Found latest session keystone (S) locally: ${O}`);let x=(await e.get({addrs:[O],space:a})).ibGibs?.[0];if(!x){n("\u2717 Check: Failed to load Session Keystone (S) locally.");return}let R=x.data?.n;if(n(`\u2713 Check: Latest session S tip evolved to n = ${R}.`),R!==3){n(`\u2717 Check: Expected latest session S to evolve to n = 3, got n = ${R}.`);return}let ae=await g.getIbGib(b,O);if(!ae.success||!ae.ibGib){n("\u2717 Check: Latest Session Keystone (S) NOT found on server!");return}n("\u2713 Check: Latest Session Keystone (S) exists on server.");let z=await e.getDependencyGraph({ibGibAddr:O,space:a}),se=await g.getIbGibGraph(b,L,!0);if(!se.success||!se.graph){n(`\u2717 Check: Failed to fetch session S graph from server: ${se.message}`);return}if(!te({graphA:z,graphB:se.graph})){n("\u2717 Check: Session Keystone (S) dependency graphs mismatch between client and server!");return}n("\u2713 Check: Session Keystone (S) dependency graphs are equivalent on client and server."),n("\u{1F389} ALL PHASE 4.4B TRANSACTION SYNC CHECKS PASSED FLAWLESSLY! \u2713"),t.textContent="\u2713 4.4B All Passed"}catch(e){n(`\u2717 4.4B Check FAILED: ${h(e)}`),console.error(`${r} 4.4B Check error:`,e)}})}m(En,"init4_4bCheckButton");var Sn={},wn="test-sender-secret-phase4-5b";function In(){let r=document.getElementById("btn-4-5b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.5B Setup: Generating Domain Keystone (I), target timeline, and seeding server from two spaces...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:wn,syncSalt:"senderidentitysyncsaltphase4-5b",manageSalt:"senderidentitymanagesaltphase4-5b",metaspace:t,space:e,apiBridge:a,phaseText:"4.5B"});let s=await U.firstGen({parentIbGib:q,ib:"timeline_root_partial_4_5b",data:{type:"root",label:"Root4_5b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i,space:e});let o=await F({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1_4_5b"}},metaspace:t,space:e});w.targetC1=o,n(`4.5B Setup: \u2713 Local timeline V0 -> V1 created. V1 Tip: ${p({ibGib:o})}`),n("4.5B Setup: Seeding V1 to the server via WebSocket..."),await K({domainIbGibs:[o],passLabel:"Seed V1 to server",metaspace:t,space:e}),n("4.5B Setup: \u2713 Pass 1 Sync (V1 to server) complete."),n('4.5B Setup: Creating secondary local space simulating "remote" client...');let c=`remote-${await ie()}`,d=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:c,getFnPrompt:t.getFnPrompt}});if(!d)throw new Error("Failed to create remote space");await d.initialized;let l=await t.getDependencyGraph({ibGibAddr:p({ibGib:o}),space:e});await t.put({ibGibs:Object.values(l),space:d}),await t.registerNewIbGib({ibGib:o,space:d});let f=w.domainI;await be({domainI:f,metaspace:t,fromSpace:e,toSpace:d}),n("4.5B Setup: \u2713 Copied V1 and identities (domain and delegate) to remoteSpace."),n("4.5B Setup: Mutating V1 -> V2 in remoteSpace...");let b=await F({timeline:o,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V2_4_5b"}},metaspace:t,space:d});Sn.targetV2=b,n(`4.5B Setup: \u2713 Mutated to V2 in remoteSpace: ${p({ibGib:b})}`),n("4.5B Setup: Syncing V2 from remoteSpace to the server..."),await ye({domainIbGibs:[b],passLabel:"Seed V2 from remoteSpace",metaspace:t,space:d,primarySpace:e,domainI:f,masterSecret:wn}),n("4.5B Setup: \u2713 Pass 2 Sync (V2 to server) complete. debugState.domainI updated."),n("\u2713 4.5B Setup Complete! Server has V2, default local space has V1. Ready for 4.5B Sync."),r.textContent="\u2713 4.5B Setup Complete";let g=document.getElementById("btn-4-5b-sync");g&&(g.disabled=!1)}catch(t){n(`\u2717 4.5B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(In,"init4_5bSetupButton");function _n(){let r=document.getElementById("btn-4-5b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.5B Sync: Initiating WebSocket Sync from default local space (which has V1, server has V2)...");let t=w.targetC1;if(!w.domainI||!t){n("\u26A0 4.5B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");await K({domainIbGibs:[t],passLabel:"Pull V2 from server",metaspace:e,space:a}),n("\u2713 4.5B Sync Execution Complete! Ready for 4.5B Check."),r.textContent="\u2713 4.5B Sync Run";let s=document.getElementById("btn-4-5b-check");s&&(s.disabled=!1)}catch(t){n(`\u2717 4.5B Sync FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(_n,"init4_5bSyncButton");function Gn(){let r=document.getElementById("btn-4-5b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.5B Check: Verifying that V2 was pulled down to default local space...");let t=Sn.targetV2;if(!t||!w.domainI){n("\u26A0 4.5B Check: Missing target V2 in state. Did Setup run?"),r.disabled=!1;return}let e=p({ibGib:t}),a=p({ibGib:w.domainI}),s=await D(),i=await s.getLocalUserSpace({});if(!i)throw new Error("No default space.");let o=await s.get({addr:e,space:i});if(!o.success||o.ibGibs?.length!==1)throw new Error(`V2 tip (${e}) is NOT present in local space!`);let c=o.ibGibs[0];n(`4.5B Check: \u2713 V2 Tip found locally. Label: "${c.data?.label}"`);let d=await s.getDependencyGraph({ibGibAddr:e,space:i});n("4.5B Check: Fetching V2 dependency graph from server...");let f=await new M().getIbGibGraph(a,e,!0);if(!f.success||!f.graph)throw new Error(`Failed to fetch V2 graph from server: ${f.message}`);if(te({graphA:d,graphB:f.graph}))n("\u2713 4.5B Check SUCCESS: V2 and all dependencies are fully equivalent on client and server!"),r.textContent="\u2713 4.5B Check Success";else throw new Error("Dependency graphs on local space and server are NOT equivalent.")}catch(t){n(`\u2717 4.5B Check FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Gn,"init4_5bCheckButton");var st={},$r="test-sender-secret-phase4-6b";function Cn(){let r=document.getElementById("btn-4-6b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.6B Setup: Generating Domain Keystone (I) and two independent target timelines (Alpha and Beta)...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:$r,syncSalt:"senderidentitysyncsaltphase4-6b",manageSalt:"senderidentitymanagesaltphase4-6b",metaspace:t,space:e,apiBridge:a,phaseText:"4.6B"});let s=await U.firstGen({parentIbGib:q,ib:"timeline_root_alpha_4_6b",data:{type:"root",label:"Alpha4_6b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),i=s.newIbGib;await t.persistTransformResult({resTransform:s,space:e}),await t.registerNewIbGib({ibGib:i,space:e});let o=await F({timeline:i,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"A1_4_6b"}},metaspace:t,space:e});st.targetAlphaV1=o,w.targetC1=o,n(`4.6B Setup: \u2713 Local Timeline A created. A1 Tip: ${p({ibGib:o})}`);let c=await U.firstGen({parentIbGib:q,ib:"timeline_root_beta_4_6b",data:{type:"root",label:"Beta4_6b",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),d=c.newIbGib;await t.persistTransformResult({resTransform:c,space:e}),await t.registerNewIbGib({ibGib:d,space:e});let l=await F({timeline:d,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"B1_4_6b"}},metaspace:t,space:e}),f=await F({timeline:l,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"B2_4_6b"}},metaspace:t,space:e});st.targetBetaV2=f,w.targetC2=f,n(`4.6B Setup: \u2713 Local Timeline B created. B2 Tip: ${p({ibGib:f})}`),n("\u2713 4.6B Setup Complete! Timelines created locally. Ready for 4.6B Sync."),r.textContent="\u2713 4.6B Setup Complete";let b=document.getElementById("btn-4-6b-sync");b&&(b.disabled=!1)}catch(t){n(`\u2717 4.6B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Cn,"init4_6bSetupButton");function An(){let r=document.getElementById("btn-4-6b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.6B Sync: Initiating WebSocket Sync for both Timeline A and Timeline B in one call...");let t=st.targetAlphaV1,e=st.targetBetaV2;if(!w.domainI||!t||!e){n("\u26A0 4.6B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let a=await D(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");await K({domainIbGibs:[t,e],passLabel:"Sync Alpha A1 + Beta B2",metaspace:a,space:s}),n("\u2713 4.6B Sync Execution Complete! Ready for 4.6B Check."),r.textContent="\u2713 4.6B Sync Run";let i=document.getElementById("btn-4-6b-check");i&&(i.disabled=!1)}catch(t){n(`\u2717 4.6B Sync FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(An,"init4_6bSyncButton");function vn(){let r=document.getElementById("btn-4-6b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.6B Check: Verifying both Timeline A and Timeline B exist on the server with matching dependency graphs...");let t=st.targetAlphaV1,e=st.targetBetaV2;if(!w.domainI||!t||!e){n("\u26A0 4.6B Check: Missing state. Did Setup and Sync run?"),r.disabled=!1;return}let a=p({ibGib:w.domainI}),s=p({ibGib:t}),i=p({ibGib:e}),o=await D(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let d=new M;n("4.6B Check: Fetching Timeline A dependency graph from server...");let l=await d.getIbGibGraph(a,s,!0);if(!l.success||!l.graph)throw new Error(`Failed to fetch Timeline A graph from server: ${l.message}`);let f=await o.getDependencyGraph({ibGibAddr:s,space:c});if(!te({graphA:f,graphB:l.graph}))throw new Error("Timeline A dependency graphs on local space and server are NOT equivalent.");n("4.6B Check: \u2713 Timeline A graphs are equivalent."),n("4.6B Check: Fetching Timeline B dependency graph from server...");let b=await d.getIbGibGraph(a,i,!0);if(!b.success||!b.graph)throw new Error(`Failed to fetch Timeline B graph from server: ${b.message}`);let g=await o.getDependencyGraph({ibGibAddr:i,space:c});if(!te({graphA:g,graphB:b.graph}))throw new Error("Timeline B dependency graphs on local space and server are NOT equivalent.");n("4.6B Check: \u2713 Timeline B graphs are equivalent."),n("\u2713 4.6B Check SUCCESS: Both independent timelines are fully synced and identical on client and server!"),r.textContent="\u2713 4.6B Check Success"}catch(t){n(`\u2717 4.6B Check FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(vn,"init4_6bCheckButton");var qe={},$n="test-sender-secret-phase4-7b";function Tn(){let r=document.getElementById("btn-4-7b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.7B Setup: Setting up identities, seeding history, and creating divergent branches...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:$n,syncSalt:"senderidentitysyncsaltphase4-7b",manageSalt:"senderidentitymanagesaltphase4-7b",metaspace:t,space:e,apiBridge:a,phaseText:"4.7B"});let s=w.domainI,i=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:"remote_space_4_7b",getFnPrompt:t.getFnPrompt}});await i.initialized,await t.put({ibGib:s,space:i}),await t.registerNewIbGib({ibGib:s,space:i});let o=await U.firstGen({parentIbGib:q,ib:"timeline_root_conflict_4_7b",data:{type:"root",label:"CommonRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),c=o.newIbGib;await t.persistTransformResult({resTransform:o,space:e}),await t.registerNewIbGib({ibGib:c,space:e}),qe.testRoot=c;let d=await F({timeline:c,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1Common"}},metaspace:t,space:e}),l=await t.getDependencyGraph({ibGibAddr:p({ibGib:c}),space:e}),f=await t.getDependencyGraph({ibGibAddr:p({ibGib:d}),space:e});await t.put({ibGibs:Object.values({...l,...f}),space:i}),await t.registerNewIbGib({ibGib:c,space:i}),await t.registerNewIbGib({ibGib:d,space:i}),n("4.7B Setup: Syncing v1_common to server..."),await K({domainIbGibs:[d],passLabel:"Seed v1_common",metaspace:t,space:e}),n("4.7B Setup: \u2713 Seeding complete on server.");let b=w.domainI;await be({domainI:b,metaspace:t,fromSpace:e,toSpace:i});let g=await F({timeline:d,mut8Opts:{dataToAddOrPatch:{fieldA:"source_edit"}},metaspace:t,space:e});qe.targetAlphaV2a=g,n(`4.7B Setup: \u2713 Created client divergent edit V2a: ${p({ibGib:g})}`);let E=await F({timeline:d,mut8Opts:{dataToAddOrPatch:{fieldB:"dest_edit"}},metaspace:t,space:i});qe.targetBetaV2b=E,n(`4.7B Setup: \u2713 Created remote divergent edit V2b: ${p({ibGib:E})}`),n("4.7B Setup: Pushing V2b from remote space to server..."),await ye({domainIbGibs:[E],passLabel:"Push V2b from remoteSpace",metaspace:t,space:i,primarySpace:e,domainI:b,masterSecret:$n}),n("4.7B Setup: \u2713 Server tip is now V2b."),n("\u2713 4.7B Setup Complete! Ready for 4.7B Sync."),r.textContent="\u2713 4.7B Setup Complete";let u=document.getElementById("btn-4-7b-sync");u&&(u.disabled=!1)}catch(t){n(`\u2717 4.7B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Tn,"init4_7bSetupButton");function Bn(){let r=document.getElementById("btn-4-7b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.7B Sync: Initiating WebSocket Sync for divergent edit V2a...");let t=qe.targetAlphaV2a;if(!w.domainI||!t){n("\u26A0 4.7B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let e=await D(),a=await e.getLocalUserSpace({});if(!a)throw new Error("No default space.");await K({domainIbGibs:[t],passLabel:"Sync V2a (conflict merge)",metaspace:e,space:a}),n("\u2713 4.7B Sync Execution Complete! Ready for 4.7B Check."),r.textContent="\u2713 4.7B Sync Run";let s=document.getElementById("btn-4-7b-check");s&&(s.disabled=!1)}catch(t){n(`\u2717 4.7B Sync FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Bn,"init4_7bSyncButton");function Nn(){let r=document.getElementById("btn-4-7b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.7B Check: Verifying merged tip (V3) contains both edits on client and server...");let t=qe.testRoot,e=qe.targetAlphaV2a,a=qe.targetBetaV2b;if(!w.domainI||!t||!e||!a){n("\u26A0 4.7B Check: Missing state. Did Setup and Sync run?"),r.disabled=!1;return}let s=p({ibGib:w.domainI}),i=ge({ibGib:t,defaultIfNone:"incomingAddr"})??p({ibGib:t}),o=await D(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let l=(await o.getLocalUserSpace({}).then(A=>new oe().getKnowledgeMap({space:A,metaspace:o,domainIbGibs:[t]})))[i];if(n(`4.7B Check: Client tip address: ${l}`),!l)throw new Error("Client default space is missing the timeline tip.");let f=await o.get({addr:l,space:c});if(!f.success||!f.ibGibs?.length)throw new Error("Client tip not found in default local space.");let b=f.ibGibs[0];if(!b.data?.fieldA||!b.data?.fieldB)throw new Error(`Merged client tip missing edits: fieldA: ${b.data?.fieldA}, fieldB: ${b.data?.fieldB}`);n("4.7B Check: \u2713 Client tip has both fieldA and fieldB edits.");let g=b.rel8ns?.[ve];if(!g?.[0])throw new Error("Client tip is missing graftinfo relations.");let E=await o.get({addr:g[0],space:c});if(!E.success||!E.ibGibs?.length)throw new Error("GraftInfo not found in local space.");let u=E.ibGibs[0];if(!u.rel8ns?.[Re]||!u.rel8ns?.[Ne])throw new Error("GraftInfo is missing graftbase or graftorphan relations.");n("4.7B Check: \u2713 Client graft base and orphan relations are correctly set.");let C=await new M().getIbGibGraph(s,l,!0);if(!C.success||!C.graph)throw new Error(`Failed to fetch merged graph from server: ${C.message}`);let _=C.graph[l];if(!_)throw new Error("Merged V3 tip is not present on the server!");if(_.data?.fieldA!=="source_edit"||_.data?.fieldB!=="dest_edit")throw new Error("Server tip data edits do not match merged values.");n("4.7B Check: \u2713 Server tip has matching merged edits."),n("\u2713 4.7B Check SUCCESS: Divergent branches merged successfully via optimistic graft!"),r.textContent="\u2713 4.7B Check Success"}catch(t){n(`\u2717 4.7B Check FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Nn,"init4_7bCheckButton");var Ge={};function Ln(){let r=document.getElementById("btn-4-8b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.8B Setup: Setting up identities, seeding history, and creating divergent branches in client and remote...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:"test-sender-secret-phase4-8b",syncSalt:"senderidentitysyncsaltphase4-8b",manageSalt:"senderidentitymanagesaltphase4-8b",metaspace:t,space:e,apiBridge:a,phaseText:"4.8B"});let s=w.domainI;Ge.domainI_latest=s;let i=p({ibGib:s});n("4.8B Setup: Creating temporary remote space...");let o=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:"remote_space_4_8b",getFnPrompt:t.getFnPrompt}});await o.initialized,await be({domainI:s,metaspace:t,fromSpace:e,toSpace:o});let c=await U.firstGen({parentIbGib:q,ib:"timeline_root_conflict_4_8b",data:{type:"root",label:"CommonRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),d=c.newIbGib;await t.persistTransformResult({resTransform:c,space:e}),await t.registerNewIbGib({ibGib:d,space:e}),Ge.testRoot=d;let l=await F({timeline:d,mut8Opts:{dataToAddOrPatch:{type:"comment",label:"V1Common"}},metaspace:t,space:e}),f=await t.getDependencyGraph({ibGibAddr:p({ibGib:d}),space:e}),b=await t.getDependencyGraph({ibGibAddr:p({ibGib:l}),space:e}),g={...f,...b};await t.put({ibGibs:Object.values(g),space:o}),await t.registerNewIbGib({ibGib:d,space:o}),await t.registerNewIbGib({ibGib:l,space:o}),n("4.8B Setup: Syncing v1_common to server..."),await K({domainIbGibs:[l],passLabel:"Seed v1_common",metaspace:t,space:e}),n("4.8B Setup: \u2713 Seeding complete on server."),await be({domainI:w.domainI,metaspace:t,fromSpace:e,toSpace:o});let E=await U.firstGen({parentIbGib:q,ib:"beta_multitimelines_withid_4_8b",data:{fieldA:"beta field A created on source"},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),u=E.newIbGib;await t.persistTransformResult({resTransform:E,space:e}),await t.registerNewIbGib({ibGib:u,space:e}),Ge.targetBetaV0=u,n(`4.8B Setup: \u2713 Created client independent related timeline Beta: ${p({ibGib:u})}`);let S=await F({timeline:l,mut8Opts:{dataToAddOrPatch:{fieldA:"source_edit"}},metaspace:t,space:e}),C=await Xe({timeline:S,metaspace:t,space:e,rel8nInfos:[{rel8nName:"testrel8n",ibGibs:[u]}]});Ge.targetAlphaV3a=C,n(`4.8B Setup: \u2713 Created client divergent edit V3a: ${p({ibGib:C})}`);let _=await F({timeline:l,mut8Opts:{dataToAddOrPatch:{fieldB:"dest_edit"}},metaspace:t,space:o});n(`4.8B Setup: \u2713 Created remote divergent edit V2b: ${p({ibGib:_})}`),n("4.8B Setup: Pushing V2b from remote space to server..."),await ye({domainIbGibs:[_],passLabel:"Push V2b from remoteSpace",metaspace:t,space:o,primarySpace:e,domainI:w.domainI,masterSecret:"test-sender-secret-phase4-8b"}),Ge.domainI_latest=w.domainI,n("4.8B Setup: \u2713 Server tip is now V2b. Evolved identity copied back."),n("\u2713 4.8B Setup Complete! Ready for 4.8B Sync."),r.textContent="\u2713 4.8B Setup Complete";let A=document.getElementById("btn-4-8b-sync");A&&(A.disabled=!1)}catch(t){n(`\u2717 4.8B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Ln,"init4_8bSetupButton");function kn(){let r=document.getElementById("btn-4-8b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.8B Sync: Initiating WebSocket Sync for divergent edit V3a (with related timeline Beta)...");let t=Ge.domainI_latest,e=Ge.targetAlphaV3a;if(!t||!e){n("\u26A0 4.8B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let a=await D(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");await K({domainIbGibs:[e],passLabel:"Sync V3a and merge",metaspace:a,space:s}),Ge.domainI_latest=w.domainI,n("\u2713 4.8B Sync Execution Complete! Ready for 4.8B Check."),r.textContent="\u2713 4.8B Sync Run";let i=document.getElementById("btn-4-8b-check");i&&(i.disabled=!1)}catch(t){n(`\u2717 4.8B Sync FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(kn,"init4_8bSyncButton");function Dn(){let r=document.getElementById("btn-4-8b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.8B Check: Verifying merged tip (V4) contains both edits on client and server...");let t=Ge.domainI_latest,e=Ge.testRoot,a=Ge.targetAlphaV3a,s=Ge.targetBetaV0;if(!t||!e||!a||!s){n("\u26A0 4.8B Check: Missing state. Did Setup and Sync run?"),r.disabled=!1;return}let i=p({ibGib:t}),o=ge({ibGib:e,defaultIfNone:"incomingAddr"})??p({ibGib:e}),c=p({ibGib:s}),d=await D(),l=await d.getLocalUserSpace({});if(!l)throw new Error("No default space.");let b=(await d.getLocalUserSpace({}).then(T=>new oe().getKnowledgeMap({space:T,metaspace:d,domainIbGibs:[e]})))[o];if(n(`4.8B Check: Client tip address: ${b}`),!b)throw new Error("Client default space is missing the timeline tip.");let g=await d.get({addr:b,space:l});if(!g.success||!g.ibGibs||g.ibGibs.length===0)throw new Error("Client tip not found in default local space.");let E=g.ibGibs[0];if(!E.data||!E.data.fieldA||!E.data.fieldB)throw new Error(`Merged client tip is missing expected data edits: fieldA: ${E.data?.fieldA}, fieldB: ${E.data?.fieldB}`);n("4.8B Check: \u2713 Client tip has both fieldA and fieldB edits.");let u=E.rel8ns?.[ve];if(!u?.[0])throw new Error("Client tip is missing graftinfo relations.");let S=await d.get({addr:u[0],space:l});if(!S.success||!S.ibGibs||S.ibGibs.length===0)throw new Error("GraftInfo not found in local space.");let C=S.ibGibs[0],_=C.rel8ns?.[Re],A=C.rel8ns?.[Ne];if(!_||!A)throw new Error("GraftInfo is missing graftbase or graftorphan relations.");n("4.8B Check: \u2713 Client graft base and orphan relations are correctly set.");let I=new M;n("4.8B Check: Fetching server timeline graph...");let v=await I.getIbGibGraph(i,b,!0);if(!v.success||!v.graph)throw new Error(`Failed to fetch merged graph from server: ${v.message}`);let $=v.graph[b];if(!$)throw new Error("Merged V4 tip is not present on the server!");if($.data?.fieldA!=="source_edit"||$.data?.fieldB!=="dest_edit")throw new Error("Server tip data edits do not match merged values.");n("4.8B Check: \u2713 Server tip has matching merged edits."),n("4.8B Check: Verifying related timeline Beta is present on the server...");let y=await I.getIbGibGraph(i,c,!0);if(!y.success||!y.graph||!y.graph[c])throw new Error(`Related timeline Beta (${c}) is missing from the server!`);n("4.8B Check: \u2713 Related timeline Beta successfully verified on the server."),n("\u2713 4.8B Check SUCCESS: Divergent branches merged successfully and related timeline synced on server!"),r.textContent="\u2713 4.8B Check Success"}catch(t){n(`\u2717 4.8B Check FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Dn,"init4_8bCheckButton");var ke={},Vt=`This is the initial quiz question.
|
|
13
12
|
It has multiple lines.
|
|
14
|
-
Students will answer this.`,
|
|
15
|
-
Instructor added hint.`,
|
|
16
|
-
`;function
|
|
17
|
-
${
|
|
13
|
+
Students will answer this.`,On=`
|
|
14
|
+
Instructor added hint.`,Pn=`Student note: Confusing!
|
|
15
|
+
`;function xn(){let r=document.getElementById("btn-4-9b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.9B Setup: Setting up identities, seeding text history, and creating divergent branches...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:"test-sender-secret-phase4-9b",syncSalt:"senderidentitysyncsaltphase4-9b",manageSalt:"senderidentitymanagesaltphase4-9b",metaspace:t,space:e,apiBridge:a,phaseText:"4.9B"});let s=w.domainI;ke.domainI_latest=s;let i=p({ibGib:s});n("4.9B Setup: Creating temporary remote space...");let o=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:"remote_space_4_9b",getFnPrompt:t.getFnPrompt}});await o.initialized,await be({domainI:s,metaspace:t,fromSpace:e,toSpace:o});let c=await U.firstGen({parentIbGib:q,ib:"timeline_root_text_conflict_4_9b",data:{text:Vt,label:"TextRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),d=c.newIbGib;await t.persistTransformResult({resTransform:c,space:e}),await t.registerNewIbGib({ibGib:d,space:e}),ke.testRoot=d;let l=await t.getDependencyGraph({ibGibAddr:p({ibGib:d}),space:e});await t.put({ibGibs:Object.values(l),space:o}),await t.registerNewIbGib({ibGib:d,space:o}),n("4.9B Setup: Syncing testRoot to server..."),await K({domainIbGibs:[d],passLabel:"Seed testRoot",metaspace:t,space:e}),n("4.9B Setup: \u2713 Seeding complete on server."),await be({domainI:w.domainI,metaspace:t,fromSpace:e,toSpace:o});let f=await F({timeline:d,mut8Opts:{mut8Ib:d.ib+"_appended",dataToAddOrPatch:{text:Vt+On}},metaspace:t,space:e});ke.targetAlphaV1Source=f,n(`4.9B Setup: \u2713 Created client appended edit: ${p({ibGib:f})}`);let b=await F({timeline:d,mut8Opts:{mut8Ib:d.ib+"_prepended",dataToAddOrPatch:{text:Pn+Vt}},metaspace:t,space:o});n(`4.9B Setup: \u2713 Created remote prepended edit: ${p({ibGib:b})}`),n("4.9B Setup: Pushing remote prepended edit to server..."),await ye({domainIbGibs:[b],passLabel:"Push remote prepended edit",metaspace:t,space:o,primarySpace:e,domainI:w.domainI,masterSecret:"test-sender-secret-phase4-9b"}),ke.domainI_latest=w.domainI,n("4.9B Setup: \u2713 Server tip is now the prepended edit. Evolved identity copied back."),n("\u2713 4.9B Setup Complete! Ready for 4.9B Sync."),r.textContent="\u2713 4.9B Setup Complete";let g=document.getElementById("btn-4-9b-sync");g&&(g.disabled=!1)}catch(t){n(`\u2717 4.9B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(xn,"init4_9bSetupButton");function Rn(){let r=document.getElementById("btn-4-9b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.9B Sync: Initiating WebSocket Sync for divergent edit (LCS text merge)...");let t=ke.domainI_latest,e=ke.targetAlphaV1Source;if(!t||!e){n("\u26A0 4.9B Sync: Missing setup state. Please run Setup first."),r.disabled=!1;return}let a=await D(),s=await a.getLocalUserSpace({});if(!s)throw new Error("No default space.");await K({domainIbGibs:[e],passLabel:"Sync divergent edit and merge",metaspace:a,space:s}),ke.domainI_latest=w.domainI,n("\u2713 4.9B Sync Execution Complete! Ready for 4.9B Check."),r.textContent="\u2713 4.9B Sync Run";let i=document.getElementById("btn-4-9b-check");i&&(i.disabled=!1)}catch(t){n(`\u2717 4.9B Sync FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Rn,"init4_9bSyncButton");function Mn(){let r=document.getElementById("btn-4-9b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.9B Check: Verifying LCS merged text on client and server...");let t=ke.domainI_latest,e=ke.testRoot,a=ke.targetAlphaV1Source;if(!t||!e||!a){n("\u26A0 4.9B Check: Missing state. Did Setup and Sync run?"),r.disabled=!1;return}let s=p({ibGib:t}),i=ge({ibGib:e,defaultIfNone:"incomingAddr"})??p({ibGib:e}),o=await D(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let l=(await o.getLocalUserSpace({}).then($=>new oe().getKnowledgeMap({space:$,metaspace:o,domainIbGibs:[e]})))[i];if(n(`4.9B Check: Client tip address: ${l}`),!l)throw new Error("Client default space is missing the timeline tip.");let f=await o.get({addr:l,space:c});if(!f.success||!f.ibGibs||f.ibGibs.length===0)throw new Error("Client tip not found in default local space.");let b=f.ibGibs[0],g=Pn+Vt+On;if(b.data?.text!==g)throw new Error(`Merged client tip text mismatch! Expected:
|
|
16
|
+
${g}
|
|
18
17
|
Actual:
|
|
19
|
-
${b.data?.text}`);n("4.9B Check: \u2713 Client tip text contains both prepend and append edits merged correctly.");let
|
|
20
|
-
${
|
|
18
|
+
${b.data?.text}`);n("4.9B Check: \u2713 Client tip text contains both prepend and append edits merged correctly.");let E=b.rel8ns?.[ve];if(!E?.[0])throw new Error("Client tip is missing graftinfo relations.");let u=await o.get({addr:E[0],space:c});if(!u.success||!u.ibGibs||u.ibGibs.length===0)throw new Error("GraftInfo not found in local space.");let S=u.ibGibs[0],C=S.rel8ns?.[Re],_=S.rel8ns?.[Ne];if(!C||!_)throw new Error("GraftInfo is missing graftbase or graftorphan relations.");n("4.9B Check: \u2713 Client graft base and orphan relations are correctly set.");let A=new M;n("4.9B Check: Fetching server timeline graph...");let I=await A.getIbGibGraph(s,l,!0);if(!I.success||!I.graph)throw new Error(`Failed to fetch merged graph from server: ${I.message}`);let v=I.graph[l];if(!v)throw new Error("Merged tip is not present on the server!");if(v.data?.text!==g)throw new Error(`Server tip text mismatch! Expected:
|
|
19
|
+
${g}
|
|
21
20
|
Actual:
|
|
22
|
-
${v.data?.text}`);n("4.9B Check: \u2713 Server tip text matches the client-side merged text."),n("\u2713 4.9B Check SUCCESS: LCS text field merge conflict resolved and verified on both client and server!"),r.textContent="\u2713 4.9B Check Success"}catch(t){n(`\u2717 4.9B Check FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(On,"init4_9bCheckButton");var x={},pa="testrel8n";function xn(){let r=document.getElementById("btn-4-10b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.10B Setup: Setting up identities and preparing Round 1 & Round 2 divergence...");let t=await L(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new R;await ie({masterSecret:"test-sender-secret-phase4-10b",syncSalt:"senderidentitysyncsaltphase4-10b",manageSalt:"senderidentitymanagesaltphase4-10b",metaspace:t,space:e,apiBridge:a,phaseText:"4.10B"});let s=E.domainI;x.domainI_initial=s,x.domainI_latest=s;let i=p({ibGib:s});n("4.10B Setup: Creating temporary remote space...");let o=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:"remote_space_4_10b",getFnPrompt:t.getFnPrompt}});await o.initialized,x.remoteSpace=o,await ce({domainI:s,metaspace:t,fromSpace:e,toSpace:o}),n("4.10B Setup: Creating common history for alpha...");let c=await V.firstGen({parentIbGib:H,ib:"timeline_root_alpha_4_10b",data:{commonField:"common field R1 val",label:"AlphaRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),d=c.newIbGib;x.alpha_v0=d,await t.persistTransformResult({resTransform:c,space:e}),await t.registerNewIbGib({ibGib:d,space:e});let l=le({ibGib:d,defaultIfNone:"incomingAddr"});x.alpha_tjpAddr=l,await t.persistTransformResult({resTransform:c,space:o}),await t.registerNewIbGib({ibGib:d,space:o}),n("4.10B Setup: Seeding alpha_v0 to server..."),await j({domainIbGibs:[d],passLabel:"Seed alpha_v0",metaspace:t,space:e}),x.domainI_latest=E.domainI,n("4.10B Setup: \u2713 alpha_v0 seeded on server."),await ce({domainI:E.domainI,metaspace:t,fromSpace:e,toSpace:o});let f=await V.firstGen({parentIbGib:H,ib:"timeline_root_beta_4_10b",data:{fieldA:"beta field A created on source",label:"BetaRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),b=f.newIbGib;await t.persistTransformResult({resTransform:f,space:e}),await t.registerNewIbGib({ibGib:b,space:e}),x.r2_beta_v0_source=b;let m=le({ibGib:b,defaultIfNone:"incomingAddr"});x.beta_tjpAddr=m;let y=await M({timeline:d,mut8Opts:{mut8Ib:d.ib+"_r2client",dataToAddOrPatch:{fieldA:"source_edit_r2"}},metaspace:t,space:e});n(`r2_alpha_v1_source_sansBeta.gib: ${y.gib}`),ba=p({ibGib:b});let g=await ze({timeline:y,metaspace:t,space:e,rel8nInfos:[{rel8nName:pa,ibGibs:[b]}]});x.r2_alpha_v3_source_rel8beta=g,n(`r2_alpha_v2_source_rel8dBeta.gib: ${g.gib}`),n("4.10B Setup: \u2713 Created client Round 2 edits (alpha fieldA edit + relate beta).");let w=await M({timeline:d,mut8Opts:{mut8Ib:d.ib+"_r2remote",dataToAddOrPatch:{fieldB:"remote_edit_r2"}},metaspace:t,space:o});console.log(`alpha_v0: ${z(d)}`),console.log(`r2_alpha_v1_remote: ${z(w)}`),n(`r2_alpha_v1_remote.gib: ${w.gib}`),n("4.10B Setup: Pushing remote Round 2 edit to server..."),await ye({domainIbGibs:[w],passLabel:"Push remote Round 2 edit",metaspace:t,space:o,primarySpace:e,domainI:E.domainI,masterSecret:"test-sender-secret-phase4-10b"}),x.domainI_latest=E.domainI,n("\u2713 4.10B Setup Complete! Ready for 4.10B Sync (which runs Round 2, 3, and 4 in succession)."),r.textContent="\u2713 4.10B Setup Complete";let C=document.getElementById("btn-4-10b-sync");C&&(C.disabled=!1)}catch(t){n(`\u2717 4.10B Setup FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(xn,"init4_10bSetupButton");var fa,ba;function Rn(){let r=document.getElementById("btn-4-10b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.10B Sync: Initiating WebSocket Sync for Round 2, 3, and 4 sequential evolution...");let t=x.domainI_latest,e=x.remoteSpace,a=x.alpha_tjpAddr,s=x.beta_tjpAddr,i=x.alpha_v0,o=await L(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let d=location.protocol==="https:"?"wss:":"ws:",l=p({ibGib:x.domainI_initial});n("4.10B Sync: Running Round 2 Sync (merging divergent alpha edits)..."),await j({domainIbGibs:[x.r2_alpha_v3_source_rel8beta],passLabel:"Sync divergent alpha edits R2",metaspace:o,space:c}),x.domainI_latest=E.domainI,n("4.10B Sync: \u2713 Round 2 Sync complete."),await ce({domainI:E.domainI,metaspace:o,fromSpace:c,toSpace:e}),n("4.10B Sync: Preparing Round 3 divergence (multiple conflicting timelines)...");let f=await new ae().getKnowledgeMap({domainIbGibs:[x.r2_alpha_v3_source_rel8beta,x.r2_beta_v0_source],space:c,metaspace:o}),b=f[a],m=f[s],y=await o.get({addr:b,space:c}),g=await o.get({addr:m,space:c}),w=await M({timeline:y.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r3client",dataToAddOrPatch:{fieldC:"source_edit_r3"}},metaspace:o,space:c}),C=await M({timeline:g.ibGibs[0],mut8Opts:{mut8Ib:x.r2_beta_v0_source.ib+"_r3client",dataToAddOrPatch:{betaFieldA:"source_beta_edit_r3"}},metaspace:o,space:c});n("4.10B Sync: Updating remote space to latest merged tips...");let G=await o.getLatestAddr({addr:a,space:e}),v=[(await o.get({addr:G,space:e})).ibGibs[0]],_=await o.getLatestAddr({addr:s,space:e});if(_){let pt=await o.get({addr:_,space:e});v.push(pt.ibGibs[0])}await ye({domainIbGibs:v,passLabel:"Pull merged R2 tips to remoteSpace",metaspace:o,space:e,primarySpace:c,domainI:E.domainI,masterSecret:"test-sender-secret-phase4-10b"}),x.domainI_latest=E.domainI;let S=await new ae().getKnowledgeMap({space:e,metaspace:o,domainIbGibs:[i,x.r2_beta_v0_source]}),$=S[a],B=S[s],P=await o.get({addr:$,space:e}),N=await o.get({addr:B,space:e}),k=await M({timeline:P.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r3remote",dataToAddOrPatch:{fieldD:"remote_edit_r3"}},metaspace:o,space:e}),D=await M({timeline:N.ibGibs[0],mut8Opts:{mut8Ib:x.r2_beta_v0_source.ib+"_r3remote",dataToAddOrPatch:{betaFieldB:"remote_beta_edit_r3"}},metaspace:o,space:e});n("4.10B Sync: Pushing remote Round 3 edits to server..."),await ye({domainIbGibs:[k,D],passLabel:"Push remote Round 3 edits",metaspace:o,space:e,primarySpace:c,domainI:E.domainI,masterSecret:"test-sender-secret-phase4-10b"}),x.domainI_latest=E.domainI,n("4.10B Sync: Running Round 3 Client Sync (merging alpha & beta divergence)..."),await j({domainIbGibs:[w,C],passLabel:"Sync Client Round 3 edits",metaspace:o,space:c}),x.domainI_latest=E.domainI,n("4.10B Sync: \u2713 Round 3 Sync complete."),await ce({domainI:E.domainI,metaspace:o,fromSpace:c,toSpace:e}),n("4.10B Sync: Preparing Round 4 divergence (post-graft chain edits & new timeline)...");let O=await new ae().getKnowledgeMap({space:c,metaspace:o,domainIbGibs:[i,x.r2_beta_v0_source]}),F=O[a],J=O[s],de=await o.get({addr:F,space:c}),Q=await o.get({addr:J,space:c}),Ge=await M({timeline:de.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r4client_v5",dataToAddOrPatch:{fieldE:"source_edit_r4_v5"}},metaspace:o,space:c}),pe=await V.firstGen({parentIbGib:H,ib:"timeline_root_gamma_4_10b",data:{gammaField:"gamma created on client",label:"GammaRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),me=pe.newIbGib;await o.persistTransformResult({resTransform:pe,space:c}),await o.registerNewIbGib({ibGib:me,space:c});let Se=le({ibGib:me,defaultIfNone:"incomingAddr"});x.gamma_tjpAddr=Se,fa=p({ibGib:me});let W=await ze({timeline:Ge,metaspace:o,space:c,rel8nInfos:[{rel8nName:pa,ibGibs:[me]}]}),Ce=await M({timeline:W,mut8Opts:{mut8Ib:i.ib+"_r4client_v7",dataToAddOrPatch:{fieldF:"source_edit_r4_v7"}},metaspace:o,space:c}),Be=await M({timeline:Q.ibGibs[0],mut8Opts:{mut8Ib:x.r2_beta_v0_source.ib+"_r4client_v2",dataToAddOrPatch:{betaFieldD:"source_beta_edit_r4_v2"}},metaspace:o,space:c});n("4.10B Sync: Updating remote space to Round 3 merged tips...");let q=await o.getLatestAddr({addr:a,space:e}),We=[(await o.get({addr:q,space:e})).ibGibs[0]],Ve=await o.getLatestAddr({addr:s,space:e});if(Ve){let pt=await o.get({addr:Ve,space:e});We.push(pt.ibGibs[0])}await ye({domainIbGibs:We,passLabel:"Pull merged R3 tips to remoteSpace",metaspace:o,space:e,primarySpace:c,domainI:E.domainI,masterSecret:"test-sender-secret-phase4-10b"}),x.domainI_latest=E.domainI;let tt=await new ae().getKnowledgeMap({space:e,metaspace:o,domainIbGibs:[i,x.r2_beta_v0_source]}),ve=tt[a],wt=tt[s],St=await o.get({addr:ve,space:e}),te=await o.get({addr:wt,space:e}),Re=await M({timeline:St.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r4remote_v5",dataToAddOrPatch:{fieldG:"remote_edit_r4_v5"}},metaspace:o,space:e}),he=await M({timeline:te.ibGibs[0],mut8Opts:{mut8Ib:x.r2_beta_v0_source.ib+"_r4remote_v2",dataToAddOrPatch:{betaFieldC:"remote_beta_edit_r4_v2"}},metaspace:o,space:e});n("4.10B Sync: Pushing remote Round 4 edits to server..."),await ye({domainIbGibs:[Re,he],passLabel:"Push remote Round 4 edits",metaspace:o,space:e,primarySpace:c,domainI:E.domainI,masterSecret:"test-sender-secret-phase4-10b"}),x.domainI_latest=E.domainI,n("4.10B Sync: Running final Round 4 Client Sync (merging alpha, beta, and propagating gamma)..."),await j({domainIbGibs:[Ce,Be,me],passLabel:"Sync final Round 4 edits",metaspace:o,space:c}),x.domainI_latest=E.domainI,n("\u2713 4.10B Sync: All rounds of divergent edits and merges complete!"),r.textContent="\u2713 4.10B Sync Complete";let It=document.getElementById("btn-4-10b-check");It&&(It.disabled=!1)}catch(t){n(`\u2717 4.10B Sync FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(Rn,"init4_10bSyncButton");function Mn(){let r=document.getElementById("btn-4-10b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.10B Check: Verifying multi-round merged timelines on client and server...");let t=x.domainI_latest,e=x.alpha_tjpAddr,a=x.beta_tjpAddr,s=x.gamma_tjpAddr,i=await L(),o=await i.getLocalUserSpace({});if(!o)throw new Error("No default space.");let c=p({ibGib:x.domainI_initial}),d=await new ae().getKnowledgeMap({space:o,metaspace:i,domainIbGibs:[x.domainI_initial]}),l=await i.getLatestAddr({addr:e,space:o}),f=await i.getLatestAddr({addr:a,space:o}),b=await i.getLatestAddr({addr:s,space:o});if(!l||!f||!b)throw new Error("Client space is missing timeline tips for Alpha, Beta, or Gamma.");let m=await i.get({addr:l,space:o}),y=await i.get({addr:f,space:o}),g=m.ibGibs[0],w=y.ibGibs[0];if(g.data?.fieldA!=="source_edit_r2")throw new Error(`Alpha fieldA mismatch! Expected 'source_edit_r2', got '${g.data?.fieldA}'`);if(g.data?.fieldB!=="remote_edit_r2")throw new Error(`Alpha fieldB mismatch! Expected 'remote_edit_r2', got '${g.data?.fieldB}'`);if(g.data?.fieldC!=="source_edit_r3")throw new Error(`Alpha fieldC mismatch! Expected 'source_edit_r3', got '${g.data?.fieldC}'`);if(g.data?.fieldD!=="remote_edit_r3")throw new Error(`Alpha fieldD mismatch! Expected 'remote_edit_r3', got '${g.data?.fieldD}'`);if(g.data?.fieldE!=="source_edit_r4_v5")throw new Error(`Alpha fieldE mismatch! Expected 'source_edit_r4_v5', got '${g.data?.fieldE}'`);if(g.data?.fieldF!=="source_edit_r4_v7")throw new Error(`Alpha fieldF mismatch! Expected 'source_edit_r4_v7', got '${g.data?.fieldF}'`);if(g.data?.fieldG!=="remote_edit_r4_v5")throw new Error(`Alpha fieldG mismatch! Expected 'remote_edit_r4_v5', got '${g.data?.fieldG}'`);if(n("4.10B Check: \u2713 Client Alpha merged tip contains all Round 2, 3, and 4 edits."),w.data?.betaFieldA!=="source_beta_edit_r3")throw new Error(`Beta betaFieldA mismatch! Expected 'source_beta_edit_r3', got '${w.data?.betaFieldA}'`);if(w.data?.betaFieldB!=="remote_beta_edit_r3")throw new Error(`Beta betaFieldB mismatch! Expected 'remote_beta_edit_r3', got '${w.data?.betaFieldB}'`);if(w.data?.betaFieldC!=="remote_beta_edit_r4_v2")throw new Error(`Beta betaFieldC mismatch! Expected 'remote_beta_edit_r4_v2', got '${w.data?.betaFieldC}'`);if(w.data?.betaFieldD!=="source_beta_edit_r4_v2")throw new Error(`Beta betaFieldD mismatch! Expected 'source_beta_edit_r4_v2', got '${w.data?.betaFieldD}'`);n("4.10B Check: \u2713 Client Beta merged tip contains all Round 3 and 4 edits.");let C=g.rel8ns?.[pa]||[];if(!ba)throw new Error("(UNEXPECTED) betaAddr falsy? (E: 81c032ae7a93bddfd8eed6664d314826)");if(!C.includes(ba))throw new Error("Client Alpha tip is missing relation to Beta timeline.");if(!fa)throw new Error("(UNEXPECTED) gammaAddr falsy? (E: 12220a81d3b86385d1683d5a6bae5826)");if(!C.includes(fa))throw new Error("Client Alpha tip is missing relation to Gamma timeline.");n("4.10B Check: \u2713 Client Alpha tip retains relation to Gamma.");let G=new R;n("4.10B Check: Fetching server timeline graphs...");let T=await G.getIbGibGraph(c,l,!0),I=await G.getIbGibGraph(c,f,!0);if(!T.success||!T.graph||!I.success||!I.graph)throw new Error("Failed to fetch merged graphs from server.");let v=T.graph[l],_=I.graph[f];if(!v||!_)throw new Error("Server is missing the final merged tips for Alpha or Beta.");if(v.data?.fieldF!=="source_edit_r4_v7"||v.data?.fieldG!=="remote_edit_r4_v5")throw new Error("Server Alpha tip does not match final client merged state.");if(_.data?.betaFieldC!=="remote_beta_edit_r4_v2"||_.data?.betaFieldD!=="source_beta_edit_r4_v2")throw new Error("Server Beta tip does not match final client merged state.");n("4.10B Check: \u2713 Server tips match client merged states perfectly."),n("\u2713 4.10B Check SUCCESS: Advanced multi-round/timeline conflict resolved and verified on both client and server!"),r.textContent="\u2713 4.10B Check Success"}catch(t){n(`\u2717 4.10B Check FAILED: ${u(t)}`),console.error(t),r.disabled=!1}})}h(Mn,"init4_10bCheckButton");function Fn(){let r=`${X}[initDevTools]`;try{let t=document.getElementById("dev-tools-row-select");t&&(t.addEventListener("change",()=>{let e=t.value;document.querySelectorAll(".dev-panel-row-container").forEach(s=>{let i=s.getAttribute("data-row-id");e==="all"||i===e?s.style.display="flex":s.style.display="none"})}),t.dispatchEvent(new Event("change"))),Xa(),Ya(),Ka(),Ha(),Wa(),qa(),za(),Ja(),Za(),Qa(),en(),tn(),an(),nn(),rn(),on(),sn(),cn(),dn(),ln(),fn(),bn(),pn(),mn(),hn(),gn(),En(),wn(),Sn(),In(),_n(),Gn(),An(),vn(),Tn(),$n(),Bn(),Nn(),kn(),Pn(),On(),xn(),Rn(),Mn()}catch(t){console.error(`${r} ${u(t)}`)}}h(Fn,"initDevTools");Sa(Ht);var Vn=Yt;async function Un(){let r=`[${Un.name}]`;try{Vn&&console.log(`${r} starting... (I: 3d893846d02c4ff49181f9b8e586eb74)`),console.time(r),document.addEventListener("DOMContentLoaded",async()=>{try{console.timeLog(r,"DOMContentLoaded fired"),await wa(Ht),console.timeLog(r,"initIbGibStorage complete"),await Ia("./bootstrap.mjs"),console.timeLog(r,"dynamicallyLoadBootstrapScript complete"),Fn(),console.timeLog(r,"initDevTools complete"),console.timeEnd(r)}catch(t){throw console.error(`${r} ${u(t)}`),t}})}catch(t){console.timeEnd(r);debugger;throw console.error(`${r} ${u(t)}`),t}finally{Vn&&console.log(`${r} complete.`)}}h(Un,"spinOffStartup");Un();
|
|
21
|
+
${v.data?.text}`);n("4.9B Check: \u2713 Server tip text matches the client-side merged text."),n("\u2713 4.9B Check SUCCESS: LCS text field merge conflict resolved and verified on both client and server!"),r.textContent="\u2713 4.9B Check Success"}catch(t){n(`\u2717 4.9B Check FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Mn,"init4_9bCheckButton");var P={},ma="testrel8n";function Fn(){let r=document.getElementById("btn-4-10b-setup");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.10B Setup: Setting up identities and preparing Round 1 & Round 2 divergence...");let t=await D(),e=await t.getLocalUserSpace({});if(!e)throw new Error("No default space.");let a=new M;await fe({masterSecret:"test-sender-secret-phase4-10b",syncSalt:"senderidentitysyncsaltphase4-10b",manageSalt:"senderidentitymanagesaltphase4-10b",metaspace:t,space:e,apiBridge:a,phaseText:"4.10B"});let s=w.domainI;P.domainI_initial=s,P.domainI_latest=s;let i=p({ibGib:s});n("4.10B Setup: Creating temporary remote space...");let o=await t.createNewLocalSpace({opts:{allowCancel:!1,spaceName:"remote_space_4_10b",getFnPrompt:t.getFnPrompt}});await o.initialized,P.remoteSpace=o,await be({domainI:s,metaspace:t,fromSpace:e,toSpace:o}),n("4.10B Setup: Creating common history for alpha...");let c=await U.firstGen({parentIbGib:q,ib:"timeline_root_alpha_4_10b",data:{commonField:"common field R1 val",label:"AlphaRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),d=c.newIbGib;P.alpha_v0=d,await t.persistTransformResult({resTransform:c,space:e}),await t.registerNewIbGib({ibGib:d,space:e});let l=ge({ibGib:d,defaultIfNone:"incomingAddr"});P.alpha_tjpAddr=l,await t.persistTransformResult({resTransform:c,space:o}),await t.registerNewIbGib({ibGib:d,space:o}),n("4.10B Setup: Seeding alpha_v0 to server..."),await K({domainIbGibs:[d],passLabel:"Seed alpha_v0",metaspace:t,space:e}),P.domainI_latest=w.domainI,n("4.10B Setup: \u2713 alpha_v0 seeded on server."),await be({domainI:w.domainI,metaspace:t,fromSpace:e,toSpace:o});let f=await U.firstGen({parentIbGib:q,ib:"timeline_root_beta_4_10b",data:{fieldA:"beta field A created on source",label:"BetaRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),b=f.newIbGib;await t.persistTransformResult({resTransform:f,space:e}),await t.registerNewIbGib({ibGib:b,space:e}),P.r2_beta_v0_source=b;let g=ge({ibGib:b,defaultIfNone:"incomingAddr"});P.beta_tjpAddr=g;let E=await F({timeline:d,mut8Opts:{mut8Ib:d.ib+"_r2client",dataToAddOrPatch:{fieldA:"source_edit_r2"}},metaspace:t,space:e});n(`r2_alpha_v1_source_sansBeta.gib: ${E.gib}`),pa=p({ibGib:b});let u=await Xe({timeline:E,metaspace:t,space:e,rel8nInfos:[{rel8nName:ma,ibGibs:[b]}]});P.r2_alpha_v3_source_rel8beta=u,n(`r2_alpha_v2_source_rel8dBeta.gib: ${u.gib}`),n("4.10B Setup: \u2713 Created client Round 2 edits (alpha fieldA edit + relate beta).");let S=await F({timeline:d,mut8Opts:{mut8Ib:d.ib+"_r2remote",dataToAddOrPatch:{fieldB:"remote_edit_r2"}},metaspace:t,space:o});console.log(`alpha_v0: ${ee(d)}`),console.log(`r2_alpha_v1_remote: ${ee(S)}`),n(`r2_alpha_v1_remote.gib: ${S.gib}`),n("4.10B Setup: Pushing remote Round 2 edit to server..."),await ye({domainIbGibs:[S],passLabel:"Push remote Round 2 edit",metaspace:t,space:o,primarySpace:e,domainI:w.domainI,masterSecret:"test-sender-secret-phase4-10b"}),P.domainI_latest=w.domainI,n("\u2713 4.10B Setup Complete! Ready for 4.10B Sync (which runs Round 2, 3, and 4 in succession)."),r.textContent="\u2713 4.10B Setup Complete";let C=document.getElementById("btn-4-10b-sync");C&&(C.disabled=!1)}catch(t){n(`\u2717 4.10B Setup FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Fn,"init4_10bSetupButton");var ba,pa;function Vn(){let r=document.getElementById("btn-4-10b-sync");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.10B Sync: Initiating WebSocket Sync for Round 2, 3, and 4 sequential evolution...");let t=P.domainI_latest,e=P.remoteSpace,a=P.alpha_tjpAddr,s=P.beta_tjpAddr,i=P.alpha_v0,o=await D(),c=await o.getLocalUserSpace({});if(!c)throw new Error("No default space.");let d=location.protocol==="https:"?"wss:":"ws:",l=p({ibGib:P.domainI_initial});n("4.10B Sync: Running Round 2 Sync (merging divergent alpha edits)..."),await K({domainIbGibs:[P.r2_alpha_v3_source_rel8beta],passLabel:"Sync divergent alpha edits R2",metaspace:o,space:c}),P.domainI_latest=w.domainI,n("4.10B Sync: \u2713 Round 2 Sync complete."),await be({domainI:w.domainI,metaspace:o,fromSpace:c,toSpace:e}),n("4.10B Sync: Preparing Round 3 divergence (multiple conflicting timelines)...");let f=await new oe().getKnowledgeMap({domainIbGibs:[P.r2_alpha_v3_source_rel8beta,P.r2_beta_v0_source],space:c,metaspace:o}),b=f[a],g=f[s],E=await o.get({addr:b,space:c}),u=await o.get({addr:g,space:c}),S=await F({timeline:E.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r3client",dataToAddOrPatch:{fieldC:"source_edit_r3"}},metaspace:o,space:c}),C=await F({timeline:u.ibGibs[0],mut8Opts:{mut8Ib:P.r2_beta_v0_source.ib+"_r3client",dataToAddOrPatch:{betaFieldA:"source_beta_edit_r3"}},metaspace:o,space:c});n("4.10B Sync: Updating remote space to latest merged tips...");let _=await o.getLatestAddr({addr:a,space:e}),v=[(await o.get({addr:_,space:e})).ibGibs[0]],$=await o.getLatestAddr({addr:s,space:e});if($){let jt=await o.get({addr:$,space:e});v.push(jt.ibGibs[0])}await ye({domainIbGibs:v,passLabel:"Pull merged R2 tips to remoteSpace",metaspace:o,space:e,primarySpace:c,domainI:w.domainI,masterSecret:"test-sender-secret-phase4-10b"}),P.domainI_latest=w.domainI;let y=await new oe().getKnowledgeMap({space:e,metaspace:o,domainIbGibs:[i,P.r2_beta_v0_source]}),T=y[a],B=y[s],N=await o.get({addr:T,space:e}),L=await o.get({addr:B,space:e}),O=await F({timeline:N.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r3remote",dataToAddOrPatch:{fieldD:"remote_edit_r3"}},metaspace:o,space:e}),k=await F({timeline:L.ibGibs[0],mut8Opts:{mut8Ib:P.r2_beta_v0_source.ib+"_r3remote",dataToAddOrPatch:{betaFieldB:"remote_beta_edit_r3"}},metaspace:o,space:e});n("4.10B Sync: Pushing remote Round 3 edits to server..."),await ye({domainIbGibs:[O,k],passLabel:"Push remote Round 3 edits",metaspace:o,space:e,primarySpace:c,domainI:w.domainI,masterSecret:"test-sender-secret-phase4-10b"}),P.domainI_latest=w.domainI,n("4.10B Sync: Running Round 3 Client Sync (merging alpha & beta divergence)..."),await K({domainIbGibs:[S,C],passLabel:"Sync Client Round 3 edits",metaspace:o,space:c}),P.domainI_latest=w.domainI,n("4.10B Sync: \u2713 Round 3 Sync complete."),await be({domainI:w.domainI,metaspace:o,fromSpace:c,toSpace:e}),n("4.10B Sync: Preparing Round 4 divergence (post-graft chain edits & new timeline)...");let x=await new oe().getKnowledgeMap({space:c,metaspace:o,domainIbGibs:[i,P.r2_beta_v0_source]}),R=x[a],ae=x[s],z=await o.get({addr:R,space:c}),se=await o.get({addr:ae,space:c}),Ie=await F({timeline:z.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r4client_v5",dataToAddOrPatch:{fieldE:"source_edit_r4_v5"}},metaspace:o,space:c}),pe=await U.firstGen({parentIbGib:q,ib:"timeline_root_gamma_4_10b",data:{gammaField:"gamma created on client",label:"GammaRoot",random:Math.random()},dna:!0,nCounter:!0,tjp:{uuid:!0,timestamp:!0}}),me=pe.newIbGib;await o.persistTransformResult({resTransform:pe,space:c}),await o.registerNewIbGib({ibGib:me,space:c});let De=ge({ibGib:me,defaultIfNone:"incomingAddr"});P.gamma_tjpAddr=De,ba=p({ibGib:me});let ne=await Xe({timeline:Ie,metaspace:o,space:c,rel8nInfos:[{rel8nName:ma,ibGibs:[me]}]}),Ee=await F({timeline:ne,mut8Opts:{mut8Ib:i.ib+"_r4client_v7",dataToAddOrPatch:{fieldF:"source_edit_r4_v7"}},metaspace:o,space:c}),Ce=await F({timeline:se.ibGibs[0],mut8Opts:{mut8Ib:P.r2_beta_v0_source.ib+"_r4client_v2",dataToAddOrPatch:{betaFieldD:"source_beta_edit_r4_v2"}},metaspace:o,space:c});n("4.10B Sync: Updating remote space to Round 3 merged tips...");let J=await o.getLatestAddr({addr:a,space:e}),re=[(await o.get({addr:J,space:e})).ibGibs[0]],it=await o.getLatestAddr({addr:s,space:e});if(it){let jt=await o.get({addr:it,space:e});re.push(jt.ibGibs[0])}await ye({domainIbGibs:re,passLabel:"Pull merged R3 tips to remoteSpace",metaspace:o,space:e,primarySpace:c,domainI:w.domainI,masterSecret:"test-sender-secret-phase4-10b"}),P.domainI_latest=w.domainI;let ct=await new oe().getKnowledgeMap({space:e,metaspace:o,domainIbGibs:[i,P.r2_beta_v0_source]}),Ut=ct[a],Yn=ct[s],Hn=await o.get({addr:Ut,space:e}),Wn=await o.get({addr:Yn,space:e}),qn=await F({timeline:Hn.ibGibs[0],mut8Opts:{mut8Ib:i.ib+"_r4remote_v5",dataToAddOrPatch:{fieldG:"remote_edit_r4_v5"}},metaspace:o,space:e}),zn=await F({timeline:Wn.ibGibs[0],mut8Opts:{mut8Ib:P.r2_beta_v0_source.ib+"_r4remote_v2",dataToAddOrPatch:{betaFieldC:"remote_beta_edit_r4_v2"}},metaspace:o,space:e});n("4.10B Sync: Pushing remote Round 4 edits to server..."),await ye({domainIbGibs:[qn,zn],passLabel:"Push remote Round 4 edits",metaspace:o,space:e,primarySpace:c,domainI:w.domainI,masterSecret:"test-sender-secret-phase4-10b"}),P.domainI_latest=w.domainI,n("4.10B Sync: Running final Round 4 Client Sync (merging alpha, beta, and propagating gamma)..."),await K({domainIbGibs:[Ee,Ce,me],passLabel:"Sync final Round 4 edits",metaspace:o,space:c}),P.domainI_latest=w.domainI,n("\u2713 4.10B Sync: All rounds of divergent edits and merges complete!"),r.textContent="\u2713 4.10B Sync Complete";let ga=document.getElementById("btn-4-10b-check");ga&&(ga.disabled=!1)}catch(t){n(`\u2717 4.10B Sync FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Vn,"init4_10bSyncButton");function Un(){let r=document.getElementById("btn-4-10b-check");r&&r.addEventListener("click",async()=>{try{r.disabled=!0,n("4.10B Check: Verifying multi-round merged timelines on client and server...");let t=P.domainI_latest,e=P.alpha_tjpAddr,a=P.beta_tjpAddr,s=P.gamma_tjpAddr,i=await D(),o=await i.getLocalUserSpace({});if(!o)throw new Error("No default space.");let c=p({ibGib:P.domainI_initial}),d=await new oe().getKnowledgeMap({space:o,metaspace:i,domainIbGibs:[P.domainI_initial]}),l=await i.getLatestAddr({addr:e,space:o}),f=await i.getLatestAddr({addr:a,space:o}),b=await i.getLatestAddr({addr:s,space:o});if(!l||!f||!b)throw new Error("Client space is missing timeline tips for Alpha, Beta, or Gamma.");let g=await i.get({addr:l,space:o}),E=await i.get({addr:f,space:o}),u=g.ibGibs[0],S=E.ibGibs[0];if(u.data?.fieldA!=="source_edit_r2")throw new Error(`Alpha fieldA mismatch! Expected 'source_edit_r2', got '${u.data?.fieldA}'`);if(u.data?.fieldB!=="remote_edit_r2")throw new Error(`Alpha fieldB mismatch! Expected 'remote_edit_r2', got '${u.data?.fieldB}'`);if(u.data?.fieldC!=="source_edit_r3")throw new Error(`Alpha fieldC mismatch! Expected 'source_edit_r3', got '${u.data?.fieldC}'`);if(u.data?.fieldD!=="remote_edit_r3")throw new Error(`Alpha fieldD mismatch! Expected 'remote_edit_r3', got '${u.data?.fieldD}'`);if(u.data?.fieldE!=="source_edit_r4_v5")throw new Error(`Alpha fieldE mismatch! Expected 'source_edit_r4_v5', got '${u.data?.fieldE}'`);if(u.data?.fieldF!=="source_edit_r4_v7")throw new Error(`Alpha fieldF mismatch! Expected 'source_edit_r4_v7', got '${u.data?.fieldF}'`);if(u.data?.fieldG!=="remote_edit_r4_v5")throw new Error(`Alpha fieldG mismatch! Expected 'remote_edit_r4_v5', got '${u.data?.fieldG}'`);if(n("4.10B Check: \u2713 Client Alpha merged tip contains all Round 2, 3, and 4 edits."),S.data?.betaFieldA!=="source_beta_edit_r3")throw new Error(`Beta betaFieldA mismatch! Expected 'source_beta_edit_r3', got '${S.data?.betaFieldA}'`);if(S.data?.betaFieldB!=="remote_beta_edit_r3")throw new Error(`Beta betaFieldB mismatch! Expected 'remote_beta_edit_r3', got '${S.data?.betaFieldB}'`);if(S.data?.betaFieldC!=="remote_beta_edit_r4_v2")throw new Error(`Beta betaFieldC mismatch! Expected 'remote_beta_edit_r4_v2', got '${S.data?.betaFieldC}'`);if(S.data?.betaFieldD!=="source_beta_edit_r4_v2")throw new Error(`Beta betaFieldD mismatch! Expected 'source_beta_edit_r4_v2', got '${S.data?.betaFieldD}'`);n("4.10B Check: \u2713 Client Beta merged tip contains all Round 3 and 4 edits.");let C=u.rel8ns?.[ma]||[];if(!pa)throw new Error("(UNEXPECTED) betaAddr falsy? (E: 81c032ae7a93bddfd8eed6664d314826)");if(!C.includes(pa))throw new Error("Client Alpha tip is missing relation to Beta timeline.");if(!ba)throw new Error("(UNEXPECTED) gammaAddr falsy? (E: 12220a81d3b86385d1683d5a6bae5826)");if(!C.includes(ba))throw new Error("Client Alpha tip is missing relation to Gamma timeline.");n("4.10B Check: \u2713 Client Alpha tip retains relation to Gamma.");let _=new M;n("4.10B Check: Fetching server timeline graphs...");let A=await _.getIbGibGraph(c,l,!0),I=await _.getIbGibGraph(c,f,!0);if(!A.success||!A.graph||!I.success||!I.graph)throw new Error("Failed to fetch merged graphs from server.");let v=A.graph[l],$=I.graph[f];if(!v||!$)throw new Error("Server is missing the final merged tips for Alpha or Beta.");if(v.data?.fieldF!=="source_edit_r4_v7"||v.data?.fieldG!=="remote_edit_r4_v5")throw new Error("Server Alpha tip does not match final client merged state.");if($.data?.betaFieldC!=="remote_beta_edit_r4_v2"||$.data?.betaFieldD!=="source_beta_edit_r4_v2")throw new Error("Server Beta tip does not match final client merged state.");n("4.10B Check: \u2713 Server tips match client merged states perfectly."),n("\u2713 4.10B Check SUCCESS: Advanced multi-round/timeline conflict resolved and verified on both client and server!"),r.textContent="\u2713 4.10B Check Success"}catch(t){n(`\u2717 4.10B Check FAILED: ${h(t)}`),console.error(t),r.disabled=!1}})}m(Un,"init4_10bCheckButton");function jn(){let r=`${Y}[initDevTools]`;try{let t=document.getElementById("dev-tools-row-select");t&&(t.addEventListener("change",()=>{let e=t.value;document.querySelectorAll(".dev-panel-row-container").forEach(s=>{let i=s.getAttribute("data-row-id");e==="all"||i===e?s.style.display="flex":s.style.display="none"})}),t.dispatchEvent(new Event("change"))),Wa(),qa(),Ha(),za(),Ja(),Za(),Qa(),en(),tn(),an(),nn(),rn(),on(),sn(),cn(),dn(),ln(),fn(),bn(),pn(),mn(),gn(),hn(),un(),yn(),En(),In(),_n(),Gn(),Cn(),An(),vn(),Tn(),Bn(),Nn(),Ln(),kn(),Dn(),xn(),Rn(),Mn(),Fn(),Vn(),Un()}catch(t){console.error(`${r} ${h(t)}`)}}m(jn,"initDevTools");_a(Ht);var Kn=Yt;async function Xn(){let r=`[${Xn.name}]`;try{Kn&&console.log(`${r} starting... (I: 3d893846d02c4ff49181f9b8e586eb74)`),console.time(r),document.addEventListener("DOMContentLoaded",async()=>{try{console.timeLog(r,"DOMContentLoaded fired"),await Ia(Ht),console.timeLog(r,"initIbGibStorage complete"),await Ga("./bootstrap.mjs"),console.timeLog(r,"dynamicallyLoadBootstrapScript complete"),jn(),console.timeLog(r,"initDevTools complete"),console.timeEnd(r)}catch(t){throw console.error(`${r} ${h(t)}`),t}})}catch(t){console.timeEnd(r);debugger;throw console.error(`${r} ${h(t)}`),t}finally{Kn&&console.log(`${r} complete.`)}}m(Xn,"spinOffStartup");Xn();
|
|
23
22
|
//# sourceMappingURL=index.mjs.map
|