diff --git a/ng-net/src/app_protocol.rs b/ng-net/src/app_protocol.rs index db5da7d..10d1013 100644 --- a/ng-net/src/app_protocol.rs +++ b/ng-net/src/app_protocol.rs @@ -318,6 +318,10 @@ impl NuriV0 { format!("{DID_PREFIX}:n:{token}") } + pub fn tokenized_commit(repo_id: &RepoId, commit_id: &ObjectId) -> String { + format!("{DID_PREFIX}:o:{repo_id}:t:{commit_id}") + } + pub fn locator(locator: &Locator) -> String { format!("l:{locator}") } diff --git a/ng-sdk-js/app-node/index.js b/ng-sdk-js/app-node/index.js index a9cbbaa..c6b0f1b 100644 --- a/ng-sdk-js/app-node/index.js +++ b/ng-sdk-js/app-node/index.js @@ -61,9 +61,9 @@ ng.init_headless(config).then( async() => { // } // console.log(history.swimlane_state); - await ng.sparql_update(session.session_id, "INSERT DATA { }"); + await ng.sparql_update(session.session_id, "INSERT DATA { }"); - sparql_result = await ng.sparql_query(session.session_id, "CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <"+private_store+"> { ?s ?p ?o } }", base); + sparql_result = await ng.sparql_query(session.session_id, "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }"); console.log("******** CONSTRUCT") for (const r of sparql_result) console.log(r.subject.value, r.predicate.value, r.object.value); diff --git a/ng-verifier/src/commits/transaction.rs b/ng-verifier/src/commits/transaction.rs index 4917b60..09380a3 100644 --- a/ng-verifier/src/commits/transaction.rs +++ b/ng-verifier/src/commits/transaction.rs @@ -266,6 +266,8 @@ impl Verifier { let commit_info: CommitInfoJs = (&commit.as_info(repo)).into(); if body.graph.is_some() { + let mut transaction = body.graph.take().unwrap(); + transaction.tokenize_with_commit_id(commit_id, repo_id); let info = BranchUpdateInfo { branch_id: *branch_id, branch_type: branch.branch_type.clone(), @@ -275,7 +277,7 @@ impl Verifier { overlay_id: store.overlay_id, previous_heads: commit.direct_causal_past_ids(), commit_id, - transaction: body.graph.take().unwrap(), + transaction, commit_info, }; self.update_graph(vec![info]).await?; @@ -497,7 +499,8 @@ impl Verifier { let repo = self.get_repo(&repo_id, &store_repo)?; let commit_info: CommitInfoJs = (&commit.as_info(repo)).into(); - let graph_update = transac.graph.take().unwrap(); + let mut graph_update = transac.graph.take().unwrap(); + graph_update.tokenize_with_commit_id(commit.id().unwrap(), &repo_id); let info = BranchUpdateInfo { branch_id, diff --git a/ng-verifier/src/types.rs b/ng-verifier/src/types.rs index dc74542..197e1e8 100644 --- a/ng-verifier/src/types.rs +++ b/ng-verifier/src/types.rs @@ -20,7 +20,9 @@ use serde::{Deserialize, Serialize}; use lazy_static::lazy_static; use ng_net::{app_protocol::*, types::*}; -use ng_oxigraph::oxrdf::{GraphName, GraphNameRef, NamedNode, Quad, Triple, TripleRef}; +use ng_oxigraph::oxrdf::{ + GraphName, GraphNameRef, NamedNode, Quad, Subject, Term, Triple, TripleRef, +}; use ng_repo::{errors::*, types::*}; pub const NG_ONTOLOGY: &str = "did:ng:x:ng#"; @@ -41,6 +43,8 @@ pub struct GraphTransaction { pub removes: Vec, } +const TOKENIZED_COMMIT: &str = "did:ng:_"; + impl GraphTransaction { pub(crate) fn as_patch(&self) -> GraphPatch { GraphPatch { @@ -48,6 +52,32 @@ impl GraphTransaction { removes: serde_bare::to_vec(&self.removes).unwrap(), } } + pub(crate) fn tokenize_with_commit_id(&mut self, commit_id: ObjectId, repo_id: &RepoId) { + for triple in self.inserts.iter_mut() { + if let Subject::NamedNode(nn) = &triple.subject { + if nn.as_str().starts_with(TOKENIZED_COMMIT) { + let mut str = nn.as_string().clone(); + let new_iri = NuriV0::tokenized_commit(repo_id, &commit_id); + str.replace_range(..8, &new_iri); + triple.subject = NamedNode::new_unchecked(str).into(); + } + } + if triple.predicate.as_str().starts_with(TOKENIZED_COMMIT) { + let mut str = triple.predicate.as_string().clone(); + let new_iri = NuriV0::tokenized_commit(repo_id, &commit_id); + str.replace_range(..8, &new_iri); + triple.predicate = NamedNode::new_unchecked(str); + } + if let Term::NamedNode(nn) = &triple.object { + if nn.as_str().starts_with(TOKENIZED_COMMIT) { + let mut str = nn.as_string().clone(); + let new_iri = NuriV0::tokenized_commit(repo_id, &commit_id); + str.replace_range(..8, &new_iri); + triple.object = NamedNode::new_unchecked(str).into(); + } + } + } + } } #[derive(Clone, Debug, Serialize, Deserialize)]