feat: add base methods

This commit is contained in:
Bloomingg
2023-12-06 20:04:34 +08:00
parent 7033508803
commit 9d20806d51
15 changed files with 1810 additions and 578 deletions

View File

@@ -1,12 +1,9 @@
# JavaScript/TypeScript Client SDK for OpenIM 👨‍💻💬 # Node/Electron Client SDK for OpenIM 👨‍💻💬
Use this SDK to add instant messaging capabilities to your application. By connecting to a self-hosted [OpenIM](https://www.openim.online/) server, you can quickly integrate instant messaging capabilities into your app with just a few lines of code. Use this SDK to add instant messaging capabilities to your application. By connecting to a self-hosted [OpenIM](https://www.openim.online/) server, you can quickly integrate instant messaging capabilities into your app with just a few lines of code.
The underlying SDK core is implemented in [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core). Using the [WebAssembly](https://webassembly.org/) support provided by Go language, it can be compiled into wasm for web integration. The web interacts with the [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core) through JSON, and the SDK exposes a re-encapsulated API for easy usage. In terms of data storage, JavaScript handles the logic of the SQL layer by virtualizing SQLite and storing it in IndexedDB using [sql.js](https://sql.js.org/). The underlying SDK core is implemented in [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core). Using the [WebAssembly](https://webassembly.org/) support provided by Go language, it can be compiled into wasm for web integration. The web interacts with the [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core) through JSON, and the SDK exposes a re-encapsulated API for easy usage. In terms of data storage, JavaScript handles the logic of the SQL layer by virtualizing SQLite and storing it in IndexedDB using [sql.js](https://sql.js.org/).
## Documentation 📚 ## Documentation 📚
Visit [https://doc.rentsoft.cn/](https://doc.rentsoft.cn/) for detailed documentation and guides. Visit [https://doc.rentsoft.cn/](https://doc.rentsoft.cn/) for detailed documentation and guides.
@@ -18,76 +15,9 @@ For the SDK reference, see [https://doc.rentsoft.cn/sdks/quickstart/browser](htt
### Adding Dependencies ### Adding Dependencies
```shell ```shell
npm install open-im-sdk-wasm --save npm install open-im-sdk-node --save
``` ```
### Obtaining Required Static Resources for WASM
Follow these steps to obtain the static resources required for WebAssembly (WASM):
1. Locate the `open-im-sdk-wasm` subdirectory in the `node_modules` directory of your project. Copy all the files in the `assets` folder to your project's public resource directory.
The files to be copied are:
- `openIM.wasm`
- `sql-wasm.wasm`
- `wasm_exec.js`
2. After copying the files, import the `wasm_exec.js` file in your `index.html` file using a `<script>` tag.
### Possible Issues ❗
#### For Webpack 5+
Add the following configuration to your Webpack configuration:
```js
resolve: {
fallback: {
fs: false,
path: false,
crypto: false,
},
},
```
#### For Webpack 4 or Vite
**Note:**
If you are using `Webpack 4`, you will also need to install the worker loader.
```shell
npm install worker-loader worker-plugin -D
```
Add the following configuration to your Webpack configuration:
```js
const WorkerPlugin = require("worker-plugin");
// ...
plugins: [new WorkerPlugin()],
// ...
```
Follow these steps:
1. Copy the `lib` directory from the npm package to your project (e.g., `src/utils/lib`).
2. Modify the import method of the web worker in the `lib/api/index.js` file.
```js
// For Webpack 4:
+ import IMWorker from 'worker-loader!./worker.js';
// For Vite:
+ import IMWorker from './worker?worker';
- worker = new Worker(new URL('./worker.js', import.meta.url));
+ worker = new IMWorker();
```
## Usage 🚀 ## Usage 🚀
The following examples demonstrate how to use the SDK. TypeScript is used, providing complete type hints. The following examples demonstrate how to use the SDK. TypeScript is used, providing complete type hints.
@@ -95,11 +25,9 @@ The following examples demonstrate how to use the SDK. TypeScript is used, provi
### Importing the SDK ### Importing the SDK
```typescript ```typescript
import { getSDK } from 'open-im-sdk-wasm'; import OpenIMSDK from 'open-im-sdk-node';
// or your own path after copying
// import { getSDK } from '@/utils/lib';
const OpenIM = getSDK(); const OpenIM = new OpenIMSDK();
``` ```
### Logging In and Listening for Connection Status ### Logging In and Listening for Connection Status

BIN
assets/libopenimsdk.dll Executable file

Binary file not shown.

BIN
assets/libopenimsdk.dylib Executable file

Binary file not shown.

70
package-lock.json generated
View File

@@ -1,15 +1,15 @@
{ {
"name": "openim-sdk-node", "name": "open-im-sdk-node",
"version": "1.0.0", "version": "1.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "openim-sdk-node", "name": "open-im-sdk-node",
"version": "1.0.0", "version": "1.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"ffi-napi": "^4.0.3", "@openim/ffi-napi": "^4.0.14",
"uuid": "^9.0.0" "uuid": "^9.0.0"
}, },
"devDependencies": { "devDependencies": {
@@ -1813,6 +1813,38 @@
"@octokit/openapi-types": "^18.0.0" "@octokit/openapi-types": "^18.0.0"
} }
}, },
"node_modules/@openim/ffi-napi": {
"version": "4.0.14",
"resolved": "https://registry.npmjs.org/@openim/ffi-napi/-/ffi-napi-4.0.14.tgz",
"integrity": "sha512-LuKBOFDuV+OKnZr33zaZGKvDgNiozGVg39S++HzywyULBn8vcigW6MGZEYhkx9P5GquAu+Kh+Bkvb2FFY6XRgA==",
"hasInstallScript": true,
"dependencies": {
"@openim/ref-napi": "^4.0.11",
"debug": "^4.1.1",
"get-uv-event-loop-napi-h": "^1.0.5",
"node-addon-api": "^3.2.1",
"node-gyp-build": "^4.5.0",
"ref-struct-di": "^1.1.0"
},
"engines": {
"node": ">=12.22.12"
}
},
"node_modules/@openim/ref-napi": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/@openim/ref-napi/-/ref-napi-4.0.11.tgz",
"integrity": "sha512-Rz/7M5et4AXBwoTB1Wsm6fNZPlgSs3UB8fxBv3KNZ30W2DYio4NRS3z0rcZgigMuyp/LDGZQjJvhyXCl6QSROg==",
"hasInstallScript": true,
"dependencies": {
"debug": "^4.3.4",
"get-symbol-from-current-process-h": "^1.0.2",
"node-addon-api": "^3.2.1",
"node-gyp-build": "^4.5.0"
},
"engines": {
"node": ">= 12.22.12"
}
},
"node_modules/@pnpm/config.env-replace": { "node_modules/@pnpm/config.env-replace": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
@@ -4227,23 +4259,6 @@
"bser": "2.1.1" "bser": "2.1.1"
} }
}, },
"node_modules/ffi-napi": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/ffi-napi/-/ffi-napi-4.0.3.tgz",
"integrity": "sha512-PMdLCIvDY9mS32RxZ0XGb95sonPRal8aqRhLbeEtWKZTe2A87qRFG9HjOhvG8EX2UmQw5XNRMIOT+1MYlWmdeg==",
"hasInstallScript": true,
"dependencies": {
"debug": "^4.1.1",
"get-uv-event-loop-napi-h": "^1.0.5",
"node-addon-api": "^3.0.0",
"node-gyp-build": "^4.2.1",
"ref-napi": "^2.0.1 || ^3.0.2",
"ref-struct-di": "^1.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/figures": { "node_modules/figures": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
@@ -10402,21 +10417,6 @@
"esprima": "~4.0.0" "esprima": "~4.0.0"
} }
}, },
"node_modules/ref-napi": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/ref-napi/-/ref-napi-3.0.3.tgz",
"integrity": "sha512-LiMq/XDGcgodTYOMppikEtJelWsKQERbLQsYm0IOOnzhwE9xYZC7x8txNnFC9wJNOkPferQI4vD4ZkC0mDyrOA==",
"hasInstallScript": true,
"dependencies": {
"debug": "^4.1.1",
"get-symbol-from-current-process-h": "^1.0.2",
"node-addon-api": "^3.0.0",
"node-gyp-build": "^4.2.1"
},
"engines": {
"node": ">= 10.0"
}
},
"node_modules/ref-struct-di": { "node_modules/ref-struct-di": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz",

View File

@@ -74,7 +74,7 @@
"*.ts": "eslint --cache --cache-location .eslintcache --fix" "*.ts": "eslint --cache --cache-location .eslintcache --fix"
}, },
"dependencies": { "dependencies": {
"uuid": "^9.0.0", "@openim/ffi-napi": "^4.0.14",
"ffi-napi": "^4.0.3" "uuid": "^9.0.0"
} }
} }

View File

@@ -1,5 +1,5 @@
import typescript from 'rollup-plugin-typescript2';
import alias from '@rollup/plugin-alias'; import alias from '@rollup/plugin-alias';
import typescript from 'rollup-plugin-typescript2';
export default [ export default [
{ {

View File

@@ -1,9 +1,9 @@
import ffi from 'ffi-napi'; import ffi from '@openim/ffi-napi';
import { v4 as uuidV4 } from 'uuid'; import { v4 as uuidV4 } from 'uuid';
import type { LibOpenIMSDK } from 'libOpenIMSDK'; import type { LibOpenIMSDK } from 'libOpenIMSDK';
import { UserModuleApi, setupUserModule } from './modules/user'; import { UserModuleApi, setupUserModule } from './modules/user';
import { InitConfig, LoginParams } from '@/types/params'; import { InitConfig, LoginParams } from '@/types/params';
import { BaseResponse, SelfUserInfo } from '@/types/entity'; import { BaseResponse, SelfUserInfo, EmitProxy } from '@/types/entity';
import { ErrorCode } from '@/constant/api'; import { ErrorCode } from '@/constant/api';
import { LoginStatus } from '@/types/enum'; import { LoginStatus } from '@/types/enum';
import { NativeEvent, eventMapping } from '@/constant/callback'; import { NativeEvent, eventMapping } from '@/constant/callback';
@@ -16,15 +16,9 @@ import {
} from './modules/conversation'; } from './modules/conversation';
import { type MessageModuleApi, setupMessageModule } from './modules/message'; import { type MessageModuleApi, setupMessageModule } from './modules/message';
const CB_I_S = ffi.Function('void', ['int', 'string']); function isObject(value: unknown) {
const CB_S_I_S_S = ffi.Function('void', ['string', 'int', 'string', 'string']); return Object.prototype.toString.call(value) === '[object Object]';
const CB_S_I_S_S_I = ffi.Function('void', [ }
'string',
'int',
'string',
'string',
'int',
]);
class OpenIMSDK class OpenIMSDK
extends Emitter extends Emitter
@@ -38,21 +32,22 @@ class OpenIMSDK
libOpenIMSDK: LibOpenIMSDK; libOpenIMSDK: LibOpenIMSDK;
listenerCallback: Buffer; listenerCallback: Buffer;
constructor(libPath: string) { constructor(libPath: string, emitProxy?: EmitProxy) {
super(); super();
this.libOpenIMSDK = ffi.Library(libPath, { this.libOpenIMSDK = ffi.Library(libPath, {
set_group_listener: ['void', [CB_I_S]], set_group_listener: ['void', ['pointer']],
set_conversation_listener: ['void', [CB_I_S]], set_conversation_listener: ['void', ['pointer']],
set_advanced_msg_listener: ['void', [CB_I_S]], set_advanced_msg_listener: ['void', ['pointer']],
set_batch_msg_listener: ['void', [CB_I_S]], set_batch_msg_listener: ['void', ['pointer']],
set_user_listener: ['void', [CB_I_S]], set_user_listener: ['void', ['pointer']],
set_friend_listener: ['void', [CB_I_S]], set_friend_listener: ['void', ['pointer']],
set_custom_business_listener: ['void', [CB_I_S]], set_custom_business_listener: ['void', ['pointer']],
init_sdk: ['uint8', [CB_I_S, 'string', 'string']], init_sdk: ['uint8', ['pointer', 'string', 'string']],
un_init_sdk: ['void', ['string']], un_init_sdk: ['void', ['string']],
login: ['void', [CB_S_I_S_S, 'string', 'string', 'string']], login: ['void', ['pointer', 'string', 'string', 'string']],
logout: ['void', [CB_S_I_S_S, 'string']], logout: ['void', ['pointer', 'string']],
network_status_changed: ['void', [CB_S_I_S_S, 'string']], set_app_background_status: ['void', ['pointer', 'string', 'int']],
network_status_changed: ['void', ['pointer', 'string']],
get_login_status: ['int', ['string']], get_login_status: ['int', ['string']],
get_login_user: ['string', []], get_login_user: ['string', []],
create_text_message: ['string', ['string', 'string']], create_text_message: ['string', ['string', 'string']],
@@ -91,7 +86,7 @@ class OpenIMSDK
create_image_message: ['string', ['string', 'string']], create_image_message: ['string', ['string', 'string']],
create_image_message_by_url: [ create_image_message_by_url: [
'string', 'string',
['string', 'string', 'string', 'string'], ['string', 'string', 'string', 'string', 'string'],
], ],
create_sound_message_by_url: ['string', ['string', 'string']], create_sound_message_by_url: ['string', ['string', 'string']],
create_sound_message: ['string', ['string', 'string', 'long long']], create_sound_message: ['string', ['string', 'string', 'long long']],
@@ -108,93 +103,178 @@ class OpenIMSDK
], ],
create_face_message: ['string', ['string', 'int', 'string']], create_face_message: ['string', ['string', 'int', 'string']],
create_forward_message: ['string', ['string', 'string']], create_forward_message: ['string', ['string', 'string']],
get_all_conversation_list: ['void', [CB_S_I_S_S, 'string']], get_all_conversation_list: ['void', ['pointer', 'string']],
get_advanced_history_message_list: [ get_conversation_list_split: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string'], ['pointer', 'string', 'int', 'int'],
],
get_one_conversation: ['void', ['pointer', 'string', 'int', 'string']],
get_multiple_conversation: ['void', ['pointer', 'string', 'string']],
set_conversation_msg_destruct_time: [
'void',
['pointer', 'string', 'string', 'long long'],
],
set_conversation_is_msg_destruct: [
'void',
['pointer', 'string', 'string', 'int'],
],
hide_conversation: ['void', ['pointer', 'string', 'string']],
get_conversation_recv_message_opt: [
'void',
['pointer', 'string', 'string'],
],
set_conversation_draft: [
'void',
['pointer', 'string', 'string', 'string'],
],
reset_conversation_group_at_type: [
'void',
['pointer', 'string', 'string'],
],
pin_conversation: ['void', ['pointer', 'string', 'string', 'int']],
set_conversation_private_chat: [
'void',
['pointer', 'string', 'string', 'int'],
],
set_conversation_burn_duration: [
'void',
['pointer', 'string', 'string', 'int'],
],
set_conversation_recv_message_opt: [
'void',
['pointer', 'string', 'string', 'int'],
],
get_total_unread_msg_count: ['void', ['pointer', 'string']],
get_at_all_tag: ['string', ['string']],
get_conversation_id_by_session_type: [
'string',
['string', 'string', 'int'],
], ],
send_message: [ send_message: [
'void', 'void',
[CB_S_I_S_S_I, 'string', 'string', 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string', 'string', 'string'],
], ],
send_message_not_oss: [
// User related functions 'void',
get_users_info: ['void', [CB_S_I_S_S, 'string', 'string']], ['pointer', 'string', 'string', 'string', 'string', 'string'],
get_users_info_from_srv: ['void', [CB_S_I_S_S, 'string', 'string']], ],
set_self_info: ['void', [CB_S_I_S_S, 'string', 'string']], find_message_list: ['void', ['pointer', 'string', 'string']],
get_self_user_info: ['void', [CB_S_I_S_S, 'string']], get_advanced_history_message_list: [
'void',
['pointer', 'string', 'string'],
],
get_advanced_history_message_list_reverse: [
'void',
['pointer', 'string', 'string'],
],
revoke_message: ['void', ['pointer', 'string', 'string', 'string']],
typing_status_update: ['void', ['pointer', 'string', 'string', 'string']],
mark_conversation_message_as_read: [
'void',
['pointer', 'string', 'string'],
],
delete_message_from_local_storage: [
'void',
['pointer', 'string', 'string', 'string'],
],
delete_message: ['void', ['pointer', 'string', 'string', 'string']],
hide_all_conversations: ['void', ['pointer', 'string']],
delete_all_msg_from_local_and_svr: ['void', ['pointer', 'string']],
delete_all_msg_from_local: ['void', ['pointer', 'string']],
clear_conversation_and_delete_all_msg: [
'void',
['pointer', 'string', 'string'],
],
delete_conversation_and_delete_all_msg: [
'void',
['pointer', 'string', 'string'],
],
insert_single_message_to_local_storage: [
'void',
['pointer', 'string', 'string', 'string', 'string'],
],
insert_group_message_to_local_storage: [
'void',
['pointer', 'string', 'string', 'string', 'string'],
],
search_local_messages: ['void', ['pointer', 'string', 'string']],
set_message_local_ex: [
'void',
['pointer', 'string', 'string', 'string', 'string'],
],
get_users_info: ['void', ['pointer', 'string', 'string']],
get_users_info_with_cache: [
'void',
['pointer', 'string', 'string', 'string'],
],
get_users_info_from_srv: ['void', ['pointer', 'string', 'string']],
set_self_info: ['void', ['pointer', 'string', 'string']],
set_global_recv_message_opt: ['void', ['pointer', 'string', 'int']],
get_self_user_info: ['void', ['pointer', 'string']],
update_msg_sender_info: [ update_msg_sender_info: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string'],
], ],
subscribe_users_status: ['void', [CB_S_I_S_S, 'string', 'string']], subscribe_users_status: ['void', ['pointer', 'string', 'string']],
unsubscribe_users_status: ['void', [CB_S_I_S_S, 'string', 'string']], unsubscribe_users_status: ['void', ['pointer', 'string', 'string']],
get_subscribe_users_status: ['void', [CB_S_I_S_S, 'string']], get_subscribe_users_status: ['void', ['pointer', 'string']],
get_user_status: ['void', [CB_S_I_S_S, 'string', 'string']], get_user_status: ['void', ['pointer', 'string', 'string']],
// Friend functions
// Friend related functions get_specified_friends_info: ['void', ['pointer', 'string', 'string']],
get_specified_friends_info: ['void', [CB_S_I_S_S, 'string', 'string']], get_friend_list: ['void', ['pointer', 'string']],
get_friend_list: ['void', [CB_S_I_S_S, 'string']], get_friend_list_page: ['void', ['pointer', 'string', 'int', 'int']],
get_friend_list_page: ['void', [CB_S_I_S_S, 'string', 'int', 'int']], search_friends: ['void', ['pointer', 'string', 'string']],
search_friends: ['void', [CB_S_I_S_S, 'string', 'string']], check_friend: ['void', ['pointer', 'string', 'string']],
check_friend: ['void', [CB_S_I_S_S, 'string', 'string']], add_friend: ['void', ['pointer', 'string', 'string']],
add_friend: ['void', [CB_S_I_S_S, 'string', 'string']], set_friend_remark: ['void', ['pointer', 'string', 'string']],
set_friend_remark: ['void', [CB_S_I_S_S, 'string', 'string']], delete_friend: ['void', ['pointer', 'string', 'string']],
delete_friend: ['void', [CB_S_I_S_S, 'string', 'string']], get_friend_application_list_as_recipient: ['void', ['pointer', 'string']],
get_friend_application_list_as_recipient: [ get_friend_application_list_as_applicant: ['void', ['pointer', 'string']],
'void', accept_friend_application: ['void', ['pointer', 'string', 'string']],
[CB_S_I_S_S, 'string'], refuse_friend_application: ['void', ['pointer', 'string', 'string']],
], add_black: ['void', ['pointer', 'string', 'string']],
get_friend_application_list_as_applicant: [ get_black_list: ['void', ['pointer', 'string']],
'void', remove_black: ['void', ['pointer', 'string', 'string']],
[CB_S_I_S_S, 'string'], // Group functions
], create_group: ['void', ['pointer', 'string', 'string']],
accept_friend_application: ['void', [CB_S_I_S_S, 'string', 'string']], join_group: ['void', ['pointer', 'string', 'string', 'string', 'int']],
refuse_friend_application: ['void', [CB_S_I_S_S, 'string', 'string']], quit_group: ['void', ['pointer', 'string', 'string']],
add_black: ['void', [CB_S_I_S_S, 'string', 'string']], dismiss_group: ['void', ['pointer', 'string', 'string']],
get_black_list: ['void', [CB_S_I_S_S, 'string']], change_group_mute: ['void', ['pointer', 'string', 'string', 'int']],
remove_black: ['void', [CB_S_I_S_S, 'string', 'string']],
// Group related functions
create_group: ['void', [CB_S_I_S_S, 'string', 'string']],
join_group: ['void', [CB_S_I_S_S, 'string', 'string', 'string', 'int']],
quit_group: ['void', [CB_S_I_S_S, 'string', 'string']],
dismiss_group: ['void', [CB_S_I_S_S, 'string', 'string']],
change_group_mute: ['void', [CB_S_I_S_S, 'string', 'string', 'int']],
change_group_member_mute: [ change_group_member_mute: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string', 'int'], ['pointer', 'string', 'string', 'string', 'int'],
], ],
set_group_member_role_level: [ set_group_member_role_level: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string', 'int'], ['pointer', 'string', 'string', 'string', 'int'],
], ],
set_group_member_info: ['void', [CB_S_I_S_S, 'string', 'string']], set_group_member_info: ['void', ['pointer', 'string', 'string']],
get_joined_group_list: ['void', [CB_S_I_S_S, 'string']], get_joined_group_list: ['void', ['pointer', 'string']],
get_specified_groups_info: ['void', [CB_S_I_S_S, 'string', 'string']], get_specified_groups_info: ['void', ['pointer', 'string', 'string']],
search_groups: ['void', [CB_S_I_S_S, 'string', 'string']], search_groups: ['void', ['pointer', 'string', 'string']],
set_group_info: ['void', [CB_S_I_S_S, 'string', 'string']], set_group_info: ['void', ['pointer', 'string', 'string']],
set_group_verification: ['void', [CB_S_I_S_S, 'string', 'string', 'int']], set_group_verification: ['void', ['pointer', 'string', 'string', 'int']],
set_group_look_member_info: [ set_group_look_member_info: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'int'], ['pointer', 'string', 'string', 'int'],
], ],
set_group_apply_member_friend: [ set_group_apply_member_friend: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'int'], ['pointer', 'string', 'string', 'int'],
], ],
get_group_member_list: [ get_group_member_list: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'int', 'int', 'int'], ['pointer', 'string', 'string', 'int', 'int', 'int'],
], ],
get_group_member_owner_and_admin: [ get_group_member_owner_and_admin: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string'], ['pointer', 'string', 'string'],
], ],
get_group_member_list_by_join_time_filter: [ get_group_member_list_by_join_time_filter: [
'void', 'void',
[ [
CB_S_I_S_S, 'pointer',
'string', 'string',
'string', 'string',
'int', 'int',
@@ -206,44 +286,43 @@ class OpenIMSDK
], ],
get_specified_group_members_info: [ get_specified_group_members_info: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string'],
], ],
kick_group_member: [ kick_group_member: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string', 'string'],
],
transfer_group_owner: [
'void',
[CB_S_I_S_S, 'string', 'string', 'string'],
], ],
transfer_group_owner: ['void', ['pointer', 'string', 'string', 'string']],
invite_user_to_group: [ invite_user_to_group: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string', 'string'],
], ],
get_group_application_list_as_recipient: ['void', [CB_S_I_S_S, 'string']], get_group_application_list_as_recipient: ['void', ['pointer', 'string']],
get_group_application_list_as_applicant: ['void', [CB_S_I_S_S, 'string']], get_group_application_list_as_applicant: ['void', ['pointer', 'string']],
accept_group_application: [ accept_group_application: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string', 'string'],
], ],
refuse_group_application: [ refuse_group_application: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string', 'string'],
], ],
set_group_member_nickname: [ set_group_member_nickname: [
'void', 'void',
[CB_S_I_S_S, 'string', 'string', 'string', 'string'], ['pointer', 'string', 'string', 'string', 'string'],
], ],
search_group_members: ['void', [CB_S_I_S_S, 'string', 'string']], search_group_members: ['void', ['pointer', 'string', 'string']],
is_join_group: ['void', [CB_S_I_S_S, 'string', 'string']], is_join_group: ['void', ['pointer', 'string', 'string']],
}) as LibOpenIMSDK; }) as LibOpenIMSDK;
// eslint-disable-next-line
const emitFn = emitProxy ?? this.emit;
this.listenerCallback = ffi.Callback( this.listenerCallback = ffi.Callback(
'void', 'void',
['int', 'string'], ['int', 'string'],
(event: NativeEvent, data) => { (event: NativeEvent, data) => {
const cbEvent = eventMapping[event]; const cbEvent = eventMapping[event];
this.emit(cbEvent, data); emitFn(cbEvent, this.generateEventResponse(data));
console.log(`listener callback - Event: ${cbEvent}, Data: ${data}`); console.log(`listener callback - Event: ${cbEvent}, Data: ${data}`);
} }
); );
@@ -255,6 +334,31 @@ class OpenIMSDK
Object.assign(this, setupMessageModule(this)); Object.assign(this, setupMessageModule(this));
} }
generateEventResponse = (data: unknown): BaseResponse => {
let errCode = 0;
let errMsg = '';
try {
data = JSON.parse(data as string);
} catch (error) {
// do nothing
}
// @ts-ignore
if (isObject(data) && data.errCode !== undefined) {
// @ts-ignore
errCode = data.errCode;
// @ts-ignore
errMsg = data.errMsg;
// @ts-ignore
data = data.data;
}
return {
errCode,
errMsg,
data,
operationID: '',
};
};
baseCallbackWrap = <T>( baseCallbackWrap = <T>(
resolve: (response: BaseResponse<T>) => void, resolve: (response: BaseResponse<T>) => void,
reject: (response: BaseResponse<T>) => void reject: (response: BaseResponse<T>) => void
@@ -358,8 +462,31 @@ class OpenIMSDK
this.libOpenIMSDK.un_init_sdk(`unInitSDK-${opid}`) this.libOpenIMSDK.un_init_sdk(`unInitSDK-${opid}`)
); );
setAppBackgroundStatus = (isInBackground: boolean, opid = uuidV4()) =>
new Promise<BaseResponse<void>>((resolve, reject) => {
this.libOpenIMSDK.set_app_background_status(
this.baseCallbackWrap<void>(resolve, reject),
opid,
isInBackground ? 1 : 0
);
});
networkStatusChanged = (opid = uuidV4()) =>
new Promise<BaseResponse<void>>((resolve, reject) => {
this.libOpenIMSDK.network_status_changed(
this.baseCallbackWrap<void>(resolve, reject),
opid
);
});
// implements user api // implements user api
getSelfUserInfo!: UserModuleApi['getSelfUserInfo']; getSelfUserInfo!: UserModuleApi['getSelfUserInfo'];
setSelfInfo!: UserModuleApi['setSelfInfo'];
getUsersInfoWithCache!: UserModuleApi['getUsersInfoWithCache'];
subscribeUsersStatus!: UserModuleApi['subscribeUsersStatus'];
unsubscribeUsersStatus!: UserModuleApi['unsubscribeUsersStatus'];
getSubscribeUsersStatus!: UserModuleApi['getSubscribeUsersStatus'];
setGlobalRecvMessageOpt!: UserModuleApi['setGlobalRecvMessageOpt'];
// implements friend api // implements friend api
acceptFriendApplication!: FriendModuleApi['acceptFriendApplication']; acceptFriendApplication!: FriendModuleApi['acceptFriendApplication'];
@@ -404,6 +531,22 @@ class OpenIMSDK
// implements conversation api // implements conversation api
getAllConversationList!: ConversationModuleApi['getAllConversationList']; getAllConversationList!: ConversationModuleApi['getAllConversationList'];
getConversationListSplit!: ConversationModuleApi['getConversationListSplit'];
getOneConversation!: ConversationModuleApi['getOneConversation'];
getMultipleConversation!: ConversationModuleApi['getMultipleConversation'];
getConversationIDBySessionType!: ConversationModuleApi['getConversationIDBySessionType'];
getTotalUnreadMsgCount!: ConversationModuleApi['getTotalUnreadMsgCount'];
markConversationMessageAsRead!: ConversationModuleApi['markConversationMessageAsRead'];
setConversationDraft!: ConversationModuleApi['setConversationDraft'];
pinConversation!: ConversationModuleApi['pinConversation'];
setConversationRecvMessageOpt!: ConversationModuleApi['setConversationRecvMessageOpt'];
setConversationPrivateChat!: ConversationModuleApi['setConversationPrivateChat'];
setConversationBurnDuration!: ConversationModuleApi['setConversationBurnDuration'];
resetConversationGroupAtType!: ConversationModuleApi['resetConversationGroupAtType'];
hideConversation!: ConversationModuleApi['hideConversation'];
hideAllConversation!: ConversationModuleApi['hideAllConversation'];
clearConversationAndDeleteAllMsg!: ConversationModuleApi['clearConversationAndDeleteAllMsg'];
deleteConversationAndDeleteAllMsg!: ConversationModuleApi['deleteConversationAndDeleteAllMsg'];
// implements message api // implements message api
createTextMessage!: MessageModuleApi['createTextMessage']; createTextMessage!: MessageModuleApi['createTextMessage'];
@@ -428,7 +571,20 @@ class OpenIMSDK
createFileMessageFromFullPath!: MessageModuleApi['createFileMessageFromFullPath']; createFileMessageFromFullPath!: MessageModuleApi['createFileMessageFromFullPath'];
createFileMessageByUrl!: MessageModuleApi['createFileMessageByUrl']; createFileMessageByUrl!: MessageModuleApi['createFileMessageByUrl'];
getAdvancedHistoryMessageList!: MessageModuleApi['getAdvancedHistoryMessageList']; getAdvancedHistoryMessageList!: MessageModuleApi['getAdvancedHistoryMessageList'];
getAdvancedHistoryMessageListReverse!: MessageModuleApi['getAdvancedHistoryMessageListReverse'];
sendMessage!: MessageModuleApi['sendMessage']; sendMessage!: MessageModuleApi['sendMessage'];
sendMessageNotOss!: MessageModuleApi['sendMessageNotOss'];
findMessageList!: MessageModuleApi['findMessageList'];
revokeMessage!: MessageModuleApi['revokeMessage'];
typingStatusUpdate!: MessageModuleApi['typingStatusUpdate'];
deleteMessageFromLocalStorage!: MessageModuleApi['deleteMessageFromLocalStorage'];
deleteMessage!: MessageModuleApi['deleteMessage'];
deleteAllMsgFromLocalAndSvr!: MessageModuleApi['deleteAllMsgFromLocalAndSvr'];
deleteAllMsgFromLocal!: MessageModuleApi['deleteAllMsgFromLocal'];
searchLocalMessages!: MessageModuleApi['searchLocalMessages'];
insertGroupMessageToLocalStorage!: MessageModuleApi['insertGroupMessageToLocalStorage'];
insertSingleMessageToLocalStorage!: MessageModuleApi['insertSingleMessageToLocalStorage'];
setMessageLocalEx!: MessageModuleApi['setMessageLocalEx'];
} }
export default OpenIMSDK; export default OpenIMSDK;

View File

@@ -1,174 +1,183 @@
import { v4 as uuidV4 } from 'uuid'; import { v4 as uuidV4 } from 'uuid';
import { BaseResponse, ConversationItem } from '@/types/entity'; import { BaseResponse, ConversationItem } from '@/types/entity';
import OpenIMSDK from '..'; import OpenIMSDK from '..';
import {
SplitConversationParams,
GetOneConversationParams,
SetConversationDraftParams,
PinConversationParams,
SetConversationRecvOptParams,
SetConversationPrivateParams,
SetBurnDurationParams,
} from '@/types/params';
export function setupConversationModule(openIMSDK: OpenIMSDK) { export function setupConversationModule(openIMSDK: OpenIMSDK) {
return { return {
// getAllConversationList: (opid = uuidV4()) => getAllConversationList: (opid = uuidV4()) =>
// new Promise<BaseResponse<ConversationItem[]>>((resolve, reject) => { new Promise<BaseResponse<ConversationItem[]>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.get_all_conversation_list( openIMSDK.libOpenIMSDK.get_all_conversation_list(
// openIMSDK.baseCallbackWrap<ConversationItem[]>(resolve, reject), openIMSDK.baseCallbackWrap<ConversationItem[]>(resolve, reject),
// opid opid
// ); );
// }), }),
// getConversationListSplit: ( getConversationListSplit: (
// params: SplitConversationParams, params: SplitConversationParams,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<ConversationItem[]>>((resolve, reject) => { new Promise<BaseResponse<ConversationItem[]>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.get_conversation_list_split( openIMSDK.libOpenIMSDK.get_conversation_list_split(
// openIMSDK.baseCallbackWrap<ConversationItem[]>(resolve, reject), openIMSDK.baseCallbackWrap<ConversationItem[]>(resolve, reject),
// opid, opid,
// params.offset, params.offset,
// params.count params.count
// ); );
// }), }),
// getOneConversation: (params: GetOneConversationParams, opid = uuidV4()) => getOneConversation: (params: GetOneConversationParams, opid = uuidV4()) =>
// new Promise<BaseResponse<ConversationItem>>((resolve, reject) => { new Promise<BaseResponse<ConversationItem>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.get_one_conversation( openIMSDK.libOpenIMSDK.get_one_conversation(
// openIMSDK.baseCallbackWrap<ConversationItem>(resolve, reject), openIMSDK.baseCallbackWrap<ConversationItem>(resolve, reject),
// opid, opid,
// params.sessionType, params.sessionType,
// params.sourceID params.sourceID
// ); );
// }), }),
// getMultipleConversation: (conversationIDList: string, opid = uuidV4()) => getMultipleConversation: (conversationIDList: string, opid = uuidV4()) =>
// new Promise<BaseResponse<ConversationItem[]>>((resolve, reject) => { new Promise<BaseResponse<ConversationItem[]>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.get_multiple_conversation( openIMSDK.libOpenIMSDK.get_multiple_conversation(
// openIMSDK.baseCallbackWrap<ConversationItem[]>(resolve, reject), openIMSDK.baseCallbackWrap<ConversationItem[]>(resolve, reject),
// opid, opid,
// conversationIDList conversationIDList
// ); );
// }), }),
// getConversationIDBySessionType: ( getConversationIDBySessionType: (
// params: GetOneConversationParams, params: GetOneConversationParams,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<ConversationItem>>((resolve, reject) => { openIMSDK.asyncRetunWrap<string>(
// openIMSDK.libOpenIMSDK.get_conversation_id_by_session_type( opid,
// openIMSDK.baseCallbackWrap<ConversationItem>(resolve, reject), openIMSDK.libOpenIMSDK.get_conversation_id_by_session_type(
// opid, opid,
// params.sourceID, params.sourceID,
// params.sessionType params.sessionType
// ); )
// }), ),
// getTotalUnreadMsgCount: (opid = uuidV4()) => getTotalUnreadMsgCount: (opid = uuidV4()) =>
// new Promise<BaseResponse<number>>((resolve, reject) => { new Promise<BaseResponse<number>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.get_total_unread_msg_count( openIMSDK.libOpenIMSDK.get_total_unread_msg_count(
// openIMSDK.baseCallbackWrap<number>(resolve, reject), openIMSDK.baseCallbackWrap<number>(resolve, reject),
// opid opid
// ); );
// }), }),
// markConversationMessageAsRead: (conversationID: string, opid = uuidV4()) => markConversationMessageAsRead: (conversationID: string, opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.mark_conversation_message_as_read( openIMSDK.libOpenIMSDK.mark_conversation_message_as_read(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// conversationID conversationID
// ); );
// }), }),
// setConversationDraft: ( setConversationDraft: (
// params: SetConversationDraftParams, params: SetConversationDraftParams,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.set_conversation_draft( openIMSDK.libOpenIMSDK.set_conversation_draft(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.conversationID, params.conversationID,
// params.draftText params.draftText
// ); );
// }), }),
// pinConversation: (params: PinConversationParams, opid = uuidV4()) => pinConversation: (params: PinConversationParams, opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.pin_conversation( openIMSDK.libOpenIMSDK.pin_conversation(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.conversationID, params.conversationID,
// params.isPinned ? 1 : 0 params.isPinned ? 1 : 0
// ); );
// }), }),
// setConversationRecvMessageOpt: ( setConversationRecvMessageOpt: (
// params: SetConversationRecvOptParams, params: SetConversationRecvOptParams,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.set_conversation_recv_message_opt( openIMSDK.libOpenIMSDK.set_conversation_recv_message_opt(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.conversationID, params.conversationID,
// params.opt params.opt
// ); );
// }), }),
// setConversationPrivateChat: ( setConversationPrivateChat: (
// params: SetConversationPrivateParams, params: SetConversationPrivateParams,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.set_conversation_private_chat( openIMSDK.libOpenIMSDK.set_conversation_private_chat(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.conversationID, params.conversationID,
// params.isPrivate params.isPrivate ? 1 : 0
// ); );
// }), }),
// setConversationBurnDuration: ( setConversationBurnDuration: (
// params: SetBurnDurationParams, params: SetBurnDurationParams,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.set_conversation_burn_duration( openIMSDK.libOpenIMSDK.set_conversation_burn_duration(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.conversationID, params.conversationID,
// params.burnDuration params.burnDuration
// ); );
// }), }),
// resetConversationGroupAtType: (groupID: string, opid = uuidV4()) => resetConversationGroupAtType: (groupID: string, opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.reset_conversation_group_at_type( openIMSDK.libOpenIMSDK.reset_conversation_group_at_type(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// groupID groupID
// ); );
// }), }),
// hideConversation: (conversationID: string, opid = uuidV4()) => hideConversation: (conversationID: string, opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.hide_conversation( openIMSDK.libOpenIMSDK.hide_conversation(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// conversationID conversationID
// ); );
// }), }),
// hideAllConversation: (opid = uuidV4()) => hideAllConversation: (opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.hide_all_conversation( openIMSDK.libOpenIMSDK.hide_all_conversations(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid opid
// ); );
// }), }),
// clearConversationAndDeleteAllMsg: ( clearConversationAndDeleteAllMsg: (
// conversationID: string, conversationID: string,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.clear_conversation_and_delete_all_msg( openIMSDK.libOpenIMSDK.clear_conversation_and_delete_all_msg(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// conversationID conversationID
// ); );
// }), }),
// deleteConversationAndDeleteAllMsg: ( deleteConversationAndDeleteAllMsg: (
// conversationID: string, conversationID: string,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.delete_conversation_and_delete_all_msg( openIMSDK.libOpenIMSDK.delete_conversation_and_delete_all_msg(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// conversationID conversationID
// ); );
// }), }),
}; };
} }
@@ -176,4 +185,62 @@ export interface ConversationModuleApi {
getAllConversationList: ( getAllConversationList: (
opid?: string opid?: string
) => Promise<BaseResponse<ConversationItem[]>>; ) => Promise<BaseResponse<ConversationItem[]>>;
getConversationListSplit: (
params: SplitConversationParams,
opid?: string
) => Promise<BaseResponse<ConversationItem[]>>;
getOneConversation: (
params: GetOneConversationParams,
opid?: string
) => Promise<BaseResponse<ConversationItem>>;
getMultipleConversation: (
conversationIDList: string,
opid?: string
) => Promise<BaseResponse<ConversationItem[]>>;
getConversationIDBySessionType: (
params: GetOneConversationParams,
opid?: string
) => Promise<BaseResponse<string>>;
getTotalUnreadMsgCount: (opid?: string) => Promise<BaseResponse<number>>;
markConversationMessageAsRead: (
conversationID: string,
opid?: string
) => Promise<BaseResponse<void>>;
setConversationDraft: (
params: SetConversationDraftParams,
opid?: string
) => Promise<BaseResponse<void>>;
pinConversation: (
params: PinConversationParams,
opid?: string
) => Promise<BaseResponse<void>>;
setConversationRecvMessageOpt: (
params: SetConversationRecvOptParams,
opid?: string
) => Promise<BaseResponse<void>>;
setConversationPrivateChat: (
params: SetConversationPrivateParams,
opid?: string
) => Promise<BaseResponse<void>>;
setConversationBurnDuration: (
params: SetBurnDurationParams,
opid?: string
) => Promise<BaseResponse<void>>;
resetConversationGroupAtType: (
groupID: string,
opid?: string
) => Promise<BaseResponse<void>>;
hideConversation: (
conversationID: string,
opid?: string
) => Promise<BaseResponse<void>>;
hideAllConversation: (opid?: string) => Promise<BaseResponse<void>>;
clearConversationAndDeleteAllMsg: (
conversationID: string,
opid?: string
) => Promise<BaseResponse<void>>;
deleteConversationAndDeleteAllMsg: (
conversationID: string,
opid?: string
) => Promise<BaseResponse<void>>;
} }

View File

@@ -4,6 +4,7 @@ import {
AccessFriendParams, AccessFriendParams,
SearchFriendParams, SearchFriendParams,
RemarkFriendParams, RemarkFriendParams,
AddFriendParams,
} from '@/types/params'; } from '@/types/params';
import { import {
@@ -35,12 +36,12 @@ export function setupFriendModule(openIMSDK: OpenIMSDK) {
); );
}), }),
addFriend: (userID: string, opid = uuidV4()) => addFriend: (params: AddFriendParams, opid = uuidV4()) =>
new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
openIMSDK.libOpenIMSDK.add_friend( openIMSDK.libOpenIMSDK.add_friend(
openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
opid, opid,
userID JSON.stringify(params)
); );
}), }),

View File

@@ -12,14 +12,21 @@ import {
FaceMessageParams, FaceMessageParams,
FileMsgByPathParams, FileMsgByPathParams,
FileMsgByUrlParams, FileMsgByUrlParams,
FindMessageParams,
GetAdvancedHistoryMsgParams, GetAdvancedHistoryMsgParams,
ImageMsgByUrlParams, ImageMsgByUrlParams,
InsertGroupMsgParams,
InsertSingleMsgParams,
LocationMsgParams, LocationMsgParams,
MergerMsgParams, MergerMsgParams,
OpreateMessageParams,
QuoteMsgParams, QuoteMsgParams,
SearchLocalParams,
SendMsgParams, SendMsgParams,
SetMessageLocalExParams,
SoundMsgByPathParams, SoundMsgByPathParams,
SoundMsgByUrlParams, SoundMsgByUrlParams,
TypingUpdateParams,
VideoMsgByPathParams, VideoMsgByPathParams,
VideoMsgByUrlParams, VideoMsgByUrlParams,
} from '@/types/params'; } from '@/types/params';
@@ -132,6 +139,7 @@ export function setupMessageModule(openIMSDK: OpenIMSDK) {
opid, opid,
openIMSDK.libOpenIMSDK.create_image_message_by_url( openIMSDK.libOpenIMSDK.create_image_message_by_url(
opid, opid,
params.sourcePath,
JSON.stringify(params.sourcePicture), JSON.stringify(params.sourcePicture),
JSON.stringify(params.bigPicture), JSON.stringify(params.bigPicture),
JSON.stringify(params.snapshotPicture) JSON.stringify(params.snapshotPicture)
@@ -257,89 +265,92 @@ export function setupMessageModule(openIMSDK: OpenIMSDK) {
); );
}), }),
// sendMessageNotOss: (params: SendMsgParams, opid = uuidV4()) => sendMessageNotOss: (params: SendMsgParams, opid = uuidV4()) =>
// new Promise<BaseResponse<MessageItem>>((resolve, reject) => { new Promise<BaseResponse<MessageItem>>((resolve, reject) => {
// const offlinePushInfo = params.offlinePushInfo ?? { const offlinePushInfo = params.offlinePushInfo ?? {
// title: 'You has a new message.', title: 'You has a new message.',
// desc: 'You has a new message.', desc: 'You has a new message.',
// ex: '', ex: '',
// iOSPushSound: '+1', iOSPushSound: '+1',
// iOSBadgeCount: true, iOSBadgeCount: true,
// }; };
// openIMSDK.libOpenIMSDK.send_message_not_oss( openIMSDK.libOpenIMSDK.send_message_not_oss(
// openIMSDK.baseCallbackWrap<MessageItem>(resolve, reject), openIMSDK.baseCallbackWrap<MessageItem>(resolve, reject),
// opid, opid,
// JSON.stringify(params.message), JSON.stringify(params.message),
// params.recvID, params.recvID,
// params.groupID, params.groupID,
// JSON.stringify(offlinePushInfo) JSON.stringify(offlinePushInfo)
// ); );
// }), }),
// typingStatusUpdate: (params: TypingUpdateParams, opid = uuidV4()) => typingStatusUpdate: (params: TypingUpdateParams, opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.typing_status_update( openIMSDK.libOpenIMSDK.typing_status_update(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.recvID, params.recvID,
// params.msgTip params.msgTip
// ); );
// }), }),
// revokeMessage: (params: OpreateMessageParams, opid = uuidV4()) => revokeMessage: (params: OpreateMessageParams, opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.revoke_message( openIMSDK.libOpenIMSDK.revoke_message(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.conversationID, params.conversationID,
// params.clientMsgID params.clientMsgID
// ); );
// }), }),
// deleteMessage: (params: OpreateMessageParams, opid = uuidV4()) => deleteMessage: (params: OpreateMessageParams, opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.delete_message( openIMSDK.libOpenIMSDK.delete_message(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// params.conversationID, params.conversationID,
// params.clientMsgID params.clientMsgID
// ); );
// }), }),
// deleteMessageFromLocalStorage: (params: OpreateMessageParams, opid = uuidV4()) => deleteMessageFromLocalStorage: (
// new Promise<BaseResponse<void>>((resolve, reject) => { params: OpreateMessageParams,
// openIMSDK.libOpenIMSDK.delete_message_from_local_storage( opid = uuidV4()
// openIMSDK.baseCallbackWrap<void>(resolve, reject), ) =>
// opid, new Promise<BaseResponse<void>>((resolve, reject) => {
// params.conversationID, openIMSDK.libOpenIMSDK.delete_message_from_local_storage(
// params.clientMsgID openIMSDK.baseCallbackWrap<void>(resolve, reject),
// ); opid,
// }), params.conversationID,
params.clientMsgID
);
}),
// deleteAllMsgFromLocal: (opid = uuidV4()) => deleteAllMsgFromLocal: (opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.delete_all_msg_from_local( openIMSDK.libOpenIMSDK.delete_all_msg_from_local(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid
// ); );
// }), }),
// deleteAllMsgFromLocalAndSvr: (opid = uuidV4()) => deleteAllMsgFromLocalAndSvr: (opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.delete_all_msg_from_local_and_svr( openIMSDK.libOpenIMSDK.delete_all_msg_from_local_and_svr(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid
// ); );
// }), }),
// searchLocalMessages: (params: SearchLocalParams, opid = uuidV4()) => searchLocalMessages: (params: SearchLocalParams, opid = uuidV4()) =>
// new Promise<BaseResponse<MessageItem[]>>((resolve, reject) => { new Promise<BaseResponse<MessageItem[]>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.search_local_messages( openIMSDK.libOpenIMSDK.search_local_messages(
// openIMSDK.baseCallbackWrap<MessageItem[]>(resolve, reject), openIMSDK.baseCallbackWrap<MessageItem[]>(resolve, reject),
// opid, opid,
// JSON.stringify(params) JSON.stringify(params)
// ); );
// }), }),
getAdvancedHistoryMessageList: ( getAdvancedHistoryMessageList: (
params: GetAdvancedHistoryMsgParams, params: GetAdvancedHistoryMsgParams,
@@ -353,54 +364,61 @@ export function setupMessageModule(openIMSDK: OpenIMSDK) {
); );
}), }),
// getAdvancedHistoryMessageListReverse: ( getAdvancedHistoryMessageListReverse: (
// params: GetAdvancedHistoryMsgParams, opid = uuidV4() params: GetAdvancedHistoryMsgParams,
// ) => opid = uuidV4()
// new Promise<BaseResponse<AdvancedGetMessageResult>>((resolve, reject) => { ) =>
// openIMSDK.libOpenIMSDK.get_advanced_history_message_list_reverse( new Promise<BaseResponse<AdvancedGetMessageResult>>((resolve, reject) => {
// openIMSDK.baseCallbackWrap<AdvancedGetMessageResult>(resolve, reject), openIMSDK.libOpenIMSDK.get_advanced_history_message_list_reverse(
// opid, openIMSDK.baseCallbackWrap<AdvancedGetMessageResult>(resolve, reject),
// JSON.stringify(params) opid,
// ); JSON.stringify(params)
// }), );
// findMessageList: (params: FindMessageParams[], opid = uuidV4()) => }),
// new Promise<BaseResponse<MessageItem[]>>((resolve, reject) => { findMessageList: (params: FindMessageParams[], opid = uuidV4()) =>
// openIMSDK.libOpenIMSDK.find_message_list( new Promise<BaseResponse<MessageItem[]>>((resolve, reject) => {
// openIMSDK.baseCallbackWrap<MessageItem[]>(resolve, reject), openIMSDK.libOpenIMSDK.find_message_list(
// opid, openIMSDK.baseCallbackWrap<MessageItem[]>(resolve, reject),
// JSON.stringify(params) opid,
// ); JSON.stringify(params)
// }), );
// insertGroupMessageToLocalStorage: (params: InsertGroupMsgParams, opid = uuidV4()) => }),
// new Promise<BaseResponse<void>>((resolve, reject) => { insertGroupMessageToLocalStorage: (
// openIMSDK.libOpenIMSDK.insert_group_message_to_local_storage( params: InsertGroupMsgParams,
// openIMSDK.baseCallbackWrap<void>(resolve, reject), opid = uuidV4()
// opid, ) =>
// JSON.stringify(params.message), new Promise<BaseResponse<void>>((resolve, reject) => {
// params.groupID, openIMSDK.libOpenIMSDK.insert_group_message_to_local_storage(
// params.sendID openIMSDK.baseCallbackWrap<void>(resolve, reject),
// ); opid,
// }), JSON.stringify(params.message),
// insertSingleMessageToLocalStorage: (params: InsertSingleMsgParams, opid = uuidV4()) => params.groupID,
// new Promise<BaseResponse<void>>((resolve, reject) => { params.sendID
// openIMSDK.libOpenIMSDK.insert_single_message_to_local_storage( );
// openIMSDK.baseCallbackWrap<void>(resolve, reject), }),
// opid, insertSingleMessageToLocalStorage: (
// JSON.stringify(params.message), params: InsertSingleMsgParams,
// params.recvID, opid = uuidV4()
// params.sendID ) =>
// ); new Promise<BaseResponse<void>>((resolve, reject) => {
// }), openIMSDK.libOpenIMSDK.insert_single_message_to_local_storage(
// setMessageLocalEx: (params: SetMessageLocalExParams, opid = uuidV4()) => openIMSDK.baseCallbackWrap<void>(resolve, reject),
// new Promise<BaseResponse<void>>((resolve, reject) => { opid,
// openIMSDK.libOpenIMSDK.set_message_local_ex( JSON.stringify(params.message),
// openIMSDK.baseCallbackWrap<void>(resolve, reject), params.recvID,
// opid, params.sendID
// params.conversationID, );
// params.clientMsgID, }),
// params.localEx setMessageLocalEx: (params: SetMessageLocalExParams, opid = uuidV4()) =>
// ); new Promise<BaseResponse<void>>((resolve, reject) => {
// }), openIMSDK.libOpenIMSDK.set_message_local_ex(
openIMSDK.baseCallbackWrap<void>(resolve, reject),
opid,
params.conversationID,
params.clientMsgID,
params.localEx
);
}),
}; };
} }
@@ -489,12 +507,58 @@ export interface MessageModuleApi {
params: FileMsgByUrlParams, params: FileMsgByUrlParams,
opid?: string opid?: string
) => Promise<BaseResponse<MessageItem>>; ) => Promise<BaseResponse<MessageItem>>;
getAdvancedHistoryMessageList: (
params: GetAdvancedHistoryMsgParams,
opid?: string
) => Promise<BaseResponse<AdvancedGetMessageResult>>;
sendMessage: ( sendMessage: (
params: SendMsgParams, params: SendMsgParams,
opid?: string opid?: string
) => Promise<BaseResponse<MessageItem>>; ) => Promise<BaseResponse<MessageItem>>;
sendMessageNotOss: (
params: SendMsgParams,
opid?: string
) => Promise<BaseResponse<MessageItem>>;
typingStatusUpdate: (
params: TypingUpdateParams,
opid?: string
) => Promise<BaseResponse<void>>;
revokeMessage: (
params: OpreateMessageParams,
opid?: string
) => Promise<BaseResponse<void>>;
deleteMessage: (
params: OpreateMessageParams,
opid?: string
) => Promise<BaseResponse<void>>;
deleteMessageFromLocalStorage: (
params: OpreateMessageParams,
opid?: string
) => Promise<BaseResponse<void>>;
deleteAllMsgFromLocal: (opid?: string) => Promise<BaseResponse<void>>;
deleteAllMsgFromLocalAndSvr: (opid?: string) => Promise<BaseResponse<void>>;
searchLocalMessages: (
params: SearchLocalParams,
opid?: string
) => Promise<BaseResponse<MessageItem[]>>;
getAdvancedHistoryMessageList: (
params: GetAdvancedHistoryMsgParams,
opid?: string
) => Promise<BaseResponse<AdvancedGetMessageResult>>;
getAdvancedHistoryMessageListReverse: (
params: GetAdvancedHistoryMsgParams,
opid?: string
) => Promise<BaseResponse<AdvancedGetMessageResult>>;
findMessageList: (
params: FindMessageParams[],
opid?: string
) => Promise<BaseResponse<MessageItem[]>>;
insertGroupMessageToLocalStorage: (
params: InsertGroupMsgParams,
opid?: string
) => Promise<BaseResponse<void>>;
insertSingleMessageToLocalStorage: (
params: InsertSingleMsgParams,
opid?: string
) => Promise<BaseResponse<void>>;
setMessageLocalEx: (
params: SetMessageLocalExParams,
opid?: string
) => Promise<BaseResponse<void>>;
} }

View File

@@ -1,7 +1,13 @@
import { v4 as uuidV4 } from 'uuid'; import { v4 as uuidV4 } from 'uuid';
import { BaseResponse, SelfUserInfo } from '@/types/entity'; import {
BaseResponse,
FullUserItemWithCache,
SelfUserInfo,
UserOnlineState,
} from '@/types/entity';
import OpenIMSDK from '..'; import OpenIMSDK from '..';
import { SetSelfInfoParams } from '@/types/params'; import { GetUserInfoWithCacheParams, SetSelfInfoParams } from '@/types/params';
import { MessageReceiveOptType } from '@/types/enum';
export function setupUserModule(openIMSDK: OpenIMSDK) { export function setupUserModule(openIMSDK: OpenIMSDK) {
return { return {
@@ -22,65 +28,82 @@ export function setupUserModule(openIMSDK: OpenIMSDK) {
); );
}), }),
// getUsersInfoWithCache: ( getUsersInfoWithCache: (
// params: GetUserInfoWithCacheParams, params: GetUserInfoWithCacheParams,
// opid = uuidV4() opid = uuidV4()
// ) => ) =>
// new Promise<BaseResponse<FullUserItemWithCache[]>>((resolve, reject) => { new Promise<BaseResponse<FullUserItemWithCache[]>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.get_users_info_with_cache( openIMSDK.libOpenIMSDK.get_users_info_with_cache(
// openIMSDK.baseCallbackWrap<FullUserItemWithCache[]>(resolve, reject), openIMSDK.baseCallbackWrap<FullUserItemWithCache[]>(resolve, reject),
// opid, opid,
// JSON.stringify(params.userIDList), JSON.stringify(params.userIDList),
// params.groupID ?? '' params.groupID ?? ''
// ); );
// }), }),
// subscribeUsersStatus: (userIDList: string[], opid = uuidV4()) => subscribeUsersStatus: (userIDList: string[], opid = uuidV4()) =>
// new Promise<BaseResponse<UserOnlineState>>((resolve, reject) => { new Promise<BaseResponse<UserOnlineState>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.subscribe_users_status( openIMSDK.libOpenIMSDK.subscribe_users_status(
// openIMSDK.baseCallbackWrap<UserOnlineState>(resolve, reject), openIMSDK.baseCallbackWrap<UserOnlineState>(resolve, reject),
// opid, opid,
// JSON.stringify(userIDList) JSON.stringify(userIDList)
// ); );
// }), }),
// unsubscribeUsersStatus: (userIDList: string[], opid = uuidV4()) => unsubscribeUsersStatus: (userIDList: string[], opid = uuidV4()) =>
// new Promise<BaseResponse<void>>((resolve, reject) => { new Promise<BaseResponse<void>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.unsubscribe_users_status( openIMSDK.libOpenIMSDK.unsubscribe_users_status(
// openIMSDK.baseCallbackWrap<void>(resolve, reject), openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid, opid,
// JSON.stringify(userIDList) JSON.stringify(userIDList)
// ); );
// }), }),
// getSubscribeUsersStatus: (opid = uuidV4()) => getSubscribeUsersStatus: (opid = uuidV4()) =>
// new Promise<BaseResponse<UserOnlineState[]>>((resolve, reject) => { new Promise<BaseResponse<UserOnlineState[]>>((resolve, reject) => {
// openIMSDK.libOpenIMSDK.get_subscribe_users_status( openIMSDK.libOpenIMSDK.get_subscribe_users_status(
// openIMSDK.baseCallbackWrap<UserOnlineState[]>(resolve, reject), openIMSDK.baseCallbackWrap<UserOnlineState[]>(resolve, reject),
// opid opid
// ); );
// }), }),
// setAppBackgroundStatus: (isInBackground: boolean, opid = uuidV4()) => setGlobalRecvMessageOpt: (
// new Promise<BaseResponse<void>>((resolve, reject) => { msgReceiveOptType: MessageReceiveOptType,
// openIMSDK.libOpenIMSDK.set_app_background_status( opid = uuidV4()
// openIMSDK.baseCallbackWrap<void>(resolve, reject), ) =>
// opid, new Promise<BaseResponse<void>>((resolve, reject) => {
// isInBackground openIMSDK.libOpenIMSDK.set_global_recv_message_opt(
// ); openIMSDK.baseCallbackWrap<void>(resolve, reject),
// }), opid,
msgReceiveOptType
// setGlobalRecvMessageOpt: (msgReceiveOptType: MessageReceiveOptType, opid = uuidV4()) => );
// new Promise<BaseResponse<void>>((resolve, reject) => { }),
// openIMSDK.libOpenIMSDK.set_global_recv_message_opt(
// openIMSDK.baseCallbackWrap<void>(resolve, reject),
// opid,
// msgReceiveOptType
// );
// }),
}; };
} }
export interface UserModuleApi { export interface UserModuleApi {
getSelfUserInfo: (opid?: string) => Promise<BaseResponse<SelfUserInfo>>; getSelfUserInfo: (opid?: string) => Promise<BaseResponse<SelfUserInfo>>;
setSelfInfo: (
params: SetSelfInfoParams,
opid?: string
) => Promise<BaseResponse<void>>;
getUsersInfoWithCache: (
params: GetUserInfoWithCacheParams,
opid?: string
) => Promise<BaseResponse<FullUserItemWithCache[]>>;
subscribeUsersStatus: (
userIDList: string[],
opid?: string
) => Promise<BaseResponse<UserOnlineState>>;
unsubscribeUsersStatus: (
userIDList: string[],
opid?: string
) => Promise<BaseResponse<void>>;
getSubscribeUsersStatus: (
opid?: string
) => Promise<BaseResponse<UserOnlineState[]>>;
setGlobalRecvMessageOpt: (
msgReceiveOptType: MessageReceiveOptType,
opid?: string
) => Promise<BaseResponse<void>>;
} }

View File

@@ -1,3 +1,4 @@
import { CbEvents } from '@/constant/callback';
import { import {
GroupType, GroupType,
ApplicationHandleResult, ApplicationHandleResult,
@@ -16,6 +17,8 @@ import {
OnlineState, OnlineState,
} from './enum'; } from './enum';
export type EmitProxy = (event: CbEvents, ...args: any[]) => void;
export type BaseCallbackWrap = <T>( export type BaseCallbackWrap = <T>(
resolve: (response: BaseResponse<T>) => void, resolve: (response: BaseResponse<T>) => void,
reject: (response: BaseResponse<T>) => void reject: (response: BaseResponse<T>) => void

792
src/types/ffi-napi.d.ts vendored Normal file
View File

@@ -0,0 +1,792 @@
/* eslint-disable @typescript-eslint/ban-types */
/// <reference types="node" />
declare module '@openim/ffi-napi' {
import ref = require('ref-napi');
import ref_struct = require('ref-struct-di');
import StructType = ref_struct.StructType;
/**
* This is a marker type that causes TypeScript to use string literal inference when inferring a generic from an array of {@link ref.TypeLike}.
*/
export type ArgTypesInferenceMarker = ['void'];
export interface LibraryFunctionOptions {
abi?: number | undefined;
async?: boolean | undefined;
varargs?: boolean | undefined;
}
/**
* Base constraint for an object-based library type definition.
*/
export type LibraryObjectDefinitionBase = Record<
string,
[
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
opts?: LibraryFunctionOptions
]
>;
/**
* This is a marker type that causes TypeScript to use string literal inference when inferring a generic from {@link LibraryObjectDefinitionBase}.
* If it is not used, `new Library(..., { x: ["int", ["int"]] })` will be inferred as `new Library<{ x: [string, string[]] }>(...)` instead of `new UnionType<{ x: ["int", ["int"]] }>(...)`.
*/
export type LibraryObjectDefinitionInferenceMarker = Record<
string,
[retType: 'void', argTypes: ArgTypesInferenceMarker]
>;
/**
* Converts a {@link LibraryObjectDefinitionBase} into a consistent subtype of {@link LibraryDefinitionBase}. If `any` is used, it is passed along
* to be interpreted to use a fallback definition for a union.
*/
export type LibraryObjectDefinitionToLibraryDefinition<
T extends LibraryObjectDefinitionBase
> = [T] extends [never] | [0]
? any // catches T extends never/any (since `0` doesn't overlap with our constraint)
: {
[P in keyof T]: [
retType: ref.CoerceType<T[P][0]>,
argTypes: ref.CoerceTypes<T[P][1]>,
opts: T[P][2]
];
};
/**
* Base constraint for a consistent library type definition.
*/
export type LibraryDefinitionBase = Record<
string,
[
retType: ref.Type,
argTypes: ref.Type[],
opts: LibraryFunctionOptions | undefined
]
>;
/**
* Represents a {@link Library} instance created from a {@link LibraryDefinitionBase}.
*/
export type LibraryObject<T extends LibraryDefinitionBase> = [T] extends
| [never]
| [0]
? any // catches T extends never/any (since `0` doesn't overlap with our constraint)
: {
[P in keyof T]: T[P][2] extends undefined
? ForeignFunction<
ref.UnderlyingType<T[P][0]>,
ref.UnderlyingTypes<T[P][1]>
>
: T[P][2] extends { varargs: true }
? VariadicForeignFunction<T[P][0], T[P][1]>
: T[P][2] extends { async: true }
? ForeignFunction<
ref.UnderlyingType<T[P][0]>,
ref.UnderlyingTypes<T[P][1]>
>['async']
: ForeignFunction<
ref.UnderlyingType<T[P][0]>,
ref.UnderlyingTypes<T[P][1]>
>;
};
/** Provides a friendly API on-top of `DynamicLibrary` and `ForeignFunction`. */
export interface Library {
/** The extension to use on libraries. */
EXT: string;
/**
* @param libFile name of library
* @param funcs hash of [retType, [...argType], opts?: {abi?, async?, varargs?}]
* @param lib hash that will be extended
*/
new <
TDefinition extends
| LibraryObjectDefinitionBase
| LibraryObjectDefinitionInferenceMarker,
T
>(
libFile: string | null,
funcs: TDefinition,
lib: T
): T &
LibraryObject<LibraryObjectDefinitionToLibraryDefinition<TDefinition>>;
/**
* @param libFile name of library
* @param funcs hash of [retType, [...argType], opts?: {abi?, async?, varargs?}]
* @param lib hash that will be extended
*/
new <
TDefinition extends
| LibraryObjectDefinitionBase
| LibraryObjectDefinitionInferenceMarker
>(
libFile: string | null,
funcs: TDefinition,
lib?: object
): LibraryObject<LibraryObjectDefinitionToLibraryDefinition<TDefinition>>;
/**
* @param libFile name of library
* @param funcs hash of [retType, [...argType], opts?: {abi?, async?, varargs?}]
* @param lib hash that will be extended
*/
new (
libFile: string | null,
funcs?: Record<
string,
[
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
opts?: LibraryFunctionOptions
]
>,
lib?: object
): any;
/**
* @param libFile name of library
* @param funcs hash of [retType, [...argType], opts?: {abi?, async?, varargs?}]
* @param lib hash that will be extended
*/
<
TDefinition extends
| LibraryObjectDefinitionBase
| LibraryObjectDefinitionInferenceMarker,
T
>(
libFile: string | null,
funcs: TDefinition,
lib: T
): T &
LibraryObject<LibraryObjectDefinitionToLibraryDefinition<TDefinition>>;
/**
* @param libFile name of library
* @param funcs hash of [retType, [...argType], opts?: {abi?, async?, varargs?}]
* @param lib hash that will be extended
*/
<
TDefinition extends
| LibraryObjectDefinitionBase
| LibraryObjectDefinitionInferenceMarker
>(
libFile: string | null,
funcs: TDefinition,
lib?: object
): LibraryObject<LibraryObjectDefinitionToLibraryDefinition<TDefinition>>;
/**
* @param libFile name of library
* @param funcs hash of [retType, [...argType], opts?: {abi?, async?, varargs?}]
* @param lib hash that will be extended
*/
(
libFile: string | null,
funcs?: Record<
string,
[
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
opts?: LibraryFunctionOptions
]
>,
lib?: object
): any;
}
export const Library: Library;
/** Get value of errno. */
export function errno(): number;
export interface Function<
TReturnType extends ref.Type = ref.Type,
TArgTypes extends ref.Type[] = ref.Type[]
> extends ref.Type<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
> {
/** The type of return value. */
retType: TReturnType;
/** The type of arguments. */
argTypes: TArgTypes;
/** Is set for node-ffi functions. */
ffi_type: PFFI_TYPE;
abi: number;
/** Get a `Callback` pointer of this function type. */
toPointer(
fn: (
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
/** Get a `ForeignFunction` of this function type. */
toFunction(
buf: Buffer
): ForeignFunction<
ref.UnderlyingType<TReturnType>,
ref.UnderlyingTypes<TArgTypes>
>;
}
/** Creates and returns a type for a C function pointer. */
export const Function: {
// NOTE: This overload is a subtype of the next overload, but provides better completions.
new <
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[] | ArgTypesInferenceMarker
>(
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): Function<ref.CoerceType<TReturnType>, ref.CoerceTypes<TArgTypes>>;
new <
TReturnType extends ref.TypeLike,
TArgTypes extends ref.TypeLike[] | ArgTypesInferenceMarker
>(
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): Function<ref.CoerceType<TReturnType>, ref.CoerceTypes<TArgTypes>>;
new (
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
abi?: number
): Function;
// NOTE: This overload is a subtype of the next overload, but provides better completions.
<
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[] | ArgTypesInferenceMarker
>(
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): Function<ref.CoerceType<TReturnType>, ref.CoerceTypes<TArgTypes>>;
<
TReturnType extends ref.TypeLike,
TArgTypes extends ref.Type[] | ArgTypesInferenceMarker
>(
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): Function<ref.CoerceType<TReturnType>, ref.CoerceTypes<TArgTypes>>;
(retType: ref.TypeLike, argTypes: ref.TypeLike[], abi?: number): Function;
};
export interface ForeignFunction<TReturn = any, TArgs extends any[] = any[]> {
(...args: TArgs): TReturn;
async(...args: [...TArgs, (err: any, value: TReturn) => void]): void;
}
/**
* Represents a foreign function in another library. Manages all of the aspects
* of function execution, including marshalling the data parameters for the
* function into native types and also unmarshalling the return from function
* execution.
*/
export const ForeignFunction: {
// NOTE: This overload is a subtype of the next overload, but provides better completions.
new <
TReturnType extends ref.NamedType,
TArgTypes extends ref.TypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): ForeignFunction<
ref.UnderlyingType<TReturnType>,
ref.UnderlyingTypes<TArgTypes>
>;
new <
TReturnType extends ref.TypeLike,
TArgTypes extends ref.TypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): ForeignFunction<
ref.UnderlyingType<TReturnType>,
ref.UnderlyingTypes<TArgTypes>
>;
new (
ptr: Buffer,
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
abi?: number
): ForeignFunction;
// NOTE: This overload is a subtype of the next overload, but provides better completions.
<
TReturnType extends ref.NamedType,
TArgTypes extends ref.TypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): ForeignFunction<
ref.UnderlyingType<TReturnType>,
ref.UnderlyingTypes<TArgTypes>
>;
<
TReturnType extends ref.TypeLike,
TArgTypes extends ref.TypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
retType: TReturnType,
argTypes: TArgTypes,
abi?: number
): ForeignFunction<
ref.UnderlyingType<TReturnType>,
ref.UnderlyingTypes<TArgTypes>
>;
(
ptr: Buffer,
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
abi?: number
): ForeignFunction;
};
export interface VariadicForeignFunction<
TReturnType extends ref.Type = ref.Type,
TArgTypes extends ref.Type[] = ref.Type[]
> {
/**
* What gets returned is another function that needs to be invoked with the rest
* of the variadic types that are being invoked from the function.
*/
// NOTE: This overload is a subtype of the next overload, but provides better completions.
<A extends ref.NamedTypeLike[]>(...args: A): ForeignFunction<
ref.UnderlyingType<TReturnType>,
[...ref.UnderlyingTypes<TArgTypes>, ...ref.UnderlyingTypes<A>]
>;
/**
* What gets returned is another function that needs to be invoked with the rest
* of the variadic types that are being invoked from the function.
*/
<A extends ref.TypeLike[]>(...args: A): ForeignFunction<
ref.UnderlyingType<TReturnType>,
[...ref.UnderlyingTypes<TArgTypes>, ...ref.UnderlyingTypes<A>]
>;
/**
* Return type as a property of the function generator to
* allow for monkey patching the return value in the very rare case where the
* return type is variadic as well
*/
returnType: TReturnType;
}
/**
* For when you want to call to a C function with variable amount of arguments.
* i.e. `printf`.
*
* This function takes care of caching and reusing `ForeignFunction` instances that
* contain the same ffi_type argument signature.
*/
export const VariadicForeignFunction: {
// NOTE: This overload is a subtype of the next overload, but provides better completions.
new <
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
ret: TReturnType,
fixedArgs: TArgTypes,
abi?: number
): VariadicForeignFunction<
ref.CoerceType<TReturnType>,
ref.CoerceTypes<TArgTypes>
>;
new <
TReturnType extends ref.TypeLike,
TArgTypes extends ref.TypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
ret: TReturnType,
fixedArgs: TArgTypes,
abi?: number
): VariadicForeignFunction<
ref.CoerceType<TReturnType>,
ref.CoerceTypes<TArgTypes>
>;
new (
ptr: Buffer,
ret: ref.TypeLike,
fixedArgs: ref.TypeLike[],
abi?: number
): VariadicForeignFunction;
// NOTE: This overload is a subtype of the next overload, but provides better completions.
<
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
ret: TReturnType,
fixedArgs: TArgTypes,
abi?: number
): VariadicForeignFunction<
ref.CoerceType<TReturnType>,
ref.CoerceTypes<TArgTypes>
>;
<
TReturnType extends ref.TypeLike,
TArgTypes extends ref.TypeLike[] | ArgTypesInferenceMarker
>(
ptr: Buffer,
ret: TReturnType,
fixedArgs: TArgTypes,
abi?: number
): VariadicForeignFunction<
ref.CoerceType<TReturnType>,
ref.CoerceTypes<TArgTypes>
>;
(
ptr: Buffer,
ret: ref.TypeLike,
fixedArgs: ref.TypeLike[],
abi?: number
): VariadicForeignFunction;
};
/**
* This class loads and fetches function pointers for dynamic libraries
* (`.so`, `.dylib`, `etc`). After the libray's function pointer is acquired, then you
* call {@link DynamicLibrary.get} to retreive a pointer to an exported symbol. You need to
* call `get___` on the pointer to dereference it into its actual value, or
* turn the pointer into a callable function with {@link ForeignFunction}.
*/
export class DynamicLibrary {
/**
* @param mode One of the numeric {@link DynamicLibrary.FLAGS} values.
*/
constructor(path?: string, mode?: number);
/**
* Close library, returns the result of the `dlclose` system function.
*/
close(): number;
/**
* Get a symbol from this library.
*/
get(symbol: string): Buffer;
/**
* Get the result of the `dlerror` system function.
*/
error(): string;
/**
* Returns the path originally passed to the constructor.
*/
path(): string;
}
/**
* This class loads and fetches function pointers for dynamic libraries
* (`.so`, `.dylib`, etc). After the libray's function pointer is acquired, then you
* call {@link DynamicLibrary.get} to retreive a pointer to an exported symbol. You need to
* call `get___` on the pointer to dereference it into its actual value, or
* turn the pointer into a callable function with {@link ForeignFunction}.
*
* @param mode One of the numeric {@link DynamicLibrary.FLAGS} values.
*/
export function DynamicLibrary(path?: string, mode?: number): DynamicLibrary;
export namespace DynamicLibrary {
/**
* Exported flags from "dlfcn.h"
*/
namespace FLAGS {
// flags for dlopen()
const RTLD_LAZY: number;
const RTLD_NOW: number;
const RTLD_LOCAL: number;
const RTLD_GLOBAL: number;
const RTLD_NOLOAD: number | undefined; // not defined on Windows
const RTLD_NODELETE: number | undefined; // not defined on Windows
const RTLD_FIRST: number | undefined; // not defined on Windows
// flags for dlsym()
const RTLD_NEXT: ref.Pointer<unknown>;
const RTLD_DEFAULT: ref.Pointer<unknown>;
const RTLD_SELF: ref.Pointer<unknown> | undefined; // not defined on Windows
const RTLD_MAIN_ONLY: ref.Pointer<unknown> | undefined; // not defined on Windows
}
}
/**
* Turns a JavaScript function into a C function pointer.
* The function pointer may be used in other C functions that
* accept C callback functions.
*/
export interface Callback {
// NOTE: This overload is a subtype of the next overload, but provides better completions.
new <
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[]
>(
retType: TReturnType,
argTypes: TArgTypes,
abi: number,
fn: (
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
new <TReturnType extends ref.TypeLike, TArgTypes extends ref.TypeLike[]>(
retType: TReturnType,
argTypes: TArgTypes,
abi: number,
fn: (
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
// NOTE: This overload is a subtype of the next overload, but provides better completions.
new <
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[]
>(
retType: TReturnType,
argTypes: TArgTypes,
fn: (
...ags: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
new <TReturnType extends ref.TypeLike, TArgTypes extends ref.TypeLike[]>(
retType: TReturnType,
argTypes: TArgTypes,
fn: (
...ags: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
new (
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
abi: number,
fn: (...args: any[]) => any
): Buffer;
new (
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
fn: (...args: any[]) => any
): Buffer;
// NOTE: This overload is a subtype of the next overload, but provides better completions.
<
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[]
>(
retType: TReturnType,
argTypes: TArgTypes,
abi: number,
fn: (
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
<TReturnType extends ref.TypeLike, TArgTypes extends ref.TypeLike[]>(
retType: TReturnType,
argTypes: TArgTypes,
abi: number,
fn: (
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
// NOTE: This overload is a subtype of the next overload, but provides better completions.
<
TReturnType extends ref.NamedTypeLike,
TArgTypes extends ref.NamedTypeLike[]
>(
retType: TReturnType,
argTypes: TArgTypes,
fn: (
...ags: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
<TReturnType extends ref.TypeLike, TArgTypes extends ref.TypeLike[]>(
retType: TReturnType,
argTypes: TArgTypes,
fn: (
...ags: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
): ref.Pointer<
(
...args: ref.UnderlyingTypes<TArgTypes>
) => ref.UnderlyingType<TReturnType>
>;
(
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
abi: number,
fn: (...args: any[]) => any
): Buffer;
(
retType: ref.TypeLike,
argTypes: ref.TypeLike[],
fn: (...args: any[]) => any
): Buffer;
}
export const Callback: Callback;
/** Get a `ffi_type *` Buffer appropriate for the given type. */
export function ffiType(type: ref.TypeLike): ref.Pointer<FFI_TYPE>;
export namespace ffiType {
/**
* Define the `ffi_type` struct (see deps/libffi/include/ffi.h) for use in JS.
* This struct type is used internally to define custom struct ret/arg types.
*/
const FFI_TYPE: StructType<{
size: typeof ref.types.size_t;
alignment: typeof ref.types.ushort;
type: typeof ref.types.ushort;
elements: ref.Type<ref.Pointer<PFFI_TYPE>>;
}>;
type FFI_TYPE = ReturnType<typeof FFI_TYPE>;
}
export function CIF(
retType: ref.TypeLike,
types: ref.TypeLike[],
abi?: number
): Buffer;
export function CIF_var(
retType: ref.TypeLike,
types: ref.TypeLike[],
numFixedArgs: number,
abi?: number
): Buffer;
export const HAS_OBJC: boolean;
/**
* Represents an opaque pointer to an {@link FFI_TYPE} struct used for marshalling types to native code.
*/
export type PFFI_TYPE = ref.Pointer<FFI_TYPE>;
// declare module 'ref-napi' {
// interface Type {
// /**
// * Determines the FFI_TYPE set for a type.
// */
// ffi_type?: PFFI_TYPE | undefined;
// }
// }
export interface FfiTypesRegistry {
void: PFFI_TYPE;
uint8: PFFI_TYPE;
int8: PFFI_TYPE;
uint16: PFFI_TYPE;
int16: PFFI_TYPE;
uint32: PFFI_TYPE;
int32: PFFI_TYPE;
uint64: PFFI_TYPE;
int64: PFFI_TYPE;
uchar: PFFI_TYPE;
char: PFFI_TYPE;
ushort: PFFI_TYPE;
short: PFFI_TYPE;
uint: PFFI_TYPE;
int: PFFI_TYPE;
float: PFFI_TYPE;
double: PFFI_TYPE;
pointer: PFFI_TYPE;
ulonglong: PFFI_TYPE;
longlong: PFFI_TYPE;
ulong: PFFI_TYPE;
long: PFFI_TYPE;
}
export const FFI_TYPES: FfiTypesRegistry;
export const FFI_OK: number;
export const FFI_BAD_TYPEDEF: number;
export const FFI_BAD_ABI: number;
export const FFI_DEFAULT_ABI: number;
export const FFI_FIRST_ABI: number;
export const FFI_LAST_ABI: number;
// NOTE: These are defined depending on the platform ffi-napi was compiled on:
export const FFI_SYSV: number | undefined; // __arm__, Intel x86 Win32, __aarch64__, Intel x86 and AMD x86/x64
export const FFI_VFP: number | undefined; // __arm__
export const FFI_UNIX64: number | undefined; // All unix variants
export const FFI_STDCALL: number | undefined; // Intel x86 Win32
export const FFI_THISCALL: number | undefined; // Intel x86 Win32
export const FFI_FASTCALL: number | undefined; // Intel x86 Win32
export const FFI_MS_CDECL: number | undefined; // Intel x86 Win32
export const FFI_WIN64: number | undefined; // Intel x86 Win64
export import RTLD_LAZY = DynamicLibrary.FLAGS.RTLD_LAZY;
export import RTLD_NOW = DynamicLibrary.FLAGS.RTLD_NOW;
export import RTLD_LOCAL = DynamicLibrary.FLAGS.RTLD_LOCAL;
export import RTLD_GLOBAL = DynamicLibrary.FLAGS.RTLD_GLOBAL;
export import RTLD_NOLOAD = DynamicLibrary.FLAGS.RTLD_NOLOAD;
export import RTLD_NODELETE = DynamicLibrary.FLAGS.RTLD_NODELETE;
export import RTLD_FIRST = DynamicLibrary.FLAGS.RTLD_FIRST;
export import RTLD_NEXT = DynamicLibrary.FLAGS.RTLD_NEXT;
export import RTLD_DEFAULT = DynamicLibrary.FLAGS.RTLD_DEFAULT;
export import RTLD_SELF = DynamicLibrary.FLAGS.RTLD_SELF;
export import RTLD_MAIN_ONLY = DynamicLibrary.FLAGS.RTLD_MAIN_ONLY;
export const FFI_ARG_SIZE: number;
export const FFI_SARG_SIZE: number;
export const FFI_TYPE_SIZE: number;
export const FFI_CIF_SIZE: number;
export const LIB_EXT: string;
export import FFI_TYPE = ffiType.FFI_TYPE;
/** Default types. */
export import types = ref.types;
}

View File

@@ -33,15 +33,18 @@ declare module 'libOpenIMSDK' {
login( login(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
userID: string, uid: string,
token: string token: string
): void; ): void;
logout(cCallback: CB_S_I_S_S, operationID: string): void; logout(cCallback: CB_S_I_S_S, operationID: string): void;
set_app_background_status(
cCallback: CB_S_I_S_S,
operationID: string,
isBackground: number
): void;
network_status_changed(cCallback: CB_S_I_S_S, operationID: string): void; network_status_changed(cCallback: CB_S_I_S_S, operationID: string): void;
get_login_status(operationID: string): number; get_login_status(operationID: string): number;
get_login_user(): string; get_login_user(): string;
// message related functions
create_text_message(operationID: string, text: string): string; create_text_message(operationID: string, text: string): string;
create_advanced_text_message( create_advanced_text_message(
operationID: string, operationID: string,
@@ -103,6 +106,7 @@ declare module 'libOpenIMSDK' {
create_image_message(operationID: string, imagePath: string): string; create_image_message(operationID: string, imagePath: string): string;
create_image_message_by_url( create_image_message_by_url(
operationID: string, operationID: string,
sourcePath: string,
sourcePicture: string, sourcePicture: string,
bigPicture: string, bigPicture: string,
snapshotPicture: string snapshotPicture: string
@@ -148,11 +152,91 @@ declare module 'libOpenIMSDK' {
data: string data: string
): string; ): string;
create_forward_message(operationID: string, m: string): string; create_forward_message(operationID: string, m: string): string;
get_advanced_history_message_list( get_all_conversation_list(cCallback: CB_S_I_S_S, operationID: string): void;
get_conversation_list_split(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
getMessageOptions: string offset: number,
count: number
): void; ): void;
get_one_conversation(
cCallback: CB_S_I_S_S,
operationID: string,
sessionType: number,
sourceID: string
): void;
get_multiple_conversation(
cCallback: CB_S_I_S_S,
operationID: string,
conversationIDList: string
): void;
set_conversation_msg_destruct_time(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
msgDestructTime: number
): void;
set_conversation_is_msg_destruct(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
isMsgDestruct: number
): void;
hide_conversation(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string
): void;
get_conversation_recv_message_opt(
cCallback: CB_S_I_S_S,
operationID: string,
conversationIDList: string
): void;
set_conversation_draft(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
draftText: string
): void;
reset_conversation_group_at_type(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string
): void;
pin_conversation(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
isPinned: number
): void;
set_conversation_private_chat(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
isPrivate: number
): void;
set_conversation_burn_duration(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
duration: number
): void;
set_conversation_recv_message_opt(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
opt: number
): void;
get_total_unread_msg_count(
cCallback: CB_S_I_S_S,
operationID: string
): void;
get_at_all_tag(operationID: string): string;
get_conversation_id_by_session_type(
operationID: string,
sourceID: string,
sessionType: number
): string;
send_message( send_message(
cCallback: CB_S_I_S_S_I, cCallback: CB_S_I_S_S_I,
operationID: string, operationID: string,
@@ -161,31 +245,142 @@ declare module 'libOpenIMSDK' {
groupID: string, groupID: string,
offlinePushInfo: string offlinePushInfo: string
): void; ): void;
send_message_not_oss(
// Conversation related functions cCallback: CB_S_I_S_S_I,
get_all_conversation_list(cCallback: CB_S_I_S_S, operationID: string): void; operationID: string,
message: string,
// User related functions recvID: string,
groupID: string,
offlinePushInfo: string
): void;
find_message_list(
cCallback: CB_S_I_S_S,
operationID: string,
findMessageOptions: string
): void;
get_advanced_history_message_list(
cCallback: CB_S_I_S_S,
operationID: string,
getMessageOptions: string
): void;
get_advanced_history_message_list_reverse(
cCallback: CB_S_I_S_S,
operationID: string,
getMessageOptions: string
): void;
revoke_message(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
clientMsgID: string
): void;
typing_status_update(
cCallback: CB_S_I_S_S,
operationID: string,
recvID: string,
msgTip: string
): void;
mark_conversation_message_as_read(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string
): void;
delete_message_from_local_storage(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
clientMsgID: string
): void;
delete_message(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
clientMsgID: string
): void;
hide_all_conversations(cCallback: CB_S_I_S_S, operationID: string): void;
delete_all_msg_from_local_and_svr(
cCallback: CB_S_I_S_S,
operationID: string
): void;
delete_all_msg_from_local(cCallback: CB_S_I_S_S, operationID: string): void;
clear_conversation_and_delete_all_msg(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string
): void;
delete_conversation_and_delete_all_msg(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string
): void;
insert_single_message_to_local_storage(
cCallback: CB_S_I_S_S,
operationID: string,
message: string,
recvID: string,
sendID: string
): void;
insert_group_message_to_local_storage(
cCallback: CB_S_I_S_S,
operationID: string,
message: string,
groupID: string,
sendID: string
): void;
search_local_messages(
cCallback: CB_S_I_S_S,
operationID: string,
searchParam: string
): void;
set_message_local_ex(
cCallback: CB_S_I_S_S,
operationID: string,
conversationID: string,
clientMsgID: string,
localEx: string
): void;
get_users_info( get_users_info(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
userIDList: string userIDs: string
): void;
get_users_info_with_cache(
cCallback: CB_S_I_S_S,
operationID: string,
userIDs: string,
groupID: string
): void;
get_users_info_from_srv(
cCallback: CB_S_I_S_S,
operationID: string,
userIDs: string
): void; ): void;
set_self_info( set_self_info(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
userInfo: string userInfo: string
): void; ): void;
set_global_recv_message_opt(
cCallback: CB_S_I_S_S,
operationID: string,
opt: number
): void;
get_self_user_info(cCallback: CB_S_I_S_S, operationID: string): void; get_self_user_info(cCallback: CB_S_I_S_S, operationID: string): void;
update_msg_sender_info(
cCallback: CB_S_I_S_S,
operationID: string,
nickname: string,
faceURL: string
): void;
subscribe_users_status( subscribe_users_status(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
userIDList: string userIDs: string
): void; ): void;
unsubscribe_users_status( unsubscribe_users_status(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
userIDList: string userIDs: string
): void; ): void;
get_subscribe_users_status( get_subscribe_users_status(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
@@ -194,10 +389,9 @@ declare module 'libOpenIMSDK' {
get_user_status( get_user_status(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
userIDList: string userIDs: string
): void; ): void;
// Friend functions
// Friend related functions
get_specified_friends_info( get_specified_friends_info(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,
@@ -264,8 +458,7 @@ declare module 'libOpenIMSDK' {
operationID: string, operationID: string,
removeUserID: string removeUserID: string
): void; ): void;
// Group functions
// Group related functions
create_group( create_group(
cCallback: CB_S_I_S_S, cCallback: CB_S_I_S_S,
operationID: string, operationID: string,

View File

@@ -76,6 +76,11 @@ export type AccessFriendParams = {
handleMsg: string; handleMsg: string;
}; };
export type AddFriendParams = {
toUserID: string;
reqMsg: string;
};
export type SearchFriendParams = { export type SearchFriendParams = {
keywordList: string[]; keywordList: string[];
isSearchUserID: boolean; isSearchUserID: boolean;