12d7f24d0f
Introduce new UI and behavior for playing audio attachments in conversations. Previously, playback stopped unexpectedly during window resizes and scrolling through the messages due to the row height recomputation in `react-virtualized`. With this commit we introduce `<GlobalAudioContext/>` instance that wraps whole conversation and provides an `<audio/>` element that doesn't get re-rendered (or destroyed) whenever `react-virtualized` recomputes messages. The audio players (with a freshly designed UI) now share this global `<audio/>` instance and manage access to it using `audioPlayer.owner` state from the redux. New UI computes on the fly, caches, and displays waveforms for each audio attachment. Storybook had to be slightly modified to accomodate testing of Android bubbles by introducing the new knob for `authorColor`.
421 lines
14 KiB
JSON
421 lines
14 KiB
JSON
{
|
|
"name": "signal-desktop",
|
|
"productName": "Signal",
|
|
"description": "Private messaging from your desktop",
|
|
"desktopName": "signal.desktop",
|
|
"repository": "https://github.com/signalapp/Signal-Desktop.git",
|
|
"version": "1.40.1-beta.1",
|
|
"license": "AGPL-3.0-only",
|
|
"author": {
|
|
"name": "Open Whisper Systems",
|
|
"email": "support@signal.org"
|
|
},
|
|
"main": "main.js",
|
|
"scripts": {
|
|
"postinstall": "yarn build:acknowledgments && snyk protect && patch-package && electron-builder install-app-deps && rimraf node_modules/dtrace-provider",
|
|
"postuninstall": "yarn build:acknowledgments",
|
|
"start": "electron .",
|
|
"grunt": "grunt",
|
|
"generate": "yarn grunt",
|
|
"build-release": "npm run build",
|
|
"sign-release": "node ts/updater/generateSignature.js",
|
|
"notarize": "node ts/build/notarize.js",
|
|
"build-module-protobuf": "pbjs --target static-module --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
|
|
"clean-module-protobuf": "rm -f ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
|
|
"build-protobuf": "yarn build-module-protobuf",
|
|
"clean-protobuf": "yarn clean-module-protobuf",
|
|
"prepare-beta-build": "node prepare_beta_build.js",
|
|
"prepare-import-build": "node prepare_import_build.js",
|
|
"publish-to-apt": "NAME=$npm_package_name VERSION=$npm_package_version ./aptly.sh",
|
|
"test": "yarn test-node && yarn test-electron",
|
|
"test-electron": "yarn grunt test",
|
|
"test-node": "electron-mocha --file test/setup-test-node.js --recursive test/app test/modules ts/test-node ts/test-both",
|
|
"test-node-coverage": "nyc --reporter=lcov --reporter=text mocha --recursive test/app test/modules ts/test-node ts/test-both",
|
|
"eslint": "eslint .",
|
|
"lint": "yarn format --list-different && yarn eslint",
|
|
"lint-deps": "node ts/util/lint/linter.js",
|
|
"lint-license-comments": "ts-node ts/util/lint/license_comments.ts",
|
|
"format": "prettier --write \"*.{css,js,json,md,scss,ts,tsx}\" \"./**/*.{css,js,json,md,scss,ts,tsx}\"",
|
|
"transpile": "tsc",
|
|
"clean-transpile": "rimraf ts/**/*.js && rimraf ts/*.js",
|
|
"open-coverage": "open coverage/lcov-report/index.html",
|
|
"ready": "npm-run-all --print-label clean-transpile grunt --parallel lint lint-deps test-node test-electron",
|
|
"dev": "run-p --print-label dev:*",
|
|
"dev:grunt": "yarn grunt dev",
|
|
"dev:webpack": "cross-env NODE_ENV=development webpack-dev-server --hot",
|
|
"dev:typed-scss": "yarn build:typed-scss -w",
|
|
"dev:storybook": "cross-env SIGNAL_ENV=storybook start-storybook -p 6006 -s ./",
|
|
"build": "run-s --print-label build:grunt build:typed-scss build:webpack build:release build:zip",
|
|
"build:acknowledgments": "node scripts/generate-acknowledgments.js",
|
|
"build:dev": "run-s --print-label build:grunt build:typed-scss build:webpack",
|
|
"build:grunt": "yarn grunt",
|
|
"build:typed-scss": "tsm sticker-creator",
|
|
"build:webpack": "cross-env NODE_ENV=production webpack",
|
|
"build:electron": "electron-builder --config.extraMetadata.environment=$SIGNAL_ENV",
|
|
"build:release": "cross-env SIGNAL_ENV=production npm run build:electron -- --config.directories.output=release",
|
|
"build:zip": "node scripts/zip-macos-release.js",
|
|
"preverify:ts": "yarn build:typed-scss",
|
|
"verify": "run-p --print-label verify:*",
|
|
"verify:ts": "tsc --noEmit"
|
|
},
|
|
"optionalDependencies": {
|
|
"fs-xattr": "0.3.0"
|
|
},
|
|
"dependencies": {
|
|
"@journeyapps/sqlcipher": "https://github.com/EvanHahn-signal/node-sqlcipher.git#16916949f0c010f6e6d3d5869b10a0ab813eae75",
|
|
"@sindresorhus/is": "0.8.0",
|
|
"abort-controller": "3.0.0",
|
|
"array-move": "2.1.0",
|
|
"backbone": "1.3.3",
|
|
"blob-util": "1.3.0",
|
|
"blueimp-canvas-to-blob": "3.14.0",
|
|
"blueimp-load-image": "5.14.0",
|
|
"blurhash": "1.1.3",
|
|
"bunyan": "1.8.15",
|
|
"classnames": "2.2.5",
|
|
"config": "1.28.1",
|
|
"copy-text-to-clipboard": "2.1.0",
|
|
"dashdash": "1.14.1",
|
|
"emoji-datasource": "6.0.0",
|
|
"emoji-datasource-apple": "6.0.0",
|
|
"emoji-regex": "9.2.0",
|
|
"encoding": "0.1.13",
|
|
"fast-glob": "3.2.1",
|
|
"filesize": "3.6.1",
|
|
"firstline": "1.2.1",
|
|
"form-data": "3.0.0",
|
|
"fs-extra": "5.0.0",
|
|
"fuse.js": "3.4.4",
|
|
"glob": "7.1.6",
|
|
"google-libphonenumber": "3.2.17",
|
|
"got": "8.3.2",
|
|
"history": "4.9.0",
|
|
"intl-tel-input": "12.1.15",
|
|
"jquery": "3.5.0",
|
|
"js-yaml": "3.13.1",
|
|
"libsignal-client": "https://github.com/signalapp/libsignal-client-node.git#f10fbd04eb6efb396eb12c25429761e8785dc9d0",
|
|
"linkify-it": "2.2.0",
|
|
"lodash": "4.17.20",
|
|
"lru-cache": "6.0.0",
|
|
"memoizee": "0.4.14",
|
|
"mkdirp": "0.5.2",
|
|
"moment": "2.21.0",
|
|
"mustache": "2.3.0",
|
|
"node-fetch": "2.6.1",
|
|
"node-forge": "0.10.0",
|
|
"normalize-path": "3.0.0",
|
|
"os-locale": "3.0.1",
|
|
"p-map": "2.1.0",
|
|
"p-props": "4.0.0",
|
|
"p-queue": "6.2.1",
|
|
"parchment": "1.1.4",
|
|
"pify": "3.0.0",
|
|
"popper.js": "1.15.0",
|
|
"protobufjs": "6.10.2",
|
|
"proxy-agent": "3.1.1",
|
|
"quill": "1.3.7",
|
|
"quill-delta": "4.0.1",
|
|
"react": "16.8.3",
|
|
"react-blurhash": "0.1.2",
|
|
"react-contextmenu": "2.11.0",
|
|
"react-dom": "16.8.3",
|
|
"react-dropzone": "10.1.7",
|
|
"react-hot-loader": "4.12.11",
|
|
"react-measure": "2.3.0",
|
|
"react-popper": "1.3.7",
|
|
"react-quill": "2.0.0-beta.2",
|
|
"react-redux": "7.1.0",
|
|
"react-router-dom": "5.0.1",
|
|
"react-sortable-hoc": "1.9.1",
|
|
"react-virtualized": "9.21.0",
|
|
"read-last-lines": "1.8.0",
|
|
"redux": "4.0.1",
|
|
"redux-logger": "3.0.6",
|
|
"redux-promise-middleware": "6.1.0",
|
|
"redux-thunk": "2.3.0",
|
|
"redux-ts-utils": "3.2.2",
|
|
"reselect": "4.0.0",
|
|
"rimraf": "2.6.2",
|
|
"ringrtc": "https://github.com/signalapp/signal-ringrtc-node.git#b43c6b728d62b6d386d95705e128f32f44edb650",
|
|
"sanitize-filename": "1.6.3",
|
|
"sanitize.css": "11.0.0",
|
|
"semver": "5.4.1",
|
|
"sharp": "0.27.0",
|
|
"tar": "4.4.8",
|
|
"testcheck": "1.0.0-rc.2",
|
|
"tmp": "0.0.33",
|
|
"to-arraybuffer": "1.0.1",
|
|
"typeface-inter": "3.10.0",
|
|
"underscore": "1.9.0",
|
|
"uuid": "3.3.2",
|
|
"websocket": "1.0.28",
|
|
"zkgroup": "https://github.com/signalapp/signal-zkgroup-node.git#2d7db946cc88492b65cc66e9aa9de0c9e664fd8d"
|
|
},
|
|
"devDependencies": {
|
|
"@babel/core": "7.7.7",
|
|
"@babel/plugin-proposal-class-properties": "7.7.4",
|
|
"@babel/plugin-transform-runtime": "7.8.3",
|
|
"@babel/preset-react": "7.7.4",
|
|
"@babel/preset-typescript": "7.7.7",
|
|
"@storybook/addon-actions": "5.1.11",
|
|
"@storybook/addon-knobs": "5.1.11",
|
|
"@storybook/addons": "5.1.11",
|
|
"@storybook/react": "5.1.11",
|
|
"@types/backbone": "1.4.3",
|
|
"@types/blueimp-load-image": "5.14.1",
|
|
"@types/bunyan": "1.8.6",
|
|
"@types/chai": "4.1.2",
|
|
"@types/classnames": "2.2.3",
|
|
"@types/config": "0.0.34",
|
|
"@types/dashdash": "1.14.0",
|
|
"@types/filesize": "3.6.0",
|
|
"@types/fs-extra": "5.0.5",
|
|
"@types/google-libphonenumber": "7.4.14",
|
|
"@types/got": "9.4.1",
|
|
"@types/history": "4.7.2",
|
|
"@types/html-webpack-plugin": "3.2.1",
|
|
"@types/jquery": "3.5.0",
|
|
"@types/js-yaml": "3.12.0",
|
|
"@types/linkify-it": "2.1.0",
|
|
"@types/lodash": "4.14.106",
|
|
"@types/long": "4.0.1",
|
|
"@types/lru-cache": "5.1.0",
|
|
"@types/memoizee": "0.4.2",
|
|
"@types/mkdirp": "0.5.2",
|
|
"@types/mocha": "5.0.0",
|
|
"@types/node-fetch": "2.5.7",
|
|
"@types/node-forge": "0.9.5",
|
|
"@types/normalize-path": "3.0.0",
|
|
"@types/pify": "3.0.2",
|
|
"@types/quill": "1.3.10",
|
|
"@types/react": "16.8.5",
|
|
"@types/react-dom": "16.8.2",
|
|
"@types/react-measure": "2.0.5",
|
|
"@types/react-redux": "7.1.2",
|
|
"@types/react-router-dom": "4.3.4",
|
|
"@types/react-sortable-hoc": "0.6.5",
|
|
"@types/react-virtualized": "9.18.12",
|
|
"@types/redux-logger": "3.0.7",
|
|
"@types/rimraf": "2.0.2",
|
|
"@types/semver": "5.5.0",
|
|
"@types/sharp": "0.27.1",
|
|
"@types/sinon": "9.0.8",
|
|
"@types/storybook__addon-actions": "3.4.3",
|
|
"@types/storybook__addon-knobs": "5.0.3",
|
|
"@types/storybook__react": "4.0.2",
|
|
"@types/underscore": "1.10.3",
|
|
"@types/uuid": "3.4.4",
|
|
"@types/webpack": "4.39.0",
|
|
"@types/webpack-dev-server": "3.1.7",
|
|
"@types/websocket": "1.0.0",
|
|
"@typescript-eslint/eslint-plugin": "4.8.1",
|
|
"@typescript-eslint/parser": "4.8.1",
|
|
"arraybuffer-loader": "1.0.3",
|
|
"asar": "0.14.0",
|
|
"babel-core": "7.0.0-bridge.0",
|
|
"babel-loader": "8.0.6",
|
|
"babel-plugin-lodash": "3.3.4",
|
|
"chai": "4.1.2",
|
|
"core-js": "2.4.1",
|
|
"cross-env": "5.2.0",
|
|
"css-loader": "3.2.0",
|
|
"electron": "11.2.3",
|
|
"electron-builder": "22.9.1",
|
|
"electron-mocha": "8.1.1",
|
|
"electron-notarize": "0.1.1",
|
|
"eslint": "7.7.0",
|
|
"eslint-config-airbnb-typescript-prettier": "3.1.0",
|
|
"eslint-config-prettier": "6.11.0",
|
|
"eslint-plugin-import": "2.22.0",
|
|
"eslint-plugin-mocha": "8.0.0",
|
|
"eslint-plugin-more": "1.0.0",
|
|
"eslint-plugin-react": "7.20.6",
|
|
"file-loader": "4.2.0",
|
|
"grunt": "1.0.1",
|
|
"grunt-cli": "1.2.0",
|
|
"grunt-contrib-concat": "1.0.1",
|
|
"grunt-contrib-copy": "1.0.0",
|
|
"grunt-contrib-watch": "1.0.0",
|
|
"grunt-exec": "3.0.0",
|
|
"grunt-gitinfo": "0.1.7",
|
|
"grunt-sass": "3.0.1",
|
|
"html-webpack-plugin": "3.2.0",
|
|
"jsdoc": "3.6.2",
|
|
"mocha": "4.1.0",
|
|
"mocha-testcheck": "1.0.0-rc.0",
|
|
"node-gyp": "5.0.3",
|
|
"node-sass": "4.14.1",
|
|
"node-sass-import-once": "1.2.0",
|
|
"npm-run-all": "4.1.5",
|
|
"nyc": "11.4.1",
|
|
"patch-package": "6.1.2",
|
|
"prettier": "2.1.2",
|
|
"react-docgen-typescript": "1.2.6",
|
|
"sass-loader": "7.2.0",
|
|
"sinon": "9.2.4",
|
|
"snyk": "1.316.1",
|
|
"spectron": "5.0.0",
|
|
"style-loader": "1.0.0",
|
|
"ts-loader": "4.1.0",
|
|
"ts-node": "8.3.0",
|
|
"typed-scss-modules": "0.0.11",
|
|
"typescript": "4.1.3",
|
|
"webpack": "4.39.2",
|
|
"webpack-cli": "3.3.7",
|
|
"webpack-dev-server": "3.8.0"
|
|
},
|
|
"resolutions": {
|
|
"@storybook/react/@storybook/core/node-fetch": "2.6.1"
|
|
},
|
|
"engines": {
|
|
"node": "12.18.3"
|
|
},
|
|
"build": {
|
|
"appId": "org.whispersystems.signal-desktop",
|
|
"mac": {
|
|
"asarUnpack": [
|
|
"**/*.node",
|
|
"node_modules/zkgroup/libzkgroup.*",
|
|
"node_modules/libsignal-client/build/*.node"
|
|
],
|
|
"artifactName": "${name}-mac-${version}.${ext}",
|
|
"category": "public.app-category.social-networking",
|
|
"darkModeSupport": true,
|
|
"hardenedRuntime": true,
|
|
"entitlements": "./build/entitlements.mac.plist",
|
|
"icon": "build/icons/mac/icon.icns",
|
|
"publish": [
|
|
{
|
|
"provider": "generic",
|
|
"url": "https://updates.signal.org/desktop"
|
|
}
|
|
],
|
|
"target": [
|
|
"zip",
|
|
"dmg"
|
|
],
|
|
"bundleVersion": "1"
|
|
},
|
|
"win": {
|
|
"asarUnpack": [
|
|
"**/*.node",
|
|
"node_modules/spellchecker/vendor/hunspell_dictionaries",
|
|
"node_modules/sharp",
|
|
"node_modules/zkgroup/libzkgroup.*",
|
|
"node_modules/libsignal-client/build/*.node"
|
|
],
|
|
"artifactName": "${name}-win-${version}.${ext}",
|
|
"certificateSubjectName": "Signal (Quiet Riddle Ventures, LLC)",
|
|
"certificateSha1": "77B2AA4421E5F377454B8B91E573746592D1543D",
|
|
"publisherName": "Signal (Quiet Riddle Ventures, LLC)",
|
|
"icon": "build/icons/win/icon.ico",
|
|
"publish": [
|
|
{
|
|
"provider": "generic",
|
|
"url": "https://updates.signal.org/desktop"
|
|
}
|
|
],
|
|
"target": [
|
|
"nsis"
|
|
]
|
|
},
|
|
"nsis": {
|
|
"deleteAppDataOnUninstall": true
|
|
},
|
|
"linux": {
|
|
"category": "Network;InstantMessaging;Chat",
|
|
"desktop": {
|
|
"StartupWMClass": "Signal"
|
|
},
|
|
"asarUnpack": [
|
|
"**/*.node",
|
|
"node_modules/spellchecker/vendor/hunspell_dictionaries",
|
|
"node_modules/sharp",
|
|
"node_modules/zkgroup/libzkgroup.*",
|
|
"node_modules/libsignal-client/build/*.node"
|
|
],
|
|
"target": [
|
|
"deb"
|
|
],
|
|
"icon": "build/icons/png"
|
|
},
|
|
"deb": {
|
|
"depends": [
|
|
"libnotify4",
|
|
"libxtst6",
|
|
"libnss3",
|
|
"libasound2",
|
|
"libxss1"
|
|
]
|
|
},
|
|
"protocols": {
|
|
"name": "sgnl-url-scheme",
|
|
"schemes": [
|
|
"sgnl"
|
|
]
|
|
},
|
|
"files": [
|
|
"package.json",
|
|
"config/default.json",
|
|
"config/${env.SIGNAL_ENV}.json",
|
|
"config/local-${env.SIGNAL_ENV}.json",
|
|
"background.html",
|
|
"about.html",
|
|
"settings.html",
|
|
"permissions_popup.html",
|
|
"debug_log.html",
|
|
"loading.html",
|
|
"_locales/**",
|
|
"protos/*",
|
|
"js/**",
|
|
"ts/**/*.js",
|
|
"ts/*.js",
|
|
"stylesheets/*.css",
|
|
"!js/register.js",
|
|
"app/*",
|
|
"preload.js",
|
|
"preload_utils.js",
|
|
"about_preload.js",
|
|
"settings_preload.js",
|
|
"permissions_popup_preload.js",
|
|
"debug_log_preload.js",
|
|
"loading_preload.js",
|
|
"main.js",
|
|
"images/**",
|
|
"fonts/**",
|
|
"sounds/*",
|
|
"build/icons",
|
|
"node_modules/**",
|
|
"sticker-creator/preload.js",
|
|
"sticker-creator/dist/**",
|
|
"!node_modules/emoji-datasource/emoji_pretty.json",
|
|
"!node_modules/emoji-datasource/**/*.png",
|
|
"!node_modules/emoji-datasource-apple/emoji_pretty.json",
|
|
"!node_modules/emoji-datasource-apple/img/apple/sheets*",
|
|
"!node_modules/spellchecker/vendor/hunspell/**/*",
|
|
"!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts,.snyk-*.flag}",
|
|
"!**/node_modules/.bin",
|
|
"!**/node_modules/*/build/**",
|
|
"!**/*.{o,hprof,orig,pyc,pyo,rbc}",
|
|
"!**/._*",
|
|
"!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}",
|
|
"node_modules/spellchecker/build/Release/*.node",
|
|
"node_modules/websocket/build/Release/*.node",
|
|
"!node_modules/websocket/builderror.log",
|
|
"node_modules/ref-napi/build/Release/*.node",
|
|
"node_modules/ffi-napi/build/Release/*.node",
|
|
"node_modules/socks/build/*.js",
|
|
"node_modules/socks/build/common/*.js",
|
|
"node_modules/socks/build/client/*.js",
|
|
"node_modules/smart-buffer/build/*.js",
|
|
"node_modules/sharp/build/**",
|
|
"!node_modules/sharp/{install,src,vendor/include,vendor/*/include}",
|
|
"!node_modules/@journeyapps/sqlcipher/deps/*",
|
|
"!node_modules/@journeyapps/sqlcipher/build/*",
|
|
"!node_modules/@journeyapps/sqlcipher/build-tmp-napi-*",
|
|
"!node_modules/@journeyapps/sqlcipher/lib/binding/node-*",
|
|
"node_modules/libsignal-client/build/*.node",
|
|
"node_modules/ringrtc/build/${platform}/**"
|
|
]
|
|
}
|
|
}
|