Skip to content

Commit 33aa9a5

Browse files
authored
fix: use @stoprocent/noble ble (#539)
1 parent 89fba6e commit 33aa9a5

File tree

34 files changed

+1320
-589
lines changed

34 files changed

+1320
-589
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Build Example Desktop (macOS)
2+
3+
on:
4+
workflow_call:
5+
6+
jobs:
7+
build-mac:
8+
runs-on: macos-latest
9+
permissions:
10+
contents: write
11+
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v4
15+
with:
16+
fetch-depth: 0
17+
18+
- name: Setup Node.js
19+
uses: actions/setup-node@v4
20+
with:
21+
node-version: '22'
22+
23+
- name: Install dependencies
24+
run: |
25+
echo "📦 Installing dependencies..."
26+
yarn
27+
yarn bootstrap
28+
29+
- name: Build macOS App
30+
env:
31+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32+
run: |
33+
cd packages/connect-examples/electron-example
34+
yarn make:mac
35+
36+
- name: Upload macOS Artifact
37+
uses: actions/upload-artifact@v4
38+
with:
39+
name: mac-example-desktop
40+
path: packages/connect-examples/electron-example/out/*.dmg
41+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Build Example Desktop (Windows)
2+
3+
on:
4+
workflow_call:
5+
6+
jobs:
7+
build-win:
8+
runs-on: windows-latest
9+
permissions:
10+
contents: write
11+
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v4
15+
with:
16+
fetch-depth: 0
17+
18+
- name: Setup Node.js
19+
uses: actions/setup-node@v4
20+
with:
21+
node-version: '22'
22+
cache: 'yarn'
23+
24+
- name: Enable long paths on Windows
25+
run: git config --system core.longpaths true
26+
27+
- name: Install dependencies
28+
run: |
29+
echo "📦 Installing dependencies..."
30+
yarn
31+
yarn bootstrap
32+
33+
- name: Build Windows App
34+
env:
35+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36+
run: |
37+
cd packages/connect-examples/electron-example
38+
yarn make:win
39+
40+
- name: Upload Windows Artifact
41+
uses: actions/upload-artifact@v4
42+
with:
43+
name: win-example-desktop
44+
path: packages/connect-examples/electron-example/out/*.exe
Lines changed: 12 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,16 @@
1-
name: build-example-desktop
1+
name: Build Example Desktop (All Platforms)
22

3-
on: workflow_dispatch
3+
on:
4+
workflow_dispatch:
45

5-
jobs:
6-
build:
7-
runs-on: macos-latest
8-
env:
9-
PROJECT_PATH: packages/connect-examples/electron-example
10-
steps:
11-
- uses: actions/checkout@v4
12-
- name: Setup Node.js
13-
uses: actions/setup-node@v4
14-
with:
15-
node-version: '22'
16-
registry-url: 'https://registry.npmjs.org'
17-
18-
- name: Install dependencies
19-
run: |
20-
yarn
21-
yarn bootstrap
22-
23-
- name: Build Target
24-
run: |
25-
yarn build
6+
permissions:
7+
contents: write
268

27-
- name: Build Desktop Application
28-
env:
29-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30-
run: yarn build:example:desktop
31-
32-
- name: Upload Mac x64 Artifacts
33-
uses: actions/upload-artifact@v4
34-
with:
35-
name: mac-x64-example-desktop
36-
path: |
37-
${{ env.PROJECT_PATH }}/out/*x64.dmg
38-
${{ env.PROJECT_PATH }}/out/*mac-x64.zip
39-
40-
- name: Upload Mac arm64 Artifacts
41-
uses: actions/upload-artifact@v4
42-
with:
43-
name: mac-arm64-example-desktop
44-
path: |
45-
${{ env.PROJECT_PATH }}/out/*arm64.dmg
46-
${{ env.PROJECT_PATH }}/out/*mac-arm64.zip
9+
jobs:
10+
build-mac:
11+
uses: ./.github/workflows/build-example-desktop-mac.yml
12+
secrets: inherit
4713

48-
- name: Upload Windows Artifacts
49-
uses: actions/upload-artifact@v4
50-
with:
51-
name: win-x64-example-desktop
52-
path: |
53-
${{ env.PROJECT_PATH }}/out/*.exe
14+
build-win:
15+
uses: ./.github/workflows/build-example-desktop-win.yml
16+
secrets: inherit

.github/workflows/package-publish.yml

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,34 @@ jobs:
3535
echo "📦 Detected stable version: $VERSION"
3636
fi
3737
38+
get-version:
39+
runs-on: ubuntu-latest
40+
outputs:
41+
version: ${{ steps.version-info.outputs.version }}
42+
is_prerelease: ${{ steps.version-info.outputs.is_prerelease }}
43+
steps:
44+
- name: Checkout
45+
uses: actions/checkout@v4
46+
with:
47+
fetch-depth: 0
48+
49+
- name: Get version information
50+
id: version-info
51+
run: |
52+
# Get version from core package (assuming independent versioning)
53+
VERSION=$(node -p "require('./packages/core/package.json').version")
54+
echo "📦 Package version: $VERSION"
55+
echo "version=$VERSION" >> $GITHUB_OUTPUT
56+
57+
# Check if this is a prerelease version (contains -)
58+
if [[ "$VERSION" =~ - ]]; then
59+
echo "is_prerelease=true" >> $GITHUB_OUTPUT
60+
echo "📦 Detected prerelease version: $VERSION"
61+
else
62+
echo "is_prerelease=false" >> $GITHUB_OUTPUT
63+
echo "📦 Detected stable version: $VERSION"
64+
fi
65+
3866
publish-and-release:
3967
needs: get-version
4068
runs-on: ubuntu-latest
@@ -69,7 +97,15 @@ jobs:
6997
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
7098
run: |
7199
echo "📦 Publishing packages to NPM (v${{ needs.get-version.outputs.version }})..."
72-
yarn publish-packages -y --no-verify-access
100+
IS_PRERELEASE=${{ needs.get-version.outputs.is_prerelease }}
101+
102+
if [ "$IS_PRERELEASE" = "true" ]; then
103+
echo "📦 Publishing with --dist-tag next for prerelease"
104+
yarn publish-packages -y --no-verify-access --dist-tag next
105+
else
106+
echo "📦 Publishing with --dist-tag latest for stable release"
107+
yarn publish-packages -y --no-verify-access --dist-tag latest
108+
fi
73109
echo "✅ Packages published successfully"
74110
75111
- name: Publication Summary

.husky/pre-commit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
# Run tests
33
yarn test
44

5+
# Run check versions
6+
yarn check-versions
7+
58
# Run lint:fix
69
yarn lint:staged
710

package.json

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@
3030
"lint:staged": "lint-staged",
3131
"test": "lerna run test",
3232
"setup": "yarn && yarn bootstrap && yarn build",
33-
"publish-packages": "lerna publish from-package",
33+
"check-versions": "node scripts/check-versions.js",
34+
"publish-packages": "yarn check-versions && lerna publish from-package",
3435
"update-protobuf": "lerna run update:protobuf --scope=@onekeyfe/hd-transport",
3536
"update-version": "lerna version --no-git-tag-version --force-publish=@onekeyfe/hd-core,@onekeyfe/hd-ble-sdk,@onekeyfe/hd-common-connect-sdk,@onekeyfe/hd-transport-electron,@onekeyfe/hd-transport-emulator,@onekeyfe/hd-transport-http,@onekeyfe/hd-transport-lowlevel,@onekeyfe/hd-transport-react-native,@onekeyfe/hd-transport-web-device,@onekeyfe/hd-transport,@onekeyfe/hd-web-sdk,@onekeyfe/hd-shared",
3637
"example": "cd ./packages/connect-examples/expo-example && yarn start",
3738
"example:web": "cd ./packages/connect-examples/expo-example && cross-env CONNECT_SRC=https://localhost:8087 yarn start",
3839
"example:desktop": "cd ./packages/connect-examples/electron-example && yarn dev",
39-
"build:example:desktop": "cd ./packages/connect-examples/electron-example && yarn make",
40+
"build:example:desktop:mac": "cd ./packages/connect-examples/electron-example && yarn make:mac",
41+
"build:example:desktop:win": "cd ./packages/connect-examples/electron-example && yarn make:win",
4042
"example:v2": "cd ./packages/connect-examples/expo-playground && yarn start",
4143
"dev:all": "lerna run dev --parallel --ignore expo-example --ignore hardware-example --ignore onekey-hardware-playground",
4244
"dev:web": "cd ./packages/hd-web-sdk && yarn dev",
@@ -49,6 +51,7 @@
4951
"dev:transport-lowlevel": "cd ./packages/hd-transport-lowlevel && yarn dev",
5052
"dev:transport-emulator": "cd ./packages/hd-transport-emulator && yarn dev",
5153
"dev:transport-web-device": "cd ./packages/hd-transport-web-device && yarn dev",
54+
"dev:transport-electron": "cd ./packages/hd-transport-electron && yarn dev",
5255
"dev:shared": "cd ./packages/shared && yarn dev",
5356
"debug:watcher": "node ./scripts/monitor.js"
5457
},
@@ -62,7 +65,9 @@
6265
"parse-url": "8.1.0",
6366
"braces": "3.0.3",
6467
"tmp": "0.2.4",
65-
"micromatch": "4.0.8"
68+
"micromatch": "4.0.8",
69+
"sha.js": "2.4.12",
70+
"cipher-base": "1.0.5"
6671
},
6772
"devDependencies": {
6873
"@babel/core": "^7.0.0",
@@ -78,6 +83,7 @@
7883
"@types/jest": "^27.5.1",
7984
"@types/node": "^18.18.8",
8085
"@types/shelljs": "^0.8.11",
86+
"electron-builder": "^24.9.1",
8187
"babel-jest": "^28.1.3",
8288
"babel-loader": "^8.2.5",
8389
"cross-env": "^7.0.3",

packages/connect-examples/electron-example/electron-builder.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ module.exports = {
1111
productName: 'HardwareExample',
1212
copyright: 'Copyright © OeKey 2024',
1313
asar: true,
14+
// Unpack native modules so they can be loaded at runtime
15+
asarUnpack: [
16+
'node_modules/@stoprocent/noble/**',
17+
'node_modules/@stoprocent/bluetooth-hci-socket/**',
18+
],
1419
buildVersion: version,
1520
directories: {
1621
output: 'out',

packages/connect-examples/electron-example/package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "hardware-example",
33
"productName": "HardwareExample",
44
"executableName": "onekey-hardware-example",
5-
"version": "1.1.10-alpha.1",
5+
"version": "1.1.10",
66
"author": "OneKey",
77
"description": "End-to-end encrypted workspaces for teams",
88
"main": "dist/index.js",
@@ -15,12 +15,15 @@
1515
"dev": "npx concurrently \"yarn dev:electron\" \"cross-env TRANSFORM_REGENERATOR_DISABLED=true BROWSER=none yarn dev-electron-web\"",
1616
"dev:electron": "electron --inspect=5858 dist/index.js",
1717
"build:main": "webpack --config webpack.config.ts",
18-
"make": "yarn clean:build && yarn build-electron-web && electron-builder build -mw --config electron-builder.config.js --publish always",
18+
"rebuild:deps": "electron-builder install-app-deps",
19+
"make:mac": "yarn rebuild:deps && yarn clean:build && yarn build-electron-web && electron-builder build --mac --config electron-builder.config.js --publish always",
20+
"make:win": "yarn rebuild:deps && yarn clean:build && yarn build-electron-web && electron-builder build --win --config electron-builder.config.js --publish always",
1921
"lint": "eslint --ext .tsx --ext .ts ./",
2022
"ts:check": "yarn tsc --noEmit"
2123
},
2224
"dependencies": {
23-
"@abandonware/noble": "^1.9.2-26",
25+
"@onekeyfe/hd-transport-electron": "1.1.10",
26+
"@stoprocent/noble": "2.3.4",
2427
"debug": "4.3.4",
2528
"electron-is-dev": "^3.0.1",
2629
"electron-log": "^5.1.5",

packages/connect-examples/electron-example/src/index.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,6 @@ function createMainWindow() {
257257
}
258258
});
259259

260-
initNobleBleSupport(browserWindow.webContents);
261-
262260
ipcMain.on(ipcMessageKeys.APP_RESTART, () => {
263261
browserWindow?.reload();
264262
});
@@ -283,6 +281,15 @@ if (!singleInstance && !process.mas) {
283281
if (!mainWindow) {
284282
mainWindow = createMainWindow();
285283
}
284+
285+
try {
286+
log.info('Initializing Noble BLE support...');
287+
initNobleBleSupport(mainWindow.webContents);
288+
log.info('Noble BLE support initialized successfully.');
289+
} catch (e) {
290+
log.error('Failed to initialize Noble BLE support:', e);
291+
}
292+
286293
initChildProcess();
287294
showMainWindow();
288295
console.log('日志文件位置:', log.transports.file.getFile().path);

packages/connect-examples/electron-example/webpack.config.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ module.exports = {
4848
}),
4949
}),
5050
{
51-
'@abandonware/noble': 'commonjs @abandonware/noble',
52-
'@abandonware/bluetooth-hci-socket': 'commonjs @abandonware/bluetooth-hci-socket',
51+
'@onekeyfe/hd-transport-electron': 'commonjs @onekeyfe/hd-transport-electron',
52+
'@stoprocent/noble': 'commonjs @stoprocent/noble',
53+
'@stoprocent/bluetooth-hci-socket': 'commonjs @stoprocent/bluetooth-hci-socket',
5354
bufferutil: 'commonjs bufferutil',
5455
'utf-8-validate': 'commonjs utf-8-validate',
5556
},

0 commit comments

Comments
 (0)