Native app facelift, extension UI tweaks, bug fixes.
Show/Hide Button for private key in Options page. Move experimental page into separate sub-folder. Move delegation wizard to sub-folder. Move permission page into separate folder. Basic functional SwiftUI look for the app. Beginning to define the main app view. NavigationStack and Privacy Policy Show App Icon on main screen. Getting Started: macOS Getting Started: iPhone Getting Started: iPad Removing old default UIKit code. Added "No Thanks" toggle to the relay reminder. Clearly indicate in the Settings page when a profile is a delegated profile. Changed recommended relays to all public relays. Use x-cloak in all the places. Fix bundle display name to use capital N. Added copy button to pubkey in settings. Window default size. Updating event kind list. Allow events to be copied by clicking on them in the event log. Tweaking the colors for a more purple-ish look. Added Tips and Tricks view to native app. Move utilities modules into separate folder. Rename event_log files to event_history to escape some content blockers. Renamed Event Log to Event History in the UI as well.
5
Nostore--macOS--Info.plist
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict/>
|
||||
</plist>
|
||||
@@ -7,12 +7,6 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
941B03B3296FA90400CA291E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941B03B2296FA90400CA291E /* AppDelegate.swift */; };
|
||||
941B03B5296FA90400CA291E /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941B03B4296FA90400CA291E /* SceneDelegate.swift */; };
|
||||
941B03B8296FA90400CA291E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 941B03B6296FA90400CA291E /* LaunchScreen.storyboard */; };
|
||||
941B03BB296FA90400CA291E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 941B03B9296FA90400CA291E /* Main.storyboard */; };
|
||||
941B03C4296FA90400CA291E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941B03C3296FA90400CA291E /* AppDelegate.swift */; };
|
||||
941B03C7296FA90400CA291E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 941B03C5296FA90400CA291E /* Main.storyboard */; };
|
||||
941B03CE296FA90400CA291E /* Nostore Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 941B03CD296FA90400CA291E /* Nostore Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
941B03D8296FA90400CA291E /* Nostore Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 941B03D7296FA90400CA291E /* Nostore Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
941B03DE296FA90400CA291E /* Main.html in Resources */ = {isa = PBXBuildFile; fileRef = 941B0399296FA90300CA291E /* Main.html */; };
|
||||
@@ -71,30 +65,32 @@
|
||||
941B04342978CDF900CA291E /* Icon-16.png in Resources */ = {isa = PBXBuildFile; fileRef = 941B042F2978CDF900CA291E /* Icon-16.png */; };
|
||||
941B04352978CDF900CA291E /* Icon-64.png in Resources */ = {isa = PBXBuildFile; fileRef = 941B04302978CDF900CA291E /* Icon-64.png */; };
|
||||
941B04362978CDF900CA291E /* Icon-64.png in Resources */ = {isa = PBXBuildFile; fileRef = 941B04302978CDF900CA291E /* Icon-64.png */; };
|
||||
944A6DD32988BA200032C2E3 /* permission.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DD22988BA200032C2E3 /* permission.html */; };
|
||||
944A6DD42988BA200032C2E3 /* permission.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DD22988BA200032C2E3 /* permission.html */; };
|
||||
944A6DD62988BD230032C2E3 /* permission.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DD52988BD230032C2E3 /* permission.js */; };
|
||||
944A6DD72988BD230032C2E3 /* permission.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DD52988BD230032C2E3 /* permission.js */; };
|
||||
944A6DD92988D7900032C2E3 /* permission.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DD82988D7900032C2E3 /* permission.build.js */; };
|
||||
944A6DDA2988D7900032C2E3 /* permission.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DD82988D7900032C2E3 /* permission.build.js */; };
|
||||
944A6DE02991DFC60032C2E3 /* delegation_wizard.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DDC2991DFC60032C2E3 /* delegation_wizard.build.js */; };
|
||||
944A6DE12991DFC60032C2E3 /* delegation_wizard.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DDC2991DFC60032C2E3 /* delegation_wizard.build.js */; };
|
||||
944A6DE22991DFC60032C2E3 /* delegation_wizard.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DDD2991DFC60032C2E3 /* delegation_wizard.js */; };
|
||||
944A6DE32991DFC60032C2E3 /* delegation_wizard.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DDD2991DFC60032C2E3 /* delegation_wizard.js */; };
|
||||
944A6DE52991E4550032C2E3 /* delegation_wizard.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE42991E4550032C2E3 /* delegation_wizard.html */; };
|
||||
944A6DE62991E4550032C2E3 /* delegation_wizard.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE42991E4550032C2E3 /* delegation_wizard.html */; };
|
||||
944A6DEA299682EF0032C2E3 /* experimental.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE7299682EF0032C2E3 /* experimental.html */; };
|
||||
944A6DEB299682EF0032C2E3 /* experimental.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE7299682EF0032C2E3 /* experimental.html */; };
|
||||
944A6DEC299682EF0032C2E3 /* experimental.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE8299682EF0032C2E3 /* experimental.js */; };
|
||||
944A6DED299682EF0032C2E3 /* experimental.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE8299682EF0032C2E3 /* experimental.js */; };
|
||||
944A6DEE299682EF0032C2E3 /* experimental.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE9299682EF0032C2E3 /* experimental.build.js */; };
|
||||
944A6DEF299682EF0032C2E3 /* experimental.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DE9299682EF0032C2E3 /* experimental.build.js */; };
|
||||
944A6DF3299975A70032C2E3 /* event_log.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DF0299975A70032C2E3 /* event_log.html */; };
|
||||
944A6DF4299975A70032C2E3 /* event_log.html in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DF0299975A70032C2E3 /* event_log.html */; };
|
||||
944A6DF5299975A70032C2E3 /* event_log.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DF1299975A70032C2E3 /* event_log.build.js */; };
|
||||
944A6DF6299975A70032C2E3 /* event_log.build.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DF1299975A70032C2E3 /* event_log.build.js */; };
|
||||
944A6DF7299975A70032C2E3 /* event_log.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DF2299975A70032C2E3 /* event_log.js */; };
|
||||
944A6DF8299975A70032C2E3 /* event_log.js in Resources */ = {isa = PBXBuildFile; fileRef = 944A6DF2299975A70032C2E3 /* event_log.js */; };
|
||||
944A6E03299F2FBB0032C2E3 /* experimental in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E02299F2FBB0032C2E3 /* experimental */; };
|
||||
944A6E04299F2FBB0032C2E3 /* experimental in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E02299F2FBB0032C2E3 /* experimental */; };
|
||||
944A6E05299F2FBB0032C2E3 /* experimental in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E02299F2FBB0032C2E3 /* experimental */; };
|
||||
944A6E06299F2FBB0032C2E3 /* experimental in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E02299F2FBB0032C2E3 /* experimental */; };
|
||||
944A6E0E299F32070032C2E3 /* wizards in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E0D299F32070032C2E3 /* wizards */; };
|
||||
944A6E0F299F32070032C2E3 /* wizards in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E0D299F32070032C2E3 /* wizards */; };
|
||||
944A6E10299F32070032C2E3 /* wizards in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E0D299F32070032C2E3 /* wizards */; };
|
||||
944A6E11299F32070032C2E3 /* wizards in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E0D299F32070032C2E3 /* wizards */; };
|
||||
944A6E13299F39D30032C2E3 /* permission in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E12299F39D30032C2E3 /* permission */; };
|
||||
944A6E14299F39D30032C2E3 /* permission in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E12299F39D30032C2E3 /* permission */; };
|
||||
944A6E15299F39D30032C2E3 /* permission in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E12299F39D30032C2E3 /* permission */; };
|
||||
944A6E16299F39D30032C2E3 /* permission in Resources */ = {isa = PBXBuildFile; fileRef = 944A6E12299F39D30032C2E3 /* permission */; };
|
||||
944A6E39299F46270032C2E3 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E38299F46270032C2E3 /* MainView.swift */; };
|
||||
944A6E3A299F46270032C2E3 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E38299F46270032C2E3 /* MainView.swift */; };
|
||||
944A6E3F299F46D30032C2E3 /* NostoreApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E3E299F46D30032C2E3 /* NostoreApp.swift */; };
|
||||
944A6E40299F46D30032C2E3 /* NostoreApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E3E299F46D30032C2E3 /* NostoreApp.swift */; };
|
||||
944A6E4329A081950032C2E3 /* PrivacyPolicyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4229A081950032C2E3 /* PrivacyPolicyView.swift */; };
|
||||
944A6E4429A081950032C2E3 /* PrivacyPolicyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4229A081950032C2E3 /* PrivacyPolicyView.swift */; };
|
||||
944A6E4629A11C3A0032C2E3 /* GettingStartiPhone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4529A11C3A0032C2E3 /* GettingStartiPhone.swift */; };
|
||||
944A6E4729A11C3A0032C2E3 /* GettingStartiPhone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4529A11C3A0032C2E3 /* GettingStartiPhone.swift */; };
|
||||
944A6E4929A11C640032C2E3 /* GettingStartediPad.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4829A11C640032C2E3 /* GettingStartediPad.swift */; };
|
||||
944A6E4A29A11C640032C2E3 /* GettingStartediPad.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4829A11C640032C2E3 /* GettingStartediPad.swift */; };
|
||||
944A6E4C29A11C770032C2E3 /* GettingStartedmacOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4B29A11C770032C2E3 /* GettingStartedmacOS.swift */; };
|
||||
944A6E4D29A11C770032C2E3 /* GettingStartedmacOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944A6E4B29A11C770032C2E3 /* GettingStartedmacOS.swift */; };
|
||||
9471E91F29A470C700EA623B /* event_history in Resources */ = {isa = PBXBuildFile; fileRef = 9471E91E29A470C700EA623B /* event_history */; };
|
||||
9471E92029A470C700EA623B /* event_history in Resources */ = {isa = PBXBuildFile; fileRef = 9471E91E29A470C700EA623B /* event_history */; };
|
||||
948C69D9297F887600FB3574 /* options.html in Resources */ = {isa = PBXBuildFile; fileRef = 948C69D8297F887600FB3574 /* options.html */; };
|
||||
948C69DA297F887600FB3574 /* options.html in Resources */ = {isa = PBXBuildFile; fileRef = 948C69D8297F887600FB3574 /* options.html */; };
|
||||
948C69DD297F88A200FB3574 /* options.css in Resources */ = {isa = PBXBuildFile; fileRef = 948C69DB297F88A200FB3574 /* options.css */; };
|
||||
@@ -107,6 +103,8 @@
|
||||
948C69E6297F8BA600FB3574 /* options.build.css in Resources */ = {isa = PBXBuildFile; fileRef = 948C69E4297F8BA600FB3574 /* options.build.css */; };
|
||||
948C69E82982DFE900FB3574 /* background.html in Resources */ = {isa = PBXBuildFile; fileRef = 948C69E72982DFE900FB3574 /* background.html */; };
|
||||
948C69E92982DFE900FB3574 /* background.html in Resources */ = {isa = PBXBuildFile; fileRef = 948C69E72982DFE900FB3574 /* background.html */; };
|
||||
94AD34CD29A32458008BFFF4 /* TipsAndTricks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94AD34CC29A32458008BFFF4 /* TipsAndTricks.swift */; };
|
||||
94AD34CE29A32458008BFFF4 /* TipsAndTricks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94AD34CC29A32458008BFFF4 /* TipsAndTricks.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -168,14 +166,8 @@
|
||||
941B03A9296FA90400CA291E /* popup.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = popup.css; sourceTree = "<group>"; };
|
||||
941B03AA296FA90400CA291E /* popup.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = popup.js; sourceTree = "<group>"; };
|
||||
941B03AF296FA90400CA291E /* Nostore.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Nostore.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
941B03B2296FA90400CA291E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
941B03B4296FA90400CA291E /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
941B03B7296FA90400CA291E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
941B03BA296FA90400CA291E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
941B03BC296FA90400CA291E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
941B03C1296FA90400CA291E /* Nostore.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Nostore.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
941B03C3296FA90400CA291E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
941B03C6296FA90400CA291E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
941B03C8296FA90400CA291E /* nostore.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = nostore.entitlements; sourceTree = "<group>"; };
|
||||
941B03CD296FA90400CA291E /* Nostore Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Nostore Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
941B03D2296FA90400CA291E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
@@ -195,24 +187,23 @@
|
||||
941B042E2978CDF900CA291E /* Icon-32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-32.png"; sourceTree = "<group>"; };
|
||||
941B042F2978CDF900CA291E /* Icon-16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-16.png"; sourceTree = "<group>"; };
|
||||
941B04302978CDF900CA291E /* Icon-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-64.png"; sourceTree = "<group>"; };
|
||||
944A6DD22988BA200032C2E3 /* permission.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = permission.html; sourceTree = "<group>"; };
|
||||
944A6DD52988BD230032C2E3 /* permission.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = permission.js; sourceTree = "<group>"; };
|
||||
944A6DD82988D7900032C2E3 /* permission.build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = permission.build.js; sourceTree = "<group>"; };
|
||||
944A6DDC2991DFC60032C2E3 /* delegation_wizard.build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = delegation_wizard.build.js; sourceTree = "<group>"; };
|
||||
944A6DDD2991DFC60032C2E3 /* delegation_wizard.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = delegation_wizard.js; sourceTree = "<group>"; };
|
||||
944A6DE42991E4550032C2E3 /* delegation_wizard.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = delegation_wizard.html; sourceTree = "<group>"; };
|
||||
944A6DE7299682EF0032C2E3 /* experimental.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = experimental.html; sourceTree = "<group>"; };
|
||||
944A6DE8299682EF0032C2E3 /* experimental.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = experimental.js; sourceTree = "<group>"; };
|
||||
944A6DE9299682EF0032C2E3 /* experimental.build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = experimental.build.js; sourceTree = "<group>"; };
|
||||
944A6DF0299975A70032C2E3 /* event_log.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = event_log.html; sourceTree = "<group>"; };
|
||||
944A6DF1299975A70032C2E3 /* event_log.build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event_log.build.js; sourceTree = "<group>"; };
|
||||
944A6DF2299975A70032C2E3 /* event_log.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event_log.js; sourceTree = "<group>"; };
|
||||
944A6E02299F2FBB0032C2E3 /* experimental */ = {isa = PBXFileReference; lastKnownFileType = folder; path = experimental; sourceTree = "<group>"; };
|
||||
944A6E0D299F32070032C2E3 /* wizards */ = {isa = PBXFileReference; lastKnownFileType = folder; path = wizards; sourceTree = "<group>"; };
|
||||
944A6E12299F39D30032C2E3 /* permission */ = {isa = PBXFileReference; lastKnownFileType = folder; path = permission; sourceTree = "<group>"; };
|
||||
944A6E38299F46270032C2E3 /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = "<group>"; };
|
||||
944A6E3E299F46D30032C2E3 /* NostoreApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostoreApp.swift; sourceTree = "<group>"; };
|
||||
944A6E4229A081950032C2E3 /* PrivacyPolicyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyView.swift; sourceTree = "<group>"; };
|
||||
944A6E4529A11C3A0032C2E3 /* GettingStartiPhone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GettingStartiPhone.swift; sourceTree = "<group>"; };
|
||||
944A6E4829A11C640032C2E3 /* GettingStartediPad.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GettingStartediPad.swift; sourceTree = "<group>"; };
|
||||
944A6E4B29A11C770032C2E3 /* GettingStartedmacOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GettingStartedmacOS.swift; sourceTree = "<group>"; };
|
||||
9471E91E29A470C700EA623B /* event_history */ = {isa = PBXFileReference; lastKnownFileType = folder; path = event_history; sourceTree = "<group>"; };
|
||||
948C69D8297F887600FB3574 /* options.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = options.html; sourceTree = "<group>"; };
|
||||
948C69DB297F88A200FB3574 /* options.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = options.css; sourceTree = "<group>"; };
|
||||
948C69DC297F88A200FB3574 /* options.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = options.js; sourceTree = "<group>"; };
|
||||
948C69E1297F891F00FB3574 /* options.build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = options.build.js; sourceTree = "<group>"; };
|
||||
948C69E4297F8BA600FB3574 /* options.build.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = options.build.css; sourceTree = "<group>"; };
|
||||
948C69E72982DFE900FB3574 /* background.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = background.html; sourceTree = "<group>"; };
|
||||
94AD34CC29A32458008BFFF4 /* TipsAndTricks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipsAndTricks.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -266,6 +257,13 @@
|
||||
941B039E296FA90300CA291E /* ViewController.swift */,
|
||||
941B039F296FA90400CA291E /* Assets.xcassets */,
|
||||
941B0398296FA90300CA291E /* Resources */,
|
||||
944A6E38299F46270032C2E3 /* MainView.swift */,
|
||||
944A6E3E299F46D30032C2E3 /* NostoreApp.swift */,
|
||||
944A6E4229A081950032C2E3 /* PrivacyPolicyView.swift */,
|
||||
944A6E4529A11C3A0032C2E3 /* GettingStartiPhone.swift */,
|
||||
944A6E4829A11C640032C2E3 /* GettingStartediPad.swift */,
|
||||
944A6E4B29A11C770032C2E3 /* GettingStartedmacOS.swift */,
|
||||
94AD34CC29A32458008BFFF4 /* TipsAndTricks.swift */,
|
||||
);
|
||||
path = "Shared (App)";
|
||||
sourceTree = "<group>";
|
||||
@@ -294,18 +292,10 @@
|
||||
941B03A2296FA90400CA291E /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
944A6DF1299975A70032C2E3 /* event_log.build.js */,
|
||||
944A6DF0299975A70032C2E3 /* event_log.html */,
|
||||
944A6DF2299975A70032C2E3 /* event_log.js */,
|
||||
944A6DE9299682EF0032C2E3 /* experimental.build.js */,
|
||||
944A6DE7299682EF0032C2E3 /* experimental.html */,
|
||||
944A6DE8299682EF0032C2E3 /* experimental.js */,
|
||||
944A6DE42991E4550032C2E3 /* delegation_wizard.html */,
|
||||
944A6DDC2991DFC60032C2E3 /* delegation_wizard.build.js */,
|
||||
944A6DDD2991DFC60032C2E3 /* delegation_wizard.js */,
|
||||
944A6DD82988D7900032C2E3 /* permission.build.js */,
|
||||
944A6DD52988BD230032C2E3 /* permission.js */,
|
||||
944A6DD22988BA200032C2E3 /* permission.html */,
|
||||
9471E91E29A470C700EA623B /* event_history */,
|
||||
944A6E12299F39D30032C2E3 /* permission */,
|
||||
944A6E0D299F32070032C2E3 /* wizards */,
|
||||
944A6E02299F2FBB0032C2E3 /* experimental */,
|
||||
948C69E4297F8BA600FB3574 /* options.build.css */,
|
||||
948C69E1297F891F00FB3574 /* options.build.js */,
|
||||
948C69DB297F88A200FB3574 /* options.css */,
|
||||
@@ -343,10 +333,6 @@
|
||||
941B03B1296FA90400CA291E /* iOS (App) */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
941B03B2296FA90400CA291E /* AppDelegate.swift */,
|
||||
941B03B4296FA90400CA291E /* SceneDelegate.swift */,
|
||||
941B03B6296FA90400CA291E /* LaunchScreen.storyboard */,
|
||||
941B03B9296FA90400CA291E /* Main.storyboard */,
|
||||
941B03BC296FA90400CA291E /* Info.plist */,
|
||||
);
|
||||
path = "iOS (App)";
|
||||
@@ -355,8 +341,6 @@
|
||||
941B03C2296FA90400CA291E /* macOS (App) */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
941B03C3296FA90400CA291E /* AppDelegate.swift */,
|
||||
941B03C5296FA90400CA291E /* Main.storyboard */,
|
||||
941B03C8296FA90400CA291E /* nostore.entitlements */,
|
||||
);
|
||||
path = "macOS (App)";
|
||||
@@ -519,13 +503,14 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
944A6E0E299F32070032C2E3 /* wizards in Resources */,
|
||||
941B03E0296FA90400CA291E /* Icon.png in Resources */,
|
||||
941B03B8296FA90400CA291E /* LaunchScreen.storyboard in Resources */,
|
||||
944A6E03299F2FBB0032C2E3 /* experimental in Resources */,
|
||||
941B03DE296FA90400CA291E /* Main.html in Resources */,
|
||||
941B03E4296FA90400CA291E /* Script.js in Resources */,
|
||||
941B03E8296FA90400CA291E /* Assets.xcassets in Resources */,
|
||||
941B03BB296FA90400CA291E /* Main.storyboard in Resources */,
|
||||
941B03E2296FA90400CA291E /* Style.css in Resources */,
|
||||
944A6E13299F39D30032C2E3 /* permission in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -535,9 +520,11 @@
|
||||
files = (
|
||||
941B03E1296FA90400CA291E /* Icon.png in Resources */,
|
||||
941B03E3296FA90400CA291E /* Style.css in Resources */,
|
||||
941B03C7296FA90400CA291E /* Main.storyboard in Resources */,
|
||||
944A6E0F299F32070032C2E3 /* wizards in Resources */,
|
||||
941B03E5296FA90400CA291E /* Script.js in Resources */,
|
||||
944A6E14299F39D30032C2E3 /* permission in Resources */,
|
||||
941B03E9296FA90400CA291E /* Assets.xcassets in Resources */,
|
||||
944A6E04299F2FBB0032C2E3 /* experimental in Resources */,
|
||||
941B03DF296FA90400CA291E /* Main.html in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -546,35 +533,27 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
944A6DEE299682EF0032C2E3 /* experimental.build.js in Resources */,
|
||||
9471E91F29A470C700EA623B /* event_history in Resources */,
|
||||
944A6E10299F32070032C2E3 /* wizards in Resources */,
|
||||
941B0413297110F100CA291E /* background.build.js in Resources */,
|
||||
944A6DE22991DFC60032C2E3 /* delegation_wizard.js in Resources */,
|
||||
944A6DE52991E4550032C2E3 /* delegation_wizard.html in Resources */,
|
||||
944A6E15299F39D30032C2E3 /* permission in Resources */,
|
||||
948C69E82982DFE900FB3574 /* background.html in Resources */,
|
||||
944A6DEA299682EF0032C2E3 /* experimental.html in Resources */,
|
||||
948C69DF297F88A200FB3574 /* options.js in Resources */,
|
||||
944A6DD32988BA200032C2E3 /* permission.html in Resources */,
|
||||
948C69DD297F88A200FB3574 /* options.css in Resources */,
|
||||
944A6DD92988D7900032C2E3 /* permission.build.js in Resources */,
|
||||
941B03F2296FA90400CA291E /* background.js in Resources */,
|
||||
948C69E2297F891F00FB3574 /* options.build.js in Resources */,
|
||||
941B03F8296FA90400CA291E /* popup.css in Resources */,
|
||||
941B04292977A28700CA291E /* Icon-128.png in Resources */,
|
||||
944A6DF3299975A70032C2E3 /* event_log.html in Resources */,
|
||||
941B04182971138F00CA291E /* nostr.build.js in Resources */,
|
||||
941B042C2978CD8E00CA291E /* iOS-Icon-1024.png in Resources */,
|
||||
941B03F6296FA90400CA291E /* popup.html in Resources */,
|
||||
941B040D296FAD6900CA291E /* nostr.js in Resources */,
|
||||
944A6DE02991DFC60032C2E3 /* delegation_wizard.build.js in Resources */,
|
||||
944A6DF5299975A70032C2E3 /* event_log.build.js in Resources */,
|
||||
944A6E05299F2FBB0032C2E3 /* experimental in Resources */,
|
||||
941B03EE296FA90400CA291E /* images in Resources */,
|
||||
941B03F0296FA90400CA291E /* manifest.json in Resources */,
|
||||
944A6DD62988BD230032C2E3 /* permission.js in Resources */,
|
||||
941B04312978CDF900CA291E /* Icon-32.png in Resources */,
|
||||
941B041A2971139000CA291E /* content.build.js in Resources */,
|
||||
941B041C2971139000CA291E /* popup.build.js in Resources */,
|
||||
944A6DF7299975A70032C2E3 /* event_log.js in Resources */,
|
||||
944A6DEC299682EF0032C2E3 /* experimental.js in Resources */,
|
||||
941B03EC296FA90400CA291E /* _locales in Resources */,
|
||||
941B04222977A25700CA291E /* Icon-512.png in Resources */,
|
||||
948C69E5297F8BA600FB3574 /* options.build.css in Resources */,
|
||||
@@ -592,35 +571,27 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
944A6DEF299682EF0032C2E3 /* experimental.build.js in Resources */,
|
||||
9471E92029A470C700EA623B /* event_history in Resources */,
|
||||
944A6E11299F32070032C2E3 /* wizards in Resources */,
|
||||
941B0414297110F100CA291E /* background.build.js in Resources */,
|
||||
944A6DE32991DFC60032C2E3 /* delegation_wizard.js in Resources */,
|
||||
944A6DE62991E4550032C2E3 /* delegation_wizard.html in Resources */,
|
||||
944A6E16299F39D30032C2E3 /* permission in Resources */,
|
||||
948C69E92982DFE900FB3574 /* background.html in Resources */,
|
||||
944A6DEB299682EF0032C2E3 /* experimental.html in Resources */,
|
||||
948C69E0297F88A200FB3574 /* options.js in Resources */,
|
||||
944A6DD42988BA200032C2E3 /* permission.html in Resources */,
|
||||
948C69DE297F88A200FB3574 /* options.css in Resources */,
|
||||
944A6DDA2988D7900032C2E3 /* permission.build.js in Resources */,
|
||||
941B03F3296FA90400CA291E /* background.js in Resources */,
|
||||
948C69E3297F891F00FB3574 /* options.build.js in Resources */,
|
||||
941B03F9296FA90400CA291E /* popup.css in Resources */,
|
||||
941B042A2977A28700CA291E /* Icon-128.png in Resources */,
|
||||
944A6DF4299975A70032C2E3 /* event_log.html in Resources */,
|
||||
941B04192971138F00CA291E /* nostr.build.js in Resources */,
|
||||
941B042D2978CD8E00CA291E /* iOS-Icon-1024.png in Resources */,
|
||||
941B03F7296FA90400CA291E /* popup.html in Resources */,
|
||||
941B040E296FAD6900CA291E /* nostr.js in Resources */,
|
||||
944A6DE12991DFC60032C2E3 /* delegation_wizard.build.js in Resources */,
|
||||
944A6DF6299975A70032C2E3 /* event_log.build.js in Resources */,
|
||||
944A6E06299F2FBB0032C2E3 /* experimental in Resources */,
|
||||
941B03EF296FA90400CA291E /* images in Resources */,
|
||||
941B03F1296FA90400CA291E /* manifest.json in Resources */,
|
||||
944A6DD72988BD230032C2E3 /* permission.js in Resources */,
|
||||
941B04322978CDF900CA291E /* Icon-32.png in Resources */,
|
||||
941B041B2971139000CA291E /* content.build.js in Resources */,
|
||||
941B041D2971139000CA291E /* popup.build.js in Resources */,
|
||||
944A6DF8299975A70032C2E3 /* event_log.js in Resources */,
|
||||
944A6DED299682EF0032C2E3 /* experimental.js in Resources */,
|
||||
941B03ED296FA90400CA291E /* _locales in Resources */,
|
||||
941B04232977A25700CA291E /* Icon-512.png in Resources */,
|
||||
948C69E6297F8BA600FB3574 /* options.build.css in Resources */,
|
||||
@@ -641,9 +612,14 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
944A6E3F299F46D30032C2E3 /* NostoreApp.swift in Sources */,
|
||||
944A6E4629A11C3A0032C2E3 /* GettingStartiPhone.swift in Sources */,
|
||||
94AD34CD29A32458008BFFF4 /* TipsAndTricks.swift in Sources */,
|
||||
944A6E4C29A11C770032C2E3 /* GettingStartedmacOS.swift in Sources */,
|
||||
941B03E6296FA90400CA291E /* ViewController.swift in Sources */,
|
||||
941B03B3296FA90400CA291E /* AppDelegate.swift in Sources */,
|
||||
941B03B5296FA90400CA291E /* SceneDelegate.swift in Sources */,
|
||||
944A6E4329A081950032C2E3 /* PrivacyPolicyView.swift in Sources */,
|
||||
944A6E39299F46270032C2E3 /* MainView.swift in Sources */,
|
||||
944A6E4929A11C640032C2E3 /* GettingStartediPad.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -651,8 +627,14 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
944A6E3A299F46270032C2E3 /* MainView.swift in Sources */,
|
||||
944A6E40299F46D30032C2E3 /* NostoreApp.swift in Sources */,
|
||||
94AD34CE29A32458008BFFF4 /* TipsAndTricks.swift in Sources */,
|
||||
944A6E4729A11C3A0032C2E3 /* GettingStartiPhone.swift in Sources */,
|
||||
941B03E7296FA90400CA291E /* ViewController.swift in Sources */,
|
||||
941B03C4296FA90400CA291E /* AppDelegate.swift in Sources */,
|
||||
944A6E4D29A11C770032C2E3 /* GettingStartedmacOS.swift in Sources */,
|
||||
944A6E4A29A11C640032C2E3 /* GettingStartediPad.swift in Sources */,
|
||||
944A6E4429A081950032C2E3 /* PrivacyPolicyView.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -696,30 +678,6 @@
|
||||
name = Main.html;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
941B03B6296FA90400CA291E /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
941B03B7296FA90400CA291E /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
941B03B9296FA90400CA291E /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
941B03BA296FA90400CA291E /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
941B03C5296FA90400CA291E /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
941B03C6296FA90400CA291E /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@@ -906,14 +864,13 @@
|
||||
DEVELOPMENT_TEAM = 5SD834TD9W;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "iOS (App)/Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = nostore;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Nostore;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.4;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
@@ -948,14 +905,13 @@
|
||||
DEVELOPMENT_TEAM = 5SD834TD9W;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "iOS (App)/Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = nostore;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Nostore;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.4;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
@@ -1056,15 +1012,15 @@
|
||||
DEVELOPMENT_TEAM = 5SD834TD9W;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = nostore;
|
||||
INFOPLIST_FILE = "Nostore--macOS--Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Nostore;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
INFOPLIST_KEY_NSMainStoryboardFile = Main;
|
||||
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||
MARKETING_VERSION = 0.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
@@ -1092,15 +1048,15 @@
|
||||
DEVELOPMENT_TEAM = 5SD834TD9W;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = nostore;
|
||||
INFOPLIST_FILE = "Nostore--macOS--Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Nostore;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
INFOPLIST_KEY_NSMainStoryboardFile = Main;
|
||||
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||
MARKETING_VERSION = 0.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "display-p3",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0.665",
|
||||
"green" : "0.271",
|
||||
"red" : "0.509"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
|
||||
21
Shared (App)/Assets.xcassets/bigicon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Icon-512.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/bigicon.imageset/Icon-512.png
vendored
Normal file
|
After Width: | Height: | Size: 32 KiB |
6
Shared (App)/Assets.xcassets/iPad/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
21
Shared (App)/Assets.xcassets/iPad/ipad-menu.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ipad-menu.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/iPad/ipad-menu.imageset/ipad-menu.png
vendored
Normal file
|
After Width: | Height: | Size: 160 KiB |
21
Shared (App)/Assets.xcassets/iPad/ipad-popup.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ipad-popup.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/iPad/ipad-popup.imageset/ipad-popup.png
vendored
Normal file
|
After Width: | Height: | Size: 61 KiB |
21
Shared (App)/Assets.xcassets/iPad/ipad-url-bar.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ipad-url-bar.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/iPad/ipad-url-bar.imageset/ipad-url-bar.png
vendored
Normal file
|
After Width: | Height: | Size: 27 KiB |
6
Shared (App)/Assets.xcassets/iPhone/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
21
Shared (App)/Assets.xcassets/iPhone/iphone-menu.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "iphone-menu.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/iPhone/iphone-menu.imageset/iphone-menu.png
vendored
Normal file
|
After Width: | Height: | Size: 416 KiB |
21
Shared (App)/Assets.xcassets/iPhone/iphone-popup.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "iphone-popup.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/iPhone/iphone-popup.imageset/iphone-popup.png
vendored
Normal file
|
After Width: | Height: | Size: 124 KiB |
21
Shared (App)/Assets.xcassets/iPhone/iphone-url-bar.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "iphone-url-bar.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/iPhone/iphone-url-bar.imageset/iphone-url-bar.png
vendored
Normal file
|
After Width: | Height: | Size: 66 KiB |
6
Shared (App)/Assets.xcassets/macOS/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
21
Shared (App)/Assets.xcassets/macOS/macos-default-popup.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "default-popup.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/macOS/macos-default-popup.imageset/default-popup.png
vendored
Normal file
|
After Width: | Height: | Size: 102 KiB |
21
Shared (App)/Assets.xcassets/macOS/macos-toolbar-inactive.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "toolbar-inactive.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
Shared (App)/Assets.xcassets/macOS/macos-toolbar-inactive.imageset/toolbar-inactive.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
62
Shared (App)/GettingStartediPad.swift
Normal file
@@ -0,0 +1,62 @@
|
||||
//
|
||||
// GettingStartediPad.swift
|
||||
// Nostore
|
||||
//
|
||||
// Created by Ryan Breen on 2/18/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct GettingStartediPad: View {
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
Text("Getting Started")
|
||||
.font(.largeTitle)
|
||||
.foregroundColor(.accentColor)
|
||||
Text("iPad")
|
||||
.font(.title)
|
||||
.foregroundColor(.accentColor)
|
||||
Text("")
|
||||
Text("""
|
||||
Upon installation of the app, go to **Settings -> Safari -> Extensions** and enable **Nostore**. Open Safari and look in the toolbar, where you will see the \(Image(systemName: "puzzlepiece.extension")) icon:
|
||||
""")
|
||||
.padding([.horizontal, .top], 20)
|
||||
|
||||
Image("ipad-url-bar")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("You will be greeted by a menu like below:").padding([.top], 20)
|
||||
|
||||
Image("ipad-menu")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("""
|
||||
The **Nostore** logo is gray, indicating the extension is inactive for this site, and must be activated first. Click on the button, and give Nostore permission to access the current site. Now the Nostore logo will appear in color, and you can click it again to access the extension.
|
||||
""").multilineTextAlignment(.leading)
|
||||
.padding([.horizontal, .top], 20)
|
||||
|
||||
Image("ipad-popup")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("You have a default profile (with a random key) setup to start. Click the **Settings** button to configure your own keys, if you have them.").padding([.top, .bottom], 20)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct GettingStartediPad_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GettingStartediPad()
|
||||
}
|
||||
}
|
||||
56
Shared (App)/GettingStartedmacOS.swift
Normal file
@@ -0,0 +1,56 @@
|
||||
//
|
||||
// GettingStartedmacOS.swift
|
||||
// Nostore
|
||||
//
|
||||
// Created by Ryan Breen on 2/18/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct GettingStartedmacOS: View {
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
Text("Getting Started")
|
||||
.font(.largeTitle)
|
||||
.foregroundColor(.accentColor)
|
||||
Text("macOS")
|
||||
.font(.title)
|
||||
.foregroundColor(.accentColor)
|
||||
Text("")
|
||||
Text("Upon installation of the app, open Safari. Click on the **Safari menu -> Settings... -> Extensions tab** and activate the **Nostore** extension. You will now see the Nostore icon in your Safari toolbar. For example:")
|
||||
.padding([.horizontal, .top], 20)
|
||||
|
||||
Image("macos-toolbar-inactive")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("""
|
||||
On the right, you can see the Nostore logo, and it is gray (or **inactive**). This means that it does not have permission to access the current website.
|
||||
|
||||
The first time you visit a Nostr client, you will need to click the icon to give Nostore permission to access the site.
|
||||
|
||||
Once active, the icon will become colored and you can select it again, where you will be greeted with a similar popup:
|
||||
""").multilineTextAlignment(.leading)
|
||||
.padding([.horizontal, .top], 20)
|
||||
|
||||
Image("macos-default-popup")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("You have a default profile (with a random key) setup to start. Click the **Settings** button to configure your own keys, if you have them.").padding([.top, .bottom], 20)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
struct GettingStartedmacOS_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GettingStartedmacOS()
|
||||
}
|
||||
}
|
||||
60
Shared (App)/GettingStartiPhone.swift
Normal file
@@ -0,0 +1,60 @@
|
||||
//
|
||||
// GettingStartediPhone.swift
|
||||
// Nostore
|
||||
//
|
||||
// Created by Ryan Breen on 2/18/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct GettingStartediPhone: View {
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
Text("Getting Started")
|
||||
.font(.largeTitle)
|
||||
.foregroundColor(.accentColor)
|
||||
Text("iPhone")
|
||||
.font(.title)
|
||||
.foregroundColor(.accentColor)
|
||||
Spacer(minLength: 20.0)
|
||||
Text("Upon installation of the app, goto **Settings -> Safari -> Extension** and enable the **Nostore** extension. Then open Safari and look in the toolbar, where you will see the \(Image(systemName: "textformat.size")) icon:")
|
||||
.padding([.horizontal, .top], 20)
|
||||
|
||||
Image("iphone-url-bar")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("You will be greeted by a menu like below:").padding([.top], 20)
|
||||
|
||||
Image("iphone-menu")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("""
|
||||
The **Nostore** logo is gray, indicating the extension is inactive for this site, and must be activated first. Click on the button, and give Nostore permission to access the current site. Now the Nostore logo will appear in color, and you can click it again to access the extension.
|
||||
""").multilineTextAlignment(.leading)
|
||||
.padding([.horizontal, .top], 20)
|
||||
|
||||
Image("iphone-popup")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: 512)
|
||||
.border(Color.accentColor, width: 2)
|
||||
.padding([.top])
|
||||
|
||||
Text("You have a default profile (with a random key) setup to start. Click the **Settings** button to configure your own keys, if you have them.").padding([.top, .bottom], 20)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct GettingStartediPhone_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GettingStartediPhone()
|
||||
}
|
||||
}
|
||||
65
Shared (App)/MainView.swift
Normal file
@@ -0,0 +1,65 @@
|
||||
//
|
||||
// HelloView.swift
|
||||
// Nostore
|
||||
//
|
||||
// Created by Ryan Breen on 2/17/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct MainView: View {
|
||||
var body: some View {
|
||||
VStack {
|
||||
NavigationStack {
|
||||
Image("bigicon").resizable().frame(width: 150.0, height: 150.0)
|
||||
Text("Nostore").font(.title)
|
||||
Text("A Safari Nostr Extension").font(.title2)
|
||||
NavigationLink("Privacy Policy") {
|
||||
PrivacyPolicyView()
|
||||
}
|
||||
#if macOS
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Getting Started: iPhone") {
|
||||
GettingStartediPhone()
|
||||
}
|
||||
#if macOS
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Getting Started: iPad") {
|
||||
GettingStartediPad()
|
||||
}
|
||||
#if macOS
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Getting Started: MacOS") {
|
||||
GettingStartedmacOS()
|
||||
}
|
||||
#if macOS
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Tips and Tricks") {
|
||||
TipsAndTricks()
|
||||
}
|
||||
#if macOS
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct MainView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
MainView()
|
||||
}
|
||||
}
|
||||
20
Shared (App)/NostoreApp.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// File.swift
|
||||
// Nostore
|
||||
//
|
||||
// Created by Ryan Breen on 2/17/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
@main
|
||||
struct NostoreApp: App {
|
||||
var body: some Scene {
|
||||
WindowGroup("Nostore") {
|
||||
MainView()
|
||||
}
|
||||
#if macOS
|
||||
.defaultSize(width: 400, height: 500)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
32
Shared (App)/PrivacyPolicyView.swift
Normal file
@@ -0,0 +1,32 @@
|
||||
//
|
||||
// SwiftUIView.swift
|
||||
// Nostore
|
||||
//
|
||||
// Created by Ryan Breen on 2/17/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct PrivacyPolicyView: View {
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
Text("Privacy Policy")
|
||||
.font(.largeTitle)
|
||||
.foregroundColor(.accentColor)
|
||||
Spacer(minLength: 20)
|
||||
Text("""
|
||||
**Nostore** is developed in the spirit of Nostr.
|
||||
|
||||
You, the user, own your data. The developers of this app collect no data, anonymous or otherwise.
|
||||
|
||||
This code of this application is fully auditable and available on our [GitHub page](https://github.com/ursuscamp/nostore).
|
||||
""").multilineTextAlignment(.leading)
|
||||
}.padding(.all)
|
||||
}
|
||||
}
|
||||
|
||||
struct PrivacyPolicyView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
PrivacyPolicyView()
|
||||
}
|
||||
}
|
||||
41
Shared (App)/TipsAndTricks.swift
Normal file
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// SwiftUIView.swift
|
||||
// Nostore
|
||||
//
|
||||
// Created by Ryan Breen on 2/19/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct TipsAndTricks: View {
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
Text("Tips and Tricks")
|
||||
.font(.largeTitle)
|
||||
.foregroundColor(.accentColor)
|
||||
Spacer(minLength: 20.0)
|
||||
Text("Try a few of these:")
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
Spacer(minLength: 20)
|
||||
Text("""
|
||||
1. You can have multiple profiles, each corresponding to a different key.
|
||||
|
||||
2. Click **Event History** in settings to see a list of all events signed by the extension.
|
||||
|
||||
3. Each client has its own set of permissions. You can review them at any time in **Settings**. They are organized by application host.
|
||||
|
||||
4. Clicking the event text in the **Event History** will copy a the raw event JSON.
|
||||
|
||||
5. If you have authorized the extension to talk to the client, but still don't see a special extension login button on the site, try hitting refresh on the site. The client may not recognize the extension code until you do that.
|
||||
""")
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding([.horizontal], 25)
|
||||
}.padding(.all)
|
||||
}
|
||||
}
|
||||
|
||||
struct Tipsandtricks_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
TipsAndTricks()
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ import {
|
||||
getPermission,
|
||||
setPermission,
|
||||
feature,
|
||||
} from './utils';
|
||||
import { saveEvent } from './db';
|
||||
} from './utilities/utils';
|
||||
import { saveEvent } from './utilities/db';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
const log = msg => console.log('Background: ', msg);
|
||||
@@ -51,6 +51,8 @@ browser.runtime.onMessage.addListener((message, _sender, sendResponse) => {
|
||||
return createDelegation(message.payload);
|
||||
case 'calcPubKey':
|
||||
return Promise.resolve(getPublicKey(message.payload));
|
||||
case 'npubEncode':
|
||||
return Promise.resolve(nip19.npubEncode(message.payload));
|
||||
|
||||
// window.nostr
|
||||
case 'getPubKey':
|
||||
@@ -116,7 +118,7 @@ async function ask(uuid, { kind, host, payload }) {
|
||||
});
|
||||
let tab = await browser.tabs.getCurrent();
|
||||
let p = await browser.tabs.create({
|
||||
url: `/permission.html?${qs.toString()}`,
|
||||
url: `/permission/permission.html?${qs.toString()}`,
|
||||
openerTabId: tab.id,
|
||||
});
|
||||
prompt.tabId = p.id;
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script defer src="event_log.build.js"></script>
|
||||
<link rel="stylesheet" href="options.build.css">
|
||||
<title>Event Log</title>
|
||||
<script defer src="event_history.build.js"></script>
|
||||
<link rel="stylesheet" href="/options.build.css">
|
||||
<title>Event History</title>
|
||||
|
||||
<style>
|
||||
label {
|
||||
@@ -18,10 +18,10 @@
|
||||
|
||||
<body class="text-fuchsia-900 p-3.5 lg:p-32" x-data="eventLog">
|
||||
<p>
|
||||
<a href="options.html" class="border-none hover:underline">← Back</a>
|
||||
<a href="/options.html" class="border-none hover:underline">← Back</a>
|
||||
</p>
|
||||
|
||||
<h1 class="section-header">Event Log</h1>
|
||||
<h1 class="section-header">Event History</h1>
|
||||
|
||||
<div class="section">
|
||||
<div class="section-header">Filters</div>
|
||||
@@ -52,17 +52,17 @@
|
||||
|
||||
<div></div>
|
||||
|
||||
<div x-show="view === 'created_at'">
|
||||
<div x-show="view === 'created_at'" x-cloak>
|
||||
<label for="fromCreatedAt">From</label>
|
||||
<input type="date" id="fromCreatedAt" x-model="fromCreatedAt" class="input" @change="reload">
|
||||
</div>
|
||||
|
||||
<div x-show="view === 'created_at'">
|
||||
<div x-show="view === 'created_at'" x-cloak>
|
||||
<label for="toCreatedAt">To</label>
|
||||
<input type="date" id="toCreatedAt" x-model="toCreatedAt" class="input" @change="reload">
|
||||
</div>
|
||||
|
||||
<div x-show="view === 'kind'">
|
||||
<div x-show="view === 'kind'" x-cloak>
|
||||
<label for="kindShortcut">Quick Select</label>
|
||||
<select id="kindShortcut" class="input" @change="quickKindSelect" x-model="quickKind">
|
||||
<option></option>
|
||||
@@ -72,17 +72,17 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div x-show="view === 'kind'">
|
||||
<div x-show="view === 'kind'" x-cloak>
|
||||
<label for="fromKind">From</label>
|
||||
<input type="number" id="fromKind" x-model.number="fromKind" class="input" @change="reload">
|
||||
</div>
|
||||
|
||||
<div x-show="view === 'kind'">
|
||||
<div x-show="view === 'kind'" x-cloak>
|
||||
<label for="toKind">To</label>
|
||||
<input type="number" id="toKind" x-model.number="toKind" class="input" @change="reload">
|
||||
</div>
|
||||
|
||||
<div x-show="view === 'host'">
|
||||
<div x-show="view === 'host'" x-cloak>
|
||||
<label for="host">Host</label>
|
||||
<select id="host" class="input" x-model="host" @change="reload">
|
||||
<option value=""></option>
|
||||
@@ -92,7 +92,7 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div x-show="view === 'pubkey'">
|
||||
<div x-show="view === 'pubkey'" x-cloak>
|
||||
<label for="profiles">Profiles</label>
|
||||
<select id="profiles" class="input" x-model="profile" @change="pkFromProfile">
|
||||
<option value=""></option>
|
||||
@@ -102,7 +102,7 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div x-show="view === 'pubkey'">
|
||||
<div x-show="view === 'pubkey'" x-cloak>
|
||||
<label for="pubkey">Pubkey</label>
|
||||
<input type="text" class="input" x-model="pubkey" @input.debounce="reload">
|
||||
</div>
|
||||
@@ -114,6 +114,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-sm italic mt-1 text-right">Click/tap event body to copy the raw event.</div>
|
||||
|
||||
<template x-for="(event, index) in events">
|
||||
<div class="mt-3 border-solid border border-fuchsia-700 rounded-lg">
|
||||
@@ -125,11 +126,17 @@
|
||||
<div class="flex-1 w-64 p-4" x-text="formatKind(event.event.kind)"></div>
|
||||
</div>
|
||||
|
||||
<pre class="rounded-b-lg bg-slate-200 text-sm md:text-xl" x-html="highlight(event)" x-show="selected === index"
|
||||
x-transition:enter.opacity.delay.75ms x-transition:leave.opacity>
|
||||
</pre>
|
||||
<div @click.prevent="copyEvent(index)" class="cursor-pointer">
|
||||
<pre class="rounded-b-lg bg-slate-200 text-sm md:text-xl" x-html="highlight(event)" x-show="selected === index"
|
||||
x-transition:enter.opacity.delay.75ms x-transition:leave.opacity x-cloak>
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="fixed top-0 right-0 bg-fuchsia-800 rounded-md p-4 text-white m-8 drop-shadow-md" x-show="copied" x-cloack>
|
||||
Event copied!
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,9 +1,8 @@
|
||||
import Alpine from 'alpinejs';
|
||||
import { deleteDB } from 'idb';
|
||||
import jsonFormatHighlight from 'json-format-highlight';
|
||||
import { getPublicKey } from 'nostr-tools';
|
||||
import { downloadAllContents, getHosts, sortByIndex } from './db';
|
||||
import { getProfiles, KINDS } from './utils';
|
||||
import { downloadAllContents, getHosts, sortByIndex } from '../utilities/db';
|
||||
import { getProfiles, KINDS } from '../utilities/utils';
|
||||
|
||||
const TOMORROW = new Date();
|
||||
TOMORROW.setDate(TOMORROW.getDate() + 1);
|
||||
@@ -20,6 +19,7 @@ Alpine.data('eventLog', () => ({
|
||||
profile: '',
|
||||
pubkey: '',
|
||||
selected: null,
|
||||
copied: false,
|
||||
|
||||
// date view
|
||||
fromCreatedAt: '2008-10-31',
|
||||
@@ -41,14 +41,19 @@ Alpine.data('eventLog', () => ({
|
||||
this.sort === 'asc',
|
||||
this.max
|
||||
);
|
||||
this.events = events;
|
||||
this.events = events.map(e => ({ ...e, copied: false }));
|
||||
getHosts().then(hosts => (this.allHosts = hosts));
|
||||
const profiles = await getProfiles();
|
||||
console.log(profiles);
|
||||
this.allProfiles = profiles.map(profile => ({
|
||||
name: profile.name,
|
||||
pubkey: getPublicKey(profile.privKey),
|
||||
}));
|
||||
this.allProfiles = await Promise.all(
|
||||
profiles.map(async profile => ({
|
||||
name: profile.name,
|
||||
pubkey: await browser.runtime.sendMessage({
|
||||
kind: 'calcPubKey',
|
||||
payload: profile.privKey,
|
||||
}),
|
||||
}))
|
||||
);
|
||||
},
|
||||
|
||||
async saveAll() {
|
||||
@@ -94,6 +99,13 @@ Alpine.data('eventLog', () => ({
|
||||
return k ? `${k[1]} (${kind})` : `Unknown (${kind})`;
|
||||
},
|
||||
|
||||
async copyEvent(index) {
|
||||
let event = JSON.stringify(this.events[index]);
|
||||
this.copied = true;
|
||||
setTimeout(() => (this.copied = false), 1000);
|
||||
await navigator.clipboard.writeText(event);
|
||||
},
|
||||
|
||||
// Properties
|
||||
|
||||
get fromTime() {
|
||||
@@ -5,14 +5,14 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="options.build.css">
|
||||
<script src="experimental.build.js" defer></script>
|
||||
<link rel="stylesheet" href="/options.build.css">
|
||||
<script src="/experimental/experimental.build.js" defer></script>
|
||||
<title>Experimental Features</title>
|
||||
</head>
|
||||
|
||||
<body class="text-fuchsia-900 p-3.5 lg:p-32" x-data="experimental">
|
||||
<p>
|
||||
<a href="options.html" class="border-none hover:underline">← Back</a>
|
||||
<a href="/options.html" class="border-none hover:underline">← Back</a>
|
||||
</p>
|
||||
<h1 class="text-3xl lg:text-6xl font-bold md:text-center">Experimental Features</h1>
|
||||
<p class="mt-3 text-center font-bold italic">
|
||||
@@ -50,9 +50,13 @@
|
||||
"options.build.js",
|
||||
"options.build.css",
|
||||
"options.html",
|
||||
"delegation_wizard.html",
|
||||
"delegation_wizard.build.js",
|
||||
"delegation_wizard.build.css"
|
||||
"wizards/delegation/delegation.html",
|
||||
"wizards/delegation/delegation.build.js",
|
||||
"wizards/delegation/delegation.build.css",
|
||||
"experimental/experimental.html",
|
||||
"experimental/experimental.build.js",
|
||||
"event_history/event_history.html",
|
||||
"event_history/event_history.build.js"
|
||||
],
|
||||
"matches": [
|
||||
"<all_urls>"
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
[x-cloak] { display: none; }
|
||||
|
||||
@layer components {
|
||||
.button {
|
||||
/* Colors */
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
</select>
|
||||
<div class="block md:inline p-3 pl-0 md:p-0">
|
||||
<button class="button" @click.prevent="newProfile">New</button>
|
||||
<button class="button" @click.prevent="newDelegated" x-show="delegationActive">New Delegate</button>
|
||||
<button class="button" @click.prevent="newDelegated" x-show="delegationActive" x-cloak>New Delegate</button>
|
||||
<button class="button" @click.prevent="deleteProfile">Delete</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -40,17 +40,30 @@
|
||||
<input x-model="profileName" type="text" class="input" autocapitalize="off" autocomplete="off" spellcheck="off">
|
||||
</div>
|
||||
|
||||
<div class="mt-3" x-show="delegate" x-cloak>
|
||||
<div class="mb-1">
|
||||
<span class="text-red-700 font-bold">This is is a delegated profile.</span>
|
||||
</div>
|
||||
|
||||
<label for="delegator-pub-key">Delegator Public Key</label>
|
||||
<br>
|
||||
<input id="delegator-pub-key" x-model="delegator" class="input" autocapitalize="off" autocomplete="off"
|
||||
spellcheck="off" :disabled="delegate">
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<label for="priv-key">Private Key</label>
|
||||
<br>
|
||||
<input x-model="privKey" type="text" class="input" :class="validKeyClass" autocapitalize="off"
|
||||
autocomplete="off" spellcheck="off">
|
||||
<input x-model="privKey" :type="visibilityClass" class="input" :class="validKeyClass" autocapitalize="off"
|
||||
autocomplete="off" spellcheck="off" :disabled="delegate">
|
||||
<a href="" @click.prevent="visible = !visible" x-text="(visible && 'Hide') || 'Show'" class="border-none"></a>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<label for="pub-key">Public Key</label>
|
||||
<br>
|
||||
<input x-model="pubKey" type="text" class="input" disabled>
|
||||
<a href="" class="border-none" @click.prevent="copyPubKey" x-text="copied ? 'Copied!' : 'Copy'"></a>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
@@ -95,7 +108,7 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="mt-3" x-show="hasRecommendedRelays">
|
||||
<div class="mt-3" x-show="hasRecommendedRelays" x-cloak>
|
||||
<select x-model="recommendedRelay" class="input">
|
||||
<option value="" disabled selected>Recommended Relays</option>
|
||||
<template x-for="relay in recommendedRelays">
|
||||
@@ -109,7 +122,7 @@
|
||||
<div class="block md:inline p-3 pl-0 md:p-0">
|
||||
<button class="button" @click="await addRelay()">Add</button>
|
||||
</div>
|
||||
<div class="text-red-500 font-bold" x-show="urlError.length > 0" x-text="urlError"></div>
|
||||
<div class="text-red-500 font-bold" x-show="urlError.length > 0" x-text="urlError" x-cloak></div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -132,9 +145,9 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<p x-show="permHosts.length === 0" class="font-bold mt-3">You have not remembered any app requests yet.</p>
|
||||
<p x-show="permHosts.length === 0" x-cloak class="font-bold mt-3">You have not remembered any app requests yet.</p>
|
||||
|
||||
<table class="mt-3 text-xs md:text-base table-fixed" x-show="hostPerms.length > 0">
|
||||
<table class="mt-3 text-xs md:text-base table-fixed" x-show="hostPerms.length > 0" x-cloak>
|
||||
<thead class="font-bold text-lg">
|
||||
<td class="p-2 text-center">App Request</td>
|
||||
<td class="p-2 text-center">Action</td>
|
||||
@@ -161,9 +174,10 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-6">
|
||||
<a href="experimental.html" class="border-none hover:underline">Experimental features →</a>
|
||||
<a href="experimental/experimental.html" class="border-none hover:underline">Experimental
|
||||
features →</a>
|
||||
<br>
|
||||
<a href="event_log.html" class="border-none hover:underline">Event log →</a>
|
||||
<a href="event_history/event_history.html" class="border-none hover:underline">Event history →</a>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
@@ -17,10 +17,15 @@ import {
|
||||
humanPermission,
|
||||
validateKey,
|
||||
feature,
|
||||
} from './utils';
|
||||
getDelegator,
|
||||
} from './utilities/utils';
|
||||
|
||||
const log = console.log;
|
||||
|
||||
function go(url) {
|
||||
browser.tabs.update({ url: browser.runtime.getURL(url) });
|
||||
}
|
||||
|
||||
Alpine.data('options', () => ({
|
||||
profileNames: ['---'],
|
||||
profileIndex: 0,
|
||||
@@ -38,7 +43,12 @@ Alpine.data('options', () => ({
|
||||
permHosts: [],
|
||||
hostPerms: [],
|
||||
delegationActive: false,
|
||||
visible: false,
|
||||
delegate: false,
|
||||
delegator: '',
|
||||
copied: false,
|
||||
setPermission,
|
||||
go,
|
||||
|
||||
async init(watch = true) {
|
||||
log('Initialize backend.');
|
||||
@@ -78,6 +88,7 @@ Alpine.data('options', () => ({
|
||||
await this.getNpub();
|
||||
await this.getRelays();
|
||||
await this.getPermissions();
|
||||
await this.getDelegate();
|
||||
},
|
||||
|
||||
// Profile functions
|
||||
@@ -106,6 +117,15 @@ Alpine.data('options', () => ({
|
||||
this.profileIndex = await getProfileIndex();
|
||||
},
|
||||
|
||||
async getDelegate() {
|
||||
let [delegate, delegator] = await getDelegator(this.profileIndex);
|
||||
this.delegate = delegate;
|
||||
this.delegator = await browser.runtime.sendMessage({
|
||||
kind: 'npubEncode',
|
||||
payload: delegator,
|
||||
});
|
||||
},
|
||||
|
||||
async newProfile() {
|
||||
let newIndex = await newProfile();
|
||||
await this.getProfileNames();
|
||||
@@ -113,7 +133,9 @@ Alpine.data('options', () => ({
|
||||
},
|
||||
|
||||
newDelegated() {
|
||||
window.location = browser.runtime.getURL('delegation_wizard.html');
|
||||
window.location = browser.runtime.getURL(
|
||||
'wizards/delegation/delegation.html'
|
||||
);
|
||||
},
|
||||
|
||||
async deleteProfile() {
|
||||
@@ -127,6 +149,14 @@ Alpine.data('options', () => ({
|
||||
}
|
||||
},
|
||||
|
||||
async copyPubKey() {
|
||||
await navigator.clipboard.writeText(this.pubKey);
|
||||
this.copied = true;
|
||||
setTimeout(() => {
|
||||
this.copied = false;
|
||||
}, 1500);
|
||||
},
|
||||
|
||||
// Key functions
|
||||
|
||||
async saveProfile() {
|
||||
@@ -292,6 +322,10 @@ Alpine.data('options', () => ({
|
||||
? ''
|
||||
: 'ring-2 ring-rose-500 focus:ring-2 focus:ring-rose-500 border-transparent focus:border-transparent';
|
||||
},
|
||||
|
||||
get visibilityClass() {
|
||||
return this.visible ? 'text' : 'password';
|
||||
},
|
||||
}));
|
||||
|
||||
Alpine.start();
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script defer src="permission.build.js"></script>
|
||||
<link rel="stylesheet" href="options.build.css">
|
||||
<link rel="stylesheet" href="/options.build.css">
|
||||
<title>Permission Requested</title>
|
||||
</head>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<button class="button" @click="await allow()">Allow</button>
|
||||
<button class="button" @click="await deny()">Deny</button>
|
||||
<input class="checkbox" type="checkbox" id="remember" x-model="remember">
|
||||
<label for="remember">Remeber selection<span x-show="isSigningEvent"> (by event kind)</span></label>
|
||||
<label for="remember">Remeber selection<span x-show="isSigningEvent" x-cloak> (by event kind)</span></label>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@@ -1,6 +1,6 @@
|
||||
import Alpine from 'alpinejs';
|
||||
import jsonFormatHighlight from 'json-format-highlight';
|
||||
import { KINDS } from './utils';
|
||||
import { KINDS } from '../utilities/utils';
|
||||
|
||||
storage = browser.storage.local;
|
||||
|
||||
@@ -21,13 +21,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="relay" x-show="relayCount < 1">
|
||||
<div class="relay" x-show="relayCount < 1 && showRelayReminder" x-cloak>
|
||||
<span>
|
||||
You do not have any relays setup for this profile. Would you like to add some recommended
|
||||
relays now?
|
||||
</span>
|
||||
<br>
|
||||
<button class="button" @click="await addRelays()">Add Relays</button>
|
||||
<button class="button" @click="noThanks">No Thanks</button>
|
||||
</div>
|
||||
|
||||
<div class="help">
|
||||
|
||||
@@ -6,7 +6,9 @@ import {
|
||||
RECOMMENDED_RELAYS,
|
||||
saveRelays,
|
||||
initialize,
|
||||
} from './utils';
|
||||
relayReminder,
|
||||
toggleRelayReminder,
|
||||
} from './utilities/utils';
|
||||
import Alpine from 'alpinejs';
|
||||
window.Alpine = Alpine;
|
||||
|
||||
@@ -16,6 +18,7 @@ Alpine.data('popup', () => ({
|
||||
profileNames: ['Default'],
|
||||
profileIndex: 0,
|
||||
relayCount: 0,
|
||||
showRelayReminder: true,
|
||||
|
||||
async init() {
|
||||
log('Initializing backend.');
|
||||
@@ -25,6 +28,7 @@ Alpine.data('popup', () => ({
|
||||
await this.loadNames();
|
||||
await this.setProfileIndex();
|
||||
await this.countRelays();
|
||||
await this.checkRelayReminder();
|
||||
});
|
||||
|
||||
// Even though loadProfileIndex will immediately trigger a profile refresh, we still
|
||||
@@ -35,6 +39,7 @@ Alpine.data('popup', () => ({
|
||||
await this.loadNames();
|
||||
await this.loadProfileIndex();
|
||||
await this.countRelays();
|
||||
await this.checkRelayReminder();
|
||||
},
|
||||
|
||||
async setProfileIndex() {
|
||||
@@ -63,6 +68,10 @@ Alpine.data('popup', () => ({
|
||||
this.relayCount = relays.length;
|
||||
},
|
||||
|
||||
async checkRelayReminder() {
|
||||
this.showRelayReminder = await relayReminder();
|
||||
},
|
||||
|
||||
async addRelays() {
|
||||
let relays = RECOMMENDED_RELAYS.map(r => ({
|
||||
url: r.href,
|
||||
@@ -72,6 +81,11 @@ Alpine.data('popup', () => ({
|
||||
await saveRelays(this.profileIndex, relays);
|
||||
await this.countRelays();
|
||||
},
|
||||
|
||||
async noThanks() {
|
||||
await toggleRelayReminder();
|
||||
this.showRelayReminder = false;
|
||||
},
|
||||
}));
|
||||
|
||||
Alpine.start();
|
||||
|
||||
@@ -1,25 +1,31 @@
|
||||
const DB_VERSION = 2;
|
||||
const DB_VERSION = 3;
|
||||
const storage = browser.storage.local;
|
||||
export const RECOMMENDED_RELAYS = [
|
||||
new URL('wss://relay.damus.io'),
|
||||
new URL('wss://eden.nostr.land'),
|
||||
new URL('wss://nostr-relay.derekross.me'),
|
||||
new URL('wss://relay.snort.social'),
|
||||
new URL('wss://nos.lol'),
|
||||
new URL('wss://brb.io'),
|
||||
new URL('wss://nostr.orangepill.dev'),
|
||||
];
|
||||
// prettier-ignore
|
||||
export const KINDS = [
|
||||
[0, 'Metadata', 'https://github.com/nostr-protocol/nips/blob/master/01.md'],
|
||||
[1, 'Text', 'https://github.com/nostr-protocol/nips/blob/master/01.md'],
|
||||
[2, 'Recommend Relay', 'https://github.com/nostr-protocol/nips/blob/master/01.md'],
|
||||
[3, 'Contacts', 'https://github.com/nostr-protocol/nips/blob/master/02.md'],
|
||||
[4, 'Encrypted Direct Messages', 'https://github.com/nostr-protocol/nips/blob/master/04.md'],
|
||||
[5, 'Event Deletion', 'https://github.com/nostr-protocol/nips/blob/master/09.md'],
|
||||
[7, 'Reaction', 'https://github.com/nostr-protocol/nips/blob/master/25.md'],
|
||||
[40, 'Channel Creation', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[41, 'Channel Metadata', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[42, 'Channel Message', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[43, 'Channel Hide Message', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[44, 'Channel Mute User', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[0, 'Metadata', 'https://github.com/nostr-protocol/nips/blob/master/01.md'],
|
||||
[1, 'Text', 'https://github.com/nostr-protocol/nips/blob/master/01.md'],
|
||||
[2, 'Recommend Relay', 'https://github.com/nostr-protocol/nips/blob/master/01.md'],
|
||||
[3, 'Contacts', 'https://github.com/nostr-protocol/nips/blob/master/02.md'],
|
||||
[4, 'Encrypted Direct Messages', 'https://github.com/nostr-protocol/nips/blob/master/04.md'],
|
||||
[5, 'Event Deletion', 'https://github.com/nostr-protocol/nips/blob/master/09.md'],
|
||||
[7, 'Reaction', 'https://github.com/nostr-protocol/nips/blob/master/25.md'],
|
||||
[40, 'Channel Creation', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[41, 'Channel Metadata', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[42, 'Channel Message', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[43, 'Channel Hide Message', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[44, 'Channel Mute User', 'https://github.com/nostr-protocol/nips/blob/master/28.md'],
|
||||
[1984, 'Reporting', 'https://github.com/nostr-protocol/nips/blob/master/56.md'],
|
||||
[9734, 'Zap Request', 'https://github.com/nostr-protocol/nips/blob/master/57.md'],
|
||||
[9735, 'Zap', 'https://github.com/nostr-protocol/nips/blob/master/57.md'],
|
||||
[22242, 'Client Authentication', 'https://github.com/nostr-protocol/nips/blob/master/42.md'],
|
||||
[30023, 'Long-Form Content', 'https://github.com/nostr-protocol/nips/blob/master/23.md'],
|
||||
];
|
||||
|
||||
export async function initialize() {
|
||||
@@ -49,6 +55,14 @@ async function migrate(version, goal) {
|
||||
await storage.set({ profiles });
|
||||
return version + 1;
|
||||
}
|
||||
|
||||
if (version === 2) {
|
||||
console.log('Migrating to version 3.');
|
||||
let profiles = await getProfiles();
|
||||
profiles.forEach(profile => (profile.relayReminder = true));
|
||||
await storage.set({ profiles });
|
||||
return version + 1;
|
||||
}
|
||||
}
|
||||
|
||||
export async function getProfiles() {
|
||||
@@ -107,6 +121,7 @@ export async function generateProfile(name = 'Default') {
|
||||
hosts: {},
|
||||
relays: [],
|
||||
delegate: false,
|
||||
relayReminder: true,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -228,3 +243,23 @@ export async function feature(name) {
|
||||
let f = await browser.storage.local.get({ [fname]: false });
|
||||
return f[fname];
|
||||
}
|
||||
|
||||
export async function relayReminder() {
|
||||
let index = await getProfileIndex();
|
||||
let profile = await getProfile(index);
|
||||
return profile.relayReminder;
|
||||
}
|
||||
|
||||
export async function toggleRelayReminder() {
|
||||
let index = await getProfileIndex();
|
||||
let profiles = await getProfiles();
|
||||
profiles[index].relayReminder = false;
|
||||
await storage.set({ profiles });
|
||||
}
|
||||
|
||||
export async function getDelegator(index) {
|
||||
let profiles = await getProfiles();
|
||||
let profile = profiles[index];
|
||||
console.log(profile);
|
||||
return [profile.delegate, profile.delegator];
|
||||
}
|
||||
@@ -5,8 +5,8 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script defer src="delegation_wizard.build.js"></script>
|
||||
<link rel="stylesheet" href="options.build.css">
|
||||
<script defer src="delegation.build.js"></script>
|
||||
<link rel="stylesheet" href="/options.build.css">
|
||||
|
||||
<title>Delegation Wizard</title>
|
||||
</head>
|
||||
@@ -1,5 +1,9 @@
|
||||
import Alpine from 'alpinejs';
|
||||
import { generateProfile, getProfiles, validateKey } from './utils';
|
||||
import {
|
||||
generateProfile,
|
||||
getProfiles,
|
||||
validateKey,
|
||||
} from '../../utilities/utils';
|
||||
import { getPublicKey, nip26, nip19 } from 'nostr-tools';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
14
build.js
@@ -18,12 +18,14 @@ require('esbuild')
|
||||
'nostr.build': './Shared (Extension)/Resources/nostr.js',
|
||||
'popup.build': './Shared (Extension)/Resources/popup.js',
|
||||
'options.build': './Shared (Extension)/Resources/options.js',
|
||||
'permission.build': './Shared (Extension)/Resources/permission.js',
|
||||
'experimental.build':
|
||||
'./Shared (Extension)/Resources/experimental.js',
|
||||
'delegation_wizard.build':
|
||||
'./Shared (Extension)/Resources/delegation_wizard.js',
|
||||
'event_log.build': './Shared (Extension)/Resources/event_log.js',
|
||||
'permission/permission.build':
|
||||
'./Shared (Extension)/Resources/permission/permission.js',
|
||||
'experimental/experimental.build':
|
||||
'./Shared (Extension)/Resources/experimental/experimental.js',
|
||||
'wizards/delegation/delegation.build':
|
||||
'./Shared (Extension)/Resources/wizards/delegation/delegation.js',
|
||||
'event_history/event_history.build':
|
||||
'./Shared (Extension)/Resources/event_history/event_history.js',
|
||||
},
|
||||
outdir: './Shared (Extension)/Resources',
|
||||
sourcemap: 'inline',
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
//
|
||||
// AppDelegate.swift
|
||||
// iOS (App)
|
||||
//
|
||||
// Created by Ryan Breen on 1/11/23.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
@main
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
// Override point for customization after application launch.
|
||||
return true
|
||||
}
|
||||
|
||||
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
||||
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19085" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19082"/>
|
||||
<capability name="Image references" minToolsVersion="12.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6HG-Um-bch">
|
||||
<rect key="frame" x="142" y="385" width="128" height="128"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<imageReference key="image" image="LargeIcon"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="LargeIcon" width="128" height="128"/>
|
||||
</resources>
|
||||
</document>
|
||||
@@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<wkWebView contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RDB-ib-igF">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<wkWebViewConfiguration key="configuration">
|
||||
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
|
||||
<wkPreferences key="preferences"/>
|
||||
</wkWebViewConfiguration>
|
||||
</wkWebView>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="webView" destination="RDB-ib-igF" id="avx-RC-qRB"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||
@@ -6,20 +6,6 @@
|
||||
<dict>
|
||||
<key>UIApplicationSupportsMultipleScenes</key>
|
||||
<false/>
|
||||
<key>UISceneConfigurations</key>
|
||||
<dict>
|
||||
<key>UIWindowSceneSessionRoleApplication</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UISceneConfigurationName</key>
|
||||
<string>Default Configuration</string>
|
||||
<key>UISceneDelegateClassName</key>
|
||||
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||||
<key>UISceneStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
//
|
||||
// SceneDelegate.swift
|
||||
// iOS (App)
|
||||
//
|
||||
// Created by Ryan Breen on 1/11/23.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
|
||||
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
|
||||
guard let _ = (scene as? UIWindowScene) else { return }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
//
|
||||
// AppDelegate.swift
|
||||
// macOS (App)
|
||||
//
|
||||
// Created by Ryan Breen on 1/11/23.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
@main
|
||||
class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
func applicationDidFinishLaunching(_ notification: Notification) {
|
||||
// Override point for customization after application launch.
|
||||
}
|
||||
|
||||
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
|
||||
<plugIn identifier="com.apple.WebKit2IBPlugin" version="21507"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Application-->
|
||||
<scene sceneID="JPo-4y-FX3">
|
||||
<objects>
|
||||
<application id="hnw-xV-0zn" sceneMemberID="viewController">
|
||||
<menu key="mainMenu" title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="Nostore" id="1Xt-HY-uBw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Nostore" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<items>
|
||||
<menuItem title="About Nostore" id="5kV-Vb-QxS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontStandardAboutPanel:" target="Ady-hI-5gd" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Hide Nostore" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<connections>
|
||||
<action selector="hide:" target="Ady-hI-5gd" id="PnN-Uc-m68"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="hideOtherApplications:" target="Ady-hI-5gd" id="VT4-aY-XCT"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unhideAllApplications:" target="Ady-hI-5gd" id="Dhg-Le-xox"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||
<menuItem title="Quit Nostore" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<connections>
|
||||
<action selector="terminate:" target="Ady-hI-5gd" id="Te7-pn-YzF"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Help" id="wpr-3q-Mcd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||
<items>
|
||||
<menuItem title="Nostore Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||
<connections>
|
||||
<action selector="showHelp:" target="Ady-hI-5gd" id="y7X-2Q-9no"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="Voe-Tx-rLC" id="PrD-fu-P6m"/>
|
||||
</connections>
|
||||
</application>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Nostore" customModuleProvider="target"/>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="76" y="-134"/>
|
||||
</scene>
|
||||
<!--Window Controller-->
|
||||
<scene sceneID="R2V-B0-nI4">
|
||||
<objects>
|
||||
<windowController showSeguePresentationStyle="single" id="B8D-0N-5wS" sceneMemberID="viewController">
|
||||
<window key="window" title="Nostore" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" animationBehavior="default" id="IQv-IB-iLA">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||
<windowCollectionBehavior key="collectionBehavior" fullScreenNone="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="425" height="325"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="B8D-0N-5wS" id="98r-iN-zZc"/>
|
||||
</connections>
|
||||
</window>
|
||||
<connections>
|
||||
<segue destination="XfG-lQ-9wD" kind="relationship" relationship="window.shadowedContentViewController" id="cq2-FE-JQM"/>
|
||||
</connections>
|
||||
</windowController>
|
||||
<customObject id="Oky-zY-oP4" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="74.5" y="249.5"/>
|
||||
</scene>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="hIz-AP-VOD">
|
||||
<objects>
|
||||
<viewController id="XfG-lQ-9wD" customClass="ViewController" customModule="Nostore" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" id="m2S-Jp-Qdl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="425" height="325"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<wkWebView wantsLayer="YES" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eOr-cG-IQY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="425" height="325"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<wkWebViewConfiguration key="configuration">
|
||||
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
|
||||
<wkPreferences key="preferences"/>
|
||||
</wkWebViewConfiguration>
|
||||
</wkWebView>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="webView" destination="eOr-cG-IQY" id="GFe-mU-dBY"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<customObject id="rPt-NT-nkU" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="75" y="655"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||