Closes the v2.2.0 roadmap. Desktop client is feature-complete and
ready for first installer builds.
Contact request flow (fills a real gap flagged by the user):
* lib/tx.ts grows buildContactRequestTx / buildAcceptContactTx /
buildBlockContactTx with canonical bytes matching mobile.
* lib/api.ts: fetchContactRequests + ContactRequestRaw.
* New contact modal — sections/contacts/NewContactModal.tsx — resolves
@username / DC-address / hex pub via resolveAccount, shows identity
preview (incl. "has encryption key / key not published" hint),
fee tier picker (5k / 10k / 50k µT), optional 280-char intro,
balance guard.
* Requests inbox — sections/contacts/RequestsList.tsx — polled every
15 s via /relay/contacts, filters pending, Accept submits
ACCEPT_CONTACT + adds the peer to local contacts with their
identity.x25519_pub pre-cached, Block submits BLOCK_CONTACT.
* ContactsList grows a two-tab header (Contacts / Requests with a
pending-count badge) + "+ New" button next to the filter input.
Auto-update:
* hooks/useUpdateCheck.ts — polls /api/update-check on mount and
every 6 hours; loose semver compares the Gitea release tag
against this build's app.version (from Electron IPC), ignores
the node's own update_available flag (it compares vs. the node,
not the desktop).
* shell/UpdateBanner.tsx — thin strip above the status bar with
the new tag, Download button (opens the release URL in the
default browser), and a dismiss-for-this-tag × so once-seen
updates don't nag.
Packaging — electron-builder config tightened:
* artifactName pattern includes version + os + arch.
* Mac: hardenedRuntime on, dmg + zip outputs, social-networking
category.
* Windows: NSIS (full installer, per-user or per-machine) +
portable exe.
* Linux: AppImage + deb.
* Strip source maps and test folders from the asar.
* publish: null — no auto-publisher yet; Gitea releases are
uploaded manually for now.
* directories.output = release/, directories.buildResources =
resources/ so icons land in a predictable place once we add them.
Version bumped to 2.2.0 in package.json. docs/ROADMAP.md marks
v2.2.0 row complete; remaining work (attachments, code signing,
group chats) moved to a post-v2.2.0 bucket.
76 lines
2.3 KiB
JSON
76 lines
2.3 KiB
JSON
{
|
|
"name": "dchain-desktop",
|
|
"version": "2.2.0",
|
|
"description": "DChain desktop client — Electron shell mirroring the mobile app's functionality with a keyboard-first 3-panel layout.",
|
|
"private": true,
|
|
"main": "dist-electron/main.js",
|
|
"scripts": {
|
|
"dev": "concurrently -k -n vite,electron -c blue,magenta \"vite --host 127.0.0.1\" \"wait-on http://127.0.0.1:5173 && npm run electron:dev\"",
|
|
"electron:dev": "npm run build:main && cross-env VITE_DEV_SERVER_URL=http://127.0.0.1:5173 electron dist-electron/main.js",
|
|
"build": "npm run build:main && vite build && electron-builder",
|
|
"build:renderer": "vite build",
|
|
"build:main": "tsc -p electron/tsconfig.json",
|
|
"typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p electron/tsconfig.json"
|
|
},
|
|
"dependencies": {
|
|
"qrcode": "^1.5.4",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"tweetnacl": "^1.0.3",
|
|
"tweetnacl-util": "^0.15.1",
|
|
"zustand": "^5.0.3"
|
|
},
|
|
"devDependencies": {
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "^18.3.12",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@vitejs/plugin-react": "^4.3.4",
|
|
"concurrently": "^9.1.0",
|
|
"cross-env": "^7.0.3",
|
|
"electron": "^33.2.1",
|
|
"electron-builder": "^25.1.8",
|
|
"typescript": "^5.6.3",
|
|
"vite": "^6.0.3",
|
|
"wait-on": "^8.0.1"
|
|
},
|
|
"build": {
|
|
"appId": "com.dchain.desktop",
|
|
"productName": "DChain",
|
|
"copyright": "Copyright © 2026 DChain contributors",
|
|
"asar": true,
|
|
"artifactName": "${productName}-${version}-${os}-${arch}.${ext}",
|
|
"files": [
|
|
"dist/**/*",
|
|
"dist-electron/**/*",
|
|
"!**/*.map",
|
|
"!**/node_modules/**/test/**",
|
|
"!**/node_modules/**/tests/**"
|
|
],
|
|
"directories": {
|
|
"output": "release",
|
|
"buildResources": "resources"
|
|
},
|
|
"mac": {
|
|
"target": ["dmg", "zip"],
|
|
"category": "public.app-category.social-networking",
|
|
"hardenedRuntime": true,
|
|
"gatekeeperAssess": false
|
|
},
|
|
"win": {
|
|
"target": ["nsis", "portable"]
|
|
},
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"allowElevation": true,
|
|
"allowToChangeInstallationDirectory": true,
|
|
"createDesktopShortcut": true,
|
|
"createStartMenuShortcut": true
|
|
},
|
|
"linux": {
|
|
"target": ["AppImage", "deb"],
|
|
"category": "Network"
|
|
},
|
|
"publish": null
|
|
}
|
|
}
|