diff --git a/Cargo.lock b/Cargo.lock index b13925c..1bc0190 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -683,6 +683,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "keynectr" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "argon2", + "base64", + "getrandom 0.2.17", + "hex", + "nostr", + "nostr-sdk", + "rpassword", + "serde", + "serde_json", + "tokio", + "uuid", + "zeroize", +] + [[package]] name = "libc" version = "0.2.189" @@ -781,25 +800,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "nostr-manager-backend" -version = "0.1.0" -dependencies = [ - "aes-gcm", - "argon2", - "base64", - "getrandom 0.2.17", - "hex", - "nostr", - "nostr-sdk", - "rpassword", - "serde", - "serde_json", - "tokio", - "uuid", - "zeroize", -] - [[package]] name = "nostr-relay-pool" version = "0.40.1" diff --git a/Cargo.toml b/Cargo.toml index b046b6e..e7b4fd0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "nostr-manager-backend" +name = "keynectr" version = "0.1.0" edition = "2021" diff --git a/frontend/electron/main.ts b/frontend/electron/main.ts index 199f4cf..d4aa32d 100644 --- a/frontend/electron/main.ts +++ b/frontend/electron/main.ts @@ -76,10 +76,10 @@ let nextId = 1; function resolveBackendPath(): string { if (app.isPackaged) { - return path.join(process.resourcesPath, 'nostr-manager-backend'); + return path.join(process.resourcesPath, 'keynectr'); } // Development: the crate builds to /target/release. - return path.join(app.getAppPath(), '..', 'target', 'release', 'nostr-manager-backend'); + return path.join(app.getAppPath(), '..', 'target', 'release', 'keynectr'); } function startBackend(): void { diff --git a/frontend/index.html b/frontend/index.html index 1bdbfe3..8b4c4c3 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,7 +3,7 @@ - Nostr Feed Manager + Keynectr
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 88dc105..adf8c5c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,11 +1,11 @@ { - "name": "nost-feed-manager", + "name": "keynectr", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "nost-feed-manager", + "name": "keynectr", "version": "0.1.0", "dependencies": { "react": "^18.3.1", diff --git a/frontend/package.json b/frontend/package.json index c12dec4..62a96bc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,5 +1,6 @@ { - "name": "nost-feed-manager", + "name": "keynectr", + "productName": "Keynectr", "productName": "Nostr Feed Manager", "version": "0.1.0", "description": "A friendly Linux desktop app for managing Nostr profiles and publishing text notes.", @@ -58,8 +59,8 @@ ], "extraResources": [ { - "from": "../target/release/nostr-manager-backend", - "to": "nostr-manager-backend" + "from": "../target/release/keynectr", + "to": "keynectr" } ], "linux": { @@ -67,7 +68,7 @@ "dir" ], "category": "Network", - "executableName": "nost-feed-manager" + "executableName": "keynectr" } } } diff --git a/frontend/src/test/SettingsScreen.test.tsx b/frontend/src/test/SettingsScreen.test.tsx index edadae8..0605e84 100644 --- a/frontend/src/test/SettingsScreen.test.tsx +++ b/frontend/src/test/SettingsScreen.test.tsx @@ -11,7 +11,7 @@ describe('SettingsScreen', () => { renderWithApp(); expect( - await screen.findByText('/home/user/.local/share/nost-feed-manager/profiles_vault.json'), + await screen.findByText('/home/user/.local/share/keynectr/profiles_vault.json'), ).toBeInTheDocument(); expect(screen.getByText('Storage is not encrypted')).toBeInTheDocument(); }); diff --git a/frontend/src/test/apiMock.ts b/frontend/src/test/apiMock.ts index 79efe3e..c5de46c 100644 --- a/frontend/src/test/apiMock.ts +++ b/frontend/src/test/apiMock.ts @@ -35,8 +35,8 @@ export function makeState(overrides?: Partial): AppState { }; return { version: '0.1.0', - vault_path: '/home/user/.local/share/nost-feed-manager/profiles_vault.json', - settings_path: '/home/user/.local/share/nost-feed-manager/settings.json', + vault_path: '/home/user/.local/share/keynectr/profiles_vault.json', + settings_path: '/home/user/.local/share/keynectr/settings.json', encrypted_storage: false, vault_locked: false, migrated_from: null, @@ -188,7 +188,7 @@ export function createApiMock(initial: AppState = makeState()): ApiMock { }, ), backupNow: vi.fn(async () => ({ - backup_path: '/home/user/.local/share/nost-feed-manager/profiles_vault.json.backup-1', + backup_path: '/home/user/.local/share/keynectr/profiles_vault.json.backup-1', })), setVaultPassword: vi.fn(async () => ({ ...state, diff --git a/src/ipc.rs b/src/ipc.rs index 84680a4..e51c80c 100644 --- a/src/ipc.rs +++ b/src/ipc.rs @@ -151,7 +151,7 @@ pub struct ReplyEnvelope { /// Run the JSON-lines IPC server on stdin/stdout. /// -/// The Electron main process spawns `nostr-manager-backend serve` and +/// The Electron main process spawns `keynectr serve` and /// exchanges one JSON object per line. Requests are processed sequentially so /// the shared state never sees concurrent mutations. pub async fn serve() -> Result<(), AppError> { diff --git a/src/lib.rs b/src/lib.rs index fd7547f..b489c08 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,4 +14,7 @@ pub mod vault; pub use errors::AppError; /// Stable application-data directory name. -pub const APP_DIR_NAME: &str = "nost-feed-manager"; +pub const APP_DIR_NAME: &str = "keynectr"; + +/// Previous application-data directory name, migrated automatically on first use. +pub const LEGACY_APP_DIR_NAME: &str = "nost-feed-manager"; diff --git a/src/main.rs b/src/main.rs index 42b369d..92cf91a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,18 @@ use std::process::ExitCode; use std::sync::{Arc, Mutex}; -use nostr_manager_backend::app::App; -use nostr_manager_backend::errors::{AppError, ErrorKind}; -use nostr_manager_backend::ipc; -use nostr_manager_backend::profiles::{self, ProfileSummary}; -use nostr_manager_backend::publish; -use nostr_manager_backend::relays; -use nostr_manager_backend::settings::Theme; -use nostr_manager_backend::signer::Signer; -use nostr_manager_backend::vault::{self, StoredProfile, Vault}; +use keynectr::app::App; +use keynectr::errors::{AppError, ErrorKind}; +use keynectr::ipc; +use keynectr::profiles::{self, ProfileSummary}; +use keynectr::publish; +use keynectr::relays; +use keynectr::settings::Theme; +use keynectr::signer::Signer; +use keynectr::vault::{self, StoredProfile, Vault}; const USAGE: &str = "\ -nostr-manager-backend [args...] +keynectr [args...] Commands: create