genosdb 0.18.0 → 0.19.0

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.
@@ -1 +1,2 @@
1
- var _=async(D,T)=>{if(!T)return null;let F="owner",H="collaborators",P=()=>{let h=D.sm.getActiveEthAddress();if(!h)throw Error("❌ [SM-ACLs] Active user session required.");return h},V=(h)=>Error(`❌ [SM-ACLs] Only the owner can ${h}.`),Z=async(h,k)=>{let x=[];for(let z of h){let{signer:G,type:J,id:X}=z;if(!G||!X){x.push(z);continue}let Q=k.get(X),{[F]:K,[H]:Y={}}=Q?.value||{};if(J==="upsert"||J==="put"){if(!Q||K===void 0||G===K||Y[G]==="write"||Y[G]==="delete")x.push(z);continue}if(J==="remove"){if(!Q||K===void 0||G===K||Y[G]==="delete")x.push(z);continue}x.push(z)}return x};return D.use(Z),{async set(h,k){let x=P(),{result:z}=await D.get(k);if(z){let{[F]:G,[H]:J={}}=z.value;if(x!==G&&J[x]!=="write")throw Error(`\uD83D\uDEE1️ [SM-ACLs] Write denied for node ${k}.`);let{[F]:X,[H]:Q,...K}=h;return D.put({...z.value,...K},k)}return D.put({...h,[F]:x,[H]:{}},k)},async grant(h,k,x){let z=P();if(!["read","write","delete"].includes(x))throw Error("\uD83D\uDEE1️ [SM-ACLs] Permission must be 'read', 'write' or 'delete'.");let{result:G}=await D.get(h);if(!G)throw Error(`❌ [SM-ACLs] Node ${h} not found.`);if(G.value[F]!==z)throw V("grant permissions");let J={...G.value[H]??{},[k]:x};await D.put({...G.value,[H]:J},h)},async revoke(h,k){let x=P(),{result:z}=await D.get(h);if(!z)throw Error(`❌ [SM-ACLs] Node ${h} not found.`);if(z.value[F]!==x)throw V("revoke permissions");let{[k]:G,...J}=z.value[H]??{};await D.put({...z.value,[H]:J},h)},async delete(h){let k=P(),{result:x}=await D.get(h);if(!x)return;if(x.value[F]!==k&&x.value[H]?.[k]!=="delete")throw V("delete this node");await D.remove(h)},async getPermissions(h){let{result:k}=await D.get(h);if(!k||k.value[F]===void 0)return null;return{owner:k.value[F],collaborators:k.value[H]??{}}}}};async function f(D,T){try{let F=await _(D,T);if(F)try{Object.defineProperty(D.sm,"acls",{value:F,writable:!0,enumerable:!1,configurable:!0})}catch(H){throw Error("❌ [SM-ACLs] Cannot attach ACL module to gdb.sm. Ensure gdb.sm is extensible.")}}catch(F){throw F}}export{f as start,_ as createAclModule};
1
+ var log=(()=>{const n=()=>{};return new Proxy(console,{get:(c,m)=>globalThis.__gdbDebug?c[m].bind(c):n})})();
2
+ var _=async(F,V)=>{if(!V)return null;let G="owner",H="collaborators",Q=()=>{let h=F.sm.getActiveEthAddress();if(!h)throw Error("❌ [SM-ACLs] Active user session required.");return h},X=(h)=>Error(`❌ [SM-ACLs] Only the owner can ${h}.`),Z=async(h,k)=>{let x=[];for(let z of h){let{signer:D,type:J,id:P}=z;if(!D||!P){x.push(z);continue}let T=k.get(P),{[G]:K,[H]:Y={}}=T?.value||{};if(J==="upsert"||J==="put"){if(!T||K===void 0||D===K||Y[D]==="write"||Y[D]==="delete")x.push(z);else log.warn(`⚠️ [SM-ACLs] DENIED (put): ${D} → ${P}`);continue}if(J==="remove"){if(!T||K===void 0||D===K||Y[D]==="delete")x.push(z);else log.warn(`⚠️ [SM-ACLs] DENIED (remove): ${D} → ${P}`);continue}x.push(z)}return x};return F.use(Z),{async set(h,k){let x=Q(),{result:z}=await F.get(k);if(z){let{[G]:D,[H]:J={}}=z.value;if(x!==D&&J[x]!=="write")throw Error(`\uD83D\uDEE1️ [SM-ACLs] Write denied for node ${k}.`);let{[G]:P,[H]:T,...K}=h;return F.put({...z.value,...K},k)}return F.put({...h,[G]:x,[H]:{}},k)},async grant(h,k,x){let z=Q();if(!["read","write","delete"].includes(x))throw Error("\uD83D\uDEE1️ [SM-ACLs] Permission must be 'read', 'write' or 'delete'.");let{result:D}=await F.get(h);if(!D)throw Error(`❌ [SM-ACLs] Node ${h} not found.`);if(D.value[G]!==z)throw X("grant permissions");let J={...D.value[H]??{},[k]:x};await F.put({...D.value,[H]:J},h)},async revoke(h,k){let x=Q(),{result:z}=await F.get(h);if(!z)throw Error(`❌ [SM-ACLs] Node ${h} not found.`);if(z.value[G]!==x)throw X("revoke permissions");let{[k]:D,...J}=z.value[H]??{};await F.put({...z.value,[H]:J},h)},async delete(h){let k=Q(),{result:x}=await F.get(h);if(!x)return;if(x.value[G]!==k&&x.value[H]?.[k]!=="delete")throw X("delete this node");await F.remove(h)},async getPermissions(h){let{result:k}=await F.get(h);if(!k||k.value[G]===void 0)return null;return{owner:k.value[G],collaborators:k.value[H]??{}}}}};async function f(F,V){log.info("\uD83D\uDEE1️ [SM-ACLs] Starting ACL module...");try{let G=await _(F,V);if(G)try{Object.defineProperty(F.sm,"acls",{value:G,writable:!0,enumerable:!1,configurable:!0}),log.info("\uD83D\uDEE1️ [SM-ACLs] Module initialized and attached to gdb.sm.acls.")}catch(H){throw log.error("❌ [SM-ACLs] Failed to attach: gdb.sm not extensible.",H.message),Error("❌ [SM-ACLs] Cannot attach ACL module to gdb.sm. Ensure gdb.sm is extensible.")}else log.warn("⚠️ [SM-ACLs] Module not activated (options missing).")}catch(G){throw log.error("❌ [SM-ACLs] Failed to start ACL module.",G),G}}export{f as start,_ as createAclModule};
Binary file
@@ -1 +1,2 @@
1
- var D=null,F=[],H=[],B=null,J=(q)=>!!q&&H.some((f)=>f&&f.toLowerCase()===q.toLowerCase()),K=async()=>{let q=new Map;for(let f of F){let x=f.then?.assignRole;if(!x)continue;let z=[];try{({results:z=[]}=await D.map({query:f.if}))}catch(j){continue}for(let j of z){if(!j.id.startsWith("user:"))continue;if(J(j.id.slice(5)))continue;if(f.offsetTimestamp&&(j.timestamp?.physical??0)>Date.now()-f.offsetTimestamp)continue;q.set(j.id,{role:x,current:j.value?.role})}}for(let[f,{role:x,current:z}]of q){if(z===x)continue;let j=f.slice(5);try{await D.sm.assignRole(j,x)}catch(N){}}},L=()=>{if(B)return;B=setInterval(K,4000)},M=()=>{if(!B)return;clearInterval(B),B=null},P=(q,{governanceRules:f,superAdmins:x}={})=>{if(!q||!f)return;D=q,F=f,H=x||[],q.sm.setGovernanceStateChangeCallback(({isActive:z,activeAddress:j})=>{if(z&&j&&J(j))L();else M()})};export{P as start};
1
+ var log=(()=>{const n=()=>{};return new Proxy(console,{get:(c,m)=>globalThis.__gdbDebug?c[m].bind(c):n})})();
2
+ var D=null,F=[],H=[],B=null,J=(q)=>!!q&&H.some((j)=>j&&j.toLowerCase()===q.toLowerCase()),L=async()=>{let q=new Map;for(let j of F){let x=j.then?.assignRole;if(!x)continue;let z=[];try{({results:z=[]}=await D.map({query:j.if}))}catch(f){log.error("❌ GOVERNANCE: rule evaluation failed.",{rule:j,error:f.message});continue}for(let f of z){if(!f.id.startsWith("user:"))continue;if(J(f.id.slice(5)))continue;if(j.offsetTimestamp&&(f.timestamp?.physical??0)>Date.now()-j.offsetTimestamp)continue;q.set(f.id,{role:x,current:f.value?.role})}}for(let[j,{role:x,current:z}]of q){if(z===x)continue;let f=j.slice(5);try{await D.sm.assignRole(f,x),log.info(`\uD83D\uDCDC GOVERNANCE: ${f} '${z}' -> '${x}'`)}catch(K){log.error("❌ GOVERNANCE: assignRole failed.",{target:f,role:x,error:K.message})}}},M=()=>{if(B)return;log.info("✅ GOVERNANCE ENGINE: activated (superadmin present)."),B=setInterval(L,4000)},N=()=>{if(!B)return;clearInterval(B),B=null,log.info("\uD83D\uDED1 GOVERNANCE ENGINE: deactivated.")},P=(q,{governanceRules:j,superAdmins:x}={})=>{if(!q||!j)return log.error("❌ GOVERNANCE: initialization failed — gdb instance and governanceRules are required.");D=q,F=j,H=x||[],q.sm.setGovernanceStateChangeCallback(({isActive:z,activeAddress:f})=>{if(z&&f&&J(f))M();else N()})};export{P as start};
Binary file