fix: unmount application view when ephemeral identifier changes

This commit is contained in:
Mo
2022-02-04 12:00:03 -06:00
parent cc2169152e
commit b549cc38bf
23 changed files with 98 additions and 101 deletions

View File

@@ -25,7 +25,7 @@ declare global {
}
import { IsWebPlatform, WebAppVersion } from '@/version';
import { SNLog } from '@standardnotes/snjs';
import { Runtime, SNLog } from '@standardnotes/snjs';
import { render } from 'preact';
import { ApplicationGroupView } from './components/ApplicationGroupView';
import { Bridge } from './services/bridge';
@@ -47,7 +47,7 @@ const startApplication: StartApplication = async function startApplication(
const mainApplicationGroup = new ApplicationGroup(
defaultSyncServerHost,
bridge,
enableUnfinishedFeatures,
enableUnfinishedFeatures ? Runtime.Dev : Runtime.Prod,
webSocketUrl
);

View File

@@ -4,7 +4,6 @@ import { Component } from 'preact';
import { ApplicationView } from './ApplicationView';
type State = {
applications: WebApplication[];
activeApplication?: WebApplication;
};
@@ -15,36 +14,28 @@ type Props = {
export class ApplicationGroupView extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
applications: [],
};
props.mainApplicationGroup.addApplicationChangeObserver(() => {
this.setState({
activeApplication: props.mainApplicationGroup
.primaryApplication as WebApplication,
applications:
props.mainApplicationGroup.getApplications() as WebApplication[],
});
const activeApplication = props.mainApplicationGroup
.primaryApplication as WebApplication;
this.setState({ activeApplication });
});
props.mainApplicationGroup.initialize();
}
render() {
return (
<>
{this.state.applications.map((application) => {
if (application === this.state.activeApplication) {
return (
<div id={application.identifier}>
<ApplicationView
key={application.identifier}
mainApplicationGroup={this.props.mainApplicationGroup}
application={application}
/>
</div>
);
}
})}
{this.state.activeApplication && (
<div id={this.state.activeApplication.identifier}>
<ApplicationView
key={this.state.activeApplication.ephemeralIdentifier}
mainApplicationGroup={this.props.mainApplicationGroup}
application={this.state.activeApplication}
/>
</div>
)}
</>
);
}

View File

@@ -122,8 +122,8 @@ export class ChallengeModal extends PureComponent<Props, State> {
confirmButtonStyle: 'danger',
})
) {
await this.application.signOut();
this.dismiss();
this.application.signOut();
}
};
@@ -334,7 +334,7 @@ export class ChallengeModal extends PureComponent<Props, State> {
<div className="sk-panel-footer">
{this.state.forgotPasscode ? (
<>
<p className="sk-panel-row sk-p">
<p className="sk-panel-row sk-p text-center">
{this.state.hasAccount
? 'If you forgot your application passcode, your ' +
'only option is to clear your local data from this ' +

View File

@@ -16,6 +16,7 @@ import {
NoteGroupController,
removeFromArray,
IconsController,
Runtime,
} from '@standardnotes/snjs';
type WebServices = {
@@ -48,8 +49,8 @@ export class WebApplication extends SNApplication {
identifier: string,
defaultSyncServerHost: string,
public bridge: Bridge,
enableUnfinishedFeatures: boolean,
webSocketUrl: string
webSocketUrl: string,
runtime: Runtime
) {
super(
bridge.environment,
@@ -61,8 +62,8 @@ export class WebApplication extends SNApplication {
[],
defaultSyncServerHost,
bridge.appVersion,
enableUnfinishedFeatures,
webSocketUrl
webSocketUrl,
runtime
);
deviceInterface.setApplication(this);
this.noteControllerGroup = new NoteGroupController(this);

View File

@@ -5,6 +5,7 @@ import {
SNApplicationGroup,
DeviceInterface,
Platform,
Runtime,
} from '@standardnotes/snjs';
import { AppState } from '@/ui_models/app_state';
import { Bridge } from '@/services/bridge';
@@ -20,7 +21,7 @@ export class ApplicationGroup extends SNApplicationGroup {
constructor(
private defaultSyncServerHost: string,
private bridge: Bridge,
private enableUnfinishedFeatures: boolean,
private runtime: Runtime,
private webSocketUrl: string
) {
super(new WebDeviceInterface(bridge));
@@ -50,8 +51,8 @@ export class ApplicationGroup extends SNApplicationGroup {
descriptor.identifier,
this.defaultSyncServerHost,
this.bridge,
this.enableUnfinishedFeatures,
this.webSocketUrl
this.webSocketUrl,
this.runtime
);
const appState = new AppState(application, this.bridge);
const archiveService = new ArchiveManager(application);

View File

@@ -82,10 +82,10 @@
"@reach/dialog": "^0.16.2",
"@reach/listbox": "^0.16.2",
"@reach/tooltip": "^0.16.2",
"@standardnotes/components": "1.4.4",
"@standardnotes/features": "1.26.1",
"@standardnotes/snjs": "2.50.0",
"@standardnotes/settings": "^1.11.2",
"@standardnotes/components": "1.5.0",
"@standardnotes/features": "1.27.0",
"@standardnotes/snjs": "2.51.0",
"@standardnotes/settings": "^1.11.3",
"@standardnotes/sncrypto-web": "1.6.2",
"mobx": "^6.3.5",
"mobx-react-lite": "^3.2.2",

View File

@@ -35,9 +35,9 @@
"binary": "42d28f3598669b801821879f0b7e26389300f151bfbc566b11c214e6091719ed"
},
"org.standardnotes.code-editor": {
"version": "1.3.9",
"base64": "f9f327b77d1e9084505ae66ae9f91aa116db52fe86de99addc64ebaca9e7dc64",
"binary": "3049e8e87e9bd5928654c9aeea16c8955e180aaae26932cbebfd9092c24346d5"
"version": "1.3.10",
"base64": "ba2eb57a5adcd1294ca9d39997010a5afd6d9e7c63d5aef1730773cbdbbec299",
"binary": "18a21650d9c56abec860e36ada0b30e25a6e03569afbbd40d022e95a2e76ffa5"
},
"org.standardnotes.bold-editor": {
"version": "1.3.2",
@@ -50,29 +50,29 @@
"binary": "02da20d1969bc2cc9bc9e164bcd6f993183747c8d6c3edae814fa12789950544"
},
"org.standardnotes.simple-markdown-editor": {
"version": "1.4.1",
"base64": "5ba494941267a51961d73c8cc58ab608cde50f8d5772401a947482472d3f8b2f",
"binary": "65cbacc96b5271c0e846e7a2d3bd243f87091055311ca30a2c4a7d2ec228462d"
"version": "1.4.2",
"base64": "765b52c459dddf8b7fbc70068526af51218d09ae5c1bca783ea0ecdc0cf5228b",
"binary": "bed9d0353a2b3ed721ea1f1ba3eba0f2452ffb730d436821148ee330ab5af651"
},
"org.standardnotes.advanced-markdown-editor": {
"version": "1.4.1",
"base64": "8772f107ae2913bf653e749c28d8ed2eae055ae5aa694d39f43db3ec7d787d86",
"binary": "2989c33b1997e054622bafcf50a9b966fc2d6acee640aa9a52d7efc19e15c123"
"version": "1.4.2",
"base64": "a0ded2892d38c828bac95e1ec99d275edaf2b1f3e20680e30a65f2aede4a91fe",
"binary": "dc68753c7c0ac80461ba130fa9c1af30e36994592a4e7c7ba616596b309c0b8d"
},
"org.standardnotes.minimal-markdown-editor": {
"version": "1.3.8",
"base64": "a48584b5e0601a43403ec7ca10e6cc7958072f2dce9c29bd883bcabde8a2288a",
"binary": "8d08f2ffe85a4ad234aa16772266554bc7849778a470d8e6b9293e313890c53a"
"version": "1.3.9",
"base64": "cd84837e2591443fa5d331c069b2cf73d7bd1c493cda2d42695f7115e3850b30",
"binary": "cd3f7720c8d915d640291f06b4d23c2fc19071a38535aa3e3a89df8f96716ce7"
},
"org.standardnotes.fancy-markdown-editor": {
"version": "1.3.5",
"base64": "db05eaff4380af3f89c30559b2da6a1ab7075591718306e8ecfc8fa3864a1891",
"binary": "7adf87b091dd45c4a9d3adaf9f0e12f18acd7fb74078a7be909f5de075eab8e0"
"version": "1.3.6",
"base64": "4601e4c4a1a5e0290fcfbd2d1f3389683d55237b751cc2953053a4ee7f997022",
"binary": "d8060e0eb8dc727339329be5e5150c077e2795ff2145521dc90a38717eea5d3c"
},
"org.standardnotes.simple-task-editor": {
"version": "1.3.8",
"base64": "012523870d7c8b7024ea2da31c1c216a0ccfa5cf05183913f0486f1b845a366d",
"binary": "17f3bfdd55ab517a7e47c70b0ebc8c933b1eb5fdeabbc88e8064408421e2e4f8"
"version": "1.3.9",
"base64": "98ecadbe8e4ce6f722980aa172ebe7290c2ddbad7f0da6708587096ce19d5d3c",
"binary": "3f553a232f3ec81ae95506d60eda2f30877974af213b144f02d0464517f74a97"
},
"org.standardnotes.token-vault": {
"version": "2.0.9",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "sn-advanced-markdown-editor",
"version": "1.4.1",
"version": "1.4.2",
"description": "A Standard Notes derived editor that offers full support for Markdown editing.",
"main": "dist/dist.js",
"author": "Standard Notes <hello@standardnotes.com>",

View File

@@ -1,2 +1,2 @@
document.addEventListener("DOMContentLoaded",(function(){const e=CodeMirror.modeInfo.reduce((function(e,t){return e[t.mode]?e[t.mode].push(t):e[t.mode]=[t],e}),{}),t=CodeMirror.modeInfo.reduce((function(e,t){return e[t.name]={mode:t.mode,mime:t.mime},e}),{}),n=Object.keys(t);let o,a,i,d,m,r,c,s=!1,u=!0;function l(){if(a){let e=a;o.saveItemWithPresave(e,(()=>{d=r.getValue(),e.content.text=d,e.clientData=i,e.content.preview_plain=null,e.content.preview_html=null}))}}function f(o){if(!o)return;const a=function(n){const o=function(e){return e?{name:e.name,mode:e.mode,mime:e.mime}:null},a=/.+\.([^.]+)$/.exec(n),i=/\//.test(n);if(a)return o(CodeMirror.findModeByExtension(a[1]));if(i)return o(CodeMirror.findModeByMIME(i[1]));if(t[n])return{name:n,mode:t[n].mode,mime:t[n].mime};if(e[n]){const t=e[n][0];return{name:t.name,mode:t.mode,mime:t.mime}}return{name:n,mode:n,mime:n}}(o);a?(r.setOption("mode",a.mime),CodeMirror.autoLoadMode(r,a.mode),i&&(i.mode=a.name),document.getElementById("language-select").selectedIndex=n.indexOf(a.name)):console.error("Could not find a mode corresponding to "+o)}function g(e){const t=document.getElementById("toggle-vim-mode-button"),n="vim"===e?"Disable":"Enable",o="vim"===e?"danger":"success";t.innerHTML=`${n} Vim mode`,t.classList.remove("danger"),t.classList.remove("success"),t.classList.add(o)}window.setKeyMap=function(e){r.setOption("keyMap",e)},window.onLanguageSelect=function(){f(n[c.selectedIndex]),l()},window.setDefaultLanguage=function(){const e=n[c.selectedIndex];o.setComponentDataValueForKey("language",e);const t=document.getElementById("default-label"),a=t.innerHTML;t.innerHTML="Success",t.classList.add("success"),setTimeout((function(){t.classList.remove("success"),t.innerHTML=a}),750)},window.toggleVimMode=function(){let e;e="default"===(o.getComponentDataValueForKey("keyMap")??"default")?"vim":"default",window.setKeyMap(e),o.setComponentDataValueForKey("keyMap",e),g(e)},CodeMirror.commands.save=function(){l()},r=CodeMirror.fromTextArea(document.getElementById("code"),{extraKeys:{"Alt-F":"findPersistent"},lineNumbers:!0,styleSelectedText:!0,lineWrapping:!0}),r.setSize("100%","100%"),setTimeout((function(){f("JavaScript")}),1),function(){c=document.getElementById("language-select");for(let e=0;e<n.length;e++){const t=document.createElement("option");t.value=e,t.innerHTML=n[e],c.appendChild(t)}}(),r.on("change",(function(){s||l()})),o=new ComponentRelay({targetWindow:window,onReady:()=>{const e=o.platform;e&&document.body.classList.add(e);const t=o.getComponentDataValueForKey("keyMap")??"default";window.setKeyMap(t),g(t)}}),o.streamContextItem((e=>{!function(e){if(e.uuid!==m&&(d=null,u=!0,m=e.uuid),a=e,e.isMetadataUpdate)return;i=e.clientData;f(i.mode||o.getComponentDataValueForKey("language")),r&&(e.content.text!==d&&(s=!0,r.getDoc().setValue(a.content.text),s=!1),u&&(u=!1,r.getDoc().clearHistory()))}(e)}))}));
document.addEventListener("DOMContentLoaded",(function(){const e=CodeMirror.modeInfo.reduce((function(e,t){return e[t.mode]?e[t.mode].push(t):e[t.mode]=[t],e}),{}),t=CodeMirror.modeInfo.reduce((function(e,t){return e[t.name]={mode:t.mode,mime:t.mime},e}),{}),n=Object.keys(t);let o,i,a,d,m,c,r;let s=!1,u=!0;function l(){if(i){let e=i;o.saveItemWithPresave(e,(()=>{d=c.getValue(),e.content.text=d,e.clientData=a,e.content.preview_plain=null,e.content.preview_html=null}))}}function f(o){if(!o)return;const i=function(n){const o=function(e){return e?{name:e.name,mode:e.mode,mime:e.mime}:null},i=/.+\.([^.]+)$/.exec(n),a=/\//.test(n);if(i)return o(CodeMirror.findModeByExtension(i[1]));if(a)return o(CodeMirror.findModeByMIME(a[1]));if(t[n])return{name:n,mode:t[n].mode,mime:t[n].mime};if(e[n]){const t=e[n][0];return{name:t.name,mode:t.mode,mime:t.mime}}return{name:n,mode:n,mime:n}}(o);i?(c.setOption("mode",i.mime),CodeMirror.autoLoadMode(c,i.mode),a&&(a.mode=i.name),document.getElementById("language-select").selectedIndex=n.indexOf(i.name)):console.error("Could not find a mode corresponding to "+o)}function g(e){const t=document.getElementById("toggle-vim-mode-button"),n="vim"===e?"Disable":"Enable",o="vim"===e?"danger":"success";t.innerHTML=`${n} Vim mode`,t.classList.remove("danger"),t.classList.remove("success"),t.classList.add(o)}window.setKeyMap=function(e){c.setOption("keyMap",e)},window.onLanguageSelect=function(){f(n[r.selectedIndex]),l()},window.setDefaultLanguage=function(){const e=n[r.selectedIndex];o.setComponentDataValueForKey("language",e);const t=document.getElementById("default-label"),i=t.innerHTML;t.innerHTML="Success",t.classList.add("success"),setTimeout((function(){t.classList.remove("success"),t.innerHTML=i}),750)},window.toggleVimMode=function(){let e;e="default"===(o.getComponentDataValueForKey("keyMap")??"default")?"vim":"default",window.setKeyMap(e),o.setComponentDataValueForKey("keyMap",e),g(e)},o=new ComponentRelay({targetWindow:window,onReady:()=>{const e=o.platform;e&&document.body.classList.add(e),CodeMirror.commands.save=function(){l()},c=CodeMirror.fromTextArea(document.getElementById("code"),{extraKeys:{"Alt-F":"findPersistent"},lineNumbers:!0,styleSelectedText:!0,lineWrapping:!0,inputStyle:"mobile"===(o.environment??"web")?"textarea":"contenteditable"}),c.setSize("100%","100%"),setTimeout((function(){f("JavaScript")}),1),function(){r=document.getElementById("language-select");for(let e=0;e<n.length;e++){const t=document.createElement("option");t.value=e,t.innerHTML=n[e],r.appendChild(t)}}(),c.on("change",(function(){s||l()}));const t=o.getComponentDataValueForKey("keyMap")??"default";window.setKeyMap(t),g(t)}}),o.streamContextItem((e=>{!function(e){if(e.uuid!==m&&(d=null,u=!0,m=e.uuid),i=e,e.isMetadataUpdate)return;a=e.clientData;f(a.mode||o.getComponentDataValueForKey("language")),c&&(e.content.text!==d&&(s=!0,c.getDoc().setValue(i.content.text),s=!1),u&&(u=!1,c.getDoc().clearHistory()),c.setOption("spellcheck",i.content.spellcheck))}(e)}))}));
//# sourceMappingURL=main.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1,13 +1,13 @@
{
"name": "sn-code-editor",
"version": "1.3.9",
"version": "1.3.10",
"description": "A code editor for Standard Notes",
"main": "dist/main.js",
"author": "Standard Notes <hello@standardnotes.org>",
"license": "AGPL-3.0",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "http-server . --cors & webpack --progress --config webpack.dev.js",
"start": "http-server . --cors -p8001 & webpack --progress --config webpack.dev.js",
"build": "webpack --config webpack.prod.js",
"lint": "eslint src --ext .js",
"lint:fix": "yarn lint --fix"

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +1,11 @@
{
"name": "sn-fancy-markdown-editor",
"version": "1.3.5",
"version": "1.3.6",
"description": "",
"main": "index.js",
"scripts": {
"prepublish": "npm run build",
"build": "grunt",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Standard Notes",

View File

@@ -11059,16 +11059,18 @@ document.addEventListener("DOMContentLoaded", function (event) {
if (platform) {
document.body.classList.add(platform);
}
}
}); // only use CodeMirror selection color if we're not on mobile.
editor.setOption("styleSelectedText", !componentRelay.isMobile);
loadEditor(); // only use CodeMirror selection color if we're not on mobile.
editor.setOption("styleSelectedText", !componentRelay.isMobile);
}
});
componentRelay.streamContextItem(function (note) {
onReceivedNote(note);
});
}
function save() {
function saveNote() {
if (workingNote) {
// Be sure to capture this object as a variable, as this.note may be reassigned in `streamContextItem`, so by the time
// you modify it in the presave block, it may not be the same object anymore, so the presave values will not be applied to
@@ -11112,6 +11114,8 @@ document.addEventListener("DOMContentLoaded", function (event) {
initialLoad = false;
editor.getDoc().clearHistory();
}
editor.setOption("spellcheck", workingNote.content.spellcheck);
}
}
@@ -11121,7 +11125,8 @@ document.addEventListener("DOMContentLoaded", function (event) {
lineWrapping: true,
extraKeys: {
"Alt-F": "findPersistent"
}
},
inputStyle: getInputStyleForEnvironment()
});
editor.setSize(undefined, "100%");
editor.on("change", function () {
@@ -11129,11 +11134,17 @@ document.addEventListener("DOMContentLoaded", function (event) {
return;
}
save();
saveNote();
});
}
loadEditor();
function getInputStyleForEnvironment() {
var _componentRelay$envir;
var environment = (_componentRelay$envir = componentRelay.environment) !== null && _componentRelay$envir !== void 0 ? _componentRelay$envir : 'web';
return environment === 'mobile' ? 'textarea' : 'contenteditable';
}
loadComponentRelay();
});

View File

@@ -1,9 +1,13 @@
{
"name": "sn-minimal-markdown-editor",
"version": "1.3.8",
"version": "1.3.9",
"description": "A minimal Markdown editor for Standard Notes.",
"main": "dist/dist.js",
"author": "Standard Notes <hello@standardnotes.org>",
"scripts": {
"prepublish": "npm run build",
"build": "grunt"
},
"dependencies": {
"sn-codemirror-search": "1.0.0"
},

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,12 +1,12 @@
{
"name": "sn-simple-markdown-editor",
"version": "1.4.1",
"version": "1.4.2",
"main": "dist/dist.js",
"scripts": {
"lint": "eslint --cache --ext .jsx,.js --format=node_modules/eslint-formatter-pretty .",
"test": "npm run lint",
"build": "webpack",
"start": "webpack-dev-server --devtool eval --progress --hot --content-base app",
"start": "webpack-dev-server --devtool eval --progress --port 8001 --hot --content-base app",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 1"
},
"sn": {

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "sn-simple-task-editor",
"version": "1.3.8",
"version": "1.3.9",
"main": "dist/dist.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",

View File

@@ -2610,10 +2610,10 @@
resolved "https://registry.yarnpkg.com/@standardnotes/common/-/common-1.8.0.tgz#af72ad85f0d410ae31c0c110137911e2595634de"
integrity sha512-R3nfAvhaXp5ufMB0M0fmV9yizE/Of2PGNJKnxtdxwowAq/ZakHu8Rh/v485PXrCaCFREVOZQO8kg0RQM8YngSw==
"@standardnotes/components@1.4.4":
version "1.4.4"
resolved "https://registry.yarnpkg.com/@standardnotes/components/-/components-1.4.4.tgz#2db82b5f35d34be8c766e22d8559e2b80a6aa996"
integrity sha512-sxG5iIETpZUYVt6zQBTRxUC1qCZRmKyOuERyDLADju2gnGddDiLWU/TpgE7k8C/pLkw4OXprAmEVxbOagDrIxw==
"@standardnotes/components@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@standardnotes/components/-/components-1.5.0.tgz#29f46734ac8837b74cd15c8ba78358205a56d4bc"
integrity sha512-Xz8JsGxDuBClIu+US0UM1tqCbuSFJ5xHCmRWXBPEXQpkCFCENQ6avheIXp3oJKR2iYxwwgZuHAfnZClyIEMxSg==
"@standardnotes/domain-events@^2.21.2":
version "2.21.2"
@@ -2623,15 +2623,7 @@
"@standardnotes/auth" "^3.15.3"
"@standardnotes/features" "^1.27.0"
"@standardnotes/features@1.26.1":
version "1.26.1"
resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.26.1.tgz#d4e4aed2ba91e40c407484e569a96c339477bba2"
integrity sha512-zxoeH9fjQtcTUbc5qaYD7AZETKDniM+tIvmLrWqwSC9B6/IL0R39G51BEkOzen+KhR/WgH3itHDVM+zrSMg53Q==
dependencies:
"@standardnotes/auth" "^3.15.3"
"@standardnotes/common" "^1.8.0"
"@standardnotes/features@^1.27.0":
"@standardnotes/features@1.27.0", "@standardnotes/features@^1.27.0":
version "1.27.0"
resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.27.0.tgz#eac735cafaa90f2d174fea65757034bfd841b056"
integrity sha512-RJXtBw5PCGNXuvUZDn1UJHQuF9+V0kZcGI4leWZJNRFDCQeuESOopVXvVIPCske/vUTHy8BGJttc2m9OatTlPw==
@@ -2639,11 +2631,6 @@
"@standardnotes/auth" "^3.15.3"
"@standardnotes/common" "^1.8.0"
"@standardnotes/settings@^1.11.2":
version "1.11.2"
resolved "https://registry.yarnpkg.com/@standardnotes/settings/-/settings-1.11.2.tgz#cb59d5bd9c7bb34c9d75381c51a438328faf5905"
integrity sha512-yTNd7eTmo3KIeaZpAu8sh0xD/4JaVei1viJVW+is7yCAPX0bTxGnZm/qFVByW8jcox4YA7cIzixp3KMJf61COw==
"@standardnotes/settings@^1.11.3":
version "1.11.3"
resolved "https://registry.yarnpkg.com/@standardnotes/settings/-/settings-1.11.3.tgz#f7735da40807dab6eaf81cc82d8d30f5461d26d5"
@@ -2663,10 +2650,10 @@
buffer "^6.0.3"
libsodium-wrappers "^0.7.9"
"@standardnotes/snjs@2.50.0":
version "2.50.0"
resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.50.0.tgz#709e72afa708d5eaba45bb42c045ad740a21d41d"
integrity sha512-bet4yQh5cEVIxjjz3aCO22qqHw+OuJauleusY945kYD/4Jpl1iy5dt9O7oMvWuyYwvRELV6YoehsaTuYZ4NAzg==
"@standardnotes/snjs@2.51.0":
version "2.51.0"
resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.51.0.tgz#5df17d14502c659dbab3c0f11e12c7915bbcbfab"
integrity sha512-cmc9kUHsjoMkUzCRJYSQcOWfX2M7/8JELxV8OwcF4wR8pFjgp6XlC5ltJMrZizABjAwSQb2jKXLzqzyjNtytaw==
dependencies:
"@standardnotes/auth" "^3.15.3"
"@standardnotes/common" "^1.8.0"