diff --git a/keyserver/addons/rust-node-addon/index.js b/keyserver/addons/rust-node-addon/index.js index 5db55e7c8..0827bcf82 100644 --- a/keyserver/addons/rust-node-addon/index.js +++ b/keyserver/addons/rust-node-addon/index.js @@ -1,49 +1,39 @@ // @flow import invariant from 'invariant'; import { createRequire } from 'module'; +import type { RustNativeBindingAPI } from 'lib/types/rust-binding-types.js'; + const { platform, arch } = process; const importMetaURL = import.meta.url; invariant(importMetaURL, 'import.meta.url should be set'); const require = createRequire(importMetaURL); -type RustAPI = { - +registerUser: ( - userId: string, - deviceId: string, - username: string, - password: string, - userPublicKey: string, - ) => Promise, - +deleteUser: (userId: string) => Promise, -}; - -async function getRustAPI(): Promise { +async function getRustAPI(): Promise { let nativeBinding = null; if (platform === 'darwin' && arch === 'x64') { // $FlowFixMe nativeBinding = require('./napi/rust-node-addon.darwin-x64.node'); } else if (platform === 'darwin' && arch === 'arm64') { // $FlowFixMe nativeBinding = require('./napi/rust-node-addon.darwin-arm64.node'); } else if (platform === 'linux' && arch === 'x64') { // $FlowFixMe nativeBinding = require('./napi/rust-node-addon.linux-x64-gnu.node'); } else if (platform === 'linux' && arch === 'arm64') { // $FlowFixMe nativeBinding = require('./napi/rust-node-addon.linux-arm64-gnu.node'); } else { throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`); } if (!nativeBinding) { - throw new Error('Failed to load native binding'); + throw new Error('Failed to load Rust native binding'); } - const { registerUser, deleteUser } = nativeBinding; - return { registerUser, deleteUser }; + return nativeBinding; } export { getRustAPI }; diff --git a/lib/types/rust-binding-types.js b/lib/types/rust-binding-types.js new file mode 100644 index 000000000..debb832ee --- /dev/null +++ b/lib/types/rust-binding-types.js @@ -0,0 +1,28 @@ +// @flow + +type tunnelbrokerOnReceiveCallback = ( + err: Error | null, + payload: string, +) => mixed; + +declare class TunnelbrokerClientClass { + constructor( + deviceId: string, + onReceiveCallback: tunnelbrokerOnReceiveCallback, + ): TunnelbrokerClientClass; + publish(toDeviceId: string, payload: string): Promise; +} + +type RustNativeBindingAPI = { + +registerUser: ( + userId: string, + deviceId: string, + username: string, + password: string, + userPublicKey: string, + ) => Promise, + +deleteUser: (userId: string) => Promise, + +TunnelbrokerClient: Class, +}; + +export type { RustNativeBindingAPI };