mirror of
https://gitlab.com/veilid/veilid.git
synced 2025-02-25 18:55:38 -06:00
add writer to set_dht_value, allow multiple open_dht_record
This commit is contained in:
@@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
18
veilid-wasm/tests/package-lock.json
generated
18
veilid-wasm/tests/package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user