add writer to set_dht_value, allow multiple open_dht_record

This commit is contained in:
Christien Rioux
2024-02-21 20:18:07 -05:00
parent fac9937cf4
commit 0c3271b3b9
19 changed files with 161 additions and 66 deletions

View File

@@ -581,11 +581,19 @@ pub fn routing_context_get_dht_value(
}
#[wasm_bindgen()]
pub fn routing_context_set_dht_value(id: u32, key: String, subkey: u32, data: String) -> Promise {
pub fn routing_context_set_dht_value(
id: u32,
key: String,
subkey: u32,
data: String,
writer: Option<String>,
) -> Promise {
let key: veilid_core::TypedKey = veilid_core::deserialize_json(&key).unwrap();
let data: Vec<u8> = data_encoding::BASE64URL_NOPAD
.decode(data.as_bytes())
.unwrap();
let writer: Option<veilid_core::KeyPair> =
writer.map(|s| veilid_core::deserialize_json(&s).unwrap());
wrap_api_future_json(async move {
let routing_context = {
@@ -599,7 +607,9 @@ pub fn routing_context_set_dht_value(id: u32, key: String, subkey: u32, data: St
};
routing_context.clone()
};
let res = routing_context.set_dht_value(key, subkey, data).await?;
let res = routing_context
.set_dht_value(key, subkey, data, writer)
.await?;
APIResult::Ok(res)
})
}

View File

@@ -285,12 +285,18 @@ impl VeilidRoutingContext {
key: String,
subKey: u32,
data: Box<[u8]>,
writer: Option<String>,
) -> APIResult<Option<ValueData>> {
let key = TypedKey::from_str(&key)?;
let data = data.into_vec();
let writer = writer
.map(|writer| KeyPair::from_str(&writer))
.map_or(APIResult::Ok(None), |r| r.map(Some))?;
let routing_context = self.getRoutingContext()?;
let res = routing_context.set_dht_value(key, subKey, data).await?;
let res = routing_context
.set_dht_value(key, subKey, data, writer)
.await?;
APIResult::Ok(res)
}

View File

@@ -4726,9 +4726,9 @@
}
},
"node_modules/ip": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
"integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
"dev": true
},
"node_modules/is-arguments": {
@@ -7836,9 +7836,9 @@
}
},
"node_modules/socks/node_modules/ip": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
"integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==",
"dev": true
},
"node_modules/source-map": {
@@ -8489,9 +8489,9 @@
"link": true
},
"node_modules/vite": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz",
"integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==",
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz",
"integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==",
"dev": true,
"dependencies": {
"esbuild": "^0.18.10",

View File

@@ -167,6 +167,31 @@ describe('VeilidRoutingContext', () => {
);
expect(setValueRes).toBeUndefined();
});
it('should open readonly record and specify writer during the set', async () => {
await routingContext.closeDhtRecord(dhtRecord.key);
const writeableDhtRecord = await routingContext.openDhtRecord(
dhtRecord.key,
);
expect(writeableDhtRecord).toBeDefined();
const setValueResFail = routingContext.setDhtValue(
dhtRecord.key,
0,
textEncoder.encode(`${data}👋`),
);
await expect(setValueResFail).rejects.toEqual({
kind: 'Generic',
message: 'value is not writable',
});
const setValueRes = await routingContext.setDhtValue(
dhtRecord.key,
0,
textEncoder.encode(`${data}👋`),
`${dhtRecord.owner}:${dhtRecord.owner_secret}`
);
expect(setValueRes).toBeUndefined();
});
});
});
});