diff --git a/docs/nostr-event-schemas.md b/docs/nostr-event-schemas.md index d0b98b4c..02074863 100644 --- a/docs/nostr-event-schemas.md +++ b/docs/nostr-event-schemas.md @@ -93,6 +93,17 @@ client can republish exactly what was signed, including the original payload actually changes; this avoids accidental drift in dedupe tags or timestamps. +### Default client bootstrap + +[`js/nostr/defaultClient.js`](../js/nostr/defaultClient.js) builds the shared +`nostrClient` instance, registers it with the runtime via +`registerNostrClient`, and exposes helpers like +`requestDefaultExtensionPermissions`. Import the singleton or permission helper +from this module (or from the `js/nostr.js` barrel) whenever you need to run a +NIP-07 handshake. New NIP features should reuse this bootstrapper instead of +creating bespoke clients so permission caching and relay wiring stay +consistent.【F:js/nostr/defaultClient.js†L1-L25】 + ## Event catalogue | Note | Kind (default) | Tags | Content format | diff --git a/js/adminListStore.js b/js/adminListStore.js index 8e47e41b..edec5d88 100644 --- a/js/adminListStore.js +++ b/js/adminListStore.js @@ -9,10 +9,8 @@ import { ADMIN_COMMUNITY_BLACKLIST_PREFIX, isDevMode, } from "./config.js"; -import { - getRegisteredNostrClient, - requestDefaultExtensionPermissions, -} from "./nostrClientRegistry.js"; +import { getRegisteredNostrClient } from "./nostrClientRegistry.js"; +import { requestDefaultExtensionPermissions } from "./nostr/defaultClient.js"; import { devLogger, userLogger } from "./utils/logger.js"; import { buildAdminListEvent, diff --git a/js/nostr.js b/js/nostr.js index 1e080e33..8d1a7784 100644 --- a/js/nostr.js +++ b/js/nostr.js @@ -1,39 +1,15 @@ // js/nostr.js import { - NostrClient, - getActiveSigner, - setActiveSigner, - clearActiveSigner, - resolveActiveSigner, - shouldRequestExtensionPermissions, -} from "./nostr/client.js"; -import { - DEFAULT_NIP07_ENCRYPTION_METHODS, - DEFAULT_NIP07_PERMISSION_METHODS, -} from "./nostr/nip07Permissions.js"; + nostrClient, + requestDefaultExtensionPermissions, +} from "./nostr/defaultClient.js"; import { updateWatchHistoryList as updateWatchHistoryListWithManager, removeWatchHistoryItem as removeWatchHistoryItemWithManager, } from "./nostr/watchHistory.js"; -import { - registerNostrClient, - requestDefaultExtensionPermissions as requestRegisteredPermissions, -} from "./nostrClientRegistry.js"; -export const nostrClient = new NostrClient(); - -registerNostrClient(nostrClient, { - requestPermissions: ( - methods = DEFAULT_NIP07_PERMISSION_METHODS, - ) => nostrClient.ensureExtensionPermissions(methods), -}); - -export function requestDefaultExtensionPermissions( - methods = DEFAULT_NIP07_PERMISSION_METHODS, -) { - return requestRegisteredPermissions(methods); -} +export { nostrClient, requestDefaultExtensionPermissions }; export const recordVideoView = (...args) => nostrClient.recordVideoView(...args); @@ -74,7 +50,10 @@ export { resolveActiveSigner, shouldRequestExtensionPermissions, } from "./nostr/client.js"; -export { DEFAULT_NIP07_ENCRYPTION_METHODS, DEFAULT_NIP07_PERMISSION_METHODS } from "./nostr/nip07Permissions.js"; +export { + DEFAULT_NIP07_ENCRYPTION_METHODS, + DEFAULT_NIP07_PERMISSION_METHODS, +} from "./nostr/nip07Permissions.js"; export { buildNip71MetadataTags, buildNip71VideoEvent, diff --git a/js/nostr/defaultClient.js b/js/nostr/defaultClient.js new file mode 100644 index 00000000..13363919 --- /dev/null +++ b/js/nostr/defaultClient.js @@ -0,0 +1,31 @@ +// js/nostr/defaultClient.js + +import { NostrClient } from "./client.js"; +import { + DEFAULT_NIP07_ENCRYPTION_METHODS, + DEFAULT_NIP07_PERMISSION_METHODS, +} from "./nip07Permissions.js"; +import { + registerNostrClient, + requestDefaultExtensionPermissions as requestRegisteredPermissions, +} from "../nostrClientRegistry.js"; + +export const nostrClient = new NostrClient(); + +registerNostrClient(nostrClient, { + requestPermissions: ( + methods = DEFAULT_NIP07_PERMISSION_METHODS, + ) => nostrClient.ensureExtensionPermissions(methods), +}); + +export function requestDefaultExtensionPermissions( + methods = DEFAULT_NIP07_PERMISSION_METHODS, +) { + return requestRegisteredPermissions(methods); +} + +export { + NostrClient, + DEFAULT_NIP07_ENCRYPTION_METHODS, + DEFAULT_NIP07_PERMISSION_METHODS, +}; diff --git a/js/relayManager.js b/js/relayManager.js index ccc82ea4..3ce4b582 100644 --- a/js/relayManager.js +++ b/js/relayManager.js @@ -1,8 +1,10 @@ import { isDevMode } from "./config.js"; import { DEFAULT_RELAY_URLS } from "./nostr/toolkit.js"; -import { nostrClient } from "./nostr.js"; +import { + nostrClient, + requestDefaultExtensionPermissions, +} from "./nostr.js"; import { getActiveSigner } from "./nostr/index.js"; -import { requestDefaultExtensionPermissions } from "./nostrClientRegistry.js"; import { buildRelayListEvent } from "./nostrEventSchemas.js"; import { devLogger, userLogger } from "./utils/logger.js"; import { diff --git a/js/services/authService.js b/js/services/authService.js index 0132f204..58ad6202 100644 --- a/js/services/authService.js +++ b/js/services/authService.js @@ -7,7 +7,7 @@ import { getCurrentUserNpub, } from "../state/appState.js"; import { userLogger } from "../utils/logger.js"; -import { requestDefaultExtensionPermissions } from "../nostrClientRegistry.js"; +import { requestDefaultExtensionPermissions } from "../nostr/defaultClient.js"; import { getSavedProfiles, getActiveProfilePubkey, diff --git a/js/subscriptions.js b/js/subscriptions.js index 92f80d3a..20bd18fb 100644 --- a/js/subscriptions.js +++ b/js/subscriptions.js @@ -1,12 +1,14 @@ // js/subscriptions.js -import { nostrClient } from "./nostr.js"; +import { + nostrClient, + requestDefaultExtensionPermissions, +} from "./nostr.js"; import { getActiveSigner, convertEventToVideo as sharedConvertEventToVideo, listVideoViewEvents, subscribeVideoViewEvents, } from "./nostr/index.js"; -import { requestDefaultExtensionPermissions } from "./nostrClientRegistry.js"; import { DEFAULT_RELAY_URLS } from "./nostr/toolkit.js"; import { buildSubscriptionListEvent, diff --git a/js/userBlocks.js b/js/userBlocks.js index c0b70f54..02d96fc1 100644 --- a/js/userBlocks.js +++ b/js/userBlocks.js @@ -1,7 +1,9 @@ // js/userBlocks.js -import { nostrClient } from "./nostr.js"; +import { + nostrClient, + requestDefaultExtensionPermissions, +} from "./nostr.js"; import { getActiveSigner } from "./nostr/index.js"; -import { requestDefaultExtensionPermissions } from "./nostrClientRegistry.js"; import { buildBlockListEvent, BLOCK_LIST_IDENTIFIER } from "./nostrEventSchemas.js"; import { userLogger } from "./utils/logger.js"; import { diff --git a/js/watchHistoryService.js b/js/watchHistoryService.js index 54ced6a5..25ce5709 100644 --- a/js/watchHistoryService.js +++ b/js/watchHistoryService.js @@ -1,7 +1,9 @@ // js/watchHistoryService.js -import { nostrClient } from "./nostr.js"; -import { requestDefaultExtensionPermissions } from "./nostrClientRegistry.js"; +import { + nostrClient, + requestDefaultExtensionPermissions, +} from "./nostr.js"; import { normalizePointerInput, pointerKey,