Files
GO-3.0/package.json
simonandCursor 533b2777c0 Mobile chat-v2 engine: run the Hub Reticulum chat engine in-app (no legacy)
Runs the upstream ReticulumChatManager + resource store inside a dedicated
WebView worker so Qortal GO uses the new chat only, like the Hub:

- OPFS SyncAccessHandle fs shim + @sqlite.org/sqlite-wasm (SAH-pool VFS)
  give the engine the synchronous fs/better-sqlite3 it expects
- crypto shim (@noble) for Ed25519 + hashing; slim presence/logger shims;
  inline worker pools (no worker_threads) with the engine's own fallbacks
- wireBridge ports the desktop reticulum-bridge wire contract; frames relay
  worker <-> main <-> ReticulumPlugin <-> presence_bridge.py
- window.reticulumChat twin: 67 invoke methods + 16 event streams + readiness,
  signing via the existing signReticulumChatEvent background case, Qortal
  group member/admin validation via core API, presence peers/leases feed
- vite: alias node builtins to shims, worker.plugins re-applies redirects

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 14:29:05 +00:00

163 lines
6.4 KiB
JSON

{
"name": "ext-one",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"build": "vite build",
"coverage": "vitest run --coverage",
"dev": "vite",
"dev:qortino": "vite --open /qortino-debug.html",
"format": "prettier --write .",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview",
"pretest": "tsc electron/src/reticulum-resource.worker.ts --outDir electron/build/src --target ES2020 --module CommonJS --moduleResolution node --esModuleInterop --skipLibCheck --types node",
"test": "vitest",
"test:gcall:e2e": "GCALL_E2E_ARTIFACT_DIR=${GCALL_E2E_ARTIFACT_DIR:-.artifacts/gcall-e2e} vitest run src/lib/group-call/v2/groupCallE2eQuality.test.ts",
"test:gcall:e2e:offline": "GCALL_E2E_ARTIFACT_DIR=${GCALL_E2E_ARTIFACT_DIR:-.artifacts/gcall-e2e} vitest run src/lib/group-call/v2/groupCallE2eQuality.test.ts src/lib/group-call/v2/groupCallE2eLiveExport.test.ts src/lib/group-call/v2/replayHarness.test.ts electron/src/group-call-e2e-electron.test.ts",
"test:gcall:e2e:watch": "GCALL_E2E_ARTIFACT_DIR=${GCALL_E2E_ARTIFACT_DIR:-.artifacts/gcall-e2e} vitest src/lib/group-call/v2/groupCallE2eQuality.test.ts",
"test:gcall:e2e:scenario": "GCALL_E2E_SCENARIO=${npm_config_scenario:-} GCALL_E2E_ARTIFACT_DIR=${GCALL_E2E_ARTIFACT_DIR:-.artifacts/gcall-e2e} vitest run src/lib/group-call/v2/groupCallE2eQuality.test.ts",
"test:gcall:e2e:electron": "GCALL_E2E_ARTIFACT_DIR=${GCALL_E2E_ARTIFACT_DIR:-.artifacts/gcall-e2e} vitest run electron/src/group-call-e2e-electron.test.ts",
"test:gcall:e2e:live-export": "GCALL_E2E_EXPORT_A=${npm_config_exporta:-} GCALL_E2E_EXPORT_B=${npm_config_exportb:-} GCALL_E2E_ARTIFACT_DIR=${GCALL_E2E_ARTIFACT_DIR:-.artifacts/gcall-e2e} vitest run src/lib/group-call/v2/groupCallE2eLiveExport.test.ts",
"build:libopus-fec": "./native/libopus-fec-wasm/build.sh"
},
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
"@capacitor/android": "^6.1.2",
"@capacitor/app": "^6.0.1",
"@capacitor/browser": "^6.0.3",
"@capacitor/cli": "^6.1.2",
"@capacitor/core": "^6.1.2",
"@capacitor/filesystem": "^6.0.1",
"@capacitor/local-notifications": "^6.1.0",
"@capacitor/preferences": "^6.0.3",
"@capacitor/screen-orientation": "^6.0.3",
"@capacitor/share": "^6.0.4",
"@capacitor/splash-screen": "^6.0.2",
"@capawesome/capacitor-file-picker": "^6.1.0",
"@capgo/capacitor-native-biometric": "^6.0.4",
"@dnd-kit/core": "^6.3.0",
"@dnd-kit/sortable": "^10.0.0",
"@electron/packager": "^18.3.6",
"@emotion/react": "^11.11.4",
"@emotion/styled": "^11.11.0",
"@evva/capacitor-secure-storage-plugin": "^3.0.1",
"@mui/icons-material": "^7.0.1",
"@mui/lab": "^7.0.0-beta.11",
"@mui/material": "^7.0.1",
"@noble/ed25519": "^2.3.0",
"@noble/hashes": "^2.3.0",
"@sqlite.org/sqlite-wasm": "^3.53.0-build1",
"@tanstack/react-virtual": "^3.13.6",
"@testing-library/jest-dom": "^6.4.6",
"@testing-library/user-event": "^14.6.1",
"@tiptap/extension-color": "^2.11.7",
"@tiptap/extension-highlight": "^2.11.7",
"@tiptap/extension-image": "^2.11.7",
"@tiptap/extension-mention": "^2.11.7",
"@tiptap/extension-placeholder": "^2.11.7",
"@tiptap/extension-text-style": "^2.11.7",
"@tiptap/extension-underline": "^2.11.7",
"@tiptap/pm": "^2.11.7",
"@tiptap/react": "^2.11.7",
"@tiptap/starter-kit": "^2.11.7",
"@transistorsoft/capacitor-background-fetch": "^6.0.1",
"@types/chrome": "^0.0.263",
"@uiw/react-color": "^2.5.1",
"adm-zip": "^0.5.16",
"aes-js": "^3.1.2",
"asmcrypto.js": "2.3.2",
"axios": "^1.13.5",
"bcryptjs": "2.4.3",
"buffer": "6.0.3",
"canvas-confetti": "^1.9.4",
"chokidar": "^3.6.0",
"compressorjs": "^1.2.1",
"cordova-plugin-android-permissions": "^1.1.5",
"cordova-plugin-file": "^8.1.1",
"dompurify": "^3.4.3",
"emoji-picker-react": "^4.12.0",
"entities": "^8.0.0",
"events": "^3.3.0",
"file-saver": "^2.0.5",
"framer-motion": "^12.23.24",
"hash-wasm": "^4.12.0",
"html-to-text": "^9.0.5",
"i18next": "^25.0.1",
"i18next-browser-languagedetector": "^8.0.5",
"i18next-http-backend": "^3.0.2",
"i18next-localstorage-backend": "^4.2.0",
"jotai": "^2.12.3",
"jsqr": "^1.4.0",
"jssha": "3.3.1",
"libsodium-wrappers-sumo": "^0.8.4",
"lit": "^3.2.1",
"lodash": "^4.17.21",
"mime": "^4.0.4",
"moment": "^2.30.1",
"moment-timezone": "^0.5.48",
"npm": "^11.5.1",
"path-browserify": "^1.0.1",
"phaser": "^3.90.0",
"react": "^19.2.0",
"react-countdown-circle-timer": "^3.2.1",
"react-dom": "^19.2.0",
"react-dropzone": "^14.2.3",
"react-easy-crop": "^5.5.7",
"react-frame-component": "^5.2.7",
"react-i18next": "^15.4.1",
"react-intersection-observer": "^9.16.0",
"react-json-view-lite": "^2.4.1",
"react-loader-spinner": "^6.1.6",
"react-qr-code": "^2.0.15",
"react-rnd": "^10.5.2",
"react-virtualized": "^9.22.6",
"react-virtuoso": "^4.10.4",
"short-unique-id": "^5.2.0",
"slate": "^0.103.0",
"slate-react": "^0.109.0",
"tippy.js": "^6.3.7",
"tiptap-extension-resize-image": "^1.1.8",
"ts-key-enum": "^2.0.12",
"vite-plugin-pwa": "^1.0.2",
"vite-plugin-top-level-await": "^1.6.0",
"vite-plugin-wasm": "^3.5.0"
},
"devDependencies": {
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.3.0",
"@types/dompurify": "^3.0.5",
"@types/libsodium-wrappers-sumo": "^0.7.8",
"@types/lodash": "^4.17.7",
"@types/react": "^19.1.0",
"@types/react-dom": "^19.1.0",
"@types/react-virtualized": "^9.21.30",
"@typescript-eslint/eslint-plugin": "^7.1.1",
"@typescript-eslint/parser": "^7.1.1",
"@vitejs/plugin-react": "^4.7.0",
"esbuild-plugin-react-virtualized": "^1.0.5",
"eslint": "^8.57.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.20",
"fake-indexeddb": "^6.2.5",
"jest": "^30.1.2",
"jsdom": "^26.1.0",
"prettier": "^3.8.0",
"rename-cli": "^7.0.1",
"sharp": "^0.34.5",
"tweetnacl": "^1.0.3",
"typescript": "^5.9.2",
"vite": "^7.3.0",
"vite-plugin-checker": "^0.11.0",
"vitest": "^4.0.17"
},
"overrides": {
"react-loader-spinner": {
"react": "^18 || ^19",
"react-dom": "^18 || ^19"
},
"cross-spawn": "^7.0.5",
"braces": ">=3.0.3"
}
}