{ "name": "signal-desktop", "productName": "Signal", "description": "Private messaging from your desktop", "desktopName": "signal.desktop", "repository": "https://github.com/signalapp/Signal-Desktop.git", "version": "5.22.0-beta.1", "license": "AGPL-3.0-only", "author": { "name": "Open Whisper Systems", "email": "support@signal.org" }, "main": "app/main.js", "scripts": { "postinstall": "yarn build:acknowledgments && yarn build:fuses && 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": "yarn 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 scripts/prepare_beta_build.js", "prepare-alpha-build": "node scripts/prepare_alpha_build.js", "prepare-alpha-version": "node scripts/prepare_alpha_version.js", "prepare-windows-cert": "node scripts/prepare_windows_cert.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 --cache .", "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 \"*.{html,css,js,json,md,scss,ts,tsx}\" \"./**/*.{html,css,js,json,md,scss,ts,tsx}\"", "transpile": "tsc", "clean-transpile-once": "rimraf app/**/*.js app/*.js ts/**/*.js ts/*.js tsconfig.tsbuildinfo", "clean-transpile": "yarn run clean-transpile-once && yarn run clean-transpile-once", "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:transpile": "yarn run transpile --watch --preserveWatchOutput", "dev:webpack": "cross-env NODE_ENV=development webpack serve --mode development", "dev:typed-scss": "yarn build:typed-scss -w", "dev:storybook": "cross-env SIGNAL_ENV=storybook start-storybook -p 6006 -s ./", "storybook:axe": "build-storybook && axe-storybook", "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": "run-p build:webpack:sticker-creator build:webpack:preload build:webpack:sql-worker build:webpack:heic-worker", "build:webpack:sticker-creator": "cross-env NODE_ENV=production webpack", "build:webpack:preload": "cross-env NODE_ENV=production webpack -c webpack-preload.config.ts", "build:webpack:sql-worker": "cross-env NODE_ENV=production webpack -c webpack-sql-worker.config.ts", "build:webpack:heic-worker": "cross-env NODE_ENV=production webpack -c webpack-heic-worker.config.ts", "build:electron": "electron-builder --config.extraMetadata.environment=$SIGNAL_ENV", "build:release": "cross-env SIGNAL_ENV=production yarn build:electron -- --config.directories.output=release", "build:fuses": "node scripts/fuse-electron.js", "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": { "@popperjs/core": "2.9.2", "@react-spring/web": "9.2.6", "@signalapp/signal-client": "0.9.5", "@sindresorhus/is": "0.8.0", "abort-controller": "3.0.0", "array-move": "2.1.0", "axe-core": "4.1.4", "backbone": "1.4.0", "better-sqlite3": "https://github.com/signalapp/better-sqlite3#32828e03be0489572ab334239c5768c86697989", "bezier-easing": "2.1.0", "blob-util": "2.0.2", "blueimp-load-image": "5.14.0", "blurhash": "1.1.3", "classnames": "2.2.5", "config": "1.28.1", "copy-text-to-clipboard": "2.1.0", "dashdash": "1.14.1", "emoji-datasource": "7.0.2", "emoji-datasource-apple": "7.0.2", "emoji-regex": "9.2.2", "encoding": "0.1.13", "fast-glob": "3.2.1", "filesize": "3.6.1", "firstline": "1.2.1", "focus-trap-react": "8.8.1", "form-data": "4.0.0", "fs-extra": "5.0.0", "fuse.js": "3.4.4", "glob": "7.1.6", "google-libphonenumber": "3.2.17", "got": "11.8.2", "heic-convert": "^1.2.4", "history": "4.9.0", "humanize-duration": "3.26.0", "intl-tel-input": "12.1.15", "jquery": "3.5.0", "js-yaml": "3.13.1", "linkify-it": "2.2.0", "lodash": "4.17.21", "long": "4.0.0", "lru-cache": "6.0.0", "mac-screen-capture-permissions": "2.0.0", "memoizee": "0.4.14", "mkdirp": "0.5.2", "moment": "2.29.1", "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.6.2", "parchment": "1.1.4", "pify": "3.0.0", "pino": "6.11.1", "pino-multi-stream": "5.3.0", "protobufjs": "6.10.2", "proxy-agent": "5.0.0", "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": "2.2.5", "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#f8764156753e68eb85220dc1c04a6ced3704bedf", "rotating-file-stream": "2.1.5", "sanitize.css": "11.0.0", "semver": "5.4.1", "sharp": "0.28.1", "split2": "4.0.0", "testcheck": "1.0.0-rc.2", "typeface-inter": "3.10.0", "underscore": "1.12.1", "uuid": "3.3.2", "websocket": "1.0.28", "zkgroup": "https://github.com/signalapp/signal-zkgroup-node.git#0d2b3874d2e671fa5fdcc2154065cc061f977672", "zod": "3.5.1" }, "devDependencies": { "@babel/core": "7.14.3", "@babel/plugin-proposal-class-properties": "7.7.4", "@babel/plugin-proposal-nullish-coalescing-operator": "7.14.5", "@babel/plugin-proposal-optional-chaining": "7.13.8", "@babel/plugin-transform-runtime": "7.8.3", "@babel/preset-react": "7.7.4", "@babel/preset-typescript": "7.13.0", "@chanzuckerberg/axe-storybook-testing": "3.0.2", "@electron/fuses": "1.2.1", "@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.5", "@types/better-sqlite3": "7.4.0", "@types/blueimp-load-image": "5.14.1", "@types/chai": "4.2.18", "@types/chai-as-promised": "7.1.4", "@types/classnames": "2.2.3", "@types/config": "0.0.39", "@types/dashdash": "1.14.0", "@types/filesize": "3.6.0", "@types/fs-extra": "5.0.5", "@types/google-libphonenumber": "7.4.14", "@types/history": "4.7.2", "@types/humanize-duration": "^3.18.1", "@types/jquery": "3.5.6", "@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/mustache": "4.1.2", "@types/node": "14.14.37", "@types/node-fetch": "2.5.7", "@types/node-forge": "0.9.5", "@types/normalize-path": "3.0.0", "@types/pify": "3.0.2", "@types/pino": "6.3.6", "@types/pino-multi-stream": "5.1.0", "@types/quill": "1.3.10", "@types/react": "16.8.6", "@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.28.0", "@types/sinon": "10.0.2", "@types/split2": "3.2.1", "@types/storybook__addon-actions": "3.4.3", "@types/storybook__addon-knobs": "5.0.3", "@types/storybook__react": "4.0.2", "@types/terser-webpack-plugin": "5.0.3", "@types/underscore": "1.10.3", "@types/uuid": "3.4.4", "@types/webpack-dev-server": "3.11.3", "@types/websocket": "1.0.0", "@typescript-eslint/eslint-plugin": "4.30.0", "@typescript-eslint/parser": "4.30.0", "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.3.4", "chai-as-promised": "7.1.1", "core-js": "2.6.9", "cross-env": "5.2.0", "css-loader": "3.2.0", "electron": "13.5.0", "electron-builder": "22.11.7", "electron-mocha": "10.1.0", "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": "9.0.0", "eslint-plugin-more": "1.0.0", "eslint-plugin-react": "7.20.6", "file-loader": "4.2.0", "grunt": "1.4.0", "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": "5.3.1", "jsdoc": "3.6.2", "mocha": "4.1.0", "mocha-testcheck": "1.0.0-rc.0", "node-gyp": "^6.1.0", "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.4.7", "prettier": "^2.2.1", "react-docgen-typescript": "1.2.6", "sass-loader": "7.2.0", "sinon": "11.1.1", "snyk": "1.316.1", "spectron": "5.0.0", "style-loader": "1.0.0", "terser-webpack-plugin": "5.1.1", "ts-loader": "4.1.0", "ts-node": "8.3.0", "typed-scss-modules": "0.0.11", "typescript": "4.4.2", "webpack": "5.30.0", "webpack-cli": "4.6.0", "webpack-dev-server": "3.11.2" }, "resolutions": { "@storybook/react/@storybook/core/node-fetch": "2.6.1", "fast-glob/glob-parent": "5.1.2", "read-last-lines/mz/thenify-all/thenify": "3.3.1", "sharp/color/color-string": "1.5.5" }, "engines": { "node": "14.16.0" }, "build": { "appId": "org.whispersystems.signal-desktop", "mac": { "asarUnpack": [ "**/*.node", "node_modules/zkgroup/libzkgroup.*", "node_modules/@signalapp/signal-client/build/*.node", "node_modules/mac-screen-capture-permissions/build/Release/*.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/@signalapp/signal-client/build/*.node" ], "artifactName": "${name}-win-${version}.${ext}", "certificateSubjectName": "Signal Messenger, LLC", "certificateSha1": "8C9A0B5C852EC703D83EF7BFBCEB54B796073759", "signingHashAlgorithms": [ "sha256" ], "publisherName": "Signal Messenger, 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/@signalapp/signal-client/build/*.node" ], "target": [ "deb" ], "icon": "build/icons/png" }, "deb": { "depends": [ "libnotify4", "libxtst6", "libnss3", "libasound2", "libxss1" ] }, "protocols": { "name": "sgnl-url-scheme", "schemes": [ "sgnl", "signalcaptcha" ] }, "asarUnpack": [ "ts/workers/heicConverter.bundle.js", "ts/sql/mainWorker.bundle.js", "node_modules/better-sqlite3/build/Release/better_sqlite3.node" ], "files": [ "package.json", "config/default.json", "config/${env.SIGNAL_ENV}.json", "config/local-${env.SIGNAL_ENV}.json", "background.html", "about.html", "screenShare.html", "settings.html", "permissions_popup.html", "debug_log.html", "loading.html", "_locales/**", "protos/*", "js/**", "libtextsecure/**", "ts/**/*.js", "ts/*.js", "stylesheets/*.css", "!js/register.js", "app/*", "preload.bundle.js", "preload_utils.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,benchmark}", "!**/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/ref-array-napi/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/better-sqlite3/deps/*", "!node_modules/better-sqlite3/src/*", "node_modules/better-sqlite3/build/Release/better_sqlite3.node", "node_modules/@signalapp/signal-client/build/*${platform}*.node", "node_modules/ringrtc/build/${platform}/**", "node_modules/mac-screen-capture-permissions/build/Release/*.node", "!**/node_modules/ffi-napi/deps", "!**/node_modules/react-dom/*/*.development.js", "!node_modules/.cache" ] } }