diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..f298121 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" \ No newline at end of file diff --git a/assets/mac_arm64/libopenimsdk.dylib b/assets/mac_arm64/libopenimsdk.dylib index 204da5e..ec73594 100755 Binary files a/assets/mac_arm64/libopenimsdk.dylib and b/assets/mac_arm64/libopenimsdk.dylib differ diff --git a/assets/win_x64/libopenimsdk.dll b/assets/win_x64/libopenimsdk.dll deleted file mode 100644 index 67f6ef0..0000000 Binary files a/assets/win_x64/libopenimsdk.dll and /dev/null differ diff --git a/package-lock.json b/package-lock.json index 2e90362..0a3c1f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@openim/node-client-sdk", - "version": "1.0.6", + "version": "1.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@openim/node-client-sdk", - "version": "1.0.6", + "version": "1.0.7", "license": "MIT", "dependencies": { "koffi": "^2.8.0", @@ -23,6 +23,7 @@ "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "conventional-changelog-conventionalcommits": "^5.0.0", + "electron": "^29.2.0", "eslint": "^7.25.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-node": "^11.1.0", @@ -30,7 +31,7 @@ "husky": "^6.0.0", "jest": "^27.2.0", "lint-staged": "^10.5.4", - "open-im-sdk-wasm": "^3.5.3-alpha.2", + "open-im-sdk-wasm": "^3.5.3-alpha.3", "prettier": "^2.2.1", "rollup": "^2.79.1", "rollup-plugin-typescript2": "^0.36.0", @@ -42,7 +43,8 @@ "node": ">=12.0" }, "peerDependencies": { - "open-im-sdk-wasm": "^3.5.3-alpha.1" + "electron": ">=12.0.0", + "open-im-sdk-wasm": "^3.5.3-alpha.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1167,6 +1169,68 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -2091,6 +2155,18 @@ "semantic-release": ">=18.0.0-beta.1" } }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -2109,6 +2185,18 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -2183,6 +2271,18 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/ffi-napi": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/@types/ffi-napi/-/ffi-napi-4.0.10.tgz", @@ -2203,6 +2303,12 @@ "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -2233,6 +2339,15 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -2281,6 +2396,15 @@ "@types/ref-napi": "*" } }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -2308,6 +2432,16 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", @@ -2814,6 +2948,13 @@ "node": ">=8" } }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, "node_modules/bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -2889,12 +3030,63 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3102,6 +3294,18 @@ "node": ">=12" } }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3476,6 +3680,33 @@ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -3506,6 +3737,51 @@ "node": ">=0.10.0" } }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -3561,6 +3837,13 @@ "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "optional": true + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -3646,12 +3929,39 @@ "readable-stream": "^2.0.2" } }, + "node_modules/electron": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-29.2.0.tgz", + "integrity": "sha512-ALKrCN52RG4g9prx4DriXSPnY5WoiyRUCNp7zEVQuoiNOpHTNqMMpRidQAHzntV4hajF1LMWHVoBkwqIs1jHhg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^20.9.0", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.600", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.600.tgz", "integrity": "sha512-KD6CWjf1BnQG+NsXuyiTDDT1eV13sKuYsOUioXkQweYTQIbgHkXPry9K7M+7cKtYHnSUPitVaLrXYB1jTkkYrw==", "dev": true }, + "node_modules/electron/node_modules/@types/node": { + "version": "20.12.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.5.tgz", + "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -3706,6 +4016,15 @@ "node": ">=10.17" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3715,6 +4034,36 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "optional": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4174,6 +4523,41 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4232,6 +4616,15 @@ "bser": "2.1.1" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -4483,6 +4876,26 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "optional": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -4594,6 +5007,24 @@ "node": ">= 6" } }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -4621,6 +5052,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -4650,6 +5097,44 @@ "node": ">=8" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "optional": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4695,6 +5180,45 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -4764,6 +5288,12 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -4778,6 +5308,31 @@ "node": ">= 6" } }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -6517,6 +7072,15 @@ "node": ">=8" } }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6672,6 +7236,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -6779,6 +7356,15 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -9552,6 +10138,16 @@ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9577,9 +10173,9 @@ } }, "node_modules/open-im-sdk-wasm": { - "version": "3.5.3-alpha.2", - "resolved": "https://registry.npmjs.org/open-im-sdk-wasm/-/open-im-sdk-wasm-3.5.3-alpha.2.tgz", - "integrity": "sha512-UEDq0rjMB7nFjYKFgkPaLaOlj41jjXbVTSZpIdiewlxzWTuXJmGBRyXhJyK8YFbCjpgndVxl882t62KIUsIU1w==", + "version": "3.5.3-alpha.3", + "resolved": "https://registry.npmjs.org/open-im-sdk-wasm/-/open-im-sdk-wasm-3.5.3-alpha.3.tgz", + "integrity": "sha512-J3NMi+G3LM1yjogl47dOR3LS4RD2fyTzn6NzVg9uKcgik2GD5zlopbX9IxH9AMBWEint/f9TpMe3qSF9+9NBBQ==", "dev": true, "engines": { "node": ">=12.0" @@ -9602,6 +10198,15 @@ "node": ">= 0.8.0" } }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -9785,6 +10390,12 @@ "node": ">=8" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10443,6 +11054,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -10485,6 +11102,18 @@ "node": ">=10" } }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -10529,6 +11158,31 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/roarr/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "optional": true + }, "node_modules/rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -10793,6 +11447,35 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -11215,6 +11898,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11735,6 +12430,12 @@ "node": ">=0.8.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -12107,6 +12808,16 @@ "node": ">=12" } }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index d205fbe..3f4162c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@openim/node-client-sdk", - "version": "1.0.6", + "version": "1.0.9", "description": "open im sdk for node", "source": "src/index.ts", "main": "lib/index.js", @@ -51,6 +51,7 @@ "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "conventional-changelog-conventionalcommits": "^5.0.0", + "electron": "^29.2.0", "eslint": "^7.25.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-node": "^11.1.0", @@ -58,7 +59,7 @@ "husky": "^6.0.0", "jest": "^27.2.0", "lint-staged": "^10.5.4", - "open-im-sdk-wasm": "^3.5.3-alpha.2", + "open-im-sdk-wasm": "^3.5.3-alpha.3", "prettier": "^2.2.1", "rollup": "^2.79.1", "rollup-plugin-typescript2": "^0.36.0", @@ -79,6 +80,7 @@ "uuid": "^9.0.0" }, "peerDependencies": { - "open-im-sdk-wasm": "^3.5.3-alpha.1" + "electron": ">=12.0.0", + "open-im-sdk-wasm": "^3.5.3-alpha.5" } } diff --git a/rollup.config.js b/rollup.config.js index c347d98..f6966f8 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -27,12 +27,31 @@ export default [ output: [ { file: 'lib/render.js', + format: 'esm', + sourcemap: false + }, + { + file: 'lib/render.cjs.js', + format: 'cjs', + exports: 'auto', + sourcemap: false + }, + ], + plugins: [ + typescript(), + ] + }, + { + input: 'src/preload.ts', + output: [ + { + file: 'lib/preload.js', format: 'cjs', exports: 'auto', sourcemap: false }, { - file: 'lib/render.es.js', + file: 'lib/preload.es.js', format: 'esm', sourcemap: false } diff --git a/src/constant/callback.ts b/src/constant/callback.ts index 8c04685..8df76d8 100644 --- a/src/constant/callback.ts +++ b/src/constant/callback.ts @@ -55,6 +55,20 @@ export enum NativeEvent { UPLOAD_FILE_CALLBACK_UPLOAD_PART_COMPLETE, UPLOAD_FILE_CALLBACK_UPLOAD_COMPLETE, UPLOAD_FILE_CALLBACK_COMPLETE, + CONVERSATION_USER_INPUT_STATUS_CHANGED, + RECV_ONLINE_ONLY_MESSAGE, + RECV_NEW_INVITATION, + INVITEE_ACCEPTED, + INVITEE_ACCEPTED_BY_OTHER_DEVICE, + INVITEE_REJECTED, + INVITEE_REJECTED_BY_OTHER_DEVICE, + INVITATION_CANCELLED, + INVITATION_TIMEOUT, + HANG_UP, + ROOM_PARTICIPANT_CONNECTED, + ROOM_PARTICIPANT_DISCONNECTED, + STREAM_CHANGE, + RECEIVE_CUSTOM_SIGNAL, } export const eventMapping: Record = { @@ -117,4 +131,21 @@ export const eventMapping: Record = { [NativeEvent.UPLOAD_FILE_CALLBACK_UPLOAD_ID]: CbEvents.UnUsedEvent, [NativeEvent.UPLOAD_FILE_CALLBACK_UPLOAD_PART_COMPLETE]: CbEvents.UnUsedEvent, [NativeEvent.UPLOAD_FILE_CALLBACK_UPLOAD_COMPLETE]: CbEvents.UnUsedEvent, + [NativeEvent.CONVERSATION_USER_INPUT_STATUS_CHANGED]: CbEvents.UnUsedEvent, + [NativeEvent.RECV_ONLINE_ONLY_MESSAGE]: CbEvents.UnUsedEvent, + [NativeEvent.RECV_NEW_INVITATION]: CbEvents.OnReceiveNewInvitation, + [NativeEvent.INVITEE_ACCEPTED]: CbEvents.OnInviteeAccepted, + [NativeEvent.INVITEE_ACCEPTED_BY_OTHER_DEVICE]: + CbEvents.OnInviteeAcceptedByOtherDevice, + [NativeEvent.INVITEE_REJECTED]: CbEvents.OnInviteeRejected, + [NativeEvent.INVITEE_REJECTED_BY_OTHER_DEVICE]: + CbEvents.OnInviteeRejectedByOtherDevice, + [NativeEvent.INVITATION_CANCELLED]: CbEvents.OnInvitationCancelled, + [NativeEvent.INVITATION_TIMEOUT]: CbEvents.OnInvitationTimeout, + [NativeEvent.HANG_UP]: CbEvents.OnHangUp, + [NativeEvent.ROOM_PARTICIPANT_CONNECTED]: CbEvents.OnRoomParticipantConnected, + [NativeEvent.ROOM_PARTICIPANT_DISCONNECTED]: + CbEvents.OnRoomParticipantDisconnected, + [NativeEvent.STREAM_CHANGE]: CbEvents.OnStreamChange, + [NativeEvent.RECEIVE_CUSTOM_SIGNAL]: CbEvents.OnReceiveCustomSignal, }; diff --git a/src/core/index.ts b/src/core/index.ts index e677490..77a2d5b 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -19,7 +19,12 @@ import { SelfUserInfo } from 'open-im-sdk-wasm/lib/types/entity'; import { SetConversationExParams, SetFriendExParams, + UploadFileParams, } from 'open-im-sdk-wasm/lib/types/params'; +import { + type SignalingModuleApi, + setupSignalingModule, +} from './modules/signaling'; function isObject(value: unknown) { return Object.prototype.toString.call(value) === '[object Object]'; @@ -32,7 +37,8 @@ class OpenIMSDK FriendModuleApi, GroupModuleApi, ConversationModuleApi, - MessageModuleApi + MessageModuleApi, + SignalingModuleApi { libOpenIMSDK = {} as LibOpenIMSDK; baseCallbackProto: koffi.IKoffiCType; @@ -70,8 +76,8 @@ class OpenIMSDK this.listenerCallback = koffi.register( (event: NativeEvent, data: string) => { const cbEvent = eventMapping[event]; + if (!cbEvent) return; this.emit(cbEvent, this.generateEventResponse(data)); - console.log(`listener callback - Event: ${cbEvent}, Data: ${data}`); }, koffi.pointer(listenerCallbackProto) ); @@ -118,6 +124,12 @@ class OpenIMSDK 'void', ['listenerCallback *'] ); + this.libOpenIMSDK.set_signaling_listener = this.lib.func( + '__stdcall', + 'set_signaling_listener', + 'void', + ['listenerCallback *'] + ); this.libOpenIMSDK.init_sdk = this.lib.func( '__stdcall', 'init_sdk', @@ -338,6 +350,18 @@ class OpenIMSDK 'void', ['baseCallback *', 'str', 'str', 'int'] ); + this.libOpenIMSDK.send_group_message_read_receipt = this.lib.func( + '__stdcall', + 'send_group_message_read_receipt', + 'void', + ['baseCallback *', 'str', 'str', 'str'] + ); + this.libOpenIMSDK.get_group_message_reader_list = this.lib.func( + '__stdcall', + 'get_group_message_reader_list', + 'void', + ['baseCallback *', 'str', 'str', 'str', 'int', 'int', 'int'] + ); this.libOpenIMSDK.hide_conversation = this.lib.func( '__stdcall', 'hide_conversation', @@ -408,13 +432,13 @@ class OpenIMSDK '__stdcall', 'send_message', 'void', - ['sendMessageCallback *', 'str', 'str', 'str', 'str', 'str'] + ['sendMessageCallback *', 'str', 'str', 'str', 'str', 'str', 'int'] ); this.libOpenIMSDK.send_message_not_oss = this.lib.func( '__stdcall', 'send_message_not_oss', 'void', - ['sendMessageCallback *', 'str', 'str', 'str', 'str', 'str'] + ['sendMessageCallback *', 'str', 'str', 'str', 'str', 'str', 'int'] ); this.libOpenIMSDK.find_message_list = this.lib.func( '__stdcall', @@ -823,12 +847,131 @@ class OpenIMSDK 'int', ['baseCallback *', 'str', 'str'] ); + this.libOpenIMSDK.signaling_invite_in_group = this.lib.func( + '__stdcall', + 'signaling_invite_in_group', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_invite = this.lib.func( + '__stdcall', + 'signaling_invite', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_accept = this.lib.func( + '__stdcall', + 'signaling_accept', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_reject = this.lib.func( + '__stdcall', + 'signaling_reject', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_cancel = this.lib.func( + '__stdcall', + 'signaling_cancel', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_hung_up = this.lib.func( + '__stdcall', + 'signaling_hung_up', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_get_room_by_group_id = this.lib.func( + '__stdcall', + 'signaling_get_room_by_group_id', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_get_token_by_room_id = this.lib.func( + '__stdcall', + 'signaling_get_token_by_room_id', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.get_signaling_invitation_info_start_app = this.lib.func( + '__stdcall', + 'get_signaling_invitation_info_start_app', + 'void', + ['baseCallback *', 'str'] + ); + + this.libOpenIMSDK.signaling_create_meeting = this.lib.func( + '__stdcall', + 'signaling_create_meeting', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_join_meeting = this.lib.func( + '__stdcall', + 'signaling_join_meeting', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_update_meeting_info = this.lib.func( + '__stdcall', + 'signaling_update_meeting_info', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_close_room = this.lib.func( + '__stdcall', + 'signaling_close_room', + 'void', + ['baseCallback *', 'str', 'str'] + ); + + this.libOpenIMSDK.signaling_get_meetings = this.lib.func( + '__stdcall', + 'signaling_get_meetings', + 'void', + ['baseCallback *', 'str'] + ); + + this.libOpenIMSDK.signaling_operate_stream = this.lib.func( + '__stdcall', + 'signaling_operate_stream', + 'void', + ['baseCallback *', 'str', 'str', 'str', 'str', 'int', 'int'] + ); + + this.libOpenIMSDK.signaling_send_custom_signal = this.lib.func( + '__stdcall', + 'signaling_send_custom_signal', + 'void', + ['baseCallback *', 'str', 'str', 'str'] + ); + + this.libOpenIMSDK.upload_file = this.lib.func( + '__stdcall', + 'upload_file', + 'void', + ['baseCallback *', 'str', 'str', 'listenerCallback *'] + ); Object.assign(this, setupUserModule(this)); Object.assign(this, setupFriendModule(this)); Object.assign(this, setupGroupModule(this)); Object.assign(this, setupConversationModule(this)); Object.assign(this, setupMessageModule(this)); + Object.assign(this, setupSignalingModule(this)); } generateEventResponse = (data: unknown, operationID = ''): BaseResponse => { @@ -862,10 +1005,6 @@ class OpenIMSDK ) => { const registerBaseCallback = koffi.register( (operationID: string, errCode: number, errMsg: string, data: string) => { - console.log( - `base callback - operationID: ${operationID}, errCode: ${errCode}, errMsg: ${errMsg}, data: ${data}` - ); - let realData; try { realData = JSON.parse(data); @@ -891,6 +1030,7 @@ class OpenIMSDK }; sendMessageCallbackWrap = ( + clientMsgID: string, resolve: (response: BaseResponse) => void, reject: (response: BaseResponse) => void ) => { @@ -902,10 +1042,6 @@ class OpenIMSDK data: string, progress: number ) => { - console.log( - `send message callback - operationID: ${operationID}, errCode: ${errCode}, errMsg: ${errMsg}, data: ${data}, progress: ${progress}` - ); - let realData; try { realData = JSON.parse(data); @@ -922,7 +1058,13 @@ class OpenIMSDK // eslint-disable-next-line this.emit( CbEvents.OnProgress, - this.generateEventResponse(progress, operationID) + this.generateEventResponse( + { + clientMsgID, + progress, + }, + operationID + ) ); return; } @@ -969,6 +1111,7 @@ class OpenIMSDK this.libOpenIMSDK.set_advanced_msg_listener(this.listenerCallback); this.libOpenIMSDK.set_batch_msg_listener(this.listenerCallback); this.libOpenIMSDK.set_custom_business_listener(this.listenerCallback); + this.libOpenIMSDK.set_signaling_listener(this.listenerCallback); }; initSDK = (param: InitConfig, opid = uuidV4()) => @@ -1030,6 +1173,16 @@ class OpenIMSDK ); }); + uploadFile = (params: UploadFileParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + this.libOpenIMSDK.upload_file( + this.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params), + this.listenerCallback + ); + }); + // implements user api getSelfUserInfo!: UserModuleApi['getSelfUserInfo']; setSelfInfo!: UserModuleApi['setSelfInfo']; @@ -1083,6 +1236,7 @@ class OpenIMSDK transferGroupOwner!: GroupModuleApi['transferGroupOwner']; dismissGroup!: GroupModuleApi['dismissGroup']; quitGroup!: GroupModuleApi['quitGroup']; + isJoinGroup!: GroupModuleApi['isJoinGroup']; // implements conversation api getAllConversationList!: ConversationModuleApi['getAllConversationList']; @@ -1106,6 +1260,8 @@ class OpenIMSDK hideAllConversation!: ConversationModuleApi['hideAllConversation']; clearConversationAndDeleteAllMsg!: ConversationModuleApi['clearConversationAndDeleteAllMsg']; deleteConversationAndDeleteAllMsg!: ConversationModuleApi['deleteConversationAndDeleteAllMsg']; + setConversationMsgDestructTime!: ConversationModuleApi['setConversationMsgDestructTime']; + setConversationIsMsgDestruct!: ConversationModuleApi['setConversationIsMsgDestruct']; // implements message api createTextMessage!: MessageModuleApi['createTextMessage']; @@ -1144,6 +1300,25 @@ class OpenIMSDK insertGroupMessageToLocalStorage!: MessageModuleApi['insertGroupMessageToLocalStorage']; insertSingleMessageToLocalStorage!: MessageModuleApi['insertSingleMessageToLocalStorage']; setMessageLocalEx!: MessageModuleApi['setMessageLocalEx']; + sendGroupMessageReadReceipt!: MessageModuleApi['sendGroupMessageReadReceipt']; + getGroupMessageReaderList!: MessageModuleApi['getGroupMessageReaderList']; + + // implements signaling api + signalingInviteInGroup!: SignalingModuleApi['signalingInviteInGroup']; + signalingInvite!: SignalingModuleApi['signalingInvite']; + signalingAccept!: SignalingModuleApi['signalingAccept']; + signalingReject!: SignalingModuleApi['signalingReject']; + signalingCancel!: SignalingModuleApi['signalingCancel']; + signalingHungUp!: SignalingModuleApi['signalingHungUp']; + signalingGetRoomByGroupID!: SignalingModuleApi['signalingGetRoomByGroupID']; + signalingGetTokenByRoomID!: SignalingModuleApi['signalingGetTokenByRoomID']; + signalingSendCustomSignal!: SignalingModuleApi['signalingSendCustomSignal']; + signalingCreateMeeting!: SignalingModuleApi['signalingCreateMeeting']; + signalingJoinMeeting!: SignalingModuleApi['signalingJoinMeeting']; + signalingUpdateMeetingInfo!: SignalingModuleApi['signalingUpdateMeetingInfo']; + signalingCloseRoom!: SignalingModuleApi['signalingCloseRoom']; + signalingGetMeetings!: SignalingModuleApi['signalingGetMeetings']; + signalingOperateStream!: SignalingModuleApi['signalingOperateStream']; } export default OpenIMSDK; diff --git a/src/core/modules/conversation.ts b/src/core/modules/conversation.ts index 0428f99..8cbb698 100644 --- a/src/core/modules/conversation.ts +++ b/src/core/modules/conversation.ts @@ -10,6 +10,8 @@ import { SetConversationPrivateStateParams, SetBurnDurationParams, SetConversationExParams, + SetConversationMsgDestructTimeParams, + SetConversationMsgDestructParams, } from 'open-im-sdk-wasm/lib/types/params'; import { ConversationItem } from 'open-im-sdk-wasm/lib/types/entity'; @@ -189,6 +191,30 @@ export function setupConversationModule(openIMSDK: OpenIMSDK) { conversationID ); }), + setConversationMsgDestructTime: ( + params: SetConversationMsgDestructTimeParams, + opid = uuidV4() + ) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.set_conversation_msg_destruct_time( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + params.conversationID, + params.msgDestructTime + ); + }), + setConversationIsMsgDestruct: ( + params: SetConversationMsgDestructParams, + opid = uuidV4() + ) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.set_conversation_is_msg_destruct( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + params.conversationID, + params.isMsgDestruct ? 1 : 0 + ); + }), }; } @@ -258,4 +284,12 @@ export interface ConversationModuleApi { conversationID: string, opid?: string ) => Promise>; + setConversationMsgDestructTime: ( + params: SetConversationMsgDestructTimeParams, + opid?: string + ) => Promise>; + setConversationIsMsgDestruct: ( + params: SetConversationMsgDestructParams, + opid?: string + ) => Promise>; } diff --git a/src/core/modules/group.ts b/src/core/modules/group.ts index edbae5a..3adfedb 100644 --- a/src/core/modules/group.ts +++ b/src/core/modules/group.ts @@ -265,6 +265,15 @@ export function setupGroupModule(openIMSDK: OpenIMSDK) { groupID ); }), + + isJoinGroup: (groupID: string, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.is_join_group( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + groupID + ); + }), }; } @@ -350,4 +359,5 @@ export interface GroupModuleApi { ) => Promise>; dismissGroup: (groupID: string, opid?: string) => Promise>; quitGroup: (groupID: string, opid?: string) => Promise>; + isJoinGroup: (groupID: string, opid?: string) => Promise>; } diff --git a/src/core/modules/message.ts b/src/core/modules/message.ts index 8c6377c..7d4fb21 100644 --- a/src/core/modules/message.ts +++ b/src/core/modules/message.ts @@ -26,6 +26,8 @@ import { VideoMsgParamsByURL, FileMsgParamsByURL, SoundMsgParamsByURL, + SendGroupReadReceiptParams, + GetGroupMessageReaderParams, } from 'open-im-sdk-wasm/lib/types/params'; import { VideoMsgByPathParams, @@ -258,13 +260,17 @@ export function setupMessageModule(openIMSDK: OpenIMSDK) { iOSBadgeCount: true, }; openIMSDK.libOpenIMSDK.send_message( - openIMSDK.sendMessageCallbackWrap(resolve, reject), + openIMSDK.sendMessageCallbackWrap( + params.message.clientMsgID, + resolve, + reject + ), opid, JSON.stringify(params.message), params.recvID, params.groupID, JSON.stringify(offlinePushInfo), - params.isOnlineOnly ?? false + Number(!!params.isOnlineOnly) ); }), @@ -278,13 +284,17 @@ export function setupMessageModule(openIMSDK: OpenIMSDK) { iOSBadgeCount: true, }; openIMSDK.libOpenIMSDK.send_message_not_oss( - openIMSDK.sendMessageCallbackWrap(resolve, reject), + openIMSDK.sendMessageCallbackWrap( + params.message.clientMsgID, + resolve, + reject + ), opid, JSON.stringify(params.message), params.recvID, params.groupID, JSON.stringify(offlinePushInfo), - params.isOnlineOnly ?? false + Number(!!params.isOnlineOnly) ); }), @@ -423,6 +433,33 @@ export function setupMessageModule(openIMSDK: OpenIMSDK) { params.localEx ); }), + sendGroupMessageReadReceipt: ( + params: SendGroupReadReceiptParams, + opid = uuidV4() + ) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.send_group_message_read_receipt( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + params.conversationID, + JSON.stringify(params.clientMsgIDList) + ); + }), + getGroupMessageReaderList: ( + params: GetGroupMessageReaderParams, + opid = uuidV4() + ) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.get_group_message_reader_list( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + params.conversationID, + params.clientMsgID, + params.filter, + params.offset, + params.count + ); + }), }; } @@ -565,4 +602,12 @@ export interface MessageModuleApi { params: SetMessageLocalExParams, opid?: string ) => Promise>; + sendGroupMessageReadReceipt: ( + params: SendGroupReadReceiptParams, + opid?: string + ) => Promise>; + getGroupMessageReaderList: ( + params: GetGroupMessageReaderParams, + opid?: string + ) => Promise>; } diff --git a/src/core/modules/signaling.ts b/src/core/modules/signaling.ts new file mode 100644 index 0000000..3a52023 --- /dev/null +++ b/src/core/modules/signaling.ts @@ -0,0 +1,220 @@ +import { v4 as uuidV4 } from 'uuid'; +import OpenIMSDK from '..'; +import { BaseResponse } from '@/types/entity'; +import { + CreateMeetingParams, + CustomSignalParams, + MeetingOperateStreamParams, + RtcActionParams, + SignalingInviteParams, + UpdateMeetingParams, +} from 'open-im-sdk-wasm/lib/types/params'; +import { + RtcInviteResults, + CallingRoomData, + MeetingRecord, +} from 'open-im-sdk-wasm/lib/types/entity'; + +export function setupSignalingModule(openIMSDK: OpenIMSDK) { + return { + signalingInviteInGroup: (params: SignalingInviteParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_invite_in_group( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingInvite: (params: SignalingInviteParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_invite( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingCancel: (params: RtcActionParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_cancel( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingAccept: (params: RtcActionParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_accept( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingReject: (params: RtcActionParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_reject( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingHungUp: (params: RtcActionParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_hung_up( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingGetRoomByGroupID: (groupID: string, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_get_room_by_group_id( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + groupID + ); + }), + signalingGetTokenByRoomID: (roomID: string, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_get_token_by_room_id( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + roomID + ); + }), + signalingSendCustomSignal: (params: CustomSignalParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_send_custom_signal( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params.customInfo), + params.roomID + ); + }), + signalingCreateMeeting: (params: CreateMeetingParams, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_create_meeting( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingJoinMeeting: (roomID: string, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_join_meeting( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify({ + roomID, + }) + ); + }), + signalingUpdateMeetingInfo: ( + params: Partial & { roomID: string }, + opid = uuidV4() + ) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_update_meeting_info( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + JSON.stringify(params) + ); + }), + signalingCloseRoom: (roomID: string, opid = uuidV4()) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_close_room( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + roomID + ); + }), + signalingGetMeetings: (opid = uuidV4()) => + new Promise>( + (resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_get_meetings( + openIMSDK.baseCallbackWrap<{ meetingInfoList: MeetingRecord[] }>( + resolve, + reject + ), + opid + ); + } + ), + signalingOperateStream: ( + params: MeetingOperateStreamParams, + opid = uuidV4() + ) => + new Promise>((resolve, reject) => { + openIMSDK.libOpenIMSDK.signaling_operate_stream( + openIMSDK.baseCallbackWrap(resolve, reject), + opid, + params.streamType, + params.roomID, + params.userID ?? '', + params.mute ? 1 : 0, + params.muteAll ? 1 : 0 + ); + }), + }; +} + +export interface SignalingModuleApi { + signalingInviteInGroup: ( + params: SignalingInviteParams, + opid?: string + ) => Promise>; + signalingInvite: ( + params: SignalingInviteParams, + opid?: string + ) => Promise>; + signalingCancel: ( + params: RtcActionParams, + opid?: string + ) => Promise>; + signalingAccept: ( + params: RtcActionParams, + opid?: string + ) => Promise>; + signalingReject: ( + params: RtcActionParams, + opid?: string + ) => Promise>; + signalingHungUp: ( + params: RtcActionParams, + opid?: string + ) => Promise>; + signalingGetRoomByGroupID: ( + groupID: string, + opid?: string + ) => Promise>; + signalingGetTokenByRoomID: ( + roomID: string, + opid?: string + ) => Promise>; + signalingSendCustomSignal: ( + params: CustomSignalParams, + opid?: string + ) => Promise>; + signalingCreateMeeting: ( + params: CreateMeetingParams, + opid?: string + ) => Promise>; + signalingJoinMeeting: ( + meetingID: string, + opid?: string + ) => Promise>; + signalingUpdateMeetingInfo: ( + params: Partial & { roomID: string }, + opid?: string + ) => Promise>; + signalingCloseRoom: ( + roomID: string, + opid?: string + ) => Promise>; + signalingGetMeetings: ( + opid?: string + ) => Promise>; + signalingOperateStream: ( + params: MeetingOperateStreamParams, + opid?: string + ) => Promise>; +} diff --git a/src/index.ts b/src/index.ts index 39cceab..bd44f58 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,3 @@ -import OpenIMSDK from './core'; +import OpenIMSDKMain from './main'; -export default OpenIMSDK; +export default OpenIMSDKMain; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..5f080f1 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,41 @@ +import { ipcMain, WebContents } from 'electron'; +import { CbEvents } from 'open-im-sdk-wasm'; +import OpenIMSDK from './core'; + +class OpenIMSDKMain { + private sdk: OpenIMSDK; + private webContents: WebContents[] = []; + constructor(path: string, webContent?: WebContents) { + this.sdk = new OpenIMSDK(path, this.emitProxy); + if (webContent) { + this.webContents = [webContent]; + } + this.initMethodsHandler(); + } + + private initMethodsHandler = () => { + ipcMain.handle('openim-sdk-ipc-methods', async (_, method, ...args) => { + try { + // @ts-ignore + // eslint-disable-next-line + return await this.sdk[method](...args); + } catch (error) { + return error; + } + }); + }; + + private emitProxy = (event: CbEvents, data: any) => { + this.webContents.forEach(webContent => { + if (!webContent.isDestroyed()) { + webContent.send('openim-sdk-ipc-event', event, data); + } + }); + }; + + public addWebContent(webContent: WebContents) { + this.webContents.push(webContent); + } +} + +export default OpenIMSDKMain; diff --git a/src/preload.ts b/src/preload.ts new file mode 100644 index 0000000..f11c6e3 --- /dev/null +++ b/src/preload.ts @@ -0,0 +1,11 @@ +import { contextBridge, ipcRenderer } from 'electron'; + +contextBridge.exposeInMainWorld('openIMRenderApi', { + subscribe: (channel: string, callback: (...args: any[]) => void) => { + const subscription = (_: unknown, ...args: any[]) => callback(...args); + ipcRenderer.on(channel, subscription); + return () => ipcRenderer.removeListener(channel, subscription); + }, + imMethodsInvoke: (method: string, ...args: any[]) => + ipcRenderer.invoke('openim-sdk-ipc-methods', method, ...args), +}); diff --git a/src/render.ts b/src/render.ts index d52773a..48f480d 100644 --- a/src/render.ts +++ b/src/render.ts @@ -93,6 +93,7 @@ type CreateElectronOptions = { }; let wasmSDK: IMSDKInterface | undefined; +let instance: IMSDKInterface | undefined; const sdkEmitter = new Emitter(); // eslint-disable-next-line @@ -109,38 +110,49 @@ export function getWithRenderProcess({ wasmConfig, invoke, }: CreateElectronOptions) { + const interalInvoke = invoke ?? window.openIMRenderApi?.imMethodsInvoke; const subscribeCallback = (event: keyof EmitterEvents, data: any) => sdkEmitter.emit(event, data); + if (instance) { + return { + instance, + subscribeCallback, + }; + } + + if (!interalInvoke && !wasmSDK) { + createWasmSDK(wasmConfig); + } + + window.openIMRenderApi?.subscribe('openim-sdk-ipc-event', subscribeCallback); + const sdkProxyHandler: ProxyHandler = { get(_, prop: keyof IMSDKInterface) { return async (...args: any[]) => { try { - if (!invoke) { - await createWasmSDK(wasmConfig); - if (!wasmSDK) throw new Error('WASM SDK is not available'); - const cachedMethod = methodCache.get(wasmSDK[prop]); + if (!interalInvoke) { + if (!wasmSDK) { + await createWasmSDK(wasmConfig); + } + const cachedMethod = methodCache.get(wasmSDK![prop]); if (cachedMethod) { // eslint-disable-next-line return cachedMethod(...args); } // @ts-ignore const method = async (...args: any[]) => wasmSDK![prop](...args); - methodCache.set(wasmSDK[prop], method); + methodCache.set(wasmSDK![prop], method); return method(...args); } - if (!subscribeCallback) { - console.warn('No subscribeCallback method provided'); - } - if (prop === 'on' || prop === 'off') { // @ts-ignore return sdkEmitter[prop](...args); } - const result = await invoke(prop, ...args); - if (result?.errCode) { + const result = await interalInvoke(prop, ...args); + if (result?.errCode !== 0 && prop !== 'initSDK') { throw result; } return result; @@ -152,8 +164,7 @@ export function getWithRenderProcess({ }, }; - return { - subscribeCallback, - proxy: new Proxy({} as IMSDKInterface, sdkProxyHandler), - }; + instance = new Proxy({} as IMSDKInterface, sdkProxyHandler); + + return { instance, subscribeCallback }; } diff --git a/src/types/global.d.ts b/src/types/global.d.ts new file mode 100644 index 0000000..e635b4f --- /dev/null +++ b/src/types/global.d.ts @@ -0,0 +1,15 @@ +import { WsResponse } from 'open-im-sdk-wasm/lib/types/entity'; + +export interface IOpenIMRenderAPI { + subscribe: ( + channel: string, + callback: (...args: any[]) => void + ) => () => void; + imMethodsInvoke: (method: string, ...args: any[]) => Promise; +} + +declare global { + interface Window { + openIMRenderApi?: IOpenIMRenderAPI; + } +} diff --git a/src/types/libOpenIMSDK.d.ts b/src/types/libOpenIMSDK.d.ts index 5b62b40..69cd9f5 100644 --- a/src/types/libOpenIMSDK.d.ts +++ b/src/types/libOpenIMSDK.d.ts @@ -15,6 +15,7 @@ declare module 'libOpenIMSDK' { set_user_listener(cCallback: CB_I_S): void; set_friend_listener(cCallback: CB_I_S): void; set_custom_business_listener(cCallback: CB_I_S): void; + set_signaling_listener(cCallback: CB_I_S): void; init_sdk(cCallback: CB_I_S, operationID: string, config: string): number; un_init_sdk(operationID: string): void; login( @@ -169,6 +170,21 @@ declare module 'libOpenIMSDK' { conversationID: string, isMsgDestruct: number ): void; + send_group_message_read_receipt( + cCallback: CB_S_I_S_S, + operationID: string, + conversationID: string, + clientMsgIDList: string + ): void; + get_group_message_reader_list( + cCallback: CB_S_I_S_S, + operationID: string, + conversationID: string, + clientMsgID: string, + filter: number, + offset: number, + count: number + ): void; hide_conversation( cCallback: CB_S_I_S_S, operationID: string, @@ -237,7 +253,7 @@ declare module 'libOpenIMSDK' { recvID: string, groupID: string, offlinePushInfo: string, - isOnlineOnly: boolean + isOnlineOnly: number ): void; send_message_not_oss( cCallback: CB_S_I_S_S_I, @@ -246,7 +262,7 @@ declare module 'libOpenIMSDK' { recvID: string, groupID: string, offlinePushInfo: string, - isOnlineOnly: boolean + isOnlineOnly: number ): void; find_message_list( cCallback: CB_S_I_S_S, @@ -631,6 +647,92 @@ declare module 'libOpenIMSDK' { operationID: string, cGroupID: string ): void; + signaling_invite_in_group( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalInviteInGroupReq: string + ): void; + signaling_invite( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalInviteReq: string + ): void; + signaling_accept( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalAcceptReq: string + ): void; + signaling_reject( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalRejectReq: string + ): void; + signaling_cancel( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalCancelReq: string + ): void; + signaling_hung_up( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalHungUpReq: string + ): void; + signaling_get_room_by_group_id( + cCallback: CB_S_I_S_S, + operationID: string, + cGroupID: string + ): void; + signaling_get_token_by_room_id( + cCallback: CB_S_I_S_S, + operationID: string, + cRoomID: string + ): void; + get_signaling_invitation_info_start_app( + cCallback: CB_S_I_S_S, + operationID: string + ): void; + signaling_create_meeting( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalingCreateMeetingReq: string + ): void; + signaling_join_meeting( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalingJoinMeetingReq: string + ): void; + signaling_update_meeting_info( + cCallback: CB_S_I_S_S, + operationID: string, + cSignalingUpdateMeetingInfoReq: string + ): void; + signaling_close_room( + cCallback: CB_S_I_S_S, + operationID: string, + cRoomID: string + ): void; + signaling_get_meetings(cCallback: CB_S_I_S_S, operationID: string): void; + signaling_operate_stream( + cCallback: CB_S_I_S_S, + operationID: string, + cStreamType: string, + cRoomID: string, + cUserID: string, + mute: number, + muteAll: number + ): void; + signaling_send_custom_signal( + cCallback: CB_S_I_S_S, + operationID: string, + cCustomInfo: string, + cRoomID: string + ): void; + upload_file( + cCallback: CB_S_I_S_S, + operationID: string, + cFileInfo: string, + pCallback: CB_I_S + ): void; } const lib: LibOpenIMSDK; export default lib;