ns-auth-sdk 1.14.0 → 1.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cjs-CSUAVztq.cjs → browser-index.cjs} +5476 -296
- package/dist/browser-index.cjs.map +1 -0
- package/dist/browser-index.d.cts +1998 -0
- package/dist/browser-index.d.cts.map +1 -0
- package/dist/browser-index.d.mts +1998 -0
- package/dist/browser-index.d.mts.map +1 -0
- package/dist/{cjs-sm5h7qxv.mjs → browser-index.mjs} +5169 -69
- package/dist/browser-index.mjs.map +1 -0
- package/dist/{group-coordination-BlFpBVpn.mjs → group-coordination-BV6PKlKp.mjs} +1 -1
- package/dist/{group-coordination-BlFpBVpn.mjs.map → group-coordination-BV6PKlKp.mjs.map} +1 -1
- package/dist/{group-coordination-ImuoJEoy.mjs → group-coordination-BytkmY9j.mjs} +1 -1
- package/dist/{group-coordination-LGIyipaX.cjs → group-coordination-DL39hJ3R.cjs} +1 -1
- package/dist/{group-coordination-LGIyipaX.cjs.map → group-coordination-DL39hJ3R.cjs.map} +1 -1
- package/dist/{group-coordination-Cf18OjZt.cjs → group-coordination-DLban6a7.cjs} +1 -1
- package/dist/index.cjs +8899 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.mjs +9072 -213
- package/dist/index.mjs.map +1 -1
- package/dist/{prf-handler-D3EqUNWe.cjs → prf-handler-BNd7gmXJ.cjs} +1 -1
- package/dist/{prf-handler-D3EqUNWe.cjs.map → prf-handler-BNd7gmXJ.cjs.map} +1 -1
- package/dist/prf-handler-CRMgzJG2.cjs +3 -0
- package/dist/{prf-handler-Dly_WZGn.mjs → prf-handler-DG99ZkS2.mjs} +1 -1
- package/dist/{prf-handler-Db8CsoIP.mjs → prf-handler-Dj2WTO9i.mjs} +1 -1
- package/dist/{prf-handler-Db8CsoIP.mjs.map → prf-handler-Dj2WTO9i.mjs.map} +1 -1
- package/dist/zkm.service-Bv88tVS5.mjs +3 -0
- package/dist/zkm.service-D2BZ_aqA.cjs +3 -0
- package/dist/{zkm.service-DfSPbuOl.cjs → zkm.service-DX06sSfB.cjs} +1 -1
- package/dist/{zkm.service-DfSPbuOl.cjs.map → zkm.service-DX06sSfB.cjs.map} +1 -1
- package/dist/{zkm.service-B24N_0FB.mjs → zkm.service-j0HlN7Oq.mjs} +1 -1
- package/dist/{zkm.service-B24N_0FB.mjs.map → zkm.service-j0HlN7Oq.mjs.map} +1 -1
- package/package.json +19 -6
- package/dist/_esm-C7FRLTj2.cjs +0 -9030
- package/dist/_esm-C7FRLTj2.cjs.map +0 -1
- package/dist/_esm-D_oMW5T5.mjs +0 -9028
- package/dist/_esm-D_oMW5T5.mjs.map +0 -1
- package/dist/base64-js-B8y7dH5k.mjs +0 -93
- package/dist/base64-js-B8y7dH5k.mjs.map +0 -1
- package/dist/base64-js-Tm-kCeud.cjs +0 -98
- package/dist/base64-js-Tm-kCeud.cjs.map +0 -1
- package/dist/ccip-157tdxqP.cjs +0 -7947
- package/dist/ccip-157tdxqP.cjs.map +0 -1
- package/dist/ccip-BEMMdVyd.cjs +0 -4
- package/dist/ccip-BSmCdJ3K.mjs +0 -3
- package/dist/ccip-okqXkslP.mjs +0 -6567
- package/dist/ccip-okqXkslP.mjs.map +0 -1
- package/dist/chains-CTeD2UcS.mjs +0 -33
- package/dist/chains-CTeD2UcS.mjs.map +0 -1
- package/dist/chains-Du-lv_5i.cjs +0 -33
- package/dist/chains-Du-lv_5i.cjs.map +0 -1
- package/dist/chunk-Bnu9O96Y.cjs +0 -60
- package/dist/chunk-CVYhg9ik.mjs +0 -45
- package/dist/cjs-CSUAVztq.cjs.map +0 -1
- package/dist/cjs-sm5h7qxv.mjs.map +0 -1
- package/dist/defineChain-7QG67hYU.cjs +0 -30
- package/dist/defineChain-7QG67hYU.cjs.map +0 -1
- package/dist/defineChain-DBem8ZQY.mjs +0 -24
- package/dist/defineChain-DBem8ZQY.mjs.map +0 -1
- package/dist/dist-BPmSxkxc.cjs +0 -10676
- package/dist/dist-BPmSxkxc.cjs.map +0 -1
- package/dist/dist-BSjH4t6s.cjs +0 -12932
- package/dist/dist-BSjH4t6s.cjs.map +0 -1
- package/dist/dist-C-KjTK4Q.cjs +0 -447
- package/dist/dist-C-KjTK4Q.cjs.map +0 -1
- package/dist/dist-C2h97xM-.mjs +0 -355
- package/dist/dist-C2h97xM-.mjs.map +0 -1
- package/dist/dist-CT7grDWb.mjs +0 -12920
- package/dist/dist-CT7grDWb.mjs.map +0 -1
- package/dist/dist-D7fRmK6G.mjs +0 -10632
- package/dist/dist-D7fRmK6G.mjs.map +0 -1
- package/dist/dist-DlmcyFmM.mjs +0 -16951
- package/dist/dist-DlmcyFmM.mjs.map +0 -1
- package/dist/dist-O0uZr5OF.cjs +0 -17122
- package/dist/dist-O0uZr5OF.cjs.map +0 -1
- package/dist/echo-BB-JgAYZ.cjs +0 -339
- package/dist/echo-BB-JgAYZ.cjs.map +0 -1
- package/dist/echo-Bwy4_Cvh.mjs +0 -316
- package/dist/echo-Bwy4_Cvh.mjs.map +0 -1
- package/dist/echo-D6X2IuNW.cjs +0 -9
- package/dist/echo-DvfG_heb.mjs +0 -8
- package/dist/esm-BcHKCX5i.mjs +0 -569
- package/dist/esm-BcHKCX5i.mjs.map +0 -1
- package/dist/esm-Bh_YwFIz.cjs +0 -599
- package/dist/esm-Bh_YwFIz.cjs.map +0 -1
- package/dist/esm-C0XO9TQm.cjs +0 -30449
- package/dist/esm-C0XO9TQm.cjs.map +0 -1
- package/dist/esm-vMUVj9k4.mjs +0 -30440
- package/dist/esm-vMUVj9k4.mjs.map +0 -1
- package/dist/keyset-CKMQXvsb.mjs +0 -172
- package/dist/keyset-CKMQXvsb.mjs.map +0 -1
- package/dist/keyset-Cxdgu110.cjs +0 -237
- package/dist/keyset-Cxdgu110.cjs.map +0 -1
- package/dist/keyset-DLxpGhdu.cjs +0 -6
- package/dist/keyset-IKjlhvqF.mjs +0 -4
- package/dist/node-3EUJ4ga9.cjs +0 -9
- package/dist/node-C2UpE11T.cjs +0 -444
- package/dist/node-C2UpE11T.cjs.map +0 -1
- package/dist/node-CHdpTQdN.mjs +0 -8679
- package/dist/node-CHdpTQdN.mjs.map +0 -1
- package/dist/node-DQt1CVGl.mjs +0 -6
- package/dist/node-Dy8ww1LG.cjs +0 -8680
- package/dist/node-Dy8ww1LG.cjs.map +0 -1
- package/dist/node-IX55IH6z.mjs +0 -397
- package/dist/node-IX55IH6z.mjs.map +0 -1
- package/dist/nostr-BTOpBN_5.cjs +0 -11
- package/dist/nostr-D4E52XRU.mjs +0 -224
- package/dist/nostr-D4E52XRU.mjs.map +0 -1
- package/dist/nostr-Hv2tsnuI.cjs +0 -272
- package/dist/nostr-Hv2tsnuI.cjs.map +0 -1
- package/dist/nostr-ZwJe_DlZ.mjs +0 -4
- package/dist/pako.esm-DTVnlCJh.cjs +0 -3856
- package/dist/pako.esm-DTVnlCJh.cjs.map +0 -1
- package/dist/pako.esm-ORhkEHM2.mjs +0 -3838
- package/dist/pako.esm-ORhkEHM2.mjs.map +0 -1
- package/dist/peer-B9g3OQ5D.cjs +0 -18
- package/dist/peer-CptDj7zu.mjs +0 -745
- package/dist/peer-CptDj7zu.mjs.map +0 -1
- package/dist/peer-CtqL0yiE.mjs +0 -9
- package/dist/peer-XrPL0O6z.cjs +0 -822
- package/dist/peer-XrPL0O6z.cjs.map +0 -1
- package/dist/ping-BXKREIdI.mjs +0 -7
- package/dist/ping-BtVhKocl.cjs +0 -379
- package/dist/ping-BtVhKocl.cjs.map +0 -1
- package/dist/ping-D5fpMhGC.cjs +0 -11
- package/dist/ping-DOD50kW_.mjs +0 -332
- package/dist/ping-DOD50kW_.mjs.map +0 -1
- package/dist/policy-8HcjulLD.cjs +0 -293
- package/dist/policy-8HcjulLD.cjs.map +0 -1
- package/dist/policy-BA6MEOBY.mjs +0 -5
- package/dist/policy-BFNdXvmM.cjs +0 -11
- package/dist/policy-D_nFHHjo.mjs +0 -228
- package/dist/policy-D_nFHHjo.mjs.map +0 -1
- package/dist/prf-handler-BNiyCQMt.cjs +0 -3
- package/dist/src-CVfTUJQl.mjs +0 -822
- package/dist/src-CVfTUJQl.mjs.map +0 -1
- package/dist/src-D5S86Xpf.cjs +0 -827
- package/dist/src-D5S86Xpf.cjs.map +0 -1
- package/dist/types-B-TLIS13.cjs +0 -212
- package/dist/types-B-TLIS13.cjs.map +0 -1
- package/dist/types-CTm_FHYD.mjs +0 -111
- package/dist/types-CTm_FHYD.mjs.map +0 -1
- package/dist/validation-1xwWVXqE.mjs +0 -3
- package/dist/validation-DnpurN79.cjs +0 -405
- package/dist/validation-DnpurN79.cjs.map +0 -1
- package/dist/validation-IsAUvsvy.mjs +0 -334
- package/dist/validation-IsAUvsvy.mjs.map +0 -1
- package/dist/validation-yCvZCqIs.cjs +0 -6
- package/dist/wrapper-C5NpyacC.cjs +0 -3552
- package/dist/wrapper-C5NpyacC.cjs.map +0 -1
- package/dist/wrapper-CHq_CV4J.mjs +0 -3552
- package/dist/wrapper-CHq_CV4J.mjs.map +0 -1
- package/dist/zkm.service-BrXyI4BS.mjs +0 -3
- package/dist/zkm.service-BvQ01wSH.cjs +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"peer-XrPL0O6z.cjs","names":["decodeShare","decodeGroup","DEFAULT_PING_INTERVAL","DEFAULT_PING_TIMEOUT","NodeError","pingPeersInternal","createPingMonitor","pingPeer"],"sources":["../node_modules/@frostr/igloo-core/dist/peer.js"],"sourcesContent":["import { NodeError } from './types.js';\nimport { decodeGroup, decodeShare } from './keyset.js';\nimport { pingPeer, pingPeers as pingPeersInternal, createPingMonitor, DEFAULT_PING_TIMEOUT, DEFAULT_PING_INTERVAL } from './ping.js';\n/**\n * Utility functions for pubkey handling\n */\n/**\n * Normalize a pubkey by removing 02/03 prefix if present\n */\nexport function normalizePubkey(pubkey) {\n if (!pubkey || typeof pubkey !== 'string') {\n return pubkey;\n }\n // Remove 02 or 03 prefix if present (33-byte compressed format -> 32-byte)\n if ((pubkey.startsWith('02') || pubkey.startsWith('03')) && pubkey.length === 66) {\n return pubkey.slice(2);\n }\n return pubkey;\n}\n/**\n * Add 02 prefix to a pubkey if it's missing (convert to compressed format)\n */\nexport function addPubkeyPrefix(pubkey, prefix = '02') {\n if (!pubkey || typeof pubkey !== 'string') {\n return pubkey;\n }\n // If already has prefix, return as-is\n if ((pubkey.startsWith('02') || pubkey.startsWith('03')) && pubkey.length === 66) {\n return pubkey;\n }\n // If 64 characters (32 bytes), add prefix\n if (pubkey.length === 64) {\n return prefix + pubkey;\n }\n return pubkey;\n}\n/**\n * Compare two pubkeys after normalization\n */\nexport function comparePubkeys(pubkey1, pubkey2) {\n return normalizePubkey(pubkey1) === normalizePubkey(pubkey2);\n}\n/**\n * Extract self pubkey from credentials with enhanced error handling\n */\nexport function extractSelfPubkeyFromCredentials(groupCredential, shareCredential, options = {}) {\n const warnings = [];\n const { normalize = true, suppressWarnings = false } = options;\n try {\n if (!shareCredential || !groupCredential) {\n const warning = 'Missing credentials for self pubkey extraction';\n if (!suppressWarnings)\n warnings.push(warning);\n return { pubkey: null, warnings };\n }\n const decodedShare = decodeShare(shareCredential);\n const decodedGroup = decodeGroup(groupCredential);\n if (!decodedShare?.idx || !decodedGroup?.commits) {\n const warning = 'Invalid credential structure for self pubkey extraction';\n if (!suppressWarnings)\n warnings.push(warning);\n return { pubkey: null, warnings };\n }\n const shareIndex = decodedShare.idx - 1; // Convert to 0-based index\n if (shareIndex < 0 || shareIndex >= decodedGroup.commits.length) {\n const warning = 'Share index out of range for self pubkey extraction';\n if (!suppressWarnings)\n warnings.push(warning);\n return { pubkey: null, warnings };\n }\n const selfPubkeyCommit = decodedGroup.commits[shareIndex];\n // Handle both string and CommitPackage types\n const selfPubkey = typeof selfPubkeyCommit === 'string' ? selfPubkeyCommit : selfPubkeyCommit.pubkey;\n if (!selfPubkey) {\n const warning = 'Could not extract self public key from credentials';\n if (!suppressWarnings)\n warnings.push(warning);\n return { pubkey: null, warnings };\n }\n const result = normalize ? normalizePubkey(selfPubkey) : selfPubkey;\n return { pubkey: result, warnings };\n }\n catch (error) {\n const warning = `Failed to extract self pubkey: ${error instanceof Error ? error.message : 'Unknown error'}`;\n if (!suppressWarnings)\n warnings.push(warning);\n return { pubkey: null, warnings };\n }\n}\n/**\n * Default peer monitoring configuration\n */\nexport const DEFAULT_PEER_MONITOR_CONFIG = {\n pingInterval: DEFAULT_PING_INTERVAL,\n pingTimeout: DEFAULT_PING_TIMEOUT,\n autoMonitor: true,\n enableLogging: false,\n suppressWarnings: false,\n onPeerStatusChange: undefined\n};\n/**\n * Static peer manager for fallback scenarios when live monitoring fails\n */\nexport class StaticPeerManager {\n constructor(peerPubkeys, warnings = [], config = {}) {\n this.peers = peerPubkeys.map(pubkey => ({\n pubkey: normalizePubkey(pubkey), // Normalize pubkeys automatically\n status: 'unknown',\n lastSeen: undefined,\n allowSend: true,\n allowReceive: true\n }));\n this.warnings = warnings;\n this.config = { ...DEFAULT_PEER_MONITOR_CONFIG, ...config };\n }\n getPeerStatus() {\n return {\n peers: this.peers,\n onlinePeers: [],\n offlinePeers: this.peers,\n totalPeers: this.peers.length,\n onlineCount: 0,\n lastChecked: new Date()\n };\n }\n getAllPeers() {\n return [...this.peers];\n }\n getOnlinePeers() {\n return [];\n }\n getOfflinePeers() {\n return [...this.peers];\n }\n getOnlineCount() {\n return 0;\n }\n isPeerOnline(pubkey) {\n return false;\n }\n getPeer(pubkey) {\n return this.peers.find(p => p.pubkey === pubkey);\n }\n getWarnings() {\n return [...this.warnings];\n }\n async pingPeers() {\n this.log('warn', 'Ping not supported in static peer manager mode');\n return this.getPeerStatus();\n }\n startMonitoring() {\n this.log('warn', 'Live monitoring not available in static peer manager mode');\n }\n stopMonitoring() {\n this.log('warn', 'No monitoring to stop in static peer manager mode');\n }\n updateConfig(config) {\n this.log('warn', 'Configuration updates not supported in static peer manager mode');\n }\n cleanup() {\n this.peers = [];\n this.warnings = [];\n }\n log(level, message, data) {\n // Skip warnings if suppressed\n if (level === 'warn' && this.config.suppressWarnings) {\n return;\n }\n if (this.config.customLogger) {\n this.config.customLogger(level, `[StaticPeerManager] ${message}`, data);\n }\n else if (this.config.enableLogging) {\n const logFn = level === 'error' ? console.error :\n level === 'warn' ? console.warn :\n level === 'debug' ? console.debug : console.log;\n logFn(`[StaticPeerManager] [${level.toUpperCase()}] ${message}`, data || '');\n }\n }\n}\n/**\n * Enhanced peer manager class leveraging the new ping functionality\n */\nexport class PeerManager {\n constructor(node, selfPubkey, config = {}) {\n this.peers = new Map();\n this.node = node;\n this.selfPubkey = selfPubkey;\n this.config = { ...DEFAULT_PEER_MONITOR_CONFIG, ...config };\n // Create bound event handler functions\n this.messageHandler = this.handleMessage.bind(this);\n this.pingResponseHandler = this.handlePingResponse.bind(this);\n // Set up event listeners for backward compatibility\n this.setupEventListeners();\n }\n /**\n * Handle incoming messages to mark peers as online\n */\n handleMessage(msg) {\n if (!msg || typeof msg !== 'object') {\n return;\n }\n const peerPubkey = msg.pub || msg.pubkey || msg.from;\n if (peerPubkey) {\n const normalizedPubkey = normalizePubkey(peerPubkey);\n if (this.peers.has(normalizedPubkey)) {\n this.updatePeerStatus(normalizedPubkey, 'online');\n }\n }\n }\n /**\n * Handle ping responses to mark peers as online\n */\n handlePingResponse(msg) {\n const peerPubkey = msg.pub || msg.pubkey || msg.from;\n if (peerPubkey) {\n const normalizedPubkey = normalizePubkey(peerPubkey);\n if (this.peers.has(normalizedPubkey)) {\n this.updatePeerStatus(normalizedPubkey, 'online');\n }\n }\n }\n /**\n * Set up event listeners for backward compatibility\n */\n setupEventListeners() {\n // Listen for any incoming messages to mark peers as online\n this.node.on('message', this.messageHandler);\n // Listen for ping responses\n this.node.on('/ping/sender/res', this.pingResponseHandler);\n }\n /**\n * Initialize peer list from group configuration\n */\n initializePeers(groupCredential, shareCredential) {\n try {\n const peers = extractPeersFromCredentials(groupCredential, shareCredential);\n this.initializePeersFromList(peers);\n // Start monitoring if enabled\n if (this.config.autoMonitor) {\n this.startMonitoring();\n }\n }\n catch (error) {\n throw new NodeError(`Failed to initialize peers: ${error.message}`, { groupCredential, shareCredential, error });\n }\n }\n /**\n * Initialize peers from a pre-validated list\n */\n initializePeersFromList(peerPubkeys) {\n this.peers.clear();\n peerPubkeys.forEach(pubkey => {\n const normalizedPubkey = normalizePubkey(pubkey);\n this.peers.set(normalizedPubkey, {\n pubkey: normalizedPubkey,\n status: 'unknown',\n lastSeen: undefined,\n allowSend: true,\n allowReceive: true\n });\n });\n this.log('info', `Initialized ${peerPubkeys.length} peers`);\n }\n /**\n * Update the status of a specific peer (public for backward compatibility)\n */\n updatePeerStatus(pubkey, status) {\n const normalizedPubkey = normalizePubkey(pubkey);\n const peer = this.peers.get(normalizedPubkey);\n if (!peer)\n return;\n const oldStatus = peer.status;\n peer.status = status;\n peer.lastSeen = status === 'online' ? new Date() : peer.lastSeen;\n // Notify callback if status changed\n if (oldStatus !== peer.status && this.config.onPeerStatusChange) {\n this.config.onPeerStatusChange(peer);\n }\n }\n /**\n * Update the status of a specific peer from ping result\n */\n updatePeerFromPingResult(result) {\n const normalizedPubkey = normalizePubkey(result.pubkey);\n const peer = this.peers.get(normalizedPubkey);\n if (!peer)\n return;\n const oldStatus = peer.status;\n peer.status = result.success ? 'online' : 'offline';\n peer.lastSeen = result.success ? result.timestamp : peer.lastSeen;\n peer.latency = result.latency;\n peer.policy = result.policy;\n // Notify callback if status changed\n if (oldStatus !== peer.status && this.config.onPeerStatusChange) {\n this.config.onPeerStatusChange(peer);\n }\n }\n /**\n * Ping all peers using the new ping functionality\n */\n async pingPeers() {\n try {\n const peerPubkeys = Array.from(this.peers.keys());\n if (peerPubkeys.length === 0) {\n this.log('warn', 'No peers to ping');\n return this.getPeerStatus();\n }\n this.log('debug', `Pinging ${peerPubkeys.length} peers`);\n const results = await pingPeersInternal(this.node, peerPubkeys, {\n timeout: this.config.pingTimeout,\n eventConfig: { enableLogging: this.config.enableLogging }\n });\n // Update peer statuses based on results\n results.forEach(result => this.updatePeerFromPingResult(result));\n const status = this.getPeerStatus();\n this.log('info', `Ping complete: ${status.onlineCount}/${status.totalPeers} peers online`);\n return status;\n }\n catch (error) {\n this.handleError(error, 'pingPeers');\n // Mark all peers as unknown on error\n for (const peer of this.peers.values()) {\n peer.status = 'unknown';\n }\n return this.getPeerStatus();\n }\n }\n /**\n * Get current peer status with enhanced information\n */\n getPeerStatus() {\n const peers = Array.from(this.peers.values());\n const onlinePeers = peers.filter(p => p.status === 'online');\n const offlinePeers = peers.filter(p => p.status === 'offline');\n // Calculate average latency for online peers\n const latencies = onlinePeers\n .map(p => p.latency)\n .filter((latency) => latency !== undefined);\n const averageLatency = latencies.length > 0\n ? latencies.reduce((sum, latency) => sum + latency, 0) / latencies.length\n : undefined;\n return {\n peers,\n onlinePeers,\n offlinePeers,\n totalPeers: peers.length,\n onlineCount: onlinePeers.length,\n lastChecked: new Date(),\n averageLatency\n };\n }\n /**\n * Start automatic peer monitoring using the ping monitor\n */\n startMonitoring() {\n if (this.pingMonitor) {\n this.pingMonitor.stop();\n }\n const peerPubkeys = Array.from(this.peers.keys());\n if (peerPubkeys.length === 0) {\n this.log('warn', 'No peers to monitor');\n return;\n }\n try {\n this.pingMonitor = createPingMonitor(this.node, peerPubkeys, {\n interval: this.config.pingInterval,\n timeout: this.config.pingTimeout,\n onPingResult: (result) => {\n this.updatePeerFromPingResult(result);\n },\n onError: (error, context) => {\n this.handleError(error, `monitor:${context}`);\n },\n eventConfig: { enableLogging: this.config.enableLogging }\n });\n this.pingMonitor.start();\n this.log('info', `Started monitoring ${peerPubkeys.length} peers (interval: ${this.config.pingInterval}ms)`);\n }\n catch (error) {\n this.handleError(error, 'startMonitoring');\n throw new NodeError(`Failed to start peer monitoring: ${error.message}`, { error });\n }\n }\n /**\n * Stop automatic peer monitoring\n */\n stopMonitoring() {\n if (this.pingMonitor) {\n this.pingMonitor.stop();\n this.log('info', 'Stopped peer monitoring');\n }\n }\n /**\n * Update monitoring configuration\n */\n updateConfig(config) {\n const wasMonitoring = this.pingMonitor?.isRunning;\n this.config = { ...this.config, ...config };\n // Restart monitoring if it was active and relevant config changed\n if (wasMonitoring && (config.pingInterval || config.pingTimeout)) {\n this.stopMonitoring();\n this.startMonitoring();\n }\n }\n /**\n * Ping a specific peer\n */\n async pingPeer(pubkey) {\n if (!this.peers.has(pubkey)) {\n throw new NodeError(`Peer not found: ${pubkey}`, { pubkey });\n }\n try {\n const result = await pingPeer(this.node, pubkey, {\n timeout: this.config.pingTimeout,\n eventConfig: { enableLogging: this.config.enableLogging }\n });\n this.updatePeerFromPingResult(result);\n return result;\n }\n catch (error) {\n this.handleError(error, 'pingPeer');\n throw error;\n }\n }\n /**\n * Get a specific peer by public key\n */\n getPeer(pubkey) {\n return this.peers.get(pubkey);\n }\n /**\n * Get all peers\n */\n getAllPeers() {\n return Array.from(this.peers.values());\n }\n /**\n * Get online peers only\n */\n getOnlinePeers() {\n return Array.from(this.peers.values()).filter(p => p.status === 'online');\n }\n /**\n * Get offline peers only\n */\n getOfflinePeers() {\n return Array.from(this.peers.values()).filter(p => p.status === 'offline');\n }\n /**\n * Check if a specific peer is online\n */\n isPeerOnline(pubkey) {\n const peer = this.peers.get(pubkey);\n return peer?.status === 'online' || false;\n }\n /**\n * Get the count of online peers\n */\n getOnlineCount() {\n return Array.from(this.peers.values()).filter(p => p.status === 'online').length;\n }\n /**\n * Cleanup resources\n */\n cleanup() {\n // Remove event listeners to prevent memory leaks\n // Use different methods depending on what's available on the node\n const nodeAny = this.node;\n if (typeof nodeAny.off === 'function') {\n nodeAny.off('message', this.messageHandler);\n nodeAny.off('/ping/sender/res', this.pingResponseHandler);\n }\n else if (typeof nodeAny.removeListener === 'function') {\n nodeAny.removeListener('message', this.messageHandler);\n nodeAny.removeListener('/ping/sender/res', this.pingResponseHandler);\n }\n else if (typeof nodeAny.removeAllListeners === 'function') {\n // Fallback: remove all listeners (less precise but prevents leaks)\n nodeAny.removeAllListeners('message');\n nodeAny.removeAllListeners('/ping/sender/res');\n }\n this.stopMonitoring();\n if (this.pingMonitor) {\n this.pingMonitor.cleanup();\n this.pingMonitor = undefined;\n }\n this.peers.clear();\n this.log('info', 'Peer manager cleaned up');\n }\n /**\n * Handle errors with optional callback\n */\n handleError(error, context) {\n if (this.config.onError) {\n this.config.onError(error, context);\n }\n else {\n this.log('error', `Error in ${context}: ${error.message}`);\n }\n }\n /**\n * Internal logging\n */\n log(level, message, data) {\n // Skip warnings if suppressed\n if (level === 'warn' && this.config.suppressWarnings) {\n return;\n }\n if (this.config.customLogger) {\n this.config.customLogger(level, `[PeerManager] ${message}`, data);\n }\n else if (this.config.enableLogging) {\n const logFn = level === 'error' ? console.error :\n level === 'warn' ? console.warn :\n level === 'debug' ? console.debug : console.log;\n logFn(`[PeerManager] [${level.toUpperCase()}] ${message}`, data || '');\n }\n }\n}\n/**\n * Extract peers from group credentials using improved error handling\n */\nexport function extractPeersFromCredentials(groupCredential, shareCredential) {\n try {\n const group = decodeGroup(groupCredential);\n const share = decodeShare(shareCredential);\n // Get self public key from share\n const selfPubkey = extractSelfPubkey(share);\n // Extract peers from group\n const peers = extractPeersFromGroup(group, selfPubkey);\n return peers;\n }\n catch (error) {\n throw new NodeError(`Failed to extract peers from credentials: ${error.message}`, { groupCredential, shareCredential, error });\n }\n}\n/**\n * Extract self public key from share with multiple strategies\n */\nfunction extractSelfPubkey(share) {\n const shareAny = share;\n // Strategy 1: Direct pubkey field\n if (shareAny.pubkey && typeof shareAny.pubkey === 'string') {\n return shareAny.pubkey;\n }\n // Strategy 2: Alternative pub field\n if (shareAny.pub && typeof shareAny.pub === 'string') {\n return shareAny.pub;\n }\n // Strategy 3: Look for public key in other common fields\n if (shareAny.public_key && typeof shareAny.public_key === 'string') {\n return shareAny.public_key;\n }\n throw new NodeError('Could not extract self public key from share credential', { availableFields: Object.keys(shareAny) });\n}\n/**\n * Extract peers from group package\n */\nfunction extractPeersFromGroup(group, selfPubkey) {\n const groupAny = group;\n let allPubkeys = [];\n // Strategy 1: commits array with pubkey field\n if (group.commits && Array.isArray(group.commits)) {\n const commitPubkeys = group.commits\n .map((commit) => commit?.pubkey)\n .filter((pubkey) => pubkey && typeof pubkey === 'string' && pubkey.length > 0);\n allPubkeys.push(...commitPubkeys);\n }\n // Strategy 2: participants array (alternative field name)\n if (allPubkeys.length === 0 && groupAny.participants && Array.isArray(groupAny.participants)) {\n const participantPubkeys = groupAny.participants\n .filter((pubkey) => pubkey && typeof pubkey === 'string' && pubkey.length > 0);\n allPubkeys.push(...participantPubkeys);\n }\n // Strategy 3: members array (another alternative)\n if (allPubkeys.length === 0 && groupAny.members && Array.isArray(groupAny.members)) {\n const memberPubkeys = groupAny.members\n .map((member) => {\n if (typeof member === 'string')\n return member;\n if (member?.pubkey)\n return member.pubkey;\n if (member?.pub)\n return member.pub;\n return null;\n })\n .filter((pubkey) => pubkey && typeof pubkey === 'string' && pubkey.length > 0);\n allPubkeys.push(...memberPubkeys);\n }\n if (allPubkeys.length === 0) {\n throw new NodeError('No peer public keys found in group', {\n checkedFields: ['commits', 'participants', 'members'],\n groupStructure: Object.keys(groupAny)\n });\n }\n // Remove duplicates and self\n const uniquePubkeys = [...new Set(allPubkeys)];\n const peerPubkeys = uniquePubkeys.filter(pubkey => pubkey !== selfPubkey);\n return peerPubkeys;\n}\n/**\n * Simple function to ping peers and get online peer pubkeys (legacy compatibility)\n * @deprecated Use PeerManager.pingPeers() or pingPeersInternal() instead\n */\nexport async function pingPeers(node, timeout = DEFAULT_PING_TIMEOUT) {\n try {\n // Use Bifrost's native ping functionality for backward compatibility with safe access\n const nodeAny = node;\n const result = await nodeAny.req?.ping?.();\n if (result && result.ok) {\n // Handle different possible result formats\n if (Array.isArray(result.data)) {\n return result.data;\n }\n else if (result.data && typeof result.data === 'object') {\n return Object.keys(result.data);\n }\n }\n return [];\n }\n catch (error) {\n console.warn('Ping operation failed:', error);\n return [];\n }\n}\n/**\n * Create a PeerManager instance with a connected BifrostNode\n */\nexport async function createPeerManager(node, groupCredential, shareCredential, config = {}) {\n try {\n // Validate credentials first\n const validation = await validatePeerCredentials(groupCredential, shareCredential);\n if (!validation.isValid) {\n throw new NodeError(`Invalid credentials: ${validation.error}`, { validation });\n }\n // Create peer manager\n const peerManager = new PeerManager(node, validation.selfPubkey, config);\n // Initialize with validated peer list\n peerManager.initializePeersFromList(validation.peers);\n return peerManager;\n }\n catch (error) {\n throw new NodeError(`Failed to create peer manager: ${error.message}`, { groupCredential, shareCredential, error });\n }\n}\n/**\n * Simple peer status check function using ping functionality\n */\nexport async function checkPeerStatus(node, groupCredential, shareCredential) {\n try {\n const peers = extractPeersFromCredentials(groupCredential, shareCredential);\n const results = await pingPeersInternal(node, peers, {\n timeout: DEFAULT_PING_TIMEOUT,\n eventConfig: { enableLogging: false }\n });\n return results.map(result => ({\n pubkey: result.pubkey,\n status: result.success ? 'online' : 'offline'\n }));\n }\n catch (error) {\n throw new NodeError(`Failed to check peer status: ${error.message}`, { groupCredential, shareCredential, error });\n }\n}\n/**\n * Validate peer credentials before creating peer manager\n */\nexport async function validatePeerCredentials(groupCredential, shareCredential) {\n const warnings = [];\n try {\n // Validate group credential\n let group;\n try {\n group = decodeGroup(groupCredential);\n }\n catch (error) {\n return {\n isValid: false,\n error: `Invalid group credential: ${error instanceof Error ? error.message : 'Unknown error'}`,\n peerCount: 0,\n peers: [],\n warnings\n };\n }\n // Validate share credential\n let share;\n try {\n share = decodeShare(shareCredential);\n }\n catch (error) {\n return {\n isValid: false,\n error: `Invalid share credential: ${error instanceof Error ? error.message : 'Unknown error'}`,\n peerCount: 0,\n peers: [],\n warnings\n };\n }\n // Extract self public key\n let selfPubkey;\n try {\n selfPubkey = extractSelfPubkey(share);\n }\n catch (error) {\n return {\n isValid: false,\n error: `Could not extract self public key: ${error instanceof Error ? error.message : 'Unknown error'}`,\n peerCount: 0,\n peers: [],\n warnings\n };\n }\n // Extract peers\n let peers;\n try {\n peers = extractPeersFromGroup(group, selfPubkey);\n }\n catch (error) {\n return {\n isValid: false,\n error: `Peer extraction failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n peerCount: 0,\n peers: [],\n warnings\n };\n }\n // Add warnings for edge cases\n if (peers.length === 0) {\n warnings.push('No other peers found in group - this might be a single-member group');\n }\n else if (peers.length === 1) {\n warnings.push('Only one other peer found in group');\n }\n return {\n isValid: true,\n peerCount: peers.length,\n peers,\n selfPubkey,\n warnings\n };\n }\n catch (error) {\n return {\n isValid: false,\n error: `Validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n peerCount: 0,\n peers: [],\n warnings\n };\n }\n}\n/**\n * Enhanced peer manager creation with robust error handling and fallback options\n */\nexport async function createPeerManagerRobust(node, groupCredential, shareCredential, config) {\n const enhancedConfig = { ...DEFAULT_PEER_MONITOR_CONFIG, ...config };\n try {\n // Step 1: Try enhanced self pubkey extraction first\n const selfPubkeyResult = extractSelfPubkeyFromCredentials(groupCredential, shareCredential, { normalize: true, suppressWarnings: enhancedConfig.suppressWarnings });\n // Step 2: Validate credentials\n const validation = await validatePeerCredentials(groupCredential, shareCredential);\n if (!validation.isValid) {\n if (enhancedConfig.fallbackMode === 'static') {\n // Try basic peer extraction as fallback\n try {\n const basicPeers = extractBasicPeers(groupCredential, shareCredential);\n const staticManager = new StaticPeerManager(basicPeers, [\n ...(enhancedConfig.suppressWarnings ? [] : [`Live monitoring disabled: ${validation.error}`]),\n ...(enhancedConfig.suppressWarnings ? [] : ['Using static peer list as fallback'])\n ], enhancedConfig);\n return {\n success: true,\n peerManager: staticManager,\n mode: 'static',\n warnings: enhancedConfig.suppressWarnings ? [] : [\n `Peer monitoring disabled: ${validation.error}`,\n 'Fallback to static peer list enabled'\n ]\n };\n }\n catch (fallbackError) {\n return {\n success: false,\n error: `Primary and fallback failed: ${validation.error}`,\n mode: 'failed'\n };\n }\n }\n else {\n return {\n success: false,\n error: validation.error,\n mode: 'failed'\n };\n }\n }\n // Step 3: Create full peer manager\n try {\n // Use enhanced self pubkey if available, otherwise fall back to validation result\n const selfPubkey = selfPubkeyResult.pubkey || validation.selfPubkey;\n const peerManager = new PeerManager(node, selfPubkey, {\n ...enhancedConfig,\n autoMonitor: false // Disable auto-monitor initially for safer initialization\n });\n // Initialize peers manually (normalize them automatically)\n const normalizedPeers = validation.peers.map(pubkey => normalizePubkey(pubkey));\n peerManager.initializePeersFromList(normalizedPeers);\n // Start monitoring if requested (after initialization)\n if (enhancedConfig.autoMonitor) {\n try {\n peerManager.startMonitoring();\n }\n catch (monitorError) {\n if (enhancedConfig.onError) {\n enhancedConfig.onError(monitorError, 'startMonitoring');\n }\n if (enhancedConfig.fallbackMode === 'static') {\n // Fall back to static mode if monitoring fails\n const staticManager = new StaticPeerManager(normalizedPeers, [\n ...(enhancedConfig.suppressWarnings ? [] : [`Live monitoring failed: ${monitorError instanceof Error ? monitorError.message : 'Unknown error'}`]),\n ...(enhancedConfig.suppressWarnings ? [] : ['Switched to static peer list mode'])\n ], enhancedConfig);\n return {\n success: true,\n peerManager: staticManager,\n mode: 'static',\n warnings: enhancedConfig.suppressWarnings ? [] : [\n `Monitoring initialization failed, using static mode`,\n ...(validation.warnings || [])\n ]\n };\n }\n else {\n throw monitorError;\n }\n }\n }\n return {\n success: true,\n peerManager,\n mode: 'full',\n warnings: enhancedConfig.suppressWarnings ? [] : [\n ...selfPubkeyResult.warnings,\n ...(validation.warnings || [])\n ]\n };\n }\n catch (managerError) {\n if (enhancedConfig.onError) {\n enhancedConfig.onError(managerError, 'createPeerManager');\n }\n if (enhancedConfig.fallbackMode === 'static') {\n // Fall back to static manager\n const normalizedPeers = validation.peers.map(pubkey => normalizePubkey(pubkey));\n const staticManager = new StaticPeerManager(normalizedPeers, [\n ...(enhancedConfig.suppressWarnings ? [] : [`PeerManager creation failed: ${managerError instanceof Error ? managerError.message : 'Unknown error'}`]),\n ...(enhancedConfig.suppressWarnings ? [] : ['Using static peer list as fallback'])\n ], enhancedConfig);\n return {\n success: true,\n peerManager: staticManager,\n mode: 'static',\n warnings: enhancedConfig.suppressWarnings ? [] : [\n `Full peer manager creation failed, using static mode`,\n ...(validation.warnings || [])\n ]\n };\n }\n else {\n throw managerError;\n }\n }\n }\n catch (error) {\n if (enhancedConfig.onError) {\n enhancedConfig.onError(error, 'createPeerManagerRobust');\n }\n return {\n success: false,\n error: `Peer manager creation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n mode: 'failed'\n };\n }\n}\n/**\n * Basic peer extraction for fallback scenarios\n */\nfunction extractBasicPeers(groupCredential, shareCredential) {\n try {\n return extractPeersFromCredentials(groupCredential, shareCredential);\n }\n catch (error) {\n // Try even more basic extraction\n try {\n const group = decodeGroup(groupCredential);\n const groupAny = group;\n // Strategy 1: participants array\n if (groupAny.participants && Array.isArray(groupAny.participants)) {\n return groupAny.participants.filter((p) => p && typeof p === 'string');\n }\n // Strategy 2: commits array with pubkey field\n if (group.commits && Array.isArray(group.commits)) {\n return group.commits\n .map((c) => c?.pubkey)\n .filter((p) => p && typeof p === 'string');\n }\n return [];\n }\n catch {\n return [];\n }\n }\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/dist/ping-BXKREIdI.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import "./types-CTm_FHYD.mjs";
|
|
2
|
-
import "./nostr-D4E52XRU.mjs";
|
|
3
|
-
import "./policy-D_nFHHjo.mjs";
|
|
4
|
-
import "./node-IX55IH6z.mjs";
|
|
5
|
-
import { a as pingPeer, c as runPingDiagnostics, i as createPingMonitor, n as DEFAULT_PING_RELAYS, o as pingPeers, r as DEFAULT_PING_TIMEOUT, s as pingPeersFromCredentials, t as DEFAULT_PING_INTERVAL } from "./ping-DOD50kW_.mjs";
|
|
6
|
-
|
|
7
|
-
export { createPingMonitor, pingPeer, pingPeers, pingPeersFromCredentials, runPingDiagnostics };
|
package/dist/ping-BtVhKocl.cjs
DELETED
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
const require_types = require('./types-B-TLIS13.cjs');
|
|
2
|
-
const require_node = require('./node-C2UpE11T.cjs');
|
|
3
|
-
|
|
4
|
-
//#region node_modules/@frostr/igloo-core/dist/ping.js
|
|
5
|
-
/**
|
|
6
|
-
* Default relay URLs for ping functionality
|
|
7
|
-
*/
|
|
8
|
-
const DEFAULT_PING_RELAYS = ["wss://relay.damus.io", "wss://relay.primal.net"];
|
|
9
|
-
/**
|
|
10
|
-
* Default ping timeout in milliseconds
|
|
11
|
-
*/
|
|
12
|
-
const DEFAULT_PING_TIMEOUT = 5e3;
|
|
13
|
-
/**
|
|
14
|
-
* Default ping interval for monitoring in milliseconds
|
|
15
|
-
*/
|
|
16
|
-
const DEFAULT_PING_INTERVAL = 3e4;
|
|
17
|
-
/**
|
|
18
|
-
* Ping a specific peer using bifrost ping protocol
|
|
19
|
-
*/
|
|
20
|
-
async function pingPeer(node, peerPubkey, options = {}) {
|
|
21
|
-
const { timeout = DEFAULT_PING_TIMEOUT, eventConfig = { enableLogging: false } } = options;
|
|
22
|
-
return new Promise((resolve) => {
|
|
23
|
-
let isResolved = false;
|
|
24
|
-
let timeoutId = null;
|
|
25
|
-
const startTime = Date.now();
|
|
26
|
-
let onPingResponse = null;
|
|
27
|
-
let onPingError = null;
|
|
28
|
-
const safeResolve = (result) => {
|
|
29
|
-
if (!isResolved) {
|
|
30
|
-
isResolved = true;
|
|
31
|
-
if (timeoutId) {
|
|
32
|
-
clearTimeout(timeoutId);
|
|
33
|
-
timeoutId = null;
|
|
34
|
-
}
|
|
35
|
-
if (onPingResponse) {
|
|
36
|
-
const nodeAny = node;
|
|
37
|
-
if (typeof nodeAny.off === "function") nodeAny.off("/ping/sender/ret", onPingResponse);
|
|
38
|
-
else if (typeof nodeAny.removeListener === "function") nodeAny.removeListener("/ping/sender/ret", onPingResponse);
|
|
39
|
-
onPingResponse = null;
|
|
40
|
-
}
|
|
41
|
-
if (onPingError) {
|
|
42
|
-
const nodeAny = node;
|
|
43
|
-
if (typeof nodeAny.off === "function") nodeAny.off("/ping/sender/err", onPingError);
|
|
44
|
-
else if (typeof nodeAny.removeListener === "function") nodeAny.removeListener("/ping/sender/err", onPingError);
|
|
45
|
-
onPingError = null;
|
|
46
|
-
}
|
|
47
|
-
resolve(result);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const customLogger = (level, message, data) => {
|
|
51
|
-
const prefix = `[pingPeer:${peerPubkey.slice(0, 8)}]`;
|
|
52
|
-
if (eventConfig.customLogger) eventConfig.customLogger(level, `${prefix} ${message}`, data);
|
|
53
|
-
else if (eventConfig.enableLogging) console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || "");
|
|
54
|
-
};
|
|
55
|
-
timeoutId = setTimeout(() => {
|
|
56
|
-
safeResolve({
|
|
57
|
-
success: false,
|
|
58
|
-
pubkey: peerPubkey,
|
|
59
|
-
error: `Ping timeout after ${timeout}ms`,
|
|
60
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
61
|
-
});
|
|
62
|
-
}, timeout);
|
|
63
|
-
try {
|
|
64
|
-
onPingResponse = (peerData) => {
|
|
65
|
-
if (peerData && peerData.pubkey === peerPubkey) {
|
|
66
|
-
const latency = Date.now() - startTime;
|
|
67
|
-
customLogger("info", `Ping successful, latency: ${latency}ms`);
|
|
68
|
-
safeResolve({
|
|
69
|
-
success: true,
|
|
70
|
-
pubkey: peerPubkey,
|
|
71
|
-
latency,
|
|
72
|
-
policy: peerData.policy,
|
|
73
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
onPingError = (reason, msg) => {
|
|
78
|
-
customLogger("error", `Ping failed: ${reason}`);
|
|
79
|
-
safeResolve({
|
|
80
|
-
success: false,
|
|
81
|
-
pubkey: peerPubkey,
|
|
82
|
-
error: reason,
|
|
83
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
84
|
-
});
|
|
85
|
-
};
|
|
86
|
-
node.on("/ping/sender/ret", onPingResponse);
|
|
87
|
-
node.on("/ping/sender/err", onPingError);
|
|
88
|
-
node.req.ping(peerPubkey).then((result) => {
|
|
89
|
-
if (result.ok) customLogger("debug", "Ping request sent successfully");
|
|
90
|
-
else safeResolve({
|
|
91
|
-
success: false,
|
|
92
|
-
pubkey: peerPubkey,
|
|
93
|
-
error: result.err,
|
|
94
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
95
|
-
});
|
|
96
|
-
}).catch((error) => {
|
|
97
|
-
customLogger("error", `Ping request failed: ${error.message}`);
|
|
98
|
-
safeResolve({
|
|
99
|
-
success: false,
|
|
100
|
-
pubkey: peerPubkey,
|
|
101
|
-
error: error.message,
|
|
102
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
} catch (error) {
|
|
106
|
-
customLogger("error", `Ping setup failed: ${error.message}`);
|
|
107
|
-
safeResolve({
|
|
108
|
-
success: false,
|
|
109
|
-
pubkey: peerPubkey,
|
|
110
|
-
error: error.message,
|
|
111
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Ping multiple peers concurrently
|
|
118
|
-
*/
|
|
119
|
-
async function pingPeers(node, peerPubkeys, options = {}) {
|
|
120
|
-
const { timeout = DEFAULT_PING_TIMEOUT, eventConfig = { enableLogging: false } } = options;
|
|
121
|
-
const customLogger = (level, message, data) => {
|
|
122
|
-
const prefix = "[pingPeers]";
|
|
123
|
-
if (eventConfig.customLogger) eventConfig.customLogger(level, `${prefix} ${message}`, data);
|
|
124
|
-
else if (eventConfig.enableLogging) console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || "");
|
|
125
|
-
};
|
|
126
|
-
customLogger("info", `Pinging ${peerPubkeys.length} peers`);
|
|
127
|
-
try {
|
|
128
|
-
const pingPromises = peerPubkeys.map((pubkey) => pingPeer(node, pubkey, {
|
|
129
|
-
timeout,
|
|
130
|
-
eventConfig
|
|
131
|
-
}));
|
|
132
|
-
const results = await Promise.all(pingPromises);
|
|
133
|
-
const successCount = results.filter((r) => r.success).length;
|
|
134
|
-
customLogger("info", `Ping completed: ${successCount}/${results.length} peers responded`);
|
|
135
|
-
return results;
|
|
136
|
-
} catch (error) {
|
|
137
|
-
customLogger("error", `Ping operation failed: ${error.message}`);
|
|
138
|
-
return peerPubkeys.map((pubkey) => ({
|
|
139
|
-
success: false,
|
|
140
|
-
pubkey,
|
|
141
|
-
error: error.message,
|
|
142
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
143
|
-
}));
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Create a ping monitor for continuous peer monitoring
|
|
148
|
-
*/
|
|
149
|
-
function createPingMonitor(node, peerPubkeys, config = {}) {
|
|
150
|
-
const { interval = DEFAULT_PING_INTERVAL, timeout = DEFAULT_PING_TIMEOUT, onPingResult, onError, relays = DEFAULT_PING_RELAYS, eventConfig = { enableLogging: false } } = config;
|
|
151
|
-
let intervalId = null;
|
|
152
|
-
let isRunning = false;
|
|
153
|
-
const customLogger = (level, message, data) => {
|
|
154
|
-
const prefix = "[PingMonitor]";
|
|
155
|
-
if (eventConfig.customLogger) eventConfig.customLogger(level, `${prefix} ${message}`, data);
|
|
156
|
-
else if (eventConfig.enableLogging) console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || "");
|
|
157
|
-
};
|
|
158
|
-
const ping = async () => {
|
|
159
|
-
try {
|
|
160
|
-
customLogger("debug", `Pinging ${peerPubkeys.length} peers`);
|
|
161
|
-
const results = await pingPeers(node, peerPubkeys, {
|
|
162
|
-
timeout,
|
|
163
|
-
eventConfig
|
|
164
|
-
});
|
|
165
|
-
if (onPingResult) results.forEach((result) => {
|
|
166
|
-
try {
|
|
167
|
-
onPingResult(result);
|
|
168
|
-
} catch (error) {
|
|
169
|
-
customLogger("error", `Error in ping result callback: ${error.message}`);
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
return results;
|
|
173
|
-
} catch (error) {
|
|
174
|
-
customLogger("error", `Ping monitor error: ${error.message}`);
|
|
175
|
-
if (onError) onError(error, "ping");
|
|
176
|
-
return [];
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
const start = () => {
|
|
180
|
-
if (isRunning) {
|
|
181
|
-
customLogger("warn", "Ping monitor is already running");
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
customLogger("info", `Starting ping monitor (interval: ${interval}ms, timeout: ${timeout}ms)`);
|
|
185
|
-
isRunning = true;
|
|
186
|
-
ping().catch((error) => {
|
|
187
|
-
customLogger("error", `Initial ping failed: ${error.message}`);
|
|
188
|
-
});
|
|
189
|
-
intervalId = setInterval(() => {
|
|
190
|
-
if (isRunning) ping().catch((error) => {
|
|
191
|
-
customLogger("error", `Scheduled ping failed: ${error.message}`);
|
|
192
|
-
});
|
|
193
|
-
}, interval);
|
|
194
|
-
};
|
|
195
|
-
const stop = () => {
|
|
196
|
-
if (!isRunning) {
|
|
197
|
-
customLogger("warn", "Ping monitor is not running");
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
customLogger("info", "Stopping ping monitor");
|
|
201
|
-
isRunning = false;
|
|
202
|
-
if (intervalId) {
|
|
203
|
-
clearInterval(intervalId);
|
|
204
|
-
intervalId = null;
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
const cleanup = () => {
|
|
208
|
-
stop();
|
|
209
|
-
customLogger("debug", "Ping monitor cleaned up");
|
|
210
|
-
};
|
|
211
|
-
return {
|
|
212
|
-
start,
|
|
213
|
-
stop,
|
|
214
|
-
get isRunning() {
|
|
215
|
-
return isRunning;
|
|
216
|
-
},
|
|
217
|
-
ping,
|
|
218
|
-
cleanup
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Ping peers from credentials (convenience function)
|
|
223
|
-
*/
|
|
224
|
-
async function pingPeersFromCredentials(groupCredential, shareCredential, options = {}) {
|
|
225
|
-
const { relays = DEFAULT_PING_RELAYS, timeout = DEFAULT_PING_TIMEOUT, eventConfig = { enableLogging: false } } = options;
|
|
226
|
-
let node = null;
|
|
227
|
-
try {
|
|
228
|
-
node = require_node.createBifrostNode({
|
|
229
|
-
group: groupCredential,
|
|
230
|
-
share: shareCredential,
|
|
231
|
-
relays
|
|
232
|
-
}, eventConfig);
|
|
233
|
-
await require_node.connectNode(node);
|
|
234
|
-
const { extractPeersFromCredentials } = await Promise.resolve().then(() => require("./peer-B9g3OQ5D.cjs"));
|
|
235
|
-
const peerPubkeys = extractPeersFromCredentials(groupCredential, shareCredential);
|
|
236
|
-
return await pingPeers(node, peerPubkeys, {
|
|
237
|
-
timeout,
|
|
238
|
-
eventConfig
|
|
239
|
-
});
|
|
240
|
-
} catch (error) {
|
|
241
|
-
throw new require_types.NodeError(`Failed to ping peers: ${error.message}`, { error });
|
|
242
|
-
} finally {
|
|
243
|
-
if (node) try {
|
|
244
|
-
require_node.closeNode(node);
|
|
245
|
-
} catch (error) {
|
|
246
|
-
console.warn("[pingPeersFromCredentials] Error during cleanup:", error);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Create a comprehensive ping test for network diagnostics
|
|
252
|
-
*/
|
|
253
|
-
async function runPingDiagnostics(node, peerPubkeys, options = {}) {
|
|
254
|
-
const { rounds = 3, timeout = DEFAULT_PING_TIMEOUT, interval = 1e3, eventConfig = { enableLogging: false } } = options;
|
|
255
|
-
const customLogger = (level, message, data) => {
|
|
256
|
-
const prefix = "[PingDiagnostics]";
|
|
257
|
-
if (eventConfig.customLogger) eventConfig.customLogger(level, `${prefix} ${message}`, data);
|
|
258
|
-
else if (eventConfig.enableLogging) console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || "");
|
|
259
|
-
};
|
|
260
|
-
customLogger("info", `Starting ping diagnostics: ${rounds} rounds, ${peerPubkeys.length} peers`);
|
|
261
|
-
const allRounds = [];
|
|
262
|
-
const peerStats = {};
|
|
263
|
-
peerPubkeys.forEach((pubkey) => {
|
|
264
|
-
peerStats[pubkey] = {
|
|
265
|
-
successCount: 0,
|
|
266
|
-
totalAttempts: 0,
|
|
267
|
-
latencies: [],
|
|
268
|
-
averageLatency: 0,
|
|
269
|
-
minLatency: Infinity,
|
|
270
|
-
maxLatency: 0,
|
|
271
|
-
successRate: 0
|
|
272
|
-
};
|
|
273
|
-
});
|
|
274
|
-
for (let round = 0; round < rounds; round++) {
|
|
275
|
-
customLogger("info", `Running ping round ${round + 1}/${rounds}`);
|
|
276
|
-
const results = await pingPeers(node, peerPubkeys, {
|
|
277
|
-
timeout,
|
|
278
|
-
eventConfig
|
|
279
|
-
});
|
|
280
|
-
allRounds.push(results);
|
|
281
|
-
results.forEach((result) => {
|
|
282
|
-
const stats = peerStats[result.pubkey];
|
|
283
|
-
stats.totalAttempts++;
|
|
284
|
-
if (result.success && result.latency !== void 0) {
|
|
285
|
-
stats.successCount++;
|
|
286
|
-
stats.latencies.push(result.latency);
|
|
287
|
-
stats.minLatency = Math.min(stats.minLatency, result.latency);
|
|
288
|
-
stats.maxLatency = Math.max(stats.maxLatency, result.latency);
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
if (round < rounds - 1) await new Promise((resolve) => setTimeout(resolve, interval));
|
|
292
|
-
}
|
|
293
|
-
let totalLatencies = [];
|
|
294
|
-
let totalSuccesses = 0;
|
|
295
|
-
let totalAttempts = 0;
|
|
296
|
-
Object.keys(peerStats).forEach((pubkey) => {
|
|
297
|
-
const stats = peerStats[pubkey];
|
|
298
|
-
stats.averageLatency = stats.latencies.length > 0 ? stats.latencies.reduce((a, b) => a + b, 0) / stats.latencies.length : 0;
|
|
299
|
-
stats.successRate = stats.totalAttempts > 0 ? stats.successCount / stats.totalAttempts * 100 : 0;
|
|
300
|
-
if (stats.minLatency === Infinity) stats.minLatency = 0;
|
|
301
|
-
totalLatencies.push(...stats.latencies);
|
|
302
|
-
totalSuccesses += stats.successCount;
|
|
303
|
-
totalAttempts += stats.totalAttempts;
|
|
304
|
-
delete stats.latencies;
|
|
305
|
-
});
|
|
306
|
-
const averageLatency = totalLatencies.length > 0 ? totalLatencies.reduce((a, b) => a + b, 0) / totalLatencies.length : 0;
|
|
307
|
-
const successRate = totalAttempts > 0 ? totalSuccesses / totalAttempts * 100 : 0;
|
|
308
|
-
const peerLatencies = Object.entries(peerStats).filter(([_, stats]) => stats.averageLatency > 0).map(([pubkey, stats]) => ({
|
|
309
|
-
pubkey,
|
|
310
|
-
latency: stats.averageLatency
|
|
311
|
-
}));
|
|
312
|
-
const fastestPeer = peerLatencies.length > 0 ? peerLatencies.reduce((min, peer) => peer.latency < min.latency ? peer : min).pubkey : void 0;
|
|
313
|
-
const slowestPeer = peerLatencies.length > 0 ? peerLatencies.reduce((max, peer) => peer.latency > max.latency ? peer : max).pubkey : void 0;
|
|
314
|
-
const summary = {
|
|
315
|
-
totalRounds: rounds,
|
|
316
|
-
totalPeers: peerPubkeys.length,
|
|
317
|
-
averageLatency: Math.round(averageLatency * 100) / 100,
|
|
318
|
-
successRate: Math.round(successRate * 100) / 100,
|
|
319
|
-
fastestPeer,
|
|
320
|
-
slowestPeer
|
|
321
|
-
};
|
|
322
|
-
customLogger("info", `Ping diagnostics completed`, summary);
|
|
323
|
-
return {
|
|
324
|
-
summary,
|
|
325
|
-
rounds: allRounds,
|
|
326
|
-
peerStats
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
//#endregion
|
|
331
|
-
Object.defineProperty(exports, 'DEFAULT_PING_INTERVAL', {
|
|
332
|
-
enumerable: true,
|
|
333
|
-
get: function () {
|
|
334
|
-
return DEFAULT_PING_INTERVAL;
|
|
335
|
-
}
|
|
336
|
-
});
|
|
337
|
-
Object.defineProperty(exports, 'DEFAULT_PING_RELAYS', {
|
|
338
|
-
enumerable: true,
|
|
339
|
-
get: function () {
|
|
340
|
-
return DEFAULT_PING_RELAYS;
|
|
341
|
-
}
|
|
342
|
-
});
|
|
343
|
-
Object.defineProperty(exports, 'DEFAULT_PING_TIMEOUT', {
|
|
344
|
-
enumerable: true,
|
|
345
|
-
get: function () {
|
|
346
|
-
return DEFAULT_PING_TIMEOUT;
|
|
347
|
-
}
|
|
348
|
-
});
|
|
349
|
-
Object.defineProperty(exports, 'createPingMonitor', {
|
|
350
|
-
enumerable: true,
|
|
351
|
-
get: function () {
|
|
352
|
-
return createPingMonitor;
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
Object.defineProperty(exports, 'pingPeer', {
|
|
356
|
-
enumerable: true,
|
|
357
|
-
get: function () {
|
|
358
|
-
return pingPeer;
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
Object.defineProperty(exports, 'pingPeers', {
|
|
362
|
-
enumerable: true,
|
|
363
|
-
get: function () {
|
|
364
|
-
return pingPeers;
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
Object.defineProperty(exports, 'pingPeersFromCredentials', {
|
|
368
|
-
enumerable: true,
|
|
369
|
-
get: function () {
|
|
370
|
-
return pingPeersFromCredentials;
|
|
371
|
-
}
|
|
372
|
-
});
|
|
373
|
-
Object.defineProperty(exports, 'runPingDiagnostics', {
|
|
374
|
-
enumerable: true,
|
|
375
|
-
get: function () {
|
|
376
|
-
return runPingDiagnostics;
|
|
377
|
-
}
|
|
378
|
-
});
|
|
379
|
-
//# sourceMappingURL=ping-BtVhKocl.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ping-BtVhKocl.cjs","names":["createBifrostNode","connectNode","NodeError"],"sources":["../node_modules/@frostr/igloo-core/dist/ping.js"],"sourcesContent":["import { createBifrostNode, connectNode, closeNode } from './node.js';\nimport { NodeError } from './types.js';\n/**\n * Default relay URLs for ping functionality\n */\nexport const DEFAULT_PING_RELAYS = [\n \"wss://relay.damus.io\",\n \"wss://relay.primal.net\"\n];\n/**\n * Default ping timeout in milliseconds\n */\nexport const DEFAULT_PING_TIMEOUT = 5000;\n/**\n * Default ping interval for monitoring in milliseconds\n */\nexport const DEFAULT_PING_INTERVAL = 30000;\n/**\n * Ping a specific peer using bifrost ping protocol\n */\nexport async function pingPeer(node, peerPubkey, options = {}) {\n const { timeout = DEFAULT_PING_TIMEOUT, eventConfig = { enableLogging: false } } = options;\n return new Promise((resolve) => {\n let isResolved = false;\n let timeoutId = null;\n const startTime = Date.now();\n let onPingResponse = null;\n let onPingError = null;\n const safeResolve = (result) => {\n if (!isResolved) {\n isResolved = true;\n // Clear timeout\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n // Remove event listeners to prevent memory leaks\n if (onPingResponse) {\n const nodeAny = node;\n if (typeof nodeAny.off === 'function') {\n nodeAny.off('/ping/sender/ret', onPingResponse);\n }\n else if (typeof nodeAny.removeListener === 'function') {\n nodeAny.removeListener('/ping/sender/ret', onPingResponse);\n }\n onPingResponse = null;\n }\n if (onPingError) {\n const nodeAny = node;\n if (typeof nodeAny.off === 'function') {\n nodeAny.off('/ping/sender/err', onPingError);\n }\n else if (typeof nodeAny.removeListener === 'function') {\n nodeAny.removeListener('/ping/sender/err', onPingError);\n }\n onPingError = null;\n }\n resolve(result);\n }\n };\n const customLogger = (level, message, data) => {\n const prefix = `[pingPeer:${peerPubkey.slice(0, 8)}]`;\n if (eventConfig.customLogger) {\n eventConfig.customLogger(level, `${prefix} ${message}`, data);\n }\n else if (eventConfig.enableLogging) {\n console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || '');\n }\n };\n // Set up timeout\n timeoutId = setTimeout(() => {\n safeResolve({\n success: false,\n pubkey: peerPubkey,\n error: `Ping timeout after ${timeout}ms`,\n timestamp: new Date()\n });\n }, timeout);\n try {\n // Set up event listeners for ping response\n onPingResponse = (peerData) => {\n if (peerData && peerData.pubkey === peerPubkey) {\n const latency = Date.now() - startTime;\n customLogger('info', `Ping successful, latency: ${latency}ms`);\n safeResolve({\n success: true,\n pubkey: peerPubkey,\n latency,\n policy: peerData.policy,\n timestamp: new Date()\n });\n }\n };\n onPingError = (reason, msg) => {\n customLogger('error', `Ping failed: ${reason}`);\n safeResolve({\n success: false,\n pubkey: peerPubkey,\n error: reason,\n timestamp: new Date()\n });\n };\n // Attach event listeners\n node.on('/ping/sender/ret', onPingResponse);\n node.on('/ping/sender/err', onPingError);\n // Send ping request\n node.req.ping(peerPubkey).then(result => {\n if (result.ok) {\n // Success is handled by the event listener\n customLogger('debug', 'Ping request sent successfully');\n }\n else {\n safeResolve({\n success: false,\n pubkey: peerPubkey,\n error: result.err,\n timestamp: new Date()\n });\n }\n }).catch(error => {\n customLogger('error', `Ping request failed: ${error.message}`);\n safeResolve({\n success: false,\n pubkey: peerPubkey,\n error: error.message,\n timestamp: new Date()\n });\n });\n }\n catch (error) {\n customLogger('error', `Ping setup failed: ${error.message}`);\n safeResolve({\n success: false,\n pubkey: peerPubkey,\n error: error.message,\n timestamp: new Date()\n });\n }\n });\n}\n/**\n * Ping multiple peers concurrently\n */\nexport async function pingPeers(node, peerPubkeys, options = {}) {\n const { timeout = DEFAULT_PING_TIMEOUT, eventConfig = { enableLogging: false } } = options;\n const customLogger = (level, message, data) => {\n const prefix = '[pingPeers]';\n if (eventConfig.customLogger) {\n eventConfig.customLogger(level, `${prefix} ${message}`, data);\n }\n else if (eventConfig.enableLogging) {\n console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || '');\n }\n };\n customLogger('info', `Pinging ${peerPubkeys.length} peers`);\n try {\n // Ping all peers concurrently\n const pingPromises = peerPubkeys.map(pubkey => pingPeer(node, pubkey, { timeout, eventConfig }));\n const results = await Promise.all(pingPromises);\n const successCount = results.filter(r => r.success).length;\n customLogger('info', `Ping completed: ${successCount}/${results.length} peers responded`);\n return results;\n }\n catch (error) {\n customLogger('error', `Ping operation failed: ${error.message}`);\n // Return failed results for all peers\n return peerPubkeys.map(pubkey => ({\n success: false,\n pubkey,\n error: error.message,\n timestamp: new Date()\n }));\n }\n}\n/**\n * Create a ping monitor for continuous peer monitoring\n */\nexport function createPingMonitor(node, peerPubkeys, config = {}) {\n const { interval = DEFAULT_PING_INTERVAL, timeout = DEFAULT_PING_TIMEOUT, onPingResult, onError, relays = DEFAULT_PING_RELAYS, eventConfig = { enableLogging: false } } = config;\n let intervalId = null;\n let isRunning = false;\n const customLogger = (level, message, data) => {\n const prefix = '[PingMonitor]';\n if (eventConfig.customLogger) {\n eventConfig.customLogger(level, `${prefix} ${message}`, data);\n }\n else if (eventConfig.enableLogging) {\n console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || '');\n }\n };\n const ping = async () => {\n try {\n customLogger('debug', `Pinging ${peerPubkeys.length} peers`);\n const results = await pingPeers(node, peerPubkeys, {\n timeout,\n eventConfig\n });\n // Call result callback for each peer\n if (onPingResult) {\n results.forEach(result => {\n try {\n onPingResult(result);\n }\n catch (error) {\n customLogger('error', `Error in ping result callback: ${error.message}`);\n }\n });\n }\n return results;\n }\n catch (error) {\n customLogger('error', `Ping monitor error: ${error.message}`);\n if (onError) {\n onError(error, 'ping');\n }\n return [];\n }\n };\n const start = () => {\n if (isRunning) {\n customLogger('warn', 'Ping monitor is already running');\n return;\n }\n customLogger('info', `Starting ping monitor (interval: ${interval}ms, timeout: ${timeout}ms)`);\n isRunning = true;\n // Initial ping\n ping().catch(error => {\n customLogger('error', `Initial ping failed: ${error.message}`);\n });\n // Set up interval\n intervalId = setInterval(() => {\n if (isRunning) {\n ping().catch(error => {\n customLogger('error', `Scheduled ping failed: ${error.message}`);\n });\n }\n }, interval);\n };\n const stop = () => {\n if (!isRunning) {\n customLogger('warn', 'Ping monitor is not running');\n return;\n }\n customLogger('info', 'Stopping ping monitor');\n isRunning = false;\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n };\n const cleanup = () => {\n stop();\n customLogger('debug', 'Ping monitor cleaned up');\n };\n return {\n start,\n stop,\n get isRunning() { return isRunning; },\n ping,\n cleanup\n };\n}\n/**\n * Ping peers from credentials (convenience function)\n */\nexport async function pingPeersFromCredentials(groupCredential, shareCredential, options = {}) {\n const { relays = DEFAULT_PING_RELAYS, timeout = DEFAULT_PING_TIMEOUT, eventConfig = { enableLogging: false } } = options;\n let node = null;\n try {\n // Create temporary node for pinging\n node = createBifrostNode({ group: groupCredential, share: shareCredential, relays }, eventConfig);\n await connectNode(node);\n // Extract peer pubkeys from the group\n const { extractPeersFromCredentials } = await import('./peer.js');\n const peerPubkeys = extractPeersFromCredentials(groupCredential, shareCredential);\n // Ping all peers\n const results = await pingPeers(node, peerPubkeys, { timeout, eventConfig });\n return results;\n }\n catch (error) {\n throw new NodeError(`Failed to ping peers: ${error.message}`, { error });\n }\n finally {\n if (node) {\n try {\n closeNode(node);\n }\n catch (error) {\n console.warn('[pingPeersFromCredentials] Error during cleanup:', error);\n }\n }\n }\n}\n/**\n * Create a comprehensive ping test for network diagnostics\n */\nexport async function runPingDiagnostics(node, peerPubkeys, options = {}) {\n const { rounds = 3, timeout = DEFAULT_PING_TIMEOUT, interval = 1000, eventConfig = { enableLogging: false } } = options;\n const customLogger = (level, message, data) => {\n const prefix = '[PingDiagnostics]';\n if (eventConfig.customLogger) {\n eventConfig.customLogger(level, `${prefix} ${message}`, data);\n }\n else if (eventConfig.enableLogging) {\n console.log(`${prefix} [${level.toUpperCase()}] ${message}`, data || '');\n }\n };\n customLogger('info', `Starting ping diagnostics: ${rounds} rounds, ${peerPubkeys.length} peers`);\n const allRounds = [];\n const peerStats = {};\n // Initialize peer stats\n peerPubkeys.forEach(pubkey => {\n peerStats[pubkey] = {\n successCount: 0,\n totalAttempts: 0,\n latencies: [],\n averageLatency: 0,\n minLatency: Infinity,\n maxLatency: 0,\n successRate: 0\n };\n });\n // Run ping rounds\n for (let round = 0; round < rounds; round++) {\n customLogger('info', `Running ping round ${round + 1}/${rounds}`);\n const results = await pingPeers(node, peerPubkeys, { timeout, eventConfig });\n allRounds.push(results);\n // Update peer stats\n results.forEach(result => {\n const stats = peerStats[result.pubkey];\n stats.totalAttempts++;\n if (result.success && result.latency !== undefined) {\n stats.successCount++;\n stats.latencies.push(result.latency);\n stats.minLatency = Math.min(stats.minLatency, result.latency);\n stats.maxLatency = Math.max(stats.maxLatency, result.latency);\n }\n });\n // Wait between rounds (except for the last round)\n if (round < rounds - 1) {\n await new Promise(resolve => setTimeout(resolve, interval));\n }\n }\n // Calculate final statistics\n let totalLatencies = [];\n let totalSuccesses = 0;\n let totalAttempts = 0;\n Object.keys(peerStats).forEach(pubkey => {\n const stats = peerStats[pubkey];\n stats.averageLatency = stats.latencies.length > 0\n ? stats.latencies.reduce((a, b) => a + b, 0) / stats.latencies.length\n : 0;\n stats.successRate = stats.totalAttempts > 0\n ? (stats.successCount / stats.totalAttempts) * 100\n : 0;\n if (stats.minLatency === Infinity)\n stats.minLatency = 0;\n totalLatencies.push(...stats.latencies);\n totalSuccesses += stats.successCount;\n totalAttempts += stats.totalAttempts;\n // Remove internal latencies array from final output\n delete stats.latencies;\n });\n const averageLatency = totalLatencies.length > 0\n ? totalLatencies.reduce((a, b) => a + b, 0) / totalLatencies.length\n : 0;\n const successRate = totalAttempts > 0 ? (totalSuccesses / totalAttempts) * 100 : 0;\n // Find fastest and slowest peers\n const peerLatencies = Object.entries(peerStats)\n .filter(([_, stats]) => stats.averageLatency > 0)\n .map(([pubkey, stats]) => ({ pubkey, latency: stats.averageLatency }));\n const fastestPeer = peerLatencies.length > 0\n ? peerLatencies.reduce((min, peer) => peer.latency < min.latency ? peer : min).pubkey\n : undefined;\n const slowestPeer = peerLatencies.length > 0\n ? peerLatencies.reduce((max, peer) => peer.latency > max.latency ? peer : max).pubkey\n : undefined;\n const summary = {\n totalRounds: rounds,\n totalPeers: peerPubkeys.length,\n averageLatency: Math.round(averageLatency * 100) / 100,\n successRate: Math.round(successRate * 100) / 100,\n fastestPeer,\n slowestPeer\n };\n customLogger('info', `Ping diagnostics completed`, summary);\n return {\n summary,\n rounds: allRounds,\n peerStats\n };\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/dist/ping-D5fpMhGC.cjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
require('./types-B-TLIS13.cjs');
|
|
2
|
-
require('./nostr-Hv2tsnuI.cjs');
|
|
3
|
-
require('./policy-8HcjulLD.cjs');
|
|
4
|
-
require('./node-C2UpE11T.cjs');
|
|
5
|
-
const require_ping = require('./ping-BtVhKocl.cjs');
|
|
6
|
-
|
|
7
|
-
exports.createPingMonitor = require_ping.createPingMonitor;
|
|
8
|
-
exports.pingPeer = require_ping.pingPeer;
|
|
9
|
-
exports.pingPeers = require_ping.pingPeers;
|
|
10
|
-
exports.pingPeersFromCredentials = require_ping.pingPeersFromCredentials;
|
|
11
|
-
exports.runPingDiagnostics = require_ping.runPingDiagnostics;
|