Anonymous
Еще optional catch binding, сокеты через HTTP/2, CSS Paint API и Resize Observer (уже без флага)
Завтра
А есть ли в электроне готовое решение для авто-апдейтов?
Andrey
Обновление приложений | Electron https://electronjs.org/docs/tutorial/updates
Andrey
Я вот не пробовал, Но неужели с этим столько проблем, что все спрашивают?
Данил
Я вот не пробовал, Но неужели с этим столько проблем, что все спрашивают?
> есть ли возможность работы на Linux? > есть поддержка бета версий, где от тебя необходимо только делать коммиты в ветку dev? (ну я сделал у себя так, у меня собственное решение)
Данил
вот первое самое обидное
Andrey
Про разные каналы доставки есть у Nucleos, как там указано
Andrey
А https://www.electron.build/auto-update? У него вроде нет ограничений на платформы. Разве что Code signature validation not only on macOS, but also on Windows.
Sergey
кто-нибудь размышлял над роутером для электрона в том плане, что приложение исключетельно электрон и нет и не будет никакой адресной строки. все роутеры заечем-то все равно в/из строку сериализуют. вообще адекватный роутер должен быть простой fsm расширяемой имхо. можно расширить сериализацией, можно расширить историей и тд
Sergey
как router5, но там тоже зачем-то в строки сериализуется ¯\_(ツ)_/¯
Завтра
На эффекторе можно за минуту написать
Завтра
Sergey
что это?
Завтра
github.com/zerobias/effector
Sergey
ну да, мб, но надо подробнее код посмотерть
Sergey
в целом ок выглядит
Завтра
В целом ахуэнна выглядит Единственный вопрос пока только в том, как store.map(smthFromStore2) апдейтить при изменении второго стора
Ernest
Привет всем... ребята есть кто нибудь кто работал с реактом и электроном??? Мне нужна помощь
Юрий
Какая?)
Ernest
в реакт компоненте не получаеться импортировать методы из электрона..ошибка—— require is not defined
Ohar
Ernest
Import {ipcRenderer} from electron....в реакт компоненте это дает ошибку
Максим
Говори за себя. Я телепат
Завтра
Завтра
ему
Ernest
ошибка—— require is not defined
Максим
а package.json можно?
Юрий
Я тоже подозреваю что там нет webpack)
Sergey
Даже если нет
Sergey
Скорее всего там создано окно без прокидывания в него ноды
Таймураз
У меня такое было, когда я деструктуризацией require из какого-то модуля электрона доставал решил, вроде как, импортнув полностью весь модуль
Таймураз
а из него уже вытащив require
Ernest
{ "name": "Behive-Desktop", "version": "1.1.4", "description": "Behive Desktop App", "main": "main.js", "license": "MIT", "scripts": { "start": "webpack --progress --config webpack.config.js && electron .", "dev": "webpack-dev-server --progress --config webpack.config.dev.js", "compile": "webpack --progress --config webpack.config.js", "pack": "electron-builder --dir", "dist": "electron-builder", "fmt:prettier": "prettier --write --single-quote", "lint:eslint": "eslint --ignore-path .gitignore", "precommit": "lint-staged" }, "repository": { "type": "git", "url": "git@git.bluenet.io:behive/behive-desktop.git" }, "contributors": [ "Sirarpi Manukyan", "Ernest Chakhoyan <chakhoyanernest@gmail.com>", "Grigor Apresyan" ], "build": { "appId": "org.behive.blunet", "dmg": { "contents": [ { "x": 110, "y": 150 }, { "x": 240, "y": 150, "type": "link", "path": "/Applications" } ] }, "linux": { "category": "Hospital", "target": [ "AppImage", "deb" ] }, "win": { "target": "NSIS", "icon": "build/icon.ico" }, "mac": { "category": "public.app-category.hospitality" } }, "devDependencies": { "axios": "^0.17.1", "babel-core": "^6.26.0", "babel-eslint": "^8.2.1", "babel-loader": "^7.1.2", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "css-loader": "^0.28.7", "electron": "^1.8.7", "electron-builder": "^19.49.0", "eslint": "^4.15.0", "eslint-config-prettier": "^2.9.0", "eslint-plugin-prettier": "^2.4.0", "eslint-plugin-react": "^7.5.1", "extract-text-webpack-plugin": "^3.0.2", "file-loader": "^1.1.6", "history": "^4.7.2", "html-webpack-plugin": "^2.30.1", "husky": "^0.14.3", "image-compressor": "^1.2.0", "lint-staged": "^6.0.0", "material-ui": "^1.0.0-beta.33", "material-ui-icons": "^1.0.0-beta.17", "node-sass": "^4.7.2", "prettier": "1.9.2", "prettier-eslint-cli": "^4.7.0", "prop-types": "^15.6.0", "react": "^16.2.0", "react-bootstrap": "^0.32.0", "react-dom": "^16.2.0", "react-redux": "^5.0.6", "react-router-dom": "^4.2.2", "react-telephone-input": "^4.3.4", "redux": "^3.7.2", "redux-devtools-extension": "^2.13.2", "redux-immutable-state-invariant": "^2.1.0", "redux-thunk": "^2.2.0", "sass-loader": "^6.0.6", "style-loader": "^0.19.1", "url-loader": "^0.6.2", "webpack": "^3.10.0", "webpack-dev-server": "^2.9.7" }, "dependencies": { "@aspnet/signalr": "^1.0.2", "@livechat/ui-kit": "^0.1.0", "electron-windows-notifications": "^2.1.1", "image-compressor.js": "^1.0.0", "lodash": "^4.17.5", "moment": "^2.22.1", "msgpack5": "^4.2.0", "qrcode.react": "^0.8.0", "react-datepicker": "^1.4.1", "react-dropzone": "^4.2.9", "react-progress-bar-plus": "^1.3.1", "react-select-plus": "^1.2.0", "react-soundplayer": "^1.0.4", "redux-logger": "^3.0.6", "store": "^2.0.12", "tslib": "^1.9.3" }, "stylelint": { "extends": "stylelint-config-standard", "rules": { "indentation": null } }, "lint-staged": { "src/**/*.{js,jsx}": [ "fmt:prettier", "lint:eslint", "git add" ] }, "prettier": { "singleQuote": true } }
Ernest
Вебпак тоже есть
Таймураз
{ "name": "Behive-Desktop", "version": "1.1.4", "description": "Behive Desktop App", "main": "main.js", "license": "MIT", "scripts": { "start": "webpack --progress --config webpack.config.js && electron .", "dev": "webpack-dev-server --progress --config webpack.config.dev.js", "compile": "webpack --progress --config webpack.config.js", "pack": "electron-builder --dir", "dist": "electron-builder", "fmt:prettier": "prettier --write --single-quote", "lint:eslint": "eslint --ignore-path .gitignore", "precommit": "lint-staged" }, "repository": { "type": "git", "url": "git@git.bluenet.io:behive/behive-desktop.git" }, "contributors": [ "Sirarpi Manukyan", "Ernest Chakhoyan <chakhoyanernest@gmail.com>", "Grigor Apresyan" ], "build": { "appId": "org.behive.blunet", "dmg": { "contents": [ { "x": 110, "y": 150 }, { "x": 240, "y": 150, "type": "link", "path": "/Applications" } ] }, "linux": { "category": "Hospital", "target": [ "AppImage", "deb" ] }, "win": { "target": "NSIS", "icon": "build/icon.ico" }, "mac": { "category": "public.app-category.hospitality" } }, "devDependencies": { "axios": "^0.17.1", "babel-core": "^6.26.0", "babel-eslint": "^8.2.1", "babel-loader": "^7.1.2", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "css-loader": "^0.28.7", "electron": "^1.8.7", "electron-builder": "^19.49.0", "eslint": "^4.15.0", "eslint-config-prettier": "^2.9.0", "eslint-plugin-prettier": "^2.4.0", "eslint-plugin-react": "^7.5.1", "extract-text-webpack-plugin": "^3.0.2", "file-loader": "^1.1.6", "history": "^4.7.2", "html-webpack-plugin": "^2.30.1", "husky": "^0.14.3", "image-compressor": "^1.2.0", "lint-staged": "^6.0.0", "material-ui": "^1.0.0-beta.33", "material-ui-icons": "^1.0.0-beta.17", "node-sass": "^4.7.2", "prettier": "1.9.2", "prettier-eslint-cli": "^4.7.0", "prop-types": "^15.6.0", "react": "^16.2.0", "react-bootstrap": "^0.32.0", "react-dom": "^16.2.0", "react-redux": "^5.0.6", "react-router-dom": "^4.2.2", "react-telephone-input": "^4.3.4", "redux": "^3.7.2", "redux-devtools-extension": "^2.13.2", "redux-immutable-state-invariant": "^2.1.0", "redux-thunk": "^2.2.0", "sass-loader": "^6.0.6", "style-loader": "^0.19.1", "url-loader": "^0.6.2", "webpack": "^3.10.0", "webpack-dev-server": "^2.9.7" }, "dependencies": { "@aspnet/signalr": "^1.0.2", "@livechat/ui-kit": "^0.1.0", "electron-windows-notifications": "^2.1.1", "image-compressor.js": "^1.0.0", "lodash": "^4.17.5", "moment": "^2.22.1", "msgpack5": "^4.2.0", "qrcode.react": "^0.8.0", "react-datepicker": "^1.4.1", "react-dropzone": "^4.2.9", "react-progress-bar-plus": "^1.3.1", "react-select-plus": "^1.2.0", "react-soundplayer": "^1.0.4", "redux-logger": "^3.0.6", "store": "^2.0.12", "tslib": "^1.9.3" }, "stylelint": { "extends": "stylelint-config-standard", "rules": { "indentation": null } }, "lint-staged": { "src/**/*.{js,jsx}": [ "fmt:prettier", "lint:eslint", "git add" ] }, "prettier": { "singleQuote": true } }
https://gist.github.com зачетная вещь
Sergey
Вебпак тоже есть
как окно создаешь?
Ernest
как окно создаешь?
В отдельном файле где main processor elektrona
Завтра
Господа, юзаю electron-builder и ловлю ошибку "Application entry file build/electron.js in ....asar does not exist"
Завтра
Нагуглил "extends": null дописать в конфиге, но после этого ругается, что нет нод модулей, в asar в нод модулях только 2 пакета
Завтра
Завтра
Какая-то странная хрень
Lev
модуля грит нету)
Завтра
Круто)))
Завтра
и здесь нихрена нет от слова совсем почему-то
Завтра
Может, из-за того, что я транспилю исходники в папку "target", а node_modules лежат уровнем выше?
Завтра
или проблема кроется здесь? Нужно ли ресолвить require'ы (кроме нативных)?
Завтра
Короче, там какая-то ебала была из-за electron-reload и electron-devtools-installer, они почему-то не вырезались из билда, хотя закрыты в условия
snatvb
😄
Завтра
Кто-нибудь решал вопрос лицензии в приложениях? Вообще, у меня более глобальная диллема сейчас Приложуха подключается к сокету OBS и делает всякие крутые штуки с ним Часть функционала будет платной, а прикрываться это будет по сути только if (hasLicense) {...} Отсюда несколько вопросов - В моем понимании простейшая лицензия - чекать каждый раз сервер на проверку подлинности ключа, скажем. Что делают в случае если он подменяется через прокси/hosts-файл? - Могут ли "распаковать" и поменять исходники приложения? Там же какой-то asar архив типа - Видел, что авто-апдейты через гитхаб делаются. Но это же прямой доступ к репозиторию, разве нет? Или это все внутри электрона делается?
Ohar
Кто-нибудь решал вопрос лицензии в приложениях? Вообще, у меня более глобальная диллема сейчас Приложуха подключается к сокету OBS и делает всякие крутые штуки с ним Часть функционала будет платной, а прикрываться это будет по сути только if (hasLicense) {...} Отсюда несколько вопросов - В моем понимании простейшая лицензия - чекать каждый раз сервер на проверку подлинности ключа, скажем. Что делают в случае если он подменяется через прокси/hosts-файл? - Могут ли "распаковать" и поменять исходники приложения? Там же какой-то asar архив типа - Видел, что авто-апдейты через гитхаб делаются. Но это же прямой доступ к репозиторию, разве нет? Или это все внутри электрона делается?
Запомни правило: «Всё, что на клиенте — уже взломано». Если не взломано — будет взломано завтра. Просто забудь о том, чтобы попытаться что-то там на клиенте скрыть, с этим ничего нельзя сделать. Если тебе нужен платный функционал, то или забей и делай как есть (проще), или реализуй его только на сервере (сложнее). Дступ должен быть только у клиентов, в профиле которых помечено, что они заплатили денюжку. Ну это так, из очевидного. >В моем понимании простейшая лицензия - чекать каждый раз сервер на проверку подлинности ключа, скажем. Что делают в случае если он подменяется через прокси/hosts-файл? Ничего не делают. Оно просто не должно работать без сервера и всё. Просто потому что логика на сервере. >Могут ли "распаковать" и поменять исходники приложения? Там же какой-то asar архив типа Да, могут и обязательно распакуют. Даже не рассчитывай, что этого не произойдёт. >Видел, что авто-апдейты через гитхаб делаются. Ты про Continuous Integration?
Ildar
Всем привет. Есть у кого реализация google oauth2 авторизации?
Anonymous
а вообще как вариант заюзать от гугла: https://github.com/google/google-auth-library-nodejs#oauth2
Завтра
Запомни правило: «Всё, что на клиенте — уже взломано». Если не взломано — будет взломано завтра. Просто забудь о том, чтобы попытаться что-то там на клиенте скрыть, с этим ничего нельзя сделать. Если тебе нужен платный функционал, то или забей и делай как есть (проще), или реализуй его только на сервере (сложнее). Дступ должен быть только у клиентов, в профиле которых помечено, что они заплатили денюжку. Ну это так, из очевидного. >В моем понимании простейшая лицензия - чекать каждый раз сервер на проверку подлинности ключа, скажем. Что делают в случае если он подменяется через прокси/hosts-файл? Ничего не делают. Оно просто не должно работать без сервера и всё. Просто потому что логика на сервере. >Могут ли "распаковать" и поменять исходники приложения? Там же какой-то asar архив типа Да, могут и обязательно распакуют. Даже не рассчитывай, что этого не произойдёт. >Видел, что авто-апдейты через гитхаб делаются. Ты про Continuous Integration?
Про “все, что на клиенте, уже взломано” это ясно Но проблема в том, что я не могу вынести логику на сервер, поскольку логика работает с сокетом на локалке, чисто физически невозможно реализовать
Ohar
Тогда просто забей
Ohar
Хотя я не очень понимаю, в чём проблема данные на сервак отправлять
Завтра
Хотя я не очень понимаю, в чём проблема данные на сервак отправлять
У меня приложение, которое работает с OBS, эта штука на компьютере пользователя локально поднимает сокет Если бы я мог, я бы сделал, чтобы вся логика работы с этим сокетом была на сервере, а приложение чисто фронт с авторизацией Но сокет локальный и подключиться к нему с сервака невозможно
Завтра
Интернет-то доступен
Завтра
Считай, что приложение работает с localhost’ом (так оно и есть, просто чтоб понятно было)
Ohar
Ну ты можешь сходить в процессе работы на сервак?
Завтра
Могу
Ohar
Ну вот
Завтра
Я имел в виду не это, а то, что обезопасить работу с локалкой, получается, невозможно
Завтра
Вы щас рофлите или что 🤔
Makc
Старым себя чувствую, просрал тренд и не знаю что это за словечко(
Makc
Обычно ситуация подобного типа, когда хочу то-то и вон это, но не могу. Складывается когда некто много хочет, но не понимает как это работает и еще и не имеет доступов.
Makc
Недавно парень хотел сменить логику работы сервера, ему разложили что делать, а он такой "только у меня к беку доступа нет"
Завтра
Тебя куда-то не в ту степь понесло совсем
Makc
Если у тебя есть доступ к беку - перенеси всю логику туда. Отдавай на фронт только результаты.
Завтра
Пиздец, несите огнетушитель
Makc
Тебя куда-то не в ту степь понесло совсем
Это тебя что то носит. Тебе ж сказали как обезопасить твою приложуху.
Завтра
ПРИЛОЖЕНИЕ ПОДКЛЮЧАЕТСЯ К ВЕБСОКЕТУ ДРУГОГО ПРИЛОЖЕНИЯ НА ЭТОМ ЖЕ КОМПЬЮТЕРЕ, ЛОКАЛЬНО РАБОТА ПРИЛОЖЕНИЯ ЗАКЛЮЧАЕТСЯ В ТОМ, ЧТОБЫ ПОСЫЛАТЬ ИВЕНТЫ ТУДА ВОПРОС БЫЛ В ТОМ, ЧТОБЫ ОГРАНИЧИТЬ ПРИЛОЖЕНИЮ ВОЗМОЖНОСТЬ ПОСЫЛАТЬ ЭТИ ИВЕНТЫ ПРИЧЕМ ЗДЕСЬ БЭКЭНД ГОСПОДИ, КАК БЭКЭНД ПОДКЛЮЧИТСЯ К ЛОКАЛЬНОМУ ВЕБСОКЕТУ
Завтра
Ощущение, как будто меня за клоуна держат, я хз
Завтра
Говоришь, что бизнес-логика приложения работает только локально Говорят вынести на бэкэнд