Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
9f37c6360c
|
|||
|
91ad2409de
|
|||
|
2cdde809dc
|
|||
|
d53b6a7b56
|
|||
|
e0125ca634
|
|||
|
e46f1ba14b
|
|||
|
8180af7bb1
|
|||
|
5056627f95
|
|||
|
9710befadc
|
|||
|
87179173fd
|
|||
|
34102c42ab
|
|||
|
0a5ec27548
|
|||
|
3299d9d617
|
|||
|
4e8907d52d
|
3
LICENSE
3
LICENSE
@@ -1,6 +1,7 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ryan Breen
|
||||
Copyright (c) 2025 Terry Yiu (Nostash)
|
||||
Copyright (c) 2024 Ryan Breen (Nostore)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
3A82CBE22DEB369D0038BB3E /* db.js in Resources */ = {isa = PBXBuildFile; fileRef = 3A82CBDF2DEB369D0038BB3E /* db.js */; };
|
||||
3A82CBE32DEB369D0038BB3E /* utils.js in Resources */ = {isa = PBXBuildFile; fileRef = 3A82CBE02DEB369D0038BB3E /* utils.js */; };
|
||||
3A82CBE42DEB369D0038BB3E /* db.js in Resources */ = {isa = PBXBuildFile; fileRef = 3A82CBDF2DEB369D0038BB3E /* db.js */; };
|
||||
3A82CBE52DEB369D0038BB3E /* utils.js in Resources */ = {isa = PBXBuildFile; fileRef = 3A82CBE02DEB369D0038BB3E /* utils.js */; };
|
||||
941B03CE296FA90400CA291E /* Nostash Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 941B03CD296FA90400CA291E /* Nostash Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
941B03D8296FA90400CA291E /* Nostash Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 941B03D7296FA90400CA291E /* Nostash Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
941B03DE296FA90400CA291E /* Main.html in Resources */ = {isa = PBXBuildFile; fileRef = 941B0399296FA90300CA291E /* Main.html */; };
|
||||
@@ -146,6 +150,8 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
3A82CBDF2DEB369D0038BB3E /* db.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = db.js; sourceTree = "<group>"; };
|
||||
3A82CBE02DEB369D0038BB3E /* utils.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = "<group>"; };
|
||||
941B039A296FA90300CA291E /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = Base; path = ../Base.lproj/Main.html; sourceTree = "<group>"; };
|
||||
941B039B296FA90300CA291E /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
|
||||
941B039C296FA90300CA291E /* Style.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = Style.css; sourceTree = "<group>"; };
|
||||
@@ -233,6 +239,15 @@
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
3A82CBE12DEB369D0038BB3E /* utilities */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3A82CBDF2DEB369D0038BB3E /* db.js */,
|
||||
3A82CBE02DEB369D0038BB3E /* utils.js */,
|
||||
);
|
||||
path = utilities;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
941B0392296FA90300CA291E = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -309,6 +324,7 @@
|
||||
941B03A9296FA90400CA291E /* popup.css */,
|
||||
941B03AA296FA90400CA291E /* popup.js */,
|
||||
948C69E72982DFE900FB3574 /* background.html */,
|
||||
3A82CBE12DEB369D0038BB3E /* utilities */,
|
||||
);
|
||||
path = Resources;
|
||||
sourceTree = "<group>";
|
||||
@@ -552,6 +568,8 @@
|
||||
941B03F4296FA90400CA291E /* content.js in Resources */,
|
||||
941B04262977A25700CA291E /* Icon-1024.png in Resources */,
|
||||
941B04352978CDF900CA291E /* Icon-64.png in Resources */,
|
||||
3A82CBE22DEB369D0038BB3E /* db.js in Resources */,
|
||||
3A82CBE32DEB369D0038BB3E /* utils.js in Resources */,
|
||||
941B04242977A25700CA291E /* Icon-256.png in Resources */,
|
||||
941B03FA296FA90400CA291E /* popup.js in Resources */,
|
||||
941B04332978CDF900CA291E /* Icon-16.png in Resources */,
|
||||
@@ -589,6 +607,8 @@
|
||||
941B03F5296FA90400CA291E /* content.js in Resources */,
|
||||
941B04272977A25700CA291E /* Icon-1024.png in Resources */,
|
||||
941B04362978CDF900CA291E /* Icon-64.png in Resources */,
|
||||
3A82CBE42DEB369D0038BB3E /* db.js in Resources */,
|
||||
3A82CBE52DEB369D0038BB3E /* utils.js in Resources */,
|
||||
941B04252977A25700CA291E /* Icon-256.png in Resources */,
|
||||
941B03FB296FA90400CA291E /* popup.js in Resources */,
|
||||
941B04342978CDF900CA291E /* Icon-16.png in Resources */,
|
||||
@@ -788,7 +808,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "iOS (Extension)/Info.plist";
|
||||
@@ -801,7 +821,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
@@ -820,7 +840,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "iOS (Extension)/Info.plist";
|
||||
@@ -833,7 +853,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
@@ -855,7 +875,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "iOS (App)/Info.plist";
|
||||
@@ -871,7 +891,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
@@ -896,7 +916,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "iOS (App)/Info.plist";
|
||||
@@ -912,7 +932,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
@@ -937,7 +957,7 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = "macOS (Extension)/nostash.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
@@ -951,8 +971,8 @@
|
||||
"@executable_path/../Frameworks",
|
||||
"@executable_path/../../../../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
@@ -971,7 +991,7 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = "macOS (Extension)/nostash.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
@@ -985,8 +1005,8 @@
|
||||
"@executable_path/../Frameworks",
|
||||
"@executable_path/../../../../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
@@ -1007,21 +1027,21 @@
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_ENTITLEMENTS = "macOS (App)/nostash.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Nostash--macOS--Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Nostash;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
@@ -1043,21 +1063,21 @@
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_ENTITLEMENTS = "macOS (App)/nostash.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 9;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = S99A5B637C;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Nostash--macOS--Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Nostash;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||
MARKETING_VERSION = 2.0.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 2.1.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SafariServices,
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1630"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES"
|
||||
buildArchitectures = "Automatic">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "941B03AE296FA90400CA291E"
|
||||
BuildableName = "Nostash.app"
|
||||
BlueprintName = "Nostash (iOS)"
|
||||
ReferencedContainer = "container:Nostash.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
shouldAutocreateTestPlan = "YES">
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "941B03AE296FA90400CA291E"
|
||||
BuildableName = "Nostash.app"
|
||||
BlueprintName = "Nostash (iOS)"
|
||||
ReferencedContainer = "container:Nostash.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "941B03AE296FA90400CA291E"
|
||||
BuildableName = "Nostash.app"
|
||||
BlueprintName = "Nostash (iOS)"
|
||||
ReferencedContainer = "container:Nostash.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
17
README.md
17
README.md
@@ -1,21 +1,28 @@
|
||||
# Nostash
|
||||
|
||||
This is a [NIP-07][nip07] compatible extension for signing [Nostr][Nostr] events.
|
||||
Nostash is a [NIP-07][nip07] compatible Safari extension for signing [Nostr][Nostr] events that works on iPhone, iPad, and Mac.
|
||||
|
||||
## Features
|
||||
|
||||
- Login with Nostr (`getPublicKey`).
|
||||
- Post Nostr event (`signEvent`).
|
||||
- Encrypted direct messages (`nip04.encrypt` and `nip04.decrypt`).
|
||||
- Encryption and decryption (`nip44.encrypt`, `nip44.decrypt`, `nip04.encrypt`, `nip04.decrypt`).
|
||||
- Multiple profiles.
|
||||
|
||||
## Requirements
|
||||
|
||||
- iOS 18+
|
||||
- iPadOS 18+
|
||||
- macOS 15+
|
||||
- Safari 18+
|
||||
|
||||
## Installation
|
||||
|
||||
Available on [TestFlight](https://testflight.apple.com/join/8TFMZbMs).
|
||||
Download on the [App Store](https://apps.apple.com/app/nostash/id6744309333) for stable releases and [TestFlight](https://testflight.apple.com/join/8TFMZbMs) for beta releases.
|
||||
|
||||
<p align="center">
|
||||
<a href="https://testflight.apple.com/join/8TFMZbMs">
|
||||
<img src="/extras/app-store-badge-small.svg" alt="TestFlight Download" />
|
||||
<a href="https://apps.apple.com/us/app/nostash/id6744309333">
|
||||
<img src="/extras/app-store-badge-small.svg" alt="App Store Download" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
@@ -9,51 +9,54 @@ import SwiftUI
|
||||
|
||||
struct MainView: View {
|
||||
var body: some View {
|
||||
VStack {
|
||||
NavigationStack {
|
||||
Image("bigicon").resizable().frame(width: 150.0, height: 150.0)
|
||||
Text("Nostash").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: Mac") {
|
||||
GettingStartedMac()
|
||||
}
|
||||
#if macOS
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Tips and Tricks") {
|
||||
TipsAndTricks()
|
||||
}
|
||||
#if macOS
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
NavigationStack {
|
||||
Image("bigicon").resizable().frame(width: 150.0, height: 150.0)
|
||||
Text("Nostash").font(.title)
|
||||
Text("A Safari Nostr Extension").font(.title2)
|
||||
NavigationLink("Privacy Policy") {
|
||||
PrivacyPolicyView()
|
||||
}
|
||||
#if os(macOS)
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Getting Started: iPhone") {
|
||||
GettingStartediPhone()
|
||||
}
|
||||
#if os(macOS)
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Getting Started: iPad") {
|
||||
GettingStartediPad()
|
||||
}
|
||||
#if os(macOS)
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Getting Started: Mac") {
|
||||
GettingStartedMac()
|
||||
}
|
||||
#if os(macOS)
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
|
||||
NavigationLink("Tips and Tricks") {
|
||||
TipsAndTricks()
|
||||
}
|
||||
#if os(macOS)
|
||||
.buttonStyle(.link)
|
||||
#endif
|
||||
.padding(.all, 3.0)
|
||||
}
|
||||
.toolbar {
|
||||
// There is a macOS bug where the back button overlaps the title in the navigation bar.
|
||||
// Adding an empty Text element fixes the issue apparently.
|
||||
Text("")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,11 +10,11 @@ import SwiftUI
|
||||
@main
|
||||
struct NostashApp: App {
|
||||
var body: some Scene {
|
||||
WindowGroup("Nostash") {
|
||||
WindowGroup {
|
||||
MainView()
|
||||
}
|
||||
#if macOS
|
||||
#if os(macOS)
|
||||
.defaultSize(width: 400, height: 500)
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
nip04,
|
||||
nip19,
|
||||
nip44,
|
||||
generateSecretKey,
|
||||
getPublicKey,
|
||||
finalizeEvent,
|
||||
@@ -57,6 +58,8 @@ browser.runtime.onMessage.addListener((message, _sender, sendResponse) => {
|
||||
case 'signEvent':
|
||||
case 'nip04.encrypt':
|
||||
case 'nip04.decrypt':
|
||||
case 'nip44.encrypt':
|
||||
case 'nip44.decrypt':
|
||||
case 'getRelays':
|
||||
validations[uuid] = sendResponse;
|
||||
ask(uuid, message);
|
||||
@@ -153,6 +156,12 @@ function complete({ payload, origKind, event, remember, host }) {
|
||||
case 'nip04.decrypt':
|
||||
nip04Decrypt(event).then(e => sendResponse(e));
|
||||
break;
|
||||
case 'nip44.encrypt':
|
||||
nip44Encrypt(event).then(e => sendResponse(e));
|
||||
break;
|
||||
case 'nip44.decrypt':
|
||||
nip44Decrypt(event).then(e => sendResponse(e));
|
||||
break;
|
||||
case 'getRelays':
|
||||
getRelays().then(e => sendResponse(e));
|
||||
break;
|
||||
@@ -237,6 +246,18 @@ async function nip04Decrypt({ pubKey, cipherText }) {
|
||||
return nip04.decrypt(privKey, pubKey, cipherText);
|
||||
}
|
||||
|
||||
async function nip44Encrypt({ pubKey, plainText }) {
|
||||
let privKey = await getPrivKey();
|
||||
let conversationKey = nip44.getConversationKey(privKey, pubKey)
|
||||
return nip44.encrypt(plainText, conversationKey);
|
||||
}
|
||||
|
||||
async function nip44Decrypt({ pubKey, cipherText }) {
|
||||
let privKey = await getPrivKey();
|
||||
let conversationKey = nip44.getConversationKey(privKey, pubKey)
|
||||
return nip44.decrypt(cipherText, conversationKey);
|
||||
}
|
||||
|
||||
async function getRelays() {
|
||||
let profile = await currentProfile();
|
||||
let relays = profile.relays;
|
||||
|
||||
@@ -9,6 +9,8 @@ window.addEventListener('message', async message => {
|
||||
'getRelays',
|
||||
'nip04.encrypt',
|
||||
'nip04.decrypt',
|
||||
'nip44.encrypt',
|
||||
'nip44.decrypt',
|
||||
];
|
||||
let { kind, reqId, payload } = message.data;
|
||||
if (!validEvents.includes(kind)) return;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"default_locale": "en",
|
||||
"name": "__MSG_extension_name__",
|
||||
"description": "__MSG_extension_description__",
|
||||
"version": "2.0.0",
|
||||
"version": "2.1.0",
|
||||
"icons": {
|
||||
"48": "images/icon-48.png",
|
||||
"96": "images/icon-96.png",
|
||||
@@ -18,7 +18,8 @@
|
||||
"content_scripts": [
|
||||
{
|
||||
"js": ["content.build.js"],
|
||||
"matches": ["<all_urls>"]
|
||||
"matches": ["<all_urls>"],
|
||||
"run_at": "document_end"
|
||||
}
|
||||
],
|
||||
"action": {
|
||||
@@ -57,7 +58,7 @@
|
||||
},
|
||||
"browser_specific_settings": {
|
||||
"safari": {
|
||||
"strict_min_version": "15.4"
|
||||
"strict_min_version": "18.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,22 @@ window.nostr = {
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
nip44: {
|
||||
async encrypt(pubKey, plainText) {
|
||||
return await window.nostr.broadcast('nip44.encrypt', {
|
||||
pubKey,
|
||||
plainText,
|
||||
});
|
||||
},
|
||||
|
||||
async decrypt(pubKey, cipherText) {
|
||||
return await window.nostr.broadcast('nip44.decrypt', {
|
||||
pubKey,
|
||||
cipherText,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
window.addEventListener('message', message => {
|
||||
@@ -51,6 +67,8 @@ window.addEventListener('message', message => {
|
||||
'getRelays',
|
||||
'nip04.encrypt',
|
||||
'nip04.decrypt',
|
||||
'nip44.encrypt',
|
||||
'nip44.decrypt',
|
||||
].map(e => `return_${e}`);
|
||||
let { kind, reqId, payload } = message.data;
|
||||
|
||||
|
||||
@@ -71,9 +71,13 @@ Alpine.data('permission', () => ({
|
||||
case 'getRelays':
|
||||
return 'Read relay list';
|
||||
case 'nip04.encrypt':
|
||||
return 'Encrypt private message';
|
||||
return 'Encrypt private message (NIP-04)';
|
||||
case 'nip04.decrypt':
|
||||
return 'Decrypt private message';
|
||||
return 'Decrypt private message (NIP-04)';
|
||||
case 'nip44.encrypt':
|
||||
return 'Encrypt private message (NIP-44)';
|
||||
case 'nip44.decrypt':
|
||||
return 'Decrypt private message (NIP-44)';
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4,64 +4,157 @@ export const RECOMMENDED_RELAYS = [
|
||||
new URL('wss://relay.damus.io'),
|
||||
new URL('wss://relay.snort.social'),
|
||||
new URL('wss://nos.lol'),
|
||||
new URL('wss://brb.io'),
|
||||
new URL('wss://relay.primal.net'),
|
||||
new URL('wss://relay.nostr.band'),
|
||||
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'],
|
||||
[0, 'User Metadata', 'https://github.com/nostr-protocol/nips/blob/master/01.md'],
|
||||
[1, 'Short Text Note', 'https://github.com/nostr-protocol/nips/blob/master/10.md'],
|
||||
[2, 'Recommend Relay', null],
|
||||
[3, 'Follows', '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'],
|
||||
[5, 'Event Deletion Request', 'https://github.com/nostr-protocol/nips/blob/master/09.md'],
|
||||
[6, 'Repost', 'https://github.com/nostr-protocol/nips/blob/master/18.md'],
|
||||
[7, 'Reaction', 'https://github.com/nostr-protocol/nips/blob/master/25.md'],
|
||||
[8, 'Badge Award', 'https://github.com/nostr-protocol/nips/blob/master/58.md'],
|
||||
[9, 'Chat Message', 'https://github.com/nostr-protocol/nips/blob/master/C7.md'],
|
||||
[10, 'Group Chat Threaded Reply', null],
|
||||
[11, 'Thread', 'https://github.com/nostr-protocol/nips/blob/master/7D.md'],
|
||||
[12, 'Group Thread Reply', null],
|
||||
[13, 'Seal', 'https://github.com/nostr-protocol/nips/blob/master/59.md'],
|
||||
[14, 'Direct Message', 'https://github.com/nostr-protocol/nips/blob/master/17.md'],
|
||||
[15, 'File Message', 'https://github.com/nostr-protocol/nips/blob/master/17.md'],
|
||||
[16, 'Generic Repost', 'https://github.com/nostr-protocol/nips/blob/master/18.md'],
|
||||
[17, 'Reaction to a website', 'https://github.com/nostr-protocol/nips/blob/master/25.md'],
|
||||
[20, 'Picture', 'https://github.com/nostr-protocol/nips/blob/master/68.md'],
|
||||
[21, 'Video Event', 'https://github.com/nostr-protocol/nips/blob/master/71.md'],
|
||||
[22, 'Short-form Portrait Video Event', 'https://github.com/nostr-protocol/nips/blob/master/71.md'],
|
||||
[30, 'internal reference', 'https://wikistr.com/nkbip-03*fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1'],
|
||||
[31, 'external web reference', 'https://wikistr.com/nkbip-03*fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1'],
|
||||
[32, 'hardcopy reference', 'https://wikistr.com/nkbip-03*fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1'],
|
||||
[33, 'prompt reference', 'https://wikistr.com/nkbip-03*fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1'],
|
||||
[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'],
|
||||
[62, 'Request to Vanish', 'https://github.com/nostr-protocol/nips/blob/master/62.md'],
|
||||
[64, 'Chess (PGN)', 'https://github.com/nostr-protocol/nips/blob/master/64.md'],
|
||||
[818, 'Merge Requests', 'https://github.com/nostr-protocol/nips/blob/master/54.md'],
|
||||
[1018, 'Poll Response', 'https://github.com/nostr-protocol/nips/blob/master/88.md'],
|
||||
[1021, 'Bid', 'https://github.com/nostr-protocol/nips/blob/master/15.md'],
|
||||
[1022, 'Bid confirmation', 'https://github.com/nostr-protocol/nips/blob/master/15.md'],
|
||||
[1040, 'OpenTimestamps', 'https://github.com/nostr-protocol/nips/blob/master/03.md'],
|
||||
[1059, 'Gift Wrap', 'https://github.com/nostr-protocol/nips/blob/master/59.md'],
|
||||
[1063, 'File Metadata', 'https://github.com/nostr-protocol/nips/blob/master/94.md'],
|
||||
[1068, 'Poll', 'https://github.com/nostr-protocol/nips/blob/master/88.md'],
|
||||
[1111, 'Comment', 'https://github.com/nostr-protocol/nips/blob/master/22.md'],
|
||||
[1311, 'Live Chat Message', 'https://github.com/nostr-protocol/nips/blob/master/53.md'],
|
||||
[1337, 'Code Snippet', 'https://github.com/nostr-protocol/nips/blob/master/C0.md'],
|
||||
[1617, 'Patches', 'https://github.com/nostr-protocol/nips/blob/master/34.md'],
|
||||
[1621, 'Issues', 'https://github.com/nostr-protocol/nips/blob/master/34.md'],
|
||||
[1622, 'Git Replies (deprecated)', 'https://github.com/nostr-protocol/nips/blob/master/34.md'],
|
||||
['1630-1633', 'Status', 'https://github.com/nostr-protocol/nips/blob/master/34.md'],
|
||||
[1971, 'Problem Tracker', 'https://github.com/nostrocket/NIPS/blob/main/Problems.md'],
|
||||
[1984, 'Reporting', 'https://github.com/nostr-protocol/nips/blob/master/56.md'],
|
||||
[1985, 'Label', 'https://github.com/nostr-protocol/nips/blob/master/32.md'],
|
||||
[1986, 'Relay reviews', null],
|
||||
[1987, 'AI Embeddings / Vector lists', 'https://wikistr.com/nkbip-02*fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1'],
|
||||
[2003, 'Torrent', 'https://github.com/nostr-protocol/nips/blob/master/35.md'],
|
||||
[2004, 'Torrent Comment', 'https://github.com/nostr-protocol/nips/blob/master/35.md'],
|
||||
[2022, 'Coinjoin Pool', 'https://gitlab.com/1440000bytes/joinstr/-/blob/main/NIP.md'],
|
||||
[4550, 'Community Post Approval', 'https://github.com/nostr-protocol/nips/blob/master/72.md'],
|
||||
['5000-5999', 'Job Request', 'https://github.com/nostr-protocol/nips/blob/master/90.md'],
|
||||
['6000-6999', 'Job Result', 'https://github.com/nostr-protocol/nips/blob/master/90.md'],
|
||||
[7000, 'Job Feedback', 'https://github.com/nostr-protocol/nips/blob/master/90.md'],
|
||||
[7374, 'Reserved Cashu Wallet Tokens', 'https://github.com/nostr-protocol/nips/blob/master/60.md'],
|
||||
[7375, 'Cashu Wallet Tokens', 'https://github.com/nostr-protocol/nips/blob/master/60.md'],
|
||||
[7376, 'Cashu Wallet History', 'https://github.com/nostr-protocol/nips/blob/master/60.md'],
|
||||
['9000-9030', 'Group Control Events', 'https://github.com/nostr-protocol/nips/blob/master/29.md'],
|
||||
[9041, 'Zap Goal', 'https://github.com/nostr-protocol/nips/blob/master/75.md'],
|
||||
[9321, 'Nutzap', 'https://github.com/nostr-protocol/nips/blob/master/61.md'],
|
||||
[9467, 'Tidal login', 'https://wikistr.com/tidal-nostr'],
|
||||
[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'],
|
||||
[10000, 'Mute List', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10001, 'Pin List', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[9802, 'Highlights', 'https://github.com/nostr-protocol/nips/blob/master/84.md'],
|
||||
[10000, 'Mute list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10001, 'Pin list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10002, 'Relay List Metadata', 'https://github.com/nostr-protocol/nips/blob/master/65.md'],
|
||||
[10003, 'Bookmark list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10004, 'Communities list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10005, 'Public chats list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10006, 'Blocked relays list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10007, 'Search relays list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10009, 'User groups', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10012, 'Favorite relays list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10013, 'Private event relay list', 'https://github.com/nostr-protocol/nips/blob/master/37.md'],
|
||||
[10015, 'Interests list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10019, 'Nutzap Mint Recommendation', 'https://github.com/nostr-protocol/nips/blob/master/61.md'],
|
||||
[10020, 'Media follows', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10030, 'User emoji list', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10050, 'Relay list to receive DMs', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[10063, 'User server list', 'https://github.com/hzrd149/blossom'],
|
||||
[10096, 'File storage server list', 'https://github.com/nostr-protocol/nips/blob/master/96.md'],
|
||||
[10166, 'Relay Monitor Announcement', 'https://github.com/nostr-protocol/nips/blob/master/66.md'],
|
||||
[13194, 'Wallet Info', 'https://github.com/nostr-protocol/nips/blob/master/47.md'],
|
||||
[17375, 'Cashu Wallet Event', 'https://github.com/nostr-protocol/nips/blob/master/60.md'],
|
||||
[21000, 'Lightning Pub RPC', 'https://github.com/shocknet/Lightning.Pub/blob/master/proto/autogenerated/client.md'],
|
||||
[22242, 'Client Authentication', 'https://github.com/nostr-protocol/nips/blob/master/42.md'],
|
||||
[23194, 'Wallet Request', 'https://github.com/nostr-protocol/nips/blob/master/47.md'],
|
||||
[23195, 'Wallet Response', 'https://github.com/nostr-protocol/nips/blob/master/47.md'],
|
||||
[24133, 'Nostr Connect', 'https://github.com/nostr-protocol/nips/blob/master/46.md'],
|
||||
[24242, 'Blobs stored on mediaservers', 'https://github.com/hzrd149/blossom'],
|
||||
[27235, 'HTTP Auth', 'https://github.com/nostr-protocol/nips/blob/master/98.md'],
|
||||
[30000, 'Categorized People List', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30001, 'Categorized Bookmark List', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30000, 'Follow sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30001, 'Generic lists', null],
|
||||
[30002, 'Relay sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30003, 'Bookmark sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30004, 'Curation sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30005, 'Video sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30007, 'Kind mute sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30008, 'Profile Badges', 'https://github.com/nostr-protocol/nips/blob/master/58.md'],
|
||||
[30009, 'Badge Definition', 'https://github.com/nostr-protocol/nips/blob/master/58.md'],
|
||||
[30015, 'Interest sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30017, 'Create or update a stall', 'https://github.com/nostr-protocol/nips/blob/master/15.md'],
|
||||
[30018, 'Create or update a product', 'https://github.com/nostr-protocol/nips/blob/master/15.md'],
|
||||
[30023, 'Long-Form Content', 'https://github.com/nostr-protocol/nips/blob/master/23.md'],
|
||||
[30019, 'Marketplace UI/UX', 'https://github.com/nostr-protocol/nips/blob/master/15.md'],
|
||||
[30020, 'Product sold as an auction', 'https://github.com/nostr-protocol/nips/blob/master/15.md'],
|
||||
[30023, 'Long-form Content', 'https://github.com/nostr-protocol/nips/blob/master/23.md'],
|
||||
[30024, 'Draft Long-form Content', 'https://github.com/nostr-protocol/nips/blob/master/23.md'],
|
||||
[30030, 'Emoji sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30040, 'Curated Publication Index', 'https://wikistr.com/nkbip-01*fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1'],
|
||||
[30041, 'Curated Publication Content', 'https://wikistr.com/nkbip-01*fd208ee8c8f283780a9552896e4823cc9dc6bfd442063889577106940fd927c1'],
|
||||
[30063, 'Release artifact sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30078, 'Application-specific Data', 'https://github.com/nostr-protocol/nips/blob/master/78.md'],
|
||||
[30166, 'Relay Discovery', 'https://github.com/nostr-protocol/nips/blob/master/66.md'],
|
||||
[30267, 'App curation sets', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[30311, 'Live Event', 'https://github.com/nostr-protocol/nips/blob/master/53.md'],
|
||||
[30315, 'User Statuses', 'https://github.com/nostr-protocol/nips/blob/master/38.md'],
|
||||
[30388, 'Slide Set', 'https://cornychat.com/datatypes#kind30388slideset'],
|
||||
[30402, 'Classified Listing', 'https://github.com/nostr-protocol/nips/blob/master/99.md'],
|
||||
[30403, 'Draft Classified Listing', 'https://github.com/nostr-protocol/nips/blob/master/99.md'],
|
||||
[30617, 'Repository announcements', 'https://github.com/nostr-protocol/nips/blob/master/34.md'],
|
||||
[30618, 'Repository state announcements', 'https://github.com/nostr-protocol/nips/blob/master/34.md'],
|
||||
[30818, 'Wiki article', 'https://github.com/nostr-protocol/nips/blob/master/54.md'],
|
||||
[30819, 'Redirects', 'https://github.com/nostr-protocol/nips/blob/master/54.md'],
|
||||
[31234, 'Draft Event', 'https://github.com/nostr-protocol/nips/blob/master/37.md'],
|
||||
[31388, 'Link Set', 'https://cornychat.com/datatypes#kind31388linkset'],
|
||||
[31890, 'Feed', 'https://wikifreedia.xyz/cip-01/'],
|
||||
[31922, 'Date-Based Calendar Event', 'https://github.com/nostr-protocol/nips/blob/master/52.md'],
|
||||
[31923, 'Time-Based Calendar Event', 'https://github.com/nostr-protocol/nips/blob/master/52.md'],
|
||||
[31924, 'Calendar', 'https://github.com/nostr-protocol/nips/blob/master/52.md'],
|
||||
[31925, 'Calendar Event RSVP', 'https://github.com/nostr-protocol/nips/blob/master/52.md'],
|
||||
[31989, 'Handler recommendation', 'https://github.com/nostr-protocol/nips/blob/master/89.md'],
|
||||
[31990, 'Handler information', 'https://github.com/nostr-protocol/nips/blob/master/89.md'],
|
||||
[32267, 'Software Application', null],
|
||||
[34550, 'Community Definition', 'https://github.com/nostr-protocol/nips/blob/master/72.md'],
|
||||
[38383, 'Peer-to-peer Order events', 'https://github.com/nostr-protocol/nips/blob/master/69.md'],
|
||||
['39000-9', 'Group metadata events', 'https://github.com/nostr-protocol/nips/blob/master/29.md'],
|
||||
[39089, 'Starter packs', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[39092, 'Media starter packs', 'https://github.com/nostr-protocol/nips/blob/master/51.md'],
|
||||
[39701, 'Web bookmarks', 'https://github.com/nostr-protocol/nips/blob/master/B0.md'],
|
||||
];
|
||||
|
||||
export async function initialize() {
|
||||
@@ -257,9 +350,13 @@ export function humanPermission(p) {
|
||||
case 'getRelays':
|
||||
return 'Read relay list';
|
||||
case 'nip04.encrypt':
|
||||
return 'Encrypt private message';
|
||||
return 'Encrypt private message (NIP-04)';
|
||||
case 'nip04.decrypt':
|
||||
return 'Decrypt private message';
|
||||
return 'Decrypt private message (NIP-04)';
|
||||
case 'nip44.encrypt':
|
||||
return 'Encrypt private message (NIP-44)';
|
||||
case 'nip44.decrypt':
|
||||
return 'Decrypt private message (NIP-44)';
|
||||
default:
|
||||
return 'Unknown';
|
||||
}
|
||||
|
||||
617
package-lock.json
generated
617
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nostash",
|
||||
"version": "1.2.0",
|
||||
"version": "2.1.0",
|
||||
"description": "",
|
||||
"source": [
|
||||
"background.js",
|
||||
@@ -14,8 +14,8 @@
|
||||
"watch-tailwind": "tailwindcss -i './Shared (Extension)/Resources/options.css' -o './Shared (Extension)/Resources/options.build.css' --watch",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"author": "Terry Yiu (https://tyiu.xyz)",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alpinejs/csp": "^3.14.1",
|
||||
"alpinejs": "^3.14.1",
|
||||
|
||||
Reference in New Issue
Block a user