feat(bindings/crypto-nodejs): Add #[napi(strict)] to force type checking from JavaScript (#829)

* feat(bindings/crypto-nodejs): Add `#[napi(strict)]` to force type checking from JavaScript.

* chore(bindings/crypto-nodejs): Use our own fork of `napi-rs` for the moment.
This commit is contained in:
Ivan Enderlin
2022-07-12 16:24:24 +02:00
committed by GitHub
parent 94b635c074
commit 0bde5ccf38
6 changed files with 21 additions and 21 deletions
+2 -2
View File
@@ -30,8 +30,8 @@ matrix-sdk-common = { version = "0.5.0", path = "../../crates/matrix-sdk-common"
matrix-sdk-sled = { version = "0.1.0", path = "../../crates/matrix-sdk-sled", default-features = false, features = ["crypto-store"] }
ruma = { git = "https://github.com/ruma/ruma", rev = "96155915f", features = ["client-api-c", "rand", "unstable-msc2676", "unstable-msc2677"] }
vodozemac = { git = "https://github.com/matrix-org/vodozemac/", rev = "2404f83f7d3a3779c1f518e4d949f7da9677c3dd" }
napi = { version = "2.6.1", default-features = false, features = ["napi6", "tokio_rt"] }
napi-derive = "2.6.0"
napi = { git = "https://github.com/Hywan/napi-rs", branch = "fix-napi-strict-on-t-and-ref-t", default-features = false, features = ["napi6", "tokio_rt"] }
napi-derive = { git = "https://github.com/Hywan/napi-rs", branch = "fix-napi-strict-on-t-and-ref-t" }
serde_json = "1.0.79"
http = "0.2.6"
zeroize = "1.3.0"
@@ -24,7 +24,7 @@ impl From<ruma::OwnedUserId> for UserId {
#[napi]
impl UserId {
/// Parse/validate and create a new `UserId`.
#[napi(constructor)]
#[napi(constructor, strict)]
pub fn new(id: String) -> napi::Result<Self> {
Ok(Self::from(ruma::UserId::parse(id.as_str()).map_err(into_err)?))
}
@@ -78,7 +78,7 @@ impl From<ruma::OwnedDeviceId> for DeviceId {
#[napi]
impl DeviceId {
/// Create a new `DeviceId`.
#[napi(constructor)]
#[napi(constructor, strict)]
pub fn new(id: String) -> Self {
Self::from(Into::<ruma::OwnedDeviceId>::into(id))
}
@@ -109,7 +109,7 @@ impl From<ruma::OwnedDeviceKeyId> for DeviceKeyId {
#[napi]
impl DeviceKeyId {
/// Parse/validate and create a new `DeviceKeyId`.
#[napi(constructor)]
#[napi(constructor, strict)]
pub fn new(id: String) -> napi::Result<Self> {
Ok(Self::from(ruma::DeviceKeyId::parse(id.as_str()).map_err(into_err)?))
}
@@ -212,7 +212,7 @@ impl From<ruma::OwnedRoomId> for RoomId {
#[napi]
impl RoomId {
/// Parse/validate and create a new `RoomId`.
#[napi(constructor)]
#[napi(constructor, strict)]
pub fn new(id: String) -> napi::Result<Self> {
Ok(Self::from(ruma::RoomId::parse(id).map_err(into_err)?))
}
@@ -252,7 +252,7 @@ pub struct ServerName {
#[napi]
impl ServerName {
/// Parse/validate and create a new `ServerName`.
#[napi(constructor)]
#[napi(constructor, strict)]
pub fn new(name: String) -> napi::Result<Self> {
Ok(Self { inner: ruma::ServerName::parse(name).map_err(into_err)? })
}
@@ -56,7 +56,7 @@ impl OlmMachine {
/// data at rest in the store. **Warning**, if no passphrase is given, the
/// store and all its data will remain unencrypted. This argument is
/// ignored if `store_path` is not set.
#[napi]
#[napi(strict)]
pub async fn initialize(
user_id: &identifiers::UserId,
device_id: &identifiers::DeviceId,
@@ -144,7 +144,7 @@ impl OlmMachine {
/// response.
/// * `one_time_keys_count`, the current one-time keys counts that the sync
/// response returned.
#[napi]
#[napi(strict)]
pub async fn receive_sync_changes(
&self,
to_device_events: String,
@@ -227,7 +227,7 @@ impl OlmMachine {
/// * `request_type`, the request type associated to the request ID.
/// * `response`, the response that was received from the server after the
/// outgoing request was sent out.
#[napi]
#[napi(strict)]
pub async fn mark_request_as_sent(
&self,
request_id: String,
@@ -272,7 +272,7 @@ impl OlmMachine {
/// * `users`, the list of users that we should check if we lack a session
/// with one of their devices. This can be an empty array or `null` when
/// calling this method between sync requests.
#[napi]
#[napi(strict)]
pub async fn get_missing_sessions(
&self,
users: Option<Vec<&identifiers::UserId>>,
@@ -312,7 +312,7 @@ impl OlmMachine {
/// # Arguments
///
/// * `users`, an array over user IDs that should be marked for tracking.
#[napi]
#[napi(strict)]
pub async fn update_tracked_users(&self, users: Vec<&identifiers::UserId>) {
let users = users.into_iter().map(|user| user.inner.clone()).collect::<Vec<_>>();
@@ -326,7 +326,7 @@ impl OlmMachine {
/// * `room_id`, the room ID of the room where the room key will be used.
/// * `users`, the list of users that should receive the room key.
/// * `encryption_settings`, the encryption settings.
#[napi]
#[napi(strict)]
pub async fn share_room_key(
&self,
room_id: &identifiers::RoomId,
@@ -357,7 +357,7 @@ impl OlmMachine {
/// * `event_type`, the plaintext type of the event.
/// * `content`, the JSON-encoded content of the message that should be
/// encrypted.
#[napi]
#[napi(strict)]
pub async fn encrypt_room_event(
&self,
room_id: &identifiers::RoomId,
@@ -383,7 +383,7 @@ impl OlmMachine {
///
/// * `event`, the event that should be decrypted.
/// * `room_id`, the ID of the room where the event was sent to.
#[napi]
#[napi(strict)]
pub async fn decrypt_room_event(
&self,
event: String,
@@ -409,7 +409,7 @@ impl OlmMachine {
/// Sign the given message using our device key and if available
/// cross-signing master key.
#[napi]
#[napi(strict)]
pub async fn sign(&self, message: String) -> types::Signatures {
self.inner.sign(message.as_str()).await.into()
}
@@ -13,7 +13,7 @@ pub struct DeviceLists {
#[napi]
impl DeviceLists {
/// Create an empty `DeviceLists`.
#[napi(constructor)]
#[napi(constructor, strict)]
pub fn new(
changed: Option<Vec<&identifiers::UserId>>,
left: Option<Vec<&identifiers::UserId>>,
@@ -29,7 +29,7 @@ impl Signatures {
/// Add the given signature from the given signer and the given key ID to
/// the collection.
#[napi]
#[napi(strict)]
pub fn add_signature(
&mut self,
signer: &UserId,
@@ -43,13 +43,13 @@ impl Signatures {
/// Try to find an Ed25519 signature from the given signer with
/// the given key ID.
#[napi]
#[napi(strict)]
pub fn get_signature(&self, signer: &UserId, key_id: &DeviceKeyId) -> Option<Ed25519Signature> {
self.inner.get_signature(signer.inner.as_ref(), key_id.inner.as_ref()).map(Into::into)
}
/// Get the map of signatures that belong to the given user.
#[napi]
#[napi(strict)]
pub fn get(&self, signer: &UserId) -> Option<HashMap<String, MaybeSignature>> {
self.inner.get(signer.inner.as_ref()).map(|map| {
map.iter()
@@ -42,7 +42,7 @@ impl From<vodozemac::Ed25519Signature> for Ed25519Signature {
impl Ed25519Signature {
/// Try to create an Ed25519 signature from an unpadded base64
/// representation.
#[napi(constructor)]
#[napi(constructor, strict)]
pub fn new(signature: String) -> napi::Result<Self> {
Ok(Self {
inner: vodozemac::Ed25519Signature::from_base64(signature.as_str())