mirror of
https://github.com/standardnotes/app
synced 2026-09-17 21:45:55 -04:00
Compare commits
27
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e47b6253c1 | ||
|
|
7fc9182869 | ||
|
|
0c9ed13678 | ||
|
|
95358ec1d5 | ||
|
|
a307e8a28c | ||
|
|
afcabc93eb | ||
|
|
d30b1f8d15 | ||
|
|
7a82f41585 | ||
|
|
c8f06ae65f | ||
|
|
cf5330d7cf | ||
|
|
e5ca69fc8e | ||
|
|
2a567ad052 | ||
|
|
c663482ea3 | ||
|
|
90f185059a | ||
|
|
5e1c8b90be | ||
|
|
0c30d9cf03 | ||
|
|
44bd6f90bd | ||
|
|
fd020af03f | ||
|
|
ab3740170e | ||
|
|
4ab2efd738 | ||
|
|
01d23de9eb | ||
|
|
fc54677356 | ||
|
|
1fb78b1667 | ||
|
|
66da4e62c6 | ||
|
|
e3a3b859c1 | ||
|
|
bc87eaedfc | ||
|
|
c70c1e9139 |
@@ -30,6 +30,8 @@ jobs:
|
||||
- run: yarn build:mobile
|
||||
- name: Ruby Setup for Fastlane
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
working-directory: 'packages/mobile'
|
||||
- name: fastlane
|
||||
uses: maierj/[email protected]
|
||||
env:
|
||||
@@ -88,6 +90,8 @@ jobs:
|
||||
run: echo "${{ secrets.APPSTORE_CONNECT_KEY }}" > ios/Authkey.p8
|
||||
- name: Ruby Setup for Fastlane
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
working-directory: 'packages/mobile'
|
||||
- name: Setup fastlane
|
||||
uses: maierj/[email protected]
|
||||
env:
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
2.7.5
|
||||
2.7.6
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.25.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.25.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
## [1.25.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/api
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/api",
|
||||
"version": "1.25.3",
|
||||
"version": "1.25.5",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -36,12 +36,12 @@
|
||||
"typescript": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/domain-core": "^1.11.3",
|
||||
"@standardnotes/encryption": "workspace:*",
|
||||
"@standardnotes/models": "workspace:*",
|
||||
"@standardnotes/responses": "workspace:*",
|
||||
"@standardnotes/security": "^1.7.5",
|
||||
"@standardnotes/security": "^1.7.6",
|
||||
"@standardnotes/utils": "workspace:*",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.105.15](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
## [3.105.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/desktop
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@standardnotes/desktop",
|
||||
"main": "./app/dist/index.js",
|
||||
"version": "3.105.4",
|
||||
"version": "3.105.15",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.21.19](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.18](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
## [1.21.17](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/encryption
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/encryption",
|
||||
"version": "1.21.17",
|
||||
"version": "1.21.19",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -35,7 +35,7 @@
|
||||
"typescript": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/models": "workspace:*",
|
||||
"@standardnotes/responses": "workspace:*",
|
||||
"@standardnotes/sncrypto-common": "workspace:*",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.58.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/features
|
||||
|
||||
## [1.58.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/features
|
||||
|
||||
## [1.58.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-02-15)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/features
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/features",
|
||||
"version": "1.58.8",
|
||||
"version": "1.58.10",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -25,9 +25,9 @@
|
||||
"test": "jest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/domain-core": "^1.11.3",
|
||||
"@standardnotes/security": "^1.7.5",
|
||||
"@standardnotes/security": "^1.7.6",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -15,6 +15,7 @@ export enum FeatureIdentifier {
|
||||
SmartFilters = 'org.standardnotes.smart-filters',
|
||||
TagNesting = 'org.standardnotes.tag-nesting',
|
||||
TwoFactorAuth = 'org.standardnotes.two-factor-auth',
|
||||
UniversalSecondFactor = 'org.standardnotes.universal-second-factor',
|
||||
SubscriptionSharing = 'org.standardnotes.subscription-sharing',
|
||||
|
||||
AutobiographyTheme = 'org.standardnotes.theme-autobiography',
|
||||
|
||||
@@ -11,6 +11,12 @@ export function serverFeatures(): ServerFeatureDescription[] {
|
||||
identifier: FeatureIdentifier.TwoFactorAuth,
|
||||
permission_name: PermissionName.TwoFactorAuth,
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.ProPlan],
|
||||
name: 'U2F authentication',
|
||||
identifier: FeatureIdentifier.UniversalSecondFactor,
|
||||
permission_name: PermissionName.UniversalSecondFactor,
|
||||
},
|
||||
{
|
||||
availableInSubscriptions: [SubscriptionName.ProPlan],
|
||||
name: 'Unlimited note history',
|
||||
|
||||
@@ -10,7 +10,6 @@ export enum PermissionName {
|
||||
DailyEmailBackup = 'server:daily-email-backup',
|
||||
DailyGDriveBackup = 'server:daily-gdrive-backup',
|
||||
DailyOneDriveBackup = 'server:daily-onedrive-backup',
|
||||
FilesBeta = 'app:files-beta',
|
||||
Files = 'app:files',
|
||||
FilesMaximumStorageTier = 'server:files-max-storage-tier',
|
||||
FilesLowStorageTier = 'server:files-low-storage-tier',
|
||||
@@ -38,6 +37,7 @@ export enum PermissionName {
|
||||
TitaniumTheme = 'theme:titanium',
|
||||
TokenVaultEditor = 'editor:token-vault',
|
||||
TwoFactorAuth = 'server:two-factor-auth',
|
||||
UniversalSecondFactor = 'server:universal-second-factor',
|
||||
SubscriptionSharing = 'server:subscription-sharing',
|
||||
SuperEditor = 'editor:super-editor',
|
||||
}
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.28.24](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.23](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
## [1.28.22](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/filepicker
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/filepicker",
|
||||
"version": "1.28.22",
|
||||
"version": "1.28.24",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -26,7 +26,7 @@
|
||||
"typescript": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/files": "workspace:*",
|
||||
"@standardnotes/utils": "workspace:*",
|
||||
"@types/wicg-file-system-access": "^2020.9.5",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.14.34](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.14.33](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
## [1.14.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/files
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/files",
|
||||
"version": "1.14.32",
|
||||
"version": "1.14.34",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
2.7.6
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.51.46](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.45](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.44](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.43](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.42](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.41](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.40](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.39](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.38](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.37](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.36](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
## [3.51.35](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/mobile
|
||||
|
||||
@@ -282,13 +282,13 @@ PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
cocoapods (~> 1.11, >= 1.11.2)
|
||||
cocoapods (~> 1.11, >= 1.11.3)
|
||||
fastlane
|
||||
fastlane-plugin-bundletool
|
||||
xcode-install
|
||||
|
||||
RUBY VERSION
|
||||
ruby 2.7.5p203
|
||||
ruby 2.7.6p219
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.15
|
||||
2.3.25
|
||||
|
||||
@@ -2,12 +2,10 @@ package com.standardnotes;
|
||||
|
||||
import android.app.Application;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.webkit.WebView;
|
||||
|
||||
import com.facebook.react.PackageList;
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
|
||||
@@ -15,7 +13,6 @@ import com.facebook.react.defaults.DefaultReactNativeHost;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
import com.facebook.react.modules.network.OkHttpClientProvider;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
|
||||
* directory of this source tree.
|
||||
*/
|
||||
package com.rndiffapp;
|
||||
package com.standardnotes;
|
||||
import android.content.Context;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
/**
|
||||
|
||||
@@ -637,7 +637,7 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/ReactCommon/yoga"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
boost: 57d2868c099736d80fcd648bf211b4431e51a558
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
|
||||
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
|
||||
FBLazyVector: 60195509584153283780abdac5569feffb8f08cc
|
||||
@@ -658,7 +658,7 @@ SPEC CHECKSUMS:
|
||||
MMKV: 9c4663aa7ca255d478ff10f2f5cb7d17c1651ccd
|
||||
MMKVCore: 89f5c8a66bba2dcd551779dea4d412eeec8ff5bb
|
||||
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
|
||||
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
|
||||
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
|
||||
RCTRequired: bec48f07daf7bcdc2655a0cde84e07d24d2a9e2a
|
||||
RCTTypeSafety: 171394eebacf71e1cfad79dbfae7ee8fc16ca80a
|
||||
React: d7433ccb6a8c36e4cbed59a73c0700fc83c3e98a
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
<string>webcredentials:app.standardnotes.com</string>
|
||||
</array>
|
||||
<key>com.apple.developer.default-data-protection</key>
|
||||
<string>NSFileProtectionComplete</string>
|
||||
</dict>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/mobile",
|
||||
"version": "3.51.35",
|
||||
"version": "3.51.46",
|
||||
"author": "Standard Notes.",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0-or-later",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.43.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
## [1.43.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
## [1.43.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/models
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/models",
|
||||
"version": "1.43.5",
|
||||
"version": "1.43.7",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -22,7 +22,7 @@
|
||||
"test": "jest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/features": "workspace:*",
|
||||
"@standardnotes/responses": "workspace:*",
|
||||
"@standardnotes/utils": "workspace:^",
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.4.189](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.188](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.187](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.186](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.185](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.184](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.183](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.182](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.181](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.180](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.179](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
## [1.4.178](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/releases
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/releases",
|
||||
"version": "1.4.178",
|
||||
"version": "1.4.189",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "dist/releases.json",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.13.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
## [1.13.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
## [1.13.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/responses
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/responses",
|
||||
"version": "1.13.9",
|
||||
"version": "1.13.11",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -33,9 +33,9 @@
|
||||
"typescript": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/features": "workspace:*",
|
||||
"@standardnotes/security": "^1.7.5",
|
||||
"@standardnotes/security": "^1.7.6",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.57.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.57.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.57.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
## [1.57.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/services
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/services",
|
||||
"version": "1.57.3",
|
||||
"version": "1.57.6",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
|
||||
@@ -2,13 +2,12 @@ import { UserRegistrationResponseBody } from '@standardnotes/api'
|
||||
import { ProtocolVersion } from '@standardnotes/common'
|
||||
import { SNRootKey } from '@standardnotes/encryption'
|
||||
import { RootKeyInterface } from '@standardnotes/models'
|
||||
import { ClientDisplayableError, SessionBody, SignInResponse, User, HttpResponse } from '@standardnotes/responses'
|
||||
import { SessionBody, SignInResponse, User, HttpResponse } from '@standardnotes/responses'
|
||||
import { Base64String } from '@standardnotes/sncrypto-common'
|
||||
|
||||
import { SessionManagerResponse } from './SessionManagerResponse'
|
||||
|
||||
export interface SessionsClientInterface {
|
||||
createDemoShareToken(): Promise<Base64String | ClientDisplayableError>
|
||||
populateSessionFromDemoShareToken(token: Base64String): Promise<void>
|
||||
getUser(): User | undefined
|
||||
isCurrentSessionReadOnly(): boolean | undefined
|
||||
|
||||
@@ -3,6 +3,26 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.166.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.166.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.166.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.166.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.166.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
## [2.166.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/snjs
|
||||
|
||||
@@ -79,7 +79,6 @@ import {
|
||||
DecryptedItemInterface,
|
||||
EncryptedItemInterface,
|
||||
Environment,
|
||||
HistoryEntry,
|
||||
ItemStream,
|
||||
Platform,
|
||||
} from '@standardnotes/models'
|
||||
@@ -90,7 +89,7 @@ import { SNLog } from '../Log'
|
||||
import { ChallengeResponse, ListedClientInterface } from '../Services'
|
||||
import { ApplicationConstructorOptions, FullyResolvedApplicationOptions } from './Options/ApplicationOptions'
|
||||
import { ApplicationOptionsDefaults } from './Options/Defaults'
|
||||
import { LegacySession, MapperInterface, Session, UseCaseInterface } from '@standardnotes/domain-core'
|
||||
import { LegacySession, MapperInterface, Session } from '@standardnotes/domain-core'
|
||||
import { SessionStorageMapper } from '@Lib/Services/Mapping/SessionStorageMapper'
|
||||
import { LegacySessionStorageMapper } from '@Lib/Services/Mapping/LegacySessionStorageMapper'
|
||||
import { SignInWithRecoveryCodes } from '@Lib/Domain/UseCase/SignInWithRecoveryCodes/SignInWithRecoveryCodes'
|
||||
@@ -102,7 +101,6 @@ import { DeleteAuthenticator } from '@Lib/Domain/UseCase/DeleteAuthenticator/Del
|
||||
import { ListRevisions } from '@Lib/Domain/UseCase/ListRevisions/ListRevisions'
|
||||
import { GetRevision } from '@Lib/Domain/UseCase/GetRevision/GetRevision'
|
||||
import { DeleteRevision } from '@Lib/Domain/UseCase/DeleteRevision/DeleteRevision'
|
||||
import { RevisionMetadata } from '@Lib/Domain/Revision/RevisionMetadata'
|
||||
import { GetAuthenticatorAuthenticationResponse } from '@Lib/Domain/UseCase/GetAuthenticatorAuthenticationResponse/GetAuthenticatorAuthenticationResponse'
|
||||
|
||||
/** How often to automatically sync, in milliseconds */
|
||||
@@ -266,39 +264,39 @@ export class SNApplication implements ApplicationInterface, AppGroupManagedAppli
|
||||
return this.subscriptionManager
|
||||
}
|
||||
|
||||
get signInWithRecoveryCodes(): UseCaseInterface<void> {
|
||||
get signInWithRecoveryCodes(): SignInWithRecoveryCodes {
|
||||
return this._signInWithRecoveryCodes
|
||||
}
|
||||
|
||||
get getRecoveryCodes(): UseCaseInterface<string> {
|
||||
get getRecoveryCodes(): GetRecoveryCodes {
|
||||
return this._getRecoveryCodes
|
||||
}
|
||||
|
||||
get addAuthenticator(): UseCaseInterface<void> {
|
||||
get addAuthenticator(): AddAuthenticator {
|
||||
return this._addAuthenticator
|
||||
}
|
||||
|
||||
get listAuthenticators(): UseCaseInterface<Array<{ id: string; name: string }>> {
|
||||
get listAuthenticators(): ListAuthenticators {
|
||||
return this._listAuthenticators
|
||||
}
|
||||
|
||||
get deleteAuthenticator(): UseCaseInterface<void> {
|
||||
get deleteAuthenticator(): DeleteAuthenticator {
|
||||
return this._deleteAuthenticator
|
||||
}
|
||||
|
||||
get getAuthenticatorAuthenticationResponse(): UseCaseInterface<Record<string, unknown>> {
|
||||
get getAuthenticatorAuthenticationResponse(): GetAuthenticatorAuthenticationResponse {
|
||||
return this._getAuthenticatorAuthenticationResponse
|
||||
}
|
||||
|
||||
get listRevisions(): UseCaseInterface<Array<RevisionMetadata>> {
|
||||
get listRevisions(): ListRevisions {
|
||||
return this._listRevisions
|
||||
}
|
||||
|
||||
get getRevision(): UseCaseInterface<HistoryEntry> {
|
||||
get getRevision(): GetRevision {
|
||||
return this._getRevision
|
||||
}
|
||||
|
||||
get deleteRevision(): UseCaseInterface<void> {
|
||||
get deleteRevision(): DeleteRevision {
|
||||
return this._deleteRevision
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
import { HistoryEntry } from '@standardnotes/models'
|
||||
import { UseCaseInterface } from '@standardnotes/domain-core'
|
||||
|
||||
import { RevisionMetadata } from '../Revision/RevisionMetadata'
|
||||
import { AddAuthenticator } from './AddAuthenticator/AddAuthenticator'
|
||||
import { GetRecoveryCodes } from './GetRecoveryCodes/GetRecoveryCodes'
|
||||
import { SignInWithRecoveryCodes } from './SignInWithRecoveryCodes/SignInWithRecoveryCodes'
|
||||
import { ListAuthenticators } from './ListAuthenticators/ListAuthenticators'
|
||||
import { DeleteAuthenticator } from './DeleteAuthenticator/DeleteAuthenticator'
|
||||
import { GetAuthenticatorAuthenticationResponse } from './GetAuthenticatorAuthenticationResponse/GetAuthenticatorAuthenticationResponse'
|
||||
import { ListRevisions } from './ListRevisions/ListRevisions'
|
||||
import { GetRevision } from './GetRevision/GetRevision'
|
||||
import { DeleteRevision } from './DeleteRevision/DeleteRevision'
|
||||
|
||||
export interface UseCaseContainerInterface {
|
||||
get signInWithRecoveryCodes(): UseCaseInterface<void>
|
||||
get getRecoveryCodes(): UseCaseInterface<string>
|
||||
get addAuthenticator(): UseCaseInterface<void>
|
||||
get listAuthenticators(): UseCaseInterface<Array<{ id: string; name: string }>>
|
||||
get deleteAuthenticator(): UseCaseInterface<void>
|
||||
get getAuthenticatorAuthenticationResponse(): UseCaseInterface<Record<string, unknown>>
|
||||
get listRevisions(): UseCaseInterface<Array<RevisionMetadata>>
|
||||
get getRevision(): UseCaseInterface<HistoryEntry>
|
||||
get deleteRevision(): UseCaseInterface<void>
|
||||
get signInWithRecoveryCodes(): SignInWithRecoveryCodes
|
||||
get getRecoveryCodes(): GetRecoveryCodes
|
||||
get addAuthenticator(): AddAuthenticator
|
||||
get listAuthenticators(): ListAuthenticators
|
||||
get deleteAuthenticator(): DeleteAuthenticator
|
||||
get getAuthenticatorAuthenticationResponse(): GetAuthenticatorAuthenticationResponse
|
||||
get listRevisions(): ListRevisions
|
||||
get getRevision(): GetRevision
|
||||
get deleteRevision(): DeleteRevision
|
||||
}
|
||||
|
||||
@@ -1,2 +1,18 @@
|
||||
export * from './Revision/Revision'
|
||||
export * from './Revision/RevisionMetadata'
|
||||
export * from './UseCase/AddAuthenticator/AddAuthenticator'
|
||||
export * from './UseCase/AddAuthenticator/AddAuthenticatorDTO'
|
||||
export * from './UseCase/DeleteAuthenticator/DeleteAuthenticator'
|
||||
export * from './UseCase/DeleteAuthenticator/DeleteAuthenticatorDTO'
|
||||
export * from './UseCase/DeleteRevision/DeleteRevision'
|
||||
export * from './UseCase/DeleteRevision/DeleteRevisionDTO'
|
||||
export * from './UseCase/GetAuthenticatorAuthenticationResponse/GetAuthenticatorAuthenticationResponse'
|
||||
export * from './UseCase/GetAuthenticatorAuthenticationResponse/GetAuthenticatorAuthenticationResponseDTO'
|
||||
export * from './UseCase/GetRecoveryCodes/GetRecoveryCodes'
|
||||
export * from './UseCase/GetRevision/GetRevision'
|
||||
export * from './UseCase/GetRevision/GetRevisionDTO'
|
||||
export * from './UseCase/ListAuthenticators/ListAuthenticators'
|
||||
export * from './UseCase/ListRevisions/ListRevisions'
|
||||
export * from './UseCase/ListRevisions/ListRevisionsDTO'
|
||||
export * from './UseCase/SignInWithRecoveryCodes/SignInWithRecoveryCodes'
|
||||
export * from './UseCase/SignInWithRecoveryCodes/SignInWithRecoveryCodesDTO'
|
||||
|
||||
@@ -44,8 +44,8 @@ import {
|
||||
HttpSuccessResponse,
|
||||
} from '@standardnotes/responses'
|
||||
import { CopyPayloadWithContentOverride } from '@standardnotes/models'
|
||||
import { LegacySession, MapperInterface, Session, SessionToken } from '@standardnotes/domain-core'
|
||||
import { KeyParamsFromApiResponse, SNRootKeyParams, SNRootKey, CreateNewRootKey } from '@standardnotes/encryption'
|
||||
import { LegacySession, MapperInterface, Result, Session, SessionToken } from '@standardnotes/domain-core'
|
||||
import { KeyParamsFromApiResponse, SNRootKeyParams, SNRootKey } from '@standardnotes/encryption'
|
||||
import { Subscription } from '@standardnotes/security'
|
||||
import * as Common from '@standardnotes/common'
|
||||
|
||||
@@ -640,32 +640,6 @@ export class SNSessionManager
|
||||
}
|
||||
}
|
||||
|
||||
public async createDemoShareToken(): Promise<Base64String | ClientDisplayableError> {
|
||||
const session = this.getSession()
|
||||
if (!session) {
|
||||
return new ClientDisplayableError('Cannot generate share token without active session')
|
||||
}
|
||||
if (!(session instanceof Session)) {
|
||||
return new ClientDisplayableError('Cannot generate share token with non-token session')
|
||||
}
|
||||
|
||||
const keyParams = (await this.protocolService.getRootKeyParams()) as SNRootKeyParams
|
||||
|
||||
const payload: ShareToken = {
|
||||
accessToken: session.accessToken.value,
|
||||
refreshToken: session.refreshToken.value,
|
||||
accessExpiration: session.accessToken.expiresAt,
|
||||
refreshExpiration: session.refreshToken.expiresAt,
|
||||
readonlyAccess: true,
|
||||
masterKey: this.protocolService.getRootKey()?.masterKey as string,
|
||||
keyParams: keyParams.content,
|
||||
user: this.getSureUser(),
|
||||
host: this.apiService.getHost(),
|
||||
}
|
||||
|
||||
return this.protocolService.crypto.base64Encode(JSON.stringify(payload))
|
||||
}
|
||||
|
||||
private decodeDemoShareToken(token: Base64String): ShareToken {
|
||||
const jsonString = this.protocolService.crypto.base64Decode(token)
|
||||
return JSON.parse(jsonString)
|
||||
@@ -674,25 +648,7 @@ export class SNSessionManager
|
||||
public async populateSessionFromDemoShareToken(token: Base64String): Promise<void> {
|
||||
const sharePayload = this.decodeDemoShareToken(token)
|
||||
|
||||
const rootKey = CreateNewRootKey({
|
||||
masterKey: sharePayload.masterKey,
|
||||
keyParams: sharePayload.keyParams,
|
||||
version: sharePayload.keyParams.version,
|
||||
})
|
||||
|
||||
const user = sharePayload.user
|
||||
|
||||
const session = this.createSession(
|
||||
sharePayload.accessToken,
|
||||
sharePayload.accessExpiration,
|
||||
sharePayload.refreshToken,
|
||||
sharePayload.refreshExpiration,
|
||||
sharePayload.readonlyAccess,
|
||||
)
|
||||
|
||||
if (session !== null) {
|
||||
await this.populateSession(rootKey, user, session, sharePayload.host)
|
||||
}
|
||||
await this.signIn(sharePayload.email, sharePayload.password, false, true)
|
||||
}
|
||||
|
||||
private async populateSession(
|
||||
@@ -724,17 +680,26 @@ export class SNSessionManager
|
||||
rootKey: SNRootKey
|
||||
wrappingKey?: SNRootKey
|
||||
}): Promise<void> {
|
||||
const session = this.createSession(
|
||||
const sessionOrError = this.createSession(
|
||||
dto.session.access_token,
|
||||
dto.session.access_expiration,
|
||||
dto.session.refresh_token,
|
||||
dto.session.refresh_expiration,
|
||||
dto.session.readonly_access,
|
||||
)
|
||||
if (sessionOrError.isFailed()) {
|
||||
console.error(sessionOrError.getError())
|
||||
|
||||
if (session !== null) {
|
||||
await this.populateSession(dto.rootKey, dto.user, session, this.apiService.getHost(), dto.wrappingKey)
|
||||
return
|
||||
}
|
||||
|
||||
await this.populateSession(
|
||||
dto.rootKey,
|
||||
dto.user,
|
||||
sessionOrError.getValue(),
|
||||
this.apiService.getHost(),
|
||||
dto.wrappingKey,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -755,16 +720,25 @@ export class SNSessionManager
|
||||
await this.populateSession(rootKey, user, sessionOrError.getValue(), this.apiService.getHost(), wrappingKey)
|
||||
}
|
||||
} else if (data.session) {
|
||||
const session = this.createSession(
|
||||
const sessionOrError = this.createSession(
|
||||
data.session.access_token,
|
||||
data.session.access_expiration,
|
||||
data.session.refresh_token,
|
||||
data.session.refresh_expiration,
|
||||
data.session.readonly_access,
|
||||
)
|
||||
if (session !== null && user) {
|
||||
await this.populateSession(rootKey, user, session, this.apiService.getHost(), wrappingKey)
|
||||
if (sessionOrError.isFailed()) {
|
||||
console.error(sessionOrError.getError())
|
||||
|
||||
return
|
||||
}
|
||||
if (!user) {
|
||||
console.error('No user in response')
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
await this.populateSession(rootKey, user, sessionOrError.getValue(), this.apiService.getHost(), wrappingKey)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -774,25 +748,25 @@ export class SNSessionManager
|
||||
refreshTokenValue: string,
|
||||
refreshExpiration: number,
|
||||
readonlyAccess: boolean,
|
||||
): Session | null {
|
||||
): Result<Session> {
|
||||
const accessTokenOrError = SessionToken.create(accessTokenValue, accessExpiration)
|
||||
if (accessTokenOrError.isFailed()) {
|
||||
return null
|
||||
return Result.fail(`Could not create session: ${accessTokenOrError.getError()}`)
|
||||
}
|
||||
const accessToken = accessTokenOrError.getValue()
|
||||
|
||||
const refreshTokenOrError = SessionToken.create(refreshTokenValue, refreshExpiration)
|
||||
if (refreshTokenOrError.isFailed()) {
|
||||
return null
|
||||
return Result.fail(`Could not create session: ${refreshTokenOrError.getError()}`)
|
||||
}
|
||||
const refreshToken = refreshTokenOrError.getValue()
|
||||
|
||||
const sessionOrError = Session.create(accessToken, refreshToken, readonlyAccess)
|
||||
if (sessionOrError.isFailed()) {
|
||||
return null
|
||||
return Result.fail(`Could not create session: ${sessionOrError.getError()}`)
|
||||
}
|
||||
|
||||
return sessionOrError.getValue()
|
||||
return Result.ok(sessionOrError.getValue())
|
||||
}
|
||||
|
||||
override getDiagnostics(): Promise<DiagnosticInfo | undefined> {
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
import { User } from '@standardnotes/responses'
|
||||
import { AnyKeyParamsContent } from '@standardnotes/common'
|
||||
import { RawSessionPayload } from './Sessions/Types'
|
||||
|
||||
export type ShareToken = RawSessionPayload & {
|
||||
masterKey: string
|
||||
keyParams: AnyKeyParamsContent
|
||||
user: User
|
||||
host: string
|
||||
email: string
|
||||
password: string
|
||||
}
|
||||
|
||||
@@ -13,10 +13,7 @@ export * from '@standardnotes/encryption'
|
||||
export * from '@standardnotes/features'
|
||||
export * from '@standardnotes/files'
|
||||
export * from '@standardnotes/models'
|
||||
|
||||
export * from '@standardnotes/responses'
|
||||
export { ErrorTag } from '@standardnotes/responses'
|
||||
|
||||
export * from '@standardnotes/services'
|
||||
export * from '@standardnotes/settings'
|
||||
export * from '@standardnotes/utils'
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
/* eslint-disable no-undef */
|
||||
import * as Factory from './lib/factory.js'
|
||||
chai.use(chaiAsPromised)
|
||||
const expect = chai.expect
|
||||
|
||||
describe('session sharing', function () {
|
||||
this.timeout(Factory.TenSecondTimeout)
|
||||
|
||||
beforeEach(async function () {
|
||||
localStorage.clear()
|
||||
|
||||
this.context = await Factory.createAppContext()
|
||||
await this.context.launch()
|
||||
|
||||
this.application = this.context.application
|
||||
this.email = this.context.email
|
||||
this.password = this.context.password
|
||||
|
||||
await Factory.registerUserToApplication({
|
||||
application: this.application,
|
||||
email: this.email,
|
||||
password: this.password,
|
||||
})
|
||||
})
|
||||
|
||||
afterEach(async function () {
|
||||
await this.context.deinit()
|
||||
this.context = undefined
|
||||
this.application = undefined
|
||||
localStorage.clear()
|
||||
})
|
||||
|
||||
it('share token payloads should include neccessary params', async function () {
|
||||
const token = await this.application.sessions.createDemoShareToken()
|
||||
const payload = await this.application.sessions.decodeDemoShareToken(token)
|
||||
|
||||
const expectedKeys = [
|
||||
'accessToken',
|
||||
'refreshToken',
|
||||
'accessExpiration',
|
||||
'refreshExpiration',
|
||||
'readonlyAccess',
|
||||
'masterKey',
|
||||
'keyParams',
|
||||
'user',
|
||||
'host',
|
||||
]
|
||||
|
||||
for (const key of expectedKeys) {
|
||||
expect(payload[key]).to.not.be.undefined
|
||||
}
|
||||
})
|
||||
|
||||
it('populating session from share token should allow pulling in new items', async function () {
|
||||
const token = await this.application.sessions.createDemoShareToken()
|
||||
|
||||
await Factory.createSyncedNote(this.application, 'demo title', 'demo text')
|
||||
|
||||
const otherContext = await Factory.createAppContext()
|
||||
await otherContext.launch()
|
||||
|
||||
const otherApplication = otherContext.application
|
||||
|
||||
expect(otherApplication.items.getItems(ContentType.Note).length).to.equal(0)
|
||||
|
||||
await otherApplication.sessions.populateSessionFromDemoShareToken(token)
|
||||
|
||||
await otherApplication.sync.sync()
|
||||
|
||||
const notes = otherApplication.items.getItems(ContentType.Note)
|
||||
|
||||
expect(notes.length).to.equal(1)
|
||||
|
||||
const note = notes[0]
|
||||
|
||||
expect(note.title).to.equal('demo title')
|
||||
expect(note.text).to.equal('demo text')
|
||||
|
||||
await otherContext.deinit()
|
||||
})
|
||||
|
||||
/**
|
||||
* Demo session tokens can only be created manually via raw SQL entry on the DB side.
|
||||
* There is no API to create share tokens. Therefore, the share token below is made from
|
||||
* a copy of the master session, which is not readonly.
|
||||
*/
|
||||
it.skip('populating session from share token should not allow making changes', async function () {
|
||||
const token = await this.application.sessions.createDemoShareToken()
|
||||
|
||||
await Factory.createSyncedNote(this.application, 'demo title', 'demo text')
|
||||
|
||||
const otherContext = await Factory.createAppContext()
|
||||
await otherContext.launch()
|
||||
|
||||
const otherApplication = otherContext.application
|
||||
|
||||
await otherApplication.sessions.populateSessionFromDemoShareToken(token)
|
||||
|
||||
await otherApplication.sync.sync()
|
||||
|
||||
const note = otherApplication.items.getItems(ContentType.Note)[0]
|
||||
|
||||
const syncResponse = otherContext.awaitNextSyncEvent(SyncEvent.SingleRoundTripSyncCompleted)
|
||||
|
||||
await otherApplication.mutator.changeAndSaveItem(note, (mutator) => {
|
||||
mutator.title = 'unauthorized change'
|
||||
})
|
||||
|
||||
const result = await syncResponse
|
||||
|
||||
expect(result.rawResponse.unsaved_items.length).to.equal(1)
|
||||
})
|
||||
})
|
||||
@@ -84,7 +84,6 @@
|
||||
<script type="module" src="history.test.js"></script>
|
||||
<script type="module" src="actions.test.js"></script>
|
||||
<script type="module" src="preferences.test.js"></script>
|
||||
<script type="module" src="session-sharing.test.js"></script>
|
||||
<script type="module" src="files.test.js"></script>
|
||||
<script type="module" src="session.test.js"></script>
|
||||
<script type="module" src="subscriptions.test.js"></script>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/snjs",
|
||||
"version": "2.166.3",
|
||||
"version": "2.166.8",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -36,17 +36,17 @@
|
||||
"@babel/core": "*",
|
||||
"@babel/preset-env": "*",
|
||||
"@standardnotes/api": "workspace:*",
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/domain-core": "^1.11.3",
|
||||
"@standardnotes/domain-events": "^2.106.0",
|
||||
"@standardnotes/domain-events": "^2.108.1",
|
||||
"@standardnotes/encryption": "workspace:*",
|
||||
"@standardnotes/features": "workspace:*",
|
||||
"@standardnotes/files": "workspace:*",
|
||||
"@standardnotes/models": "workspace:*",
|
||||
"@standardnotes/responses": "workspace:*",
|
||||
"@standardnotes/security": "^1.7.5",
|
||||
"@standardnotes/security": "^1.7.6",
|
||||
"@standardnotes/services": "workspace:*",
|
||||
"@standardnotes/settings": "^1.19.0",
|
||||
"@standardnotes/settings": "^1.19.1",
|
||||
"@standardnotes/sncrypto-common": "workspace:*",
|
||||
"@standardnotes/sncrypto-web": "workspace:*",
|
||||
"@standardnotes/utils": "workspace:*",
|
||||
|
||||
@@ -3,6 +3,26 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.24.34](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.24.33](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.24.32](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.24.31](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.24.30](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/ui-services
|
||||
|
||||
## [1.24.29](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/ui-services",
|
||||
"version": "1.24.29",
|
||||
"version": "1.24.34",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -15,7 +15,7 @@
|
||||
"test": "jest spec"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"@standardnotes/features": "workspace:^",
|
||||
"@standardnotes/filepicker": "workspace:^",
|
||||
"@standardnotes/services": "workspace:^",
|
||||
|
||||
@@ -73,7 +73,7 @@ export class ArchiveManager {
|
||||
|
||||
async getZippedDecryptedItemsBlob(data: BackupFile) {
|
||||
const zip = await import('@zip.js/zip.js')
|
||||
const zipWriter = new zip.ZipWriter(new zip.BlobWriter('application/zip'))
|
||||
const zipWriter = new zip.ZipWriter<Blob>(new zip.BlobWriter('application/zip'))
|
||||
const items = data.items
|
||||
|
||||
const blob = new Blob([JSON.stringify(data, null, 2)], {
|
||||
@@ -116,7 +116,7 @@ export class ArchiveManager {
|
||||
|
||||
async zipData(data: ZippableData): Promise<Blob> {
|
||||
const zip = await import('@zip.js/zip.js')
|
||||
const writer = new zip.ZipWriter(new zip.BlobWriter('application/zip'))
|
||||
const writer = new zip.ZipWriter<Blob>(new zip.BlobWriter('application/zip'))
|
||||
|
||||
const filenameCounts: Record<string, number> = {}
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
export const ValidAppViewRoutes = ['u2f'] as const
|
||||
|
||||
export type AppViewRouteParam = typeof ValidAppViewRoutes[number]
|
||||
@@ -4,4 +4,5 @@ export enum RootQueryParam {
|
||||
DemoToken = 'demo-token',
|
||||
AcceptSubscriptionInvite = 'accept-subscription-invite',
|
||||
UserRequest = 'user-request',
|
||||
AppViewRoute = 'route',
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { UserRequestType } from '@standardnotes/common'
|
||||
import { PreferenceId } from './../Preferences/PreferenceId'
|
||||
import { AppViewRouteParam, ValidAppViewRoutes } from './Params/AppViewRouteParams'
|
||||
import { DemoParams } from './Params/DemoParams'
|
||||
import { OnboardingParams } from './Params/OnboardingParams'
|
||||
import { PurchaseParams } from './Params/PurchaseParams'
|
||||
@@ -78,6 +79,18 @@ export class RouteParser implements RouteParserInterface {
|
||||
}
|
||||
}
|
||||
|
||||
get appViewRouteParam(): AppViewRouteParam | undefined {
|
||||
this.checkForProperRouteType(RouteType.AppViewRoute)
|
||||
|
||||
const appViewRoute = this.searchParams.get(RootQueryParam.AppViewRoute) as AppViewRouteParam
|
||||
|
||||
if (!ValidAppViewRoutes.includes(appViewRoute)) {
|
||||
return
|
||||
}
|
||||
|
||||
return this.searchParams.get(RootQueryParam.AppViewRoute) as AppViewRouteParam
|
||||
}
|
||||
|
||||
private checkForProperRouteType(type: RouteType): void {
|
||||
if (this.parsedType !== type) {
|
||||
throw new Error('Accessing invalid params')
|
||||
@@ -99,6 +112,7 @@ export class RouteParser implements RouteParserInterface {
|
||||
[RootQueryParam.DemoToken, RouteType.Demo],
|
||||
[RootQueryParam.AcceptSubscriptionInvite, RouteType.AcceptSubscriptionInvite],
|
||||
[RootQueryParam.UserRequest, RouteType.UserRequest],
|
||||
[RootQueryParam.AppViewRoute, RouteType.AppViewRoute],
|
||||
])
|
||||
|
||||
for (const rootQueryParam of rootQueryParametersMap.keys()) {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { AppViewRouteParam } from './Params/AppViewRouteParams'
|
||||
import { DemoParams } from './Params/DemoParams'
|
||||
import { OnboardingParams } from './Params/OnboardingParams'
|
||||
import { PurchaseParams } from './Params/PurchaseParams'
|
||||
@@ -13,5 +14,6 @@ export interface RouteParserInterface {
|
||||
get onboardingParams(): OnboardingParams
|
||||
get subscriptionInviteParams(): SubscriptionInviteParams
|
||||
get userRequestParams(): UserRequestParams
|
||||
get appViewRouteParam(): AppViewRouteParam | undefined
|
||||
get type(): RouteType
|
||||
}
|
||||
|
||||
@@ -5,5 +5,6 @@ export enum RouteType {
|
||||
AcceptSubscriptionInvite = 'accept-subscription-invite',
|
||||
UserRequest = 'user-request',
|
||||
Demo = 'demo',
|
||||
AppViewRoute = 'route',
|
||||
None = 'none',
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.16.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/utils
|
||||
|
||||
## [1.16.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-01-24)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/utils
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/utils",
|
||||
"version": "1.16.4",
|
||||
"version": "1.16.5",
|
||||
"engines": {
|
||||
"node": ">=16.0.0 <17.0.0"
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"test": "jest spec"
|
||||
},
|
||||
"dependencies": {
|
||||
"@standardnotes/common": "^1.46.4",
|
||||
"@standardnotes/common": "^1.46.6",
|
||||
"dompurify": "^2.4.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.150.15](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
## [3.150.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)
|
||||
|
||||
**Note:** Version bump only for package @standardnotes/web
|
||||
|
||||
@@ -1,5 +1,126 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "3.150.15",
|
||||
"title": "[3.150.15](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-08)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.14",
|
||||
"title": "[3.150.14](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.13",
|
||||
"title": "[3.150.13](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.12",
|
||||
"title": "[3.150.12](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-07)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.11",
|
||||
"title": "[3.150.11](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-03)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.10",
|
||||
"title": "[3.150.10](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.9",
|
||||
"title": "[3.150.9](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-02)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.8",
|
||||
"title": "[3.150.8](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.7",
|
||||
"title": "[3.150.7](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.6",
|
||||
"title": "[3.150.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.5",
|
||||
"title": "[3.150.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)",
|
||||
"date": null,
|
||||
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||
"parsed": {
|
||||
"_": [
|
||||
"Note: Version bump only for package @standardnotes/web"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"version": "3.150.4",
|
||||
"title": "[3.150.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2023-03-01)",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@standardnotes/web",
|
||||
"version": "3.150.4",
|
||||
"version": "3.150.15",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "dist/app.js",
|
||||
"author": "Standard Notes.",
|
||||
@@ -38,6 +38,7 @@
|
||||
"@reach/listbox": "^0.18.0",
|
||||
"@reach/tooltip": "^0.18.0",
|
||||
"@reach/visually-hidden": "^0.18.0",
|
||||
"@simplewebauthn/browser": "^7.1.0",
|
||||
"@standardnotes/authenticator": "^2.3.9",
|
||||
"@standardnotes/autobiography-theme": "^1.2.7",
|
||||
"@standardnotes/bold-editor": "^1.6.4",
|
||||
@@ -51,7 +52,7 @@
|
||||
"@standardnotes/markdown-hybrid": "^1.7.7",
|
||||
"@standardnotes/markdown-math": "^1.4.2",
|
||||
"@standardnotes/markdown-minimal": "^1.3.0",
|
||||
"@standardnotes/markdown-visual": "^1.0.7",
|
||||
"@standardnotes/markdown-visual": "^1.3.2",
|
||||
"@standardnotes/midnight-theme": "^1.4.6",
|
||||
"@standardnotes/rich-text": "^1.8.7",
|
||||
"@standardnotes/simple-task-editor": "^1.3.10",
|
||||
@@ -87,8 +88,8 @@
|
||||
"lint-staged": ">=13",
|
||||
"mini-css-extract-plugin": "^2.7.2",
|
||||
"minimatch": "^5.1.1",
|
||||
"mobx": "^6.7.0",
|
||||
"mobx-react-lite": "^3.4.0",
|
||||
"mobx": "^6.8.0",
|
||||
"mobx-react-lite": "^3.4.2",
|
||||
"node-sass": "^8.0.0",
|
||||
"npm-check-updates": "*",
|
||||
"postcss": "^8.4.19",
|
||||
@@ -100,9 +101,9 @@
|
||||
"react-dom": "^18.2.0",
|
||||
"react-refresh": "^0.14.0",
|
||||
"sass-loader": "*",
|
||||
"styled-components": "^5.3.6",
|
||||
"styled-components": "^5.3.8",
|
||||
"svg-jest": "^1.0.1",
|
||||
"tailwindcss": "^3.2.4",
|
||||
"tailwindcss": "^3.2.7",
|
||||
"ts-jest": "^29.0.3",
|
||||
"ts-loader": "^9.4.2",
|
||||
"typescript": "*",
|
||||
@@ -116,7 +117,6 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@lexical/headless": "0.8.1",
|
||||
"@simplewebauthn/browser": "^7.0.0",
|
||||
"contactjs": "2.1.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"webcredentials": {
|
||||
"apps": [
|
||||
"HKF9BXSN95.com.standardnotes.standardnotes"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,8 @@ import { WebApplication } from './Application/Application'
|
||||
import { createRoot, Root } from 'react-dom/client'
|
||||
import { ElementIds } from './Constants/ElementIDs'
|
||||
import { setDefaultMonospaceFont } from './setDefaultMonospaceFont'
|
||||
import { RouteParser, RouteType } from '@standardnotes/ui-services'
|
||||
import U2FAuthIframe from './Components/U2FAuthIframe/U2FAuthIframe'
|
||||
|
||||
let keyCount = 0
|
||||
const getKey = () => {
|
||||
@@ -71,6 +73,13 @@ const startApplication: StartApplication = async function startApplication(
|
||||
|
||||
setDefaultMonospaceFont(device.platform)
|
||||
|
||||
const route = new RouteParser(window.location.href)
|
||||
|
||||
if (route.type === RouteType.AppViewRoute && route.appViewRouteParam === 'u2f') {
|
||||
root.render(<U2FAuthIframe />)
|
||||
return
|
||||
}
|
||||
|
||||
root.render(
|
||||
<ApplicationGroupView
|
||||
key={getKey()}
|
||||
|
||||
@@ -426,6 +426,18 @@ export class WebApplication extends SNApplication implements WebApplicationInter
|
||||
this.getViewControllerManager().accountMenuController.setShow(true)
|
||||
}
|
||||
|
||||
hideAccountMenu(): void {
|
||||
this.getViewControllerManager().accountMenuController.setShow(false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Full U2F clients are only web browser clients. They support adding and removing keys as well as authentication.
|
||||
* The desktop and mobile clients cannot support adding keys.
|
||||
*/
|
||||
get isFullU2FClient(): boolean {
|
||||
return this.environment === Environment.Web
|
||||
}
|
||||
|
||||
geDefaultEditorIdentifier(currentTag?: SNTag): EditorIdentifier {
|
||||
return (
|
||||
currentTag?.preferences?.editorIdentifier ||
|
||||
|
||||
@@ -90,7 +90,11 @@ const ApplicationView: FunctionComponent<Props> = ({ application, mainApplicatio
|
||||
return
|
||||
}
|
||||
|
||||
void application.user.populateSessionFromDemoShareToken(token)
|
||||
const status = application.status.addMessage('Preparing demo...')
|
||||
void application.user.populateSessionFromDemoShareToken(token).then(() => {
|
||||
application.status.removeMessage(status)
|
||||
application.hideAccountMenu()
|
||||
})
|
||||
}, [application])
|
||||
|
||||
const onAppLaunch = useCallback(() => {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { RefObject, useState } from 'react'
|
||||
import Button from '../Button/Button'
|
||||
import Icon from '../Icon/Icon'
|
||||
import { InputValue } from './InputValue'
|
||||
import U2FPromptIframeContainer from './U2FPromptIframeContainer'
|
||||
|
||||
type Props = {
|
||||
application: WebApplication
|
||||
@@ -17,6 +18,18 @@ const U2FPrompt = ({ application, onValueChange, prompt, buttonRef, contextData
|
||||
const [authenticatorResponse, setAuthenticatorResponse] = useState<Record<string, unknown> | null>(null)
|
||||
const [error, setError] = useState('')
|
||||
|
||||
if (!application.isFullU2FClient) {
|
||||
return (
|
||||
<U2FPromptIframeContainer
|
||||
contextData={contextData}
|
||||
apiHost={application.getHost() || window.defaultSyncServer}
|
||||
onResponse={(response) => {
|
||||
onValueChange(response, prompt)
|
||||
}}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="min-w-76">
|
||||
{error && <div className="text-red-500">{error}</div>}
|
||||
@@ -27,18 +40,18 @@ const U2FPrompt = ({ application, onValueChange, prompt, buttonRef, contextData
|
||||
onClick={async () => {
|
||||
if (!contextData || contextData.username === undefined) {
|
||||
setError('No username provided')
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
const authenticatorResponseOrError = await application.getAuthenticatorAuthenticationResponse.execute({
|
||||
username: contextData.username,
|
||||
username: contextData.username as string,
|
||||
})
|
||||
|
||||
if (authenticatorResponseOrError.isFailed()) {
|
||||
setError(authenticatorResponseOrError.getError())
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
const authenticatorResponse = authenticatorResponseOrError.getValue()
|
||||
|
||||
setAuthenticatorResponse(authenticatorResponse)
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import { log, LoggingDomain } from '@/Logging'
|
||||
import { isDev } from '@/Utils'
|
||||
import { useEffect, useRef } from 'react'
|
||||
|
||||
type Props = {
|
||||
contextData?: Record<string, unknown>
|
||||
onResponse: (response: string) => void
|
||||
apiHost: string
|
||||
}
|
||||
|
||||
const U2F_IFRAME_ORIGIN = isDev ? 'http://localhost:3001/?route=u2f' : 'https://app.standardnotes.com/?route=u2f'
|
||||
|
||||
const U2FPromptIframeContainer = ({ contextData, onResponse, apiHost }: Props) => {
|
||||
const iframeRef = useRef<HTMLIFrameElement>(null)
|
||||
|
||||
useEffect(() => {
|
||||
const messageHandler = (event: MessageEvent) => {
|
||||
log(LoggingDomain.U2F, 'Native client received message', event)
|
||||
const eventDoesNotComeFromU2FIFrame = event.origin !== new URL(U2F_IFRAME_ORIGIN).origin
|
||||
if (eventDoesNotComeFromU2FIFrame) {
|
||||
log(
|
||||
LoggingDomain.U2F,
|
||||
'Not sending data to U2F iframe; origin does not match',
|
||||
event.origin,
|
||||
new URL(U2F_IFRAME_ORIGIN).origin,
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (event.data.mountedAuthView) {
|
||||
if (iframeRef.current?.contentWindow) {
|
||||
log(LoggingDomain.U2F, 'Sending contextData to U2F iframe', contextData)
|
||||
iframeRef.current.contentWindow.postMessage(
|
||||
{ username: (contextData as Record<string, unknown>).username, apiHost },
|
||||
U2F_IFRAME_ORIGIN,
|
||||
)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (event.data.assertionResponse) {
|
||||
log(LoggingDomain.U2F, 'Received assertion response from U2F iframe', event.data.assertionResponse)
|
||||
onResponse(event.data.assertionResponse)
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('message', messageHandler)
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('message', messageHandler)
|
||||
}
|
||||
}, [contextData, onResponse, apiHost])
|
||||
|
||||
return (
|
||||
<iframe
|
||||
ref={iframeRef}
|
||||
src={U2F_IFRAME_ORIGIN}
|
||||
className="h-40 w-full"
|
||||
title="U2F"
|
||||
allow="publickey-credentials-get"
|
||||
id="u2f"
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export default U2FPromptIframeContainer
|
||||
@@ -1,5 +1,5 @@
|
||||
import { classNames } from '@standardnotes/utils'
|
||||
import { forwardRef, Fragment, Ref } from 'react'
|
||||
import { forwardRef, Fragment, KeyboardEventHandler, Ref, useCallback } from 'react'
|
||||
import { DecoratedInputProps } from './DecoratedInputProps'
|
||||
|
||||
const getClassNames = (hasLeftDecorations: boolean, hasRightDecorations: boolean, roundedFull?: boolean) => {
|
||||
@@ -31,6 +31,7 @@ const DecoratedInput = forwardRef(
|
||||
onFocus,
|
||||
onKeyDown,
|
||||
onKeyUp,
|
||||
onEnter,
|
||||
placeholder = '',
|
||||
right,
|
||||
type = 'text',
|
||||
@@ -38,6 +39,7 @@ const DecoratedInput = forwardRef(
|
||||
value,
|
||||
defaultValue,
|
||||
roundedFull,
|
||||
autofocus = false,
|
||||
}: DecoratedInputProps,
|
||||
ref: Ref<HTMLInputElement>,
|
||||
) => {
|
||||
@@ -45,6 +47,16 @@ const DecoratedInput = forwardRef(
|
||||
const hasRightDecorations = Boolean(right?.length)
|
||||
const computedClassNames = getClassNames(hasLeftDecorations, hasRightDecorations, roundedFull)
|
||||
|
||||
const handleKeyUp: KeyboardEventHandler = useCallback(
|
||||
(e) => {
|
||||
if (e.key === 'Enter') {
|
||||
onEnter?.()
|
||||
}
|
||||
onKeyUp?.(e)
|
||||
},
|
||||
[onKeyUp, onEnter],
|
||||
)
|
||||
|
||||
return (
|
||||
<div
|
||||
className={classNames(
|
||||
@@ -63,6 +75,7 @@ const DecoratedInput = forwardRef(
|
||||
|
||||
<input
|
||||
autoComplete={autocomplete ? 'on' : 'off'}
|
||||
autoFocus={autofocus}
|
||||
className={`${computedClassNames.input} ${disabled ? computedClassNames.disabled : ''} ${className?.input}`}
|
||||
data-lpignore={type !== 'password' ? true : false}
|
||||
disabled={disabled}
|
||||
@@ -71,7 +84,7 @@ const DecoratedInput = forwardRef(
|
||||
onChange={(e) => onChange && onChange((e.target as HTMLInputElement).value)}
|
||||
onFocus={onFocus}
|
||||
onKeyDown={onKeyDown}
|
||||
onKeyUp={onKeyUp}
|
||||
onKeyUp={handleKeyUp}
|
||||
placeholder={placeholder}
|
||||
ref={ref}
|
||||
title={title}
|
||||
|
||||
@@ -2,6 +2,7 @@ import { FocusEventHandler, KeyboardEventHandler, ReactNode } from 'react'
|
||||
|
||||
export type DecoratedInputProps = {
|
||||
autocomplete?: boolean
|
||||
autofocus?: boolean
|
||||
spellcheck?: boolean
|
||||
className?: {
|
||||
container?: string
|
||||
@@ -17,6 +18,7 @@ export type DecoratedInputProps = {
|
||||
onFocus?: FocusEventHandler
|
||||
onKeyDown?: KeyboardEventHandler
|
||||
onKeyUp?: KeyboardEventHandler
|
||||
onEnter?: () => void
|
||||
placeholder?: string
|
||||
right?: ReactNode[]
|
||||
title?: string
|
||||
|
||||
+17
-6
@@ -1,6 +1,6 @@
|
||||
import { FunctionComponent, useCallback, useState } from 'react'
|
||||
import { observer } from 'mobx-react-lite'
|
||||
import { UseCaseInterface } from '@standardnotes/snjs'
|
||||
import { AddAuthenticator } from '@standardnotes/snjs'
|
||||
|
||||
import DecoratedInput from '@/Components/Input/DecoratedInput'
|
||||
import { UserProvider } from '@/Components/Preferences/Providers'
|
||||
@@ -9,7 +9,7 @@ import { MutuallyExclusiveMediaQueryBreakpoints, useMediaQuery } from '@/Hooks/u
|
||||
|
||||
type Props = {
|
||||
userProvider: UserProvider
|
||||
addAuthenticator: UseCaseInterface<void>
|
||||
addAuthenticator: AddAuthenticator
|
||||
onDeviceAddingModalToggle: (show: boolean) => void
|
||||
onDeviceAdded: () => Promise<void>
|
||||
}
|
||||
@@ -82,11 +82,22 @@ const U2FAddDeviceView: FunctionComponent<Props> = ({
|
||||
},
|
||||
]}
|
||||
>
|
||||
<div className="w-25 h-25 flex items-center justify-center bg-info">...Some Cool Device Picture Here...</div>
|
||||
<div className="flex flex-grow flex-col gap-2">
|
||||
<DecoratedInput className={{ container: 'w-92 ml-4' }} value={deviceName} onChange={handleDeviceNameChange} />
|
||||
<div className="flex px-4 py-4">
|
||||
<div className="ml-4 flex flex-grow flex-col gap-1">
|
||||
<label htmlFor="u2f-device-name" className="mb-2 text-sm font-semibold">
|
||||
Device Name
|
||||
</label>
|
||||
<DecoratedInput
|
||||
autofocus
|
||||
id="u2f-device-name"
|
||||
className={{ container: 'w-92' }}
|
||||
value={deviceName}
|
||||
onChange={handleDeviceNameChange}
|
||||
onEnter={handleAddDeviceClick}
|
||||
/>
|
||||
{errorMessage && <div className="mt-1.5 text-danger">{errorMessage}</div>}
|
||||
</div>
|
||||
</div>
|
||||
{errorMessage && <div className="text-error">{errorMessage}</div>}
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
|
||||
+11
-1
@@ -3,17 +3,27 @@ import { observer } from 'mobx-react-lite'
|
||||
|
||||
import { Text } from '@/Components/Preferences/PreferencesComponents/Content'
|
||||
import { UserProvider } from '@/Components/Preferences/Providers'
|
||||
import { useApplication } from '@/Components/ApplicationProvider'
|
||||
|
||||
type Props = {
|
||||
userProvider: UserProvider
|
||||
}
|
||||
|
||||
const U2FDescription: FunctionComponent<Props> = ({ userProvider }) => {
|
||||
const application = useApplication()
|
||||
|
||||
if (userProvider.getUser() === undefined) {
|
||||
return <Text>Sign in or register for an account to configure U2F.</Text>
|
||||
}
|
||||
|
||||
return <Text>Authenticate with a U2F hardware device.</Text>
|
||||
return (
|
||||
<div>
|
||||
<Text>Authenticate with a U2F hardware device such as Yubikey.</Text>
|
||||
{!application.isFullU2FClient && (
|
||||
<Text className="italic">Please visit the web app in order to add a U2F Device.</Text>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default observer(U2FDescription)
|
||||
|
||||
+19
-17
@@ -1,9 +1,10 @@
|
||||
import { FunctionComponent, useCallback } from 'react'
|
||||
import { observer } from 'mobx-react-lite'
|
||||
|
||||
import { Text } from '@/Components/Preferences/PreferencesComponents/Content'
|
||||
import { Subtitle } from '@/Components/Preferences/PreferencesComponents/Content'
|
||||
import { WebApplication } from '@/Application/Application'
|
||||
import Button from '@/Components/Button/Button'
|
||||
import Icon from '@/Components/Icon/Icon'
|
||||
|
||||
type Props = {
|
||||
application: WebApplication
|
||||
@@ -31,24 +32,25 @@ const U2FDevicesList: FunctionComponent<Props> = ({ application, devices, onErro
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="flex flex-row items-center">
|
||||
<div>
|
||||
{devices.length > 0 && (
|
||||
<div className="flex flex-grow flex-col">
|
||||
<div>
|
||||
<Text>Devices:</Text>
|
||||
<>
|
||||
<Subtitle>Devices</Subtitle>
|
||||
<div className="flex flex-grow flex-col divide-y divide-border">
|
||||
{devices.map((device) => (
|
||||
<div className="flex items-center py-2" key={`device-${device.id}`}>
|
||||
<Icon type="security" />
|
||||
<div className="ml-2 mr-auto text-sm">{device.name}</div>
|
||||
<Button
|
||||
small
|
||||
key={device.id}
|
||||
label="Delete"
|
||||
onClick={async () => handleDeleteButtonOnClick(device.id)}
|
||||
></Button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
{devices.map((device) => (
|
||||
<div key="device-{device.id}">
|
||||
<Text>{device.name}</Text>
|
||||
<Button
|
||||
key={device.id}
|
||||
primary={true}
|
||||
label="Delete"
|
||||
onClick={async () => handleDeleteButtonOnClick(device.id)}
|
||||
></Button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
|
||||
+2
-2
@@ -10,10 +10,10 @@ type Props = {
|
||||
|
||||
const U2FTitle: FunctionComponent<Props> = ({ userProvider }) => {
|
||||
if (userProvider.getUser() === undefined) {
|
||||
return <Title>Universal 2nd Factor authentication not available</Title>
|
||||
return <Title>Universal 2nd factor authentication not available</Title>
|
||||
}
|
||||
|
||||
return <Title>Universal 2nd Factor authentication</Title>
|
||||
return <Title>Universal 2nd Factor Authentication</Title>
|
||||
}
|
||||
|
||||
export default observer(U2FTitle)
|
||||
|
||||
+15
-12
@@ -11,6 +11,7 @@ import U2FDescription from './U2FDescription'
|
||||
import Button from '@/Components/Button/Button'
|
||||
import U2FAddDeviceView from '../U2FAddDeviceView'
|
||||
import U2FDevicesList from './U2FDevicesList'
|
||||
import ModalOverlay from '@/Components/Modal/ModalOverlay'
|
||||
|
||||
type Props = {
|
||||
application: WebApplication
|
||||
@@ -45,34 +46,36 @@ const U2FView: FunctionComponent<Props> = ({ application, userProvider }) => {
|
||||
<>
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
<div className="flex flex-row items-center">
|
||||
<div className="flex flex-grow flex-col">
|
||||
<U2FTitle userProvider={userProvider} />
|
||||
<U2FDescription userProvider={userProvider} />
|
||||
</div>
|
||||
<PreferencesSegment>
|
||||
<Button label="Add Device" primary onClick={handleAddDeviceClick} />
|
||||
</PreferencesSegment>
|
||||
<div className="flex flex-col">
|
||||
<U2FTitle userProvider={userProvider} />
|
||||
<U2FDescription userProvider={userProvider} />
|
||||
</div>
|
||||
</PreferencesSegment>
|
||||
<PreferencesSegment>
|
||||
{error && <div className="text-red-500">{error}</div>}
|
||||
<PreferencesSegment classes="mt-2">
|
||||
{error && <div className="text-danger">{error}</div>}
|
||||
<U2FDevicesList
|
||||
application={application}
|
||||
devices={devices}
|
||||
onError={setError}
|
||||
onDeviceDeleted={loadAuthenticatorDevices}
|
||||
/>
|
||||
<Button
|
||||
className="mt-1"
|
||||
disabled={!application.isFullU2FClient}
|
||||
label="Add Device"
|
||||
primary
|
||||
onClick={handleAddDeviceClick}
|
||||
/>
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
{showDeviceAddingModal && (
|
||||
<ModalOverlay isOpen={showDeviceAddingModal}>
|
||||
<U2FAddDeviceView
|
||||
onDeviceAddingModalToggle={setShowDeviceAddingModal}
|
||||
onDeviceAdded={loadAuthenticatorDevices}
|
||||
userProvider={userProvider}
|
||||
addAuthenticator={application.addAuthenticator}
|
||||
/>
|
||||
)}
|
||||
</ModalOverlay>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
import { useCallback, useEffect, useState } from 'react'
|
||||
import Button from '../Button/Button'
|
||||
import { startAuthentication } from '@simplewebauthn/browser'
|
||||
import { log, LoggingDomain } from '@/Logging'
|
||||
|
||||
/**
|
||||
* An iframe for use in the desktop and mobile application that allows them to load app.standardnotes.com to perform
|
||||
* U2F authentication. Web applications do not need this iframe, as they can perform U2F authentication directly.
|
||||
*/
|
||||
const U2FAuthIframe = () => {
|
||||
const [username, setUsername] = useState('')
|
||||
const [apiHost, setApiHost] = useState<string | null>(null)
|
||||
const [source, setSource] = useState<MessageEvent['source'] | null>(null)
|
||||
const NATIVE_CLIENT_ORIGIN = 'file://'
|
||||
|
||||
useEffect(() => {
|
||||
window.parent.postMessage(
|
||||
{
|
||||
mountedAuthView: true,
|
||||
},
|
||||
NATIVE_CLIENT_ORIGIN,
|
||||
)
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
const messageHandler = (event: MessageEvent) => {
|
||||
log(LoggingDomain.U2F, 'U2F iframe received message', event)
|
||||
|
||||
const eventDoesNotComeFromNativeClient = event.origin !== NATIVE_CLIENT_ORIGIN
|
||||
if (eventDoesNotComeFromNativeClient) {
|
||||
log(LoggingDomain.U2F, 'Not setting username; origin does not match', event.origin, NATIVE_CLIENT_ORIGIN)
|
||||
return
|
||||
}
|
||||
|
||||
if (event.data.username) {
|
||||
setUsername(event.data.username)
|
||||
setApiHost(event.data.apiHost)
|
||||
setSource(event.source)
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('message', messageHandler)
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('message', messageHandler)
|
||||
}
|
||||
}, [])
|
||||
|
||||
const [info, setInfo] = useState('')
|
||||
const [error, setError] = useState('')
|
||||
|
||||
const beginAuthentication = useCallback(async () => {
|
||||
setInfo('')
|
||||
setError('')
|
||||
|
||||
try {
|
||||
if (!username || !source) {
|
||||
throw new Error('No username provided')
|
||||
}
|
||||
|
||||
const response = await fetch(`${apiHost}/v1/authenticators/generate-authentication-options`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
username,
|
||||
}),
|
||||
})
|
||||
|
||||
const jsonResponse = await response.json()
|
||||
if (!jsonResponse.data || !jsonResponse.data.options) {
|
||||
throw new Error('No options returned from server')
|
||||
}
|
||||
|
||||
setInfo('Waiting for U2F device...')
|
||||
|
||||
const assertionResponse = await startAuthentication(jsonResponse.data.options)
|
||||
|
||||
;(source as WindowProxy).postMessage(
|
||||
{
|
||||
assertionResponse,
|
||||
},
|
||||
NATIVE_CLIENT_ORIGIN,
|
||||
)
|
||||
|
||||
setInfo('Authentication successful!')
|
||||
} catch (error) {
|
||||
if (!error) {
|
||||
return
|
||||
}
|
||||
setError(error.toString())
|
||||
console.error(error.toString())
|
||||
}
|
||||
}, [source, username, apiHost])
|
||||
|
||||
return (
|
||||
<div className="flex h-full w-full flex-col items-center justify-center gap-2">
|
||||
<div className="mb-2 text-center">Insert your U2F device, then press the button below to authenticate.</div>
|
||||
<Button onClick={beginAuthentication}>Authenticate</Button>
|
||||
<div className="mt-2">
|
||||
<div>{info}</div>
|
||||
<div className="text-danger">{error}</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default U2FAuthIframe
|
||||
@@ -11,6 +11,7 @@ export enum LoggingDomain {
|
||||
BlockEditor,
|
||||
Purchasing,
|
||||
Panes,
|
||||
U2F,
|
||||
}
|
||||
|
||||
const LoggingStatus: Record<LoggingDomain, boolean> = {
|
||||
@@ -23,6 +24,7 @@ const LoggingStatus: Record<LoggingDomain, boolean> = {
|
||||
[LoggingDomain.BlockEditor]: false,
|
||||
[LoggingDomain.Purchasing]: false,
|
||||
[LoggingDomain.Panes]: false,
|
||||
[LoggingDomain.U2F]: false,
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
|
||||
@@ -4622,10 +4622,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@simplewebauthn/browser@npm:^7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "@simplewebauthn/browser@npm:7.0.0"
|
||||
checksum: eb8d7e2d923649c116275cc9bfbabfa27a180cd33dbf9d6a28c7aa9460ea79cd25204c9a7d76ed8cc24764da4a09b5939209aa30e9b295b9d54e497bb9b652a4
|
||||
"@simplewebauthn/browser@npm:^7.1.0":
|
||||
version: 7.1.0
|
||||
resolution: "@simplewebauthn/browser@npm:7.1.0"
|
||||
checksum: 925e26607536cd9223e474229df216cc32bc06fac569f27e03c6d31ff502f3dbf6f5a9500caaa37a9abf1632fc99fd582a6596672b7f5468920a74618e1aec6e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4697,12 +4697,12 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/api@workspace:packages/api"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/domain-core": ^1.11.3
|
||||
"@standardnotes/encryption": "workspace:*"
|
||||
"@standardnotes/models": "workspace:*"
|
||||
"@standardnotes/responses": "workspace:*"
|
||||
"@standardnotes/security": ^1.7.5
|
||||
"@standardnotes/security": ^1.7.6
|
||||
"@standardnotes/utils": "workspace:*"
|
||||
"@types/jest": ^29.2.3
|
||||
"@types/lodash": ^4.14.189
|
||||
@@ -4817,6 +4817,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/common@npm:^1.46.6":
|
||||
version: 1.46.6
|
||||
resolution: "@standardnotes/common@npm:1.46.6"
|
||||
dependencies:
|
||||
reflect-metadata: ^0.1.13
|
||||
checksum: 295f0765e81f3f6054c1eed596be2b48266ee651efdf8d7bb2eadcf1e22312b286872a163342f4c32de4fceea4ff67dabf2d64a1041723716bd30658c502bd81
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/component-relay@github:standardnotes/component-relay#839ff5db9bc92db9d42cad8d202ddc4df729597d, @standardnotes/component-relay@standardnotes/component-relay#839ff5db9bc92db9d42cad8d202ddc4df729597d":
|
||||
version: 2.3.0
|
||||
resolution: "@standardnotes/component-relay@https://github.com/standardnotes/component-relay.git#commit=839ff5db9bc92db9d42cad8d202ddc4df729597d"
|
||||
@@ -4900,14 +4909,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/domain-events@npm:^2.106.0":
|
||||
version: 2.106.0
|
||||
resolution: "@standardnotes/domain-events@npm:2.106.0"
|
||||
"@standardnotes/domain-events@npm:^2.108.1":
|
||||
version: 2.108.1
|
||||
resolution: "@standardnotes/domain-events@npm:2.108.1"
|
||||
dependencies:
|
||||
"@standardnotes/features": ^1.58.1
|
||||
"@standardnotes/predicates": 1.6.4
|
||||
"@standardnotes/security": 1.7.5
|
||||
checksum: db98a6b4ef5181a02862a3989df2d8f0a4929044456583c9ffda767c31c5dec676a4da82d1fe581ffc6e35a977a05b071a2a8646fee2a4bdbdf1b265ccbb70d8
|
||||
"@standardnotes/predicates": 1.6.5
|
||||
"@standardnotes/security": 1.7.6
|
||||
checksum: 492bec98838664c3033041df5d25d610e8e8fb0a69358f8dc660fe4a5cb65a9fa3ee6b62829af2edcd1d59640c66926a0c72f0ae0cbdb1804292b6ec02485f9d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4942,7 +4950,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/encryption@workspace:packages/encryption"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/config": 2.4.3
|
||||
"@standardnotes/models": "workspace:*"
|
||||
"@standardnotes/responses": "workspace:*"
|
||||
@@ -4961,24 +4969,6 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@standardnotes/features@^1.58.1, @standardnotes/features@workspace:*, @standardnotes/features@workspace:^, @standardnotes/features@workspace:packages/features":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/features@workspace:packages/features"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/domain-core": ^1.11.3
|
||||
"@standardnotes/security": ^1.7.5
|
||||
"@types/jest": ^29.2.3
|
||||
"@typescript-eslint/eslint-plugin": "*"
|
||||
eslint: "*"
|
||||
eslint-plugin-prettier: "*"
|
||||
jest: ^29.3.1
|
||||
reflect-metadata: ^0.1.13
|
||||
ts-jest: ^29.0.3
|
||||
typescript: 4.9.3
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@standardnotes/features@npm:1.54.0":
|
||||
version: 1.54.0
|
||||
resolution: "@standardnotes/features@npm:1.54.0"
|
||||
@@ -4991,11 +4981,29 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/features@workspace:*, @standardnotes/features@workspace:^, @standardnotes/features@workspace:packages/features":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/features@workspace:packages/features"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/domain-core": ^1.11.3
|
||||
"@standardnotes/security": ^1.7.6
|
||||
"@types/jest": ^29.2.3
|
||||
"@typescript-eslint/eslint-plugin": "*"
|
||||
eslint: "*"
|
||||
eslint-plugin-prettier: "*"
|
||||
jest: ^29.3.1
|
||||
reflect-metadata: ^0.1.13
|
||||
ts-jest: ^29.0.3
|
||||
typescript: 4.9.3
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@standardnotes/filepicker@workspace:*, @standardnotes/filepicker@workspace:^, @standardnotes/filepicker@workspace:packages/filepicker":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/filepicker@workspace:packages/filepicker"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/files": "workspace:*"
|
||||
"@standardnotes/utils": "workspace:*"
|
||||
"@types/jest": ^29.2.3
|
||||
@@ -5110,10 +5118,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/markdown-visual@npm:^1.0.7":
|
||||
version: 1.0.7
|
||||
resolution: "@standardnotes/markdown-visual@npm:1.0.7"
|
||||
checksum: 8827893f0953beb03ff6da77304968dfdf9a7144022c770947b56de16aee006ce9550cdf114fa2751bc836b0092924f2dd352049b91d6d67c0fd12b88b36d74c
|
||||
"@standardnotes/markdown-visual@npm:^1.3.2":
|
||||
version: 1.3.2
|
||||
resolution: "@standardnotes/markdown-visual@npm:1.3.2"
|
||||
dependencies:
|
||||
"@standardnotes/editor-kit": "github:standardnotes/editor-kit#50ffb15c935a297b082eb00ffd031adc05080d7f"
|
||||
"@standardnotes/styles": 1.6.1
|
||||
checksum: 1c97c0baead932688ba01c0446a2995cd7c304aba7d00a0de280b87ad027c31c84b3be19199ed4779632767fcd16271db304c083dfe886f28864c32d3386c187
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5179,7 +5190,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/models@workspace:packages/models"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/features": "workspace:*"
|
||||
"@standardnotes/responses": "workspace:*"
|
||||
"@standardnotes/utils": "workspace:^"
|
||||
@@ -5196,10 +5207,10 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@standardnotes/predicates@npm:1.6.4":
|
||||
version: 1.6.4
|
||||
resolution: "@standardnotes/predicates@npm:1.6.4"
|
||||
checksum: 6d7235896a6d591f6e33d2d0b89c58850d357095d26e1d74264db1d77164a8f1f6673f4095c660719992f2aa8411cfbfe79781f004c3eb2aa82a761e34827f60
|
||||
"@standardnotes/predicates@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@standardnotes/predicates@npm:1.6.5"
|
||||
checksum: 6bdd927062f8dcbd65f99b93d48bbbbcbe0c525517a5b5827c90a8b22286c99a95c0bb1cdda401e4fe5940e02a04b03e8616596d479d52bad1c783d9953e8d0b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5226,9 +5237,9 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/responses@workspace:packages/responses"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/features": "workspace:*"
|
||||
"@standardnotes/security": ^1.7.5
|
||||
"@standardnotes/security": ^1.7.6
|
||||
"@types/jest": ^29.2.3
|
||||
"@typescript-eslint/eslint-plugin": "*"
|
||||
eslint: "*"
|
||||
@@ -5249,13 +5260,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/security@npm:1.7.5, @standardnotes/security@npm:^1.7.5":
|
||||
version: 1.7.5
|
||||
resolution: "@standardnotes/security@npm:1.7.5"
|
||||
"@standardnotes/security@npm:1.7.6, @standardnotes/security@npm:^1.7.6":
|
||||
version: 1.7.6
|
||||
resolution: "@standardnotes/security@npm:1.7.6"
|
||||
dependencies:
|
||||
jsonwebtoken: ^9.0.0
|
||||
reflect-metadata: ^0.1.13
|
||||
checksum: 69d180d25936cad64ee19d8932aedff60b91f4a25f96084e0a686b228773aba856f50c3da265d426d64160dff28f20d9d7980a625bce00fc6a47416caa4e130e
|
||||
checksum: 1d6f2c74e0a69ab8693880e7e1d71e167a43a9f23ff9bd0434db8aadc41ae779841d53905fea0498350dab58df16ec319184dc42ff2dcef8d559ce8f2589ce9c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5270,6 +5281,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/security@npm:^1.7.5":
|
||||
version: 1.7.5
|
||||
resolution: "@standardnotes/security@npm:1.7.5"
|
||||
dependencies:
|
||||
jsonwebtoken: ^9.0.0
|
||||
reflect-metadata: ^0.1.13
|
||||
checksum: 69d180d25936cad64ee19d8932aedff60b91f4a25f96084e0a686b228773aba856f50c3da265d426d64160dff28f20d9d7980a625bce00fc6a47416caa4e130e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@standardnotes/services@workspace:*, @standardnotes/services@workspace:^, @standardnotes/services@workspace:packages/services":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/services@workspace:packages/services"
|
||||
@@ -5296,12 +5317,12 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@standardnotes/settings@npm:^1.19.0":
|
||||
version: 1.19.0
|
||||
resolution: "@standardnotes/settings@npm:1.19.0"
|
||||
"@standardnotes/settings@npm:^1.19.1":
|
||||
version: 1.19.1
|
||||
resolution: "@standardnotes/settings@npm:1.19.1"
|
||||
dependencies:
|
||||
reflect-metadata: ^0.1.13
|
||||
checksum: 85816e5d25e2a4cfe014dbe371bc30902b1bb194f5d3c021fe754678ff9bd693255f1d209a66c4375334b1edd40a8f4133480a20a85b88859b3cfbff1a570cc9
|
||||
checksum: d99d49d4401ac8c973284d8637195c0441e6f73b7e01e9eb4ab14feb27c6d2e928a493d944ed67ea1d6f229bf5ea839b5dd667c373b917aed321bb32972daacb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5372,17 +5393,17 @@ __metadata:
|
||||
"@babel/core": "*"
|
||||
"@babel/preset-env": "*"
|
||||
"@standardnotes/api": "workspace:*"
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/domain-core": ^1.11.3
|
||||
"@standardnotes/domain-events": ^2.106.0
|
||||
"@standardnotes/domain-events": ^2.108.1
|
||||
"@standardnotes/encryption": "workspace:*"
|
||||
"@standardnotes/features": "workspace:*"
|
||||
"@standardnotes/files": "workspace:*"
|
||||
"@standardnotes/models": "workspace:*"
|
||||
"@standardnotes/responses": "workspace:*"
|
||||
"@standardnotes/security": ^1.7.5
|
||||
"@standardnotes/security": ^1.7.6
|
||||
"@standardnotes/services": "workspace:*"
|
||||
"@standardnotes/settings": ^1.19.0
|
||||
"@standardnotes/settings": ^1.19.1
|
||||
"@standardnotes/sncrypto-common": "workspace:*"
|
||||
"@standardnotes/sncrypto-web": "workspace:*"
|
||||
"@standardnotes/utils": "workspace:*"
|
||||
@@ -5500,7 +5521,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/ui-services@workspace:packages/ui-services"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@standardnotes/features": "workspace:^"
|
||||
"@standardnotes/filepicker": "workspace:^"
|
||||
"@standardnotes/services": "workspace:^"
|
||||
@@ -5522,7 +5543,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@standardnotes/utils@workspace:packages/utils"
|
||||
dependencies:
|
||||
"@standardnotes/common": ^1.46.4
|
||||
"@standardnotes/common": ^1.46.6
|
||||
"@types/dompurify": ^2.4.0
|
||||
"@types/jest": ^29.2.3
|
||||
"@types/jsdom": ^20.0.1
|
||||
@@ -5561,7 +5582,7 @@ __metadata:
|
||||
"@reach/listbox": ^0.18.0
|
||||
"@reach/tooltip": ^0.18.0
|
||||
"@reach/visually-hidden": ^0.18.0
|
||||
"@simplewebauthn/browser": ^7.0.0
|
||||
"@simplewebauthn/browser": ^7.1.0
|
||||
"@standardnotes/authenticator": ^2.3.9
|
||||
"@standardnotes/autobiography-theme": ^1.2.7
|
||||
"@standardnotes/bold-editor": ^1.6.4
|
||||
@@ -5575,7 +5596,7 @@ __metadata:
|
||||
"@standardnotes/markdown-hybrid": ^1.7.7
|
||||
"@standardnotes/markdown-math": ^1.4.2
|
||||
"@standardnotes/markdown-minimal": ^1.3.0
|
||||
"@standardnotes/markdown-visual": ^1.0.7
|
||||
"@standardnotes/markdown-visual": ^1.3.2
|
||||
"@standardnotes/midnight-theme": ^1.4.6
|
||||
"@standardnotes/rich-text": ^1.8.7
|
||||
"@standardnotes/simple-task-editor": ^1.3.10
|
||||
@@ -5612,8 +5633,8 @@ __metadata:
|
||||
lint-staged: ">=13"
|
||||
mini-css-extract-plugin: ^2.7.2
|
||||
minimatch: ^5.1.1
|
||||
mobx: ^6.7.0
|
||||
mobx-react-lite: ^3.4.0
|
||||
mobx: ^6.8.0
|
||||
mobx-react-lite: ^3.4.2
|
||||
node-sass: ^8.0.0
|
||||
npm-check-updates: "*"
|
||||
postcss: ^8.4.19
|
||||
@@ -5625,9 +5646,9 @@ __metadata:
|
||||
react-dom: ^18.2.0
|
||||
react-refresh: ^0.14.0
|
||||
sass-loader: "*"
|
||||
styled-components: ^5.3.6
|
||||
styled-components: ^5.3.8
|
||||
svg-jest: ^1.0.1
|
||||
tailwindcss: ^3.2.4
|
||||
tailwindcss: ^3.2.7
|
||||
ts-jest: ^29.0.3
|
||||
ts-loader: ^9.4.2
|
||||
typescript: "*"
|
||||
@@ -17115,9 +17136,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mobx-react-lite@npm:^3.4.0":
|
||||
version: 3.4.0
|
||||
resolution: "mobx-react-lite@npm:3.4.0"
|
||||
"mobx-react-lite@npm:^3.4.2":
|
||||
version: 3.4.2
|
||||
resolution: "mobx-react-lite@npm:3.4.2"
|
||||
peerDependencies:
|
||||
mobx: ^6.1.0
|
||||
react: ^16.8.0 || ^17 || ^18
|
||||
@@ -17126,7 +17147,7 @@ __metadata:
|
||||
optional: true
|
||||
react-native:
|
||||
optional: true
|
||||
checksum: 9294e127e281c8b37ec7bcaf17de479f50519e6ad485b58d7b991291900511541a5a718653759d3cf6503462c70325d025e1c2ed376d4584fb1b2d3aac9d9b48
|
||||
checksum: d3648f7c4f6e3923458b533b7c987397542f33f2905467fdf6e63fcdfa6c51f2c60a5a3ebf72a9d2b326a6c4876932c4312dd4ae2253cf1fc4b02ad586e94aa6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -17137,6 +17158,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mobx@npm:^6.8.0":
|
||||
version: 6.8.0
|
||||
resolution: "mobx@npm:6.8.0"
|
||||
checksum: f09bb079292ea59023a7e35a9c73ed577e3de9a0175ec3d5a2adc8192e2e3a352b29ec0981ee06d1d63f701f81bb7fc6cc19fd9089edf84a754a8a75ef00ef7f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"modify-values@npm:^1.0.0":
|
||||
version: 1.0.1
|
||||
resolution: "modify-values@npm:1.0.1"
|
||||
@@ -19015,6 +19043,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-selector-parser@npm:^6.0.11":
|
||||
version: 6.0.11
|
||||
resolution: "postcss-selector-parser@npm:6.0.11"
|
||||
dependencies:
|
||||
cssesc: ^3.0.0
|
||||
util-deprecate: ^1.0.2
|
||||
checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0":
|
||||
version: 4.2.0
|
||||
resolution: "postcss-value-parser@npm:4.2.0"
|
||||
@@ -19022,6 +19060,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss@npm:^8.0.9":
|
||||
version: 8.4.21
|
||||
resolution: "postcss@npm:8.4.21"
|
||||
dependencies:
|
||||
nanoid: ^3.3.4
|
||||
picocolors: ^1.0.0
|
||||
source-map-js: ^1.0.2
|
||||
checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss@npm:^8.4.18, postcss@npm:^8.4.19":
|
||||
version: 8.4.19
|
||||
resolution: "postcss@npm:8.4.19"
|
||||
@@ -21796,9 +21845,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"styled-components@npm:^5.3.6":
|
||||
version: 5.3.6
|
||||
resolution: "styled-components@npm:5.3.6"
|
||||
"styled-components@npm:^5.3.8":
|
||||
version: 5.3.8
|
||||
resolution: "styled-components@npm:5.3.8"
|
||||
dependencies:
|
||||
"@babel/helper-module-imports": ^7.0.0
|
||||
"@babel/traverse": ^7.4.5
|
||||
@@ -21814,7 +21863,7 @@ __metadata:
|
||||
react: ">= 16.8.0"
|
||||
react-dom: ">= 16.8.0"
|
||||
react-is: ">= 16.8.0"
|
||||
checksum: 68eac1e451be81d66739cf86de8ec9e72f46e7584aa359271761a2437468210bd7cf0a864281fc97dab08c32b35e6bf7513dc8b4104ed6b196cf8d65674dd289
|
||||
checksum: 60148083f4057cd0dd4ad555e82800ec4ec4b8822fd81645f084e9beebf91420f4c9c75875b44933755d32ec97c46be6b79ca0c23578e5a731e3399e6ea0d901
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -21925,9 +21974,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tailwindcss@npm:^3.2.4":
|
||||
version: 3.2.4
|
||||
resolution: "tailwindcss@npm:3.2.4"
|
||||
"tailwindcss@npm:^3.2.7":
|
||||
version: 3.2.7
|
||||
resolution: "tailwindcss@npm:3.2.7"
|
||||
dependencies:
|
||||
arg: ^5.0.2
|
||||
chokidar: ^3.5.3
|
||||
@@ -21943,12 +21992,12 @@ __metadata:
|
||||
normalize-path: ^3.0.0
|
||||
object-hash: ^3.0.0
|
||||
picocolors: ^1.0.0
|
||||
postcss: ^8.4.18
|
||||
postcss: ^8.0.9
|
||||
postcss-import: ^14.1.0
|
||||
postcss-js: ^4.0.0
|
||||
postcss-load-config: ^3.1.4
|
||||
postcss-nested: 6.0.0
|
||||
postcss-selector-parser: ^6.0.10
|
||||
postcss-selector-parser: ^6.0.11
|
||||
postcss-value-parser: ^4.2.0
|
||||
quick-lru: ^5.1.1
|
||||
resolve: ^1.22.1
|
||||
@@ -21957,7 +22006,7 @@ __metadata:
|
||||
bin:
|
||||
tailwind: lib/cli.js
|
||||
tailwindcss: lib/cli.js
|
||||
checksum: ec187d180c722ec4f57537f2216c7b21269b525f12aaf353cea464d939c3e6286a1221eb3e1206e45d1f015f296171309ad4d9952899b0245cd07d9500a9401f
|
||||
checksum: 819446bf67acea1fc738f345d80f328b7bb6e6ef4b24070249a11219307045881cf97baed6258cbdcede7fa18886e9c9c41fd0fa087b3e987cf2948560a2f164
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user