Merge branch 'release/3.5.2'

This commit is contained in:
Baptiste Grob
2020-11-03 20:39:11 +01:00
9 changed files with 200 additions and 13 deletions

View File

@@ -3,6 +3,7 @@
declare const __VERSION__: string;
declare const __WEB__: boolean;
import { SNLog } from 'snjs';
import angular from 'angular';
import { configRoutes } from './routes';
@@ -53,6 +54,7 @@ import {
import { trusted } from './filters';
import { isDev } from './utils';
import { Bridge, BrowserBridge } from './services/bridge';
import { startErrorReporting } from './services/errorReporting';
if (__WEB__) {
startApplication(
@@ -63,10 +65,14 @@ if (__WEB__) {
(window as any).startApplication = startApplication;
}
function startApplication(
async function startApplication(
defaultSyncServerHost: string,
bridge: Bridge
) {
SNLog.onLog = console.log;
startErrorReporting();
angular.module('app', ['ngSanitize']);
// Config
@@ -140,4 +146,8 @@ function startApplication(
},
});
}
angular.element(document).ready(() => {
angular.bootstrap(document, ['app']);
});
}

View File

@@ -27,6 +27,7 @@ import { PasswordWizardType } from '@/types';
import { BackupFile } from 'snjs/dist/@types/services/protocol_service';
import { confirmDialog, alertDialog } from '@/services/alertService';
import { autorun, IReactionDisposer } from 'mobx';
import { storage, StorageKey } from '@/services/localStorage';
const ELEMENT_ID_IMPORT_PASSWORD_INPUT = 'import-password-request';
@@ -65,6 +66,7 @@ type AccountMenuState = {
encryptionEnabled: boolean;
selectedAutoLockInterval: any;
showBetaWarning: boolean;
errorReportingEnabled: boolean;
}
class AccountMenuCtrl extends PureViewCtrl<{}, AccountMenuState> {
@@ -96,6 +98,7 @@ class AccountMenuCtrl extends PureViewCtrl<{}, AccountMenuState> {
},
mutable: {},
showBetaWarning: false,
errorReportingEnabled: !storage.get(StorageKey.DisableErrorReporting),
} as AccountMenuState;
}
@@ -587,6 +590,36 @@ class AccountMenuCtrl extends PureViewCtrl<{}, AccountMenuState> {
}
}
openErrorReportingDialog() {
alertDialog({
title: 'Data sent during automatic error reporting',
text: `
We use <a target="_blank" href="https://www.bugsnag.com/">Bugsnag</a>
to automatically report errors that occur while the app is running. See
<a target="_blank" href="https://docs.bugsnag.com/platforms/javascript/#sending-diagnostic-data">
this article, paragraph 'Browser' under 'Sending diagnostic data',
</a>
to see what data is included in error reports.
<br><br>
Error reports never include IP addresses and are fully
anonymized. We use error reports to be alerted when something in our
code is causing unexpected errors and crashes in your application
experience.
`
});
}
toggleErrorReportingEnabled() {
if (this.state.errorReportingEnabled) {
storage.set(StorageKey.DisableErrorReporting, true);
} else {
storage.set(StorageKey.DisableErrorReporting, false);
}
if (!this.application.getSyncStatus().syncInProgress) {
window.location.reload();
}
}
isDesktopApplication() {
return isDesktopApplication();
}

View File

@@ -0,0 +1,33 @@
import { SNLog } from 'snjs';
import { isDesktopApplication, isDev } from '@/utils';
import { storage, StorageKey } from './localStorage';
import Bugsnag from '@bugsnag/js';
declare const __VERSION__: string;
export function startErrorReporting() {
if (storage.get(StorageKey.DisableErrorReporting)) {
SNLog.onError = console.error;
return;
}
try {
Bugsnag.start({
apiKey: (window as any)._bugsnag_api_key,
appType: isDesktopApplication() ? 'desktop' : 'web',
appVersion: __VERSION__,
collectUserIp: false,
autoTrackSessions: false,
releaseStage: isDev ? 'development' : undefined
});
if (isDev) {
SNLog.onError = console.error;
} else {
SNLog.onError = (error) => {
Bugsnag.notify(error);
}
}
} catch (error) {
console.error('Failed to start Bugsnag.', error);
SNLog.onError = console.error;
}
}

View File

@@ -0,0 +1,16 @@
export enum StorageKey {
DisableErrorReporting = 'DisableErrorReporting',
}
export const storage = {
get(key: StorageKey) {
const value = localStorage.getItem(key);
return value ? JSON.parse(value) : null;
},
set(key: StorageKey, value: unknown) {
localStorage.setItem(key, JSON.stringify(value));
},
remove(key: StorageKey) {
localStorage.removeItem(key);
},
};

View File

@@ -302,6 +302,18 @@
| the whole file, please use the Batch Manager extension.
.sk-panel-row
.sk-spinner.small.info(ng-if='self.state.importData.loading')
.sk-panel-section
.sk-panel-section-title Error Reporting
.sk-panel-section-subtitle.info
| Automatic error reporting is {{ self.state.errorReportingEnabled ? 'enabled.' : 'disabled.' }}
p.sk-p
| Help us improve Standard Notes by automatically submitting
| anonymized error reports.
.sk-panel-row
button(ng-click="self.toggleErrorReportingEnabled()").sk-button.info
span.sk-label {{ self.state.errorReportingEnabled ? 'Disable' : 'Enable'}} Error Reporting
.sk-panel-row
a(ng-click="self.openErrorReportingDialog()").sk-a What data is being sent?
.sk-panel-footer
.sk-panel-row
.sk-p.left.neutral

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html ng-app="app">
<html>
<head>
<meta charset="utf-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
@@ -32,6 +32,7 @@
window._default_sync_server = "<%= ENV['SF_DEFAULT_SERVER'] %>";
window._extensions_manager_location = "<%= ENV['EXTENSIONS_MANAGER_LOCATION'] %>";
window._batch_manager_location = "<%= ENV['BATCH_MANAGER_LOCATION'] %>";
window._bugsnag_api_key = "<%= ENV['BUGSNAG_API_KEY'] %>";
</script>
<% if Rails.env.development? %>

View File

@@ -2,7 +2,7 @@
This file is strictly used for local development using the webpack-dev-server.
-->
<!DOCTYPE html>
<html ng-app="app">
<html>
<head>
<meta charset="utf-8" />
@@ -32,11 +32,13 @@
data-default-sync-server="<%= env.DEV_DEFAULT_SYNC_SERVER %>"
data-extensions-manager-location="<%= env.DEV_EXTENSIONS_MANAGER_LOCATION %>"
data-batch-manager-location="<%= env.DEV_BATCH_MANAGER_LOCATION %>"
data-bugsnag-api-key="<%= env.DEV_BUGSNAG_API_KEY %>"
>
<script>
window._default_sync_server = document.body.dataset.defaultSyncServer || "https://sync.standardnotes.org";
window._extensions_manager_location = document.body.dataset.extensionsManagerLocation || "public/extensions/extensions-manager/dist/index.html";
window._batch_manager_location = document.body.dataset.batchManagerLocation || "public/extensions/batch-manager/dist/index.min.html";
window._bugsnag_api_key = document.body.dataset.bugsnagApiKey;
</script>
<application-group-view />
</body>

95
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "standard-notes-web",
"version": "3.5.1",
"version": "3.5.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -2507,6 +2507,58 @@
}
}
},
"@bugsnag/browser": {
"version": "7.5.1",
"resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.5.1.tgz",
"integrity": "sha512-NLWgSj3elYGSkdth666UxQ6r5Y/zAMidnQZRnOW2ZsW+4W/q+hr7zoN4v5IUnZuoSTQ9QxVYY99wA4hqlDyoJg==",
"requires": {
"@bugsnag/core": "^7.3.5"
}
},
"@bugsnag/core": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.3.5.tgz",
"integrity": "sha512-7zKFLcA6m9aaQ1p1AQx2iRaT3gE/MJqy0vGa/RhlKNdgMdMKYRGECWxJE66firvJT5ZwL7Bu11IkK6sLWHCBaw==",
"requires": {
"@bugsnag/cuid": "^3.0.0",
"@bugsnag/safe-json-stringify": "^6.0.0",
"error-stack-parser": "^2.0.3",
"iserror": "0.0.2",
"stack-generator": "^2.0.3"
}
},
"@bugsnag/cuid": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.0.tgz",
"integrity": "sha512-LOt8aaBI+KvOQGneBtpuCz3YqzyEAehd1f3nC5yr9TIYW1+IzYKa2xWS4EiMz5pPOnRPHkyyS5t/wmSmN51Gjg=="
},
"@bugsnag/js": {
"version": "7.5.1",
"resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.5.1.tgz",
"integrity": "sha512-acbq392QYjZNtUHa5tTp+MLTBhNZhI4s6EBrEFqN1TdxrVVGEFfnQqrPISfKtOJ+FW1dZEZiQ0oEGJ127htqIQ==",
"requires": {
"@bugsnag/browser": "^7.5.1",
"@bugsnag/node": "^7.3.5"
}
},
"@bugsnag/node": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.3.5.tgz",
"integrity": "sha512-eN06NgphKYikBq/AXpiLO9tNx1H7cz8C78oQnR5fj2POulj+Zm9njr9dM6DEzGIvBDt952SwwcOA73jAiOmztQ==",
"requires": {
"@bugsnag/core": "^7.3.5",
"byline": "^5.0.0",
"error-stack-parser": "^2.0.2",
"iserror": "^0.0.2",
"pump": "^3.0.0",
"stack-generator": "^2.0.3"
}
},
"@bugsnag/safe-json-stringify": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz",
"integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA=="
},
"@types/angular": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.7.0.tgz",
@@ -3936,6 +3988,11 @@
"integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
"dev": true
},
"byline": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
"integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE="
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -5079,7 +5136,6 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
@@ -5131,6 +5187,14 @@
"is-arrayish": "^0.2.1"
}
},
"error-stack-parser": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz",
"integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==",
"requires": {
"stackframe": "^1.1.1"
}
},
"es-abstract": {
"version": "1.17.4",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz",
@@ -7735,6 +7799,11 @@
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
"iserror": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz",
"integrity": "sha1-vVNFH+L2aLnyQCwZZnh6qix8C/U="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -9174,7 +9243,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
@@ -9954,7 +10022,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -10961,8 +11028,8 @@
"from": "github:standardnotes/sncrypto#8794c88daa967eaae493cd5fdec7506d52b257ad"
},
"snjs": {
"version": "github:standardnotes/snjs#b7866c68243b418ae5e7be830d1593f0e07333e4",
"from": "github:standardnotes/snjs#b7866c68243b418ae5e7be830d1593f0e07333e4"
"version": "github:standardnotes/snjs#5757198630342821fdb0e8133b1597a39e0502ad",
"from": "github:standardnotes/snjs#5757198630342821fdb0e8133b1597a39e0502ad"
},
"sockjs": {
"version": "0.3.20",
@@ -11218,6 +11285,19 @@
"figgy-pudding": "^3.5.1"
}
},
"stack-generator": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz",
"integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==",
"requires": {
"stackframe": "^1.1.1"
}
},
"stackframe": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz",
"integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA=="
},
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@@ -12908,8 +12988,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write": {
"version": "1.0.3",

View File

@@ -1,6 +1,6 @@
{
"name": "standard-notes-web",
"version": "3.5.1",
"version": "3.5.2",
"license": "AGPL-3.0-or-later",
"repository": {
"type": "git",
@@ -69,8 +69,9 @@
"webpack-merge": "^4.2.2"
},
"dependencies": {
"@bugsnag/js": "^7.5.1",
"mobx": "^6.0.1",
"sncrypto": "github:standardnotes/sncrypto#8794c88daa967eaae493cd5fdec7506d52b257ad",
"snjs": "github:standardnotes/snjs#b7866c68243b418ae5e7be830d1593f0e07333e4"
"snjs": "github:standardnotes/snjs#5757198630342821fdb0e8133b1597a39e0502ad"
}
}