@apocaliss92/nodelink-js 0.2.4 → 0.3.4

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/index.d.cts CHANGED
@@ -7011,7 +7011,7 @@ interface DiscoveredDevice {
7011
7011
  /** Firmware version (if available) */
7012
7012
  firmwareVersion?: string;
7013
7013
  /** Discovery method used to find this device */
7014
- discoveryMethod: "http_probe" | "udp_broadcast" | "udp_direct";
7014
+ discoveryMethod: "http_probe" | "udp_broadcast" | "udp_direct" | "tcp_port_scan" | "arp" | "dhcp" | "onvif";
7015
7015
  /** Whether HTTPS is supported */
7016
7016
  supportsHttps?: boolean;
7017
7017
  /** Whether the device is accessible via HTTP */
@@ -7041,6 +7041,20 @@ type DiscoveryOptions = {
7041
7041
  enableUdpDiscovery?: boolean;
7042
7042
  /** Whether to enable HTTP port scanning (default: true) */
7043
7043
  enableHttpScanning?: boolean;
7044
+ /** Whether to enable TCP port 9000 scanning (Baichuan protocol). Works with all Reolink devices. (default: false) */
7045
+ enableTcpPortScan?: boolean;
7046
+ /** Timeout per TCP port probe in milliseconds (default: 1500) */
7047
+ tcpProbeTimeoutMs?: number;
7048
+ /** Whether to enable ARP table lookup for Reolink MAC prefix (ec:71:db). Similar to Home Assistant DHCP discovery. (default: false) */
7049
+ enableArpLookup?: boolean;
7050
+ /** Whether to enable passive DHCP listening for Reolink devices (requires root/NET_RAW). (default: false) */
7051
+ enableDhcpListener?: boolean;
7052
+ /** Timeout for DHCP listener in milliseconds (default: 10000) */
7053
+ dhcpListenerTimeoutMs?: number;
7054
+ /** Whether to enable ONVIF WS-Discovery (multicast probe on 239.255.255.250:3702). Most Reolink cameras support ONVIF. (default: false) */
7055
+ enableOnvifDiscovery?: boolean;
7056
+ /** Timeout for ONVIF WS-Discovery in milliseconds (default: 5000) */
7057
+ onvifDiscoveryTimeoutMs?: number;
7044
7058
  /** Ports to scan for HTTP (default: [80, 443]) */
7045
7059
  httpPorts?: number[];
7046
7060
  };
@@ -7052,6 +7066,36 @@ declare function discoverViaHttpScan(options: DiscoveryOptions): Promise<Discove
7052
7066
  * Discover devices via UDP broadcast (for battery cameras).
7053
7067
  */
7054
7068
  declare function discoverViaUdpBroadcast(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
7069
+ /**
7070
+ * Discover Reolink devices by reading the system ARP table and filtering
7071
+ * for Reolink MAC address prefixes (EC:71:DB). This mirrors the DHCP-based
7072
+ * discovery used by Home Assistant but reads the already-populated ARP cache
7073
+ * instead of sniffing live DHCP packets.
7074
+ *
7075
+ * Works on Linux, macOS, and Docker containers (reads /proc/net/arp or `arp -a`).
7076
+ */
7077
+ declare function discoverViaArpTable(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
7078
+ /**
7079
+ * Discover Reolink devices by passively listening for DHCP traffic (port 67/68).
7080
+ * Parses DHCP ACK/REQUEST packets and filters for Reolink MAC prefix or hostname.
7081
+ * Requires root or CAP_NET_RAW (typical in Docker with --net=host).
7082
+ *
7083
+ * This mirrors Home Assistant's DHCP discovery: matches hostname "reolink*" or MAC "EC:71:DB".
7084
+ */
7085
+ declare function discoverViaDhcpListener(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
7086
+ /**
7087
+ * Discover Reolink devices by scanning TCP port 9000 (Baichuan protocol).
7088
+ * This is the most reliable method — every Reolink camera/NVR listens on port 9000.
7089
+ * It only checks if the port is open; it does not authenticate or extract device info.
7090
+ */
7091
+ declare function discoverViaTcpPortScan(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
7092
+ /**
7093
+ * Discover devices via ONVIF WS-Discovery (multicast probe on 239.255.255.250:3702).
7094
+ * Most Reolink cameras and NVRs support ONVIF and will respond with their service
7095
+ * endpoint (XAddrs), model, and scopes. This is the standard IP camera discovery
7096
+ * mechanism used by NVRs, VMS, and similar software.
7097
+ */
7098
+ declare function discoverViaOnvif(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
7055
7099
  /**
7056
7100
  * Discover Reolink devices on the local network using multiple methods.
7057
7101
  * This is a "best effort" discovery that tries HTTP port scanning and UDP broadcast.
@@ -7074,52 +7118,41 @@ declare function discoverViaUdpBroadcast(options: DiscoveryOptions): Promise<Dis
7074
7118
  */
7075
7119
  declare function discoverReolinkDevices(options?: DiscoveryOptions): Promise<DiscoveredDevice[]>;
7076
7120
 
7077
- interface AutodiscoveryClientOptions {
7078
- /** Network CIDR to scan (e.g., "192.168.1.0/24"). If not provided, auto-detects local network */
7079
- networkCidr?: string;
7080
- /** Username to use for authentication attempts (default: "admin") */
7081
- username?: string;
7082
- /** Password to use for authentication attempts (default: empty, will try unauthenticated) */
7083
- password?: string;
7084
- /** Timeout per HTTP probe in milliseconds (default: 2000) */
7085
- httpProbeTimeoutMs?: number;
7086
- /** Maximum number of concurrent HTTP probes (default: 50) */
7087
- maxConcurrentProbes?: number;
7088
- /** Logger instance for debug output */
7089
- logger?: Logger;
7090
- /** Ports to scan for HTTP (default: [80, 443]) */
7091
- httpPorts?: number[];
7092
- /** Interval between discovery scans in milliseconds (default: 60000 = 60 seconds) */
7121
+ interface AutodiscoveryClientOptions extends DiscoveryOptions {
7122
+ /** Interval between discovery scans in milliseconds (default: 120000 = 2 minutes) */
7093
7123
  scanIntervalMs?: number;
7094
7124
  /** Whether to start discovery automatically on construction (default: false) */
7095
7125
  autoStart?: boolean;
7096
- /** Discovery method to use: "http" (TCP/IPC), "udp" (broadcast), or "both" (default: "http") */
7097
- discoveryMethod?: "http" | "udp" | "both";
7098
- /** Timeout for UDP broadcast in milliseconds (default: 5000) */
7099
- udpBroadcastTimeoutMs?: number;
7126
+ /** Called when new (previously unseen) devices are discovered */
7127
+ onDeviceDiscovered?: (device: DiscoveredDevice) => void;
7128
+ /** Called when an existing device's info is updated (e.g. model filled in) */
7129
+ onDeviceUpdated?: (device: DiscoveredDevice) => void;
7100
7130
  }
7101
7131
  /**
7102
- * Client per discovery continuato di telecamere Reolink sulla rete.
7103
- * Supporta TCP/IPC (HTTP/HTTPS scanning) e/o UDP broadcast discovery.
7132
+ * Continuous discovery client for Reolink cameras on the network.
7133
+ * Runs periodic scans using all configured discovery methods and maintains
7134
+ * an always-up-to-date list of discovered devices.
7104
7135
  *
7105
- * Mantiene una lista aggiornata delle telecamere discoverate e offre
7106
- * metodi per ottenere la lista corrente e controllare il processo di discovery.
7136
+ * Supports callbacks for new/updated devices, making it ideal for plugins
7137
+ * that want to be notified as cameras appear (e.g. battery cameras waking up).
7107
7138
  *
7108
7139
  * @example
7109
7140
  * ```typescript
7110
7141
  * const client = new AutodiscoveryClient({
7111
- * username: "admin",
7112
- * password: "password",
7113
- * scanIntervalMs: 30000, // 30 secondi
7142
+ * enableArpLookup: true,
7143
+ * enableOnvifDiscovery: true,
7144
+ * scanIntervalMs: 60_000,
7114
7145
  * autoStart: true,
7146
+ * onDeviceDiscovered: (device) => {
7147
+ * console.log(`New device: ${device.host} (${device.model})`);
7148
+ * },
7115
7149
  * });
7116
7150
  *
7117
- * // Ottieni la lista corrente
7151
+ * // Get the current list
7118
7152
  * const devices = client.getDiscoveredDevices();
7119
- * console.log(`Trovate ${devices.length} telecamere`);
7120
7153
  *
7121
- * // Ferma il discovery
7122
- * await client.stop();
7154
+ * // Stop
7155
+ * client.stop();
7123
7156
  * ```
7124
7157
  */
7125
7158
  declare class AutodiscoveryClient {
@@ -7128,70 +7161,42 @@ declare class AutodiscoveryClient {
7128
7161
  private scanTimer;
7129
7162
  private isRunning;
7130
7163
  private currentScanPromise;
7131
- /**
7132
- * Costruttore del client di autodiscovery.
7133
- *
7134
- * @param options - Opzioni di configurazione per il discovery
7135
- */
7136
7164
  constructor(options?: AutodiscoveryClientOptions);
7137
7165
  /**
7138
- * Avvia il discovery continuato.
7139
- * Se già in esecuzione, non fa nulla.
7166
+ * Start continuous discovery. If already running, does nothing.
7140
7167
  */
7141
7168
  start(): void;
7142
7169
  /**
7143
- * Ferma il discovery continuato.
7144
- * Se non è in esecuzione, non fa nulla.
7170
+ * Stop continuous discovery. If not running, does nothing.
7145
7171
  */
7146
7172
  stop(): void;
7147
7173
  /**
7148
- * Restituisce la lista corrente delle telecamere discoverate.
7149
- *
7150
- * @returns Array di dispositivi discoverati, ordinati per host
7174
+ * Returns the current list of discovered devices, sorted by host IP.
7151
7175
  */
7152
7176
  getDiscoveredDevices(): DiscoveredDevice[];
7153
7177
  /**
7154
- * Restituisce il numero di telecamere attualmente discoverate.
7155
- *
7156
- * @returns Numero di dispositivi discoverati
7178
+ * Returns the number of currently discovered devices.
7157
7179
  */
7158
7180
  getDeviceCount(): number;
7159
7181
  /**
7160
- * Verifica se il discovery è attualmente in esecuzione.
7161
- *
7162
- * @returns `true` se il discovery è in esecuzione, `false` altrimenti
7182
+ * Returns whether continuous discovery is currently running.
7163
7183
  */
7164
7184
  isActive(): boolean;
7165
7185
  /**
7166
- * Forza un scan immediato (non aspetta l'intervallo programmato).
7167
- * Se uno scan è già in corso, attende il completamento prima di avviarne uno nuovo.
7168
- *
7169
- * @returns Promise che si risolve quando lo scan è completato
7186
+ * Force an immediate scan (doesn't wait for the scheduled interval).
7187
+ * If a scan is already in progress, waits for it to complete.
7170
7188
  */
7171
7189
  scanNow(): Promise<void>;
7172
7190
  /**
7173
- * Rimuove un dispositivo dalla lista (utile se si sa che non è più disponibile).
7174
- *
7175
- * @param host - Indirizzo IP del dispositivo da rimuovere
7176
- * @returns `true` se il dispositivo è stato rimosso, `false` se non era presente
7191
+ * Remove a device from the discovered list.
7177
7192
  */
7178
7193
  removeDevice(host: string): boolean;
7179
7194
  /**
7180
- * Pulisce tutte le telecamere discoverate dalla lista.
7195
+ * Clear all discovered devices.
7181
7196
  */
7182
7197
  clearDevices(): void;
7183
- /**
7184
- * Esegue un singolo scan della rete.
7185
- */
7186
7198
  private performScan;
7187
- /**
7188
- * Unisce le informazioni di un dispositivo esistente con quelle di un nuovo scan.
7189
- * Restituisce il dispositivo aggiornato se ci sono state modifiche, altrimenti `null`.
7190
- */
7191
7199
  private mergeDeviceInfo;
7192
- /**
7193
- * Programma il prossimo scan.
7194
- */
7195
7200
  private scheduleNextScan;
7196
7201
  }
7197
7202
 
@@ -8751,4 +8756,4 @@ declare class CompositeRtspServer extends EventEmitter<{
8751
8756
  getClientCount(): number;
8752
8757
  }
8753
8758
 
8754
- export { type AIDetectionState, type AIEvent, type AIState, type AbilityInfo, type AccessUserListConfig, AesStreamDecryptor, type AiAlarmConfig, type AiConfig, type AiDenoiseConfig, type AiKey, type AiTypesCacheEntry, type AnyBuffer, type AudioAlarmParams, type AudioCfgConfig, type AudioConfig, type AudioTaskConfig, type AutoDetectInputs, type AutoDetectMode, type AutoDetectResult, AutodiscoveryClient, type AutodiscoveryClientOptions, BC_AES_IV, BC_CLASS_FILE_DOWNLOAD, BC_CLASS_LEGACY, BC_CLASS_MODERN_20, BC_CLASS_MODERN_24, BC_CLASS_MODERN_24_ALT, BC_CMD_ID_ABILITY_INFO, BC_CMD_ID_ALARM_EVENT_LIST, BC_CMD_ID_AUDIO_ALARM_PLAY, BC_CMD_ID_CHANNEL_INFO_ALL, BC_CMD_ID_CMD_123, BC_CMD_ID_CMD_209, BC_CMD_ID_CMD_265, BC_CMD_ID_CMD_440, BC_CMD_ID_COVER_PREVIEW, BC_CMD_ID_COVER_RESPONSE, BC_CMD_ID_COVER_STANDALONE_458, BC_CMD_ID_COVER_STANDALONE_459, BC_CMD_ID_COVER_STANDALONE_460, BC_CMD_ID_COVER_STANDALONE_461, BC_CMD_ID_COVER_STANDALONE_462, BC_CMD_ID_DING_DONG_CTRL, BC_CMD_ID_DING_DONG_OPT, BC_CMD_ID_FILE_INFO_LIST_CLOSE, BC_CMD_ID_FILE_INFO_LIST_DL_VIDEO, BC_CMD_ID_FILE_INFO_LIST_DOWNLOAD, BC_CMD_ID_FILE_INFO_LIST_GET, BC_CMD_ID_FILE_INFO_LIST_OPEN, BC_CMD_ID_FILE_INFO_LIST_REPLAY, BC_CMD_ID_FILE_INFO_LIST_STOP, BC_CMD_ID_FIND_REC_VIDEO_CLOSE, BC_CMD_ID_FIND_REC_VIDEO_GET, BC_CMD_ID_FIND_REC_VIDEO_OPEN, BC_CMD_ID_FLOODLIGHT_STATUS_LIST, BC_CMD_ID_GET_ABILITY_SUPPORT, BC_CMD_ID_GET_ACCESS_USER_LIST, BC_CMD_ID_GET_AI_ALARM, BC_CMD_ID_GET_AI_CFG, BC_CMD_ID_GET_AI_DENOISE, BC_CMD_ID_GET_AUDIO_ALARM, BC_CMD_ID_GET_AUDIO_CFG, BC_CMD_ID_GET_AUDIO_TASK, BC_CMD_ID_GET_BATTERY_INFO, BC_CMD_ID_GET_BATTERY_INFO_LIST, BC_CMD_ID_GET_DAY_NIGHT_THRESHOLD, BC_CMD_ID_GET_DAY_RECORDS, BC_CMD_ID_GET_DING_DONG_CFG, BC_CMD_ID_GET_DING_DONG_LIST, BC_CMD_ID_GET_DING_DONG_SILENT, BC_CMD_ID_GET_EMAIL_TASK, BC_CMD_ID_GET_FTP_TASK, BC_CMD_ID_GET_HDD_INFO_LIST, BC_CMD_ID_GET_KIT_AP_CFG, BC_CMD_ID_GET_LED_STATE, BC_CMD_ID_GET_MOTION_ALARM, BC_CMD_ID_GET_ONLINE_USER_LIST, BC_CMD_ID_GET_OSD_DATETIME, BC_CMD_ID_GET_PIR_INFO, BC_CMD_ID_GET_PTZ_POSITION, BC_CMD_ID_GET_PTZ_PRESET, BC_CMD_ID_GET_RECORD, BC_CMD_ID_GET_RECORD_CFG, BC_CMD_ID_GET_REC_ENC_CFG, BC_CMD_ID_GET_SIREN_STATUS, BC_CMD_ID_GET_SLEEP_STATE, BC_CMD_ID_GET_STREAM_INFO_LIST, BC_CMD_ID_GET_SUPPORT, BC_CMD_ID_GET_SYSTEM_GENERAL, BC_CMD_ID_GET_TIMELAPSE_CFG, BC_CMD_ID_GET_VIDEO_INPUT, BC_CMD_ID_GET_WHITE_LED, BC_CMD_ID_GET_WIFI, BC_CMD_ID_GET_WIFI_SIGNAL, BC_CMD_ID_GET_ZOOM_FOCUS, BC_CMD_ID_LOGIN, BC_CMD_ID_LOGOUT, BC_CMD_ID_PING, BC_CMD_ID_PTZ_CONTROL, BC_CMD_ID_PTZ_CONTROL_PRESET, BC_CMD_ID_PUSH_COORDINATE_POINT_LIST, BC_CMD_ID_PUSH_DINGDONG_LIST, BC_CMD_ID_PUSH_NET_INFO, BC_CMD_ID_PUSH_SERIAL, BC_CMD_ID_PUSH_SLEEP_STATUS, BC_CMD_ID_PUSH_VIDEO_INPUT, BC_CMD_ID_QUICK_REPLY_PLAY, BC_CMD_ID_SET_AI_ALARM, BC_CMD_ID_SET_AI_CFG, BC_CMD_ID_SET_AUDIO_TASK, BC_CMD_ID_SET_DING_DONG_CFG, BC_CMD_ID_SET_DING_DONG_SILENT, BC_CMD_ID_SET_MOTION_ALARM, BC_CMD_ID_SET_PIR_INFO, BC_CMD_ID_SET_WHITE_LED_STATE, BC_CMD_ID_SET_WHITE_LED_TASK, BC_CMD_ID_SET_ZOOM_FOCUS, BC_CMD_ID_SUPPORT, BC_CMD_ID_TALK, BC_CMD_ID_TALK_ABILITY, BC_CMD_ID_TALK_CONFIG, BC_CMD_ID_TALK_RESET, BC_CMD_ID_UDP_KEEP_ALIVE, BC_CMD_ID_VIDEO, BC_CMD_ID_VIDEO_STOP, BC_MAGIC, BC_MAGIC_REV, BC_TCP_DEFAULT_PORT, BC_XML_KEY, type BaichuanCachedPush, BaichuanClient, type BaichuanClientOptions, type BaichuanCoordinatePointListPush, type BaichuanDingdongListPush, type BaichuanEndpointsServerOptions, BaichuanEventEmitter, type BaichuanFrame, BaichuanFrameParser, type BaichuanGetOsdDatetimeResult, type BaichuanHeader, BaichuanHlsServer, type BaichuanHlsServerOptions, BaichuanHttpStreamServer, type BaichuanHttpStreamServerOptions, type BaichuanLedState, BaichuanMjpegServer, type BaichuanMjpegServerOptions, type BaichuanNetInfoPush, type BaichuanOsdChannelName, type BaichuanOsdDatetime, type BaichuanRecordCfg, type BaichuanRecordSchedule, BaichuanRtspServer, type BaichuanRtspServerOptions, type BaichuanSerialPush, type BaichuanSettingsPushCacheEntry, type BaichuanSleepState, type BaichuanSleepStatusPush, type BaichuanStreamEncodeTable, type BaichuanStreamInfo, type BaichuanStreamInfoList, type BaichuanTransport, type BaichuanVideoInputPush, BaichuanVideoStream, type BaichuanVideoStreamOptions, BaichuanWebRTCServer, type BaichuanWebRTCServerOptions, type BaichuanWifi, type BaichuanWifiSignal, type BatteryInfo, type BatteryInfoResponse, type BcMedia, type BcMediaAac, type BcMediaAdpcm, BcMediaAnnexBDecoder, type BcMediaAnnexBDecoderStats, type BcMediaAnnexBInfo, type BcMediaAudioFrame, type BcMediaAudioType, BcMediaCodec, type BcMediaIframe, type BcMediaInfoV1, type BcMediaInfoV2, type BcMediaPframe, type BcMediaType, type BcMediaVideoFrame, type BcMediaVideoType, type BcUdpDiscoveryMethod, BcUdpStream, type BcUdpStreamOptions, type CgiAbility, type CgiAbilityChn, type CgiAbilityLeaf, type CgiAiKey, type CgiAiStateValue, type CgiAudioAlarmPlayParam, type CgiBattery, type CgiChannelStatusEntry, type CgiChnTypeInfoValue, type CgiDetectionState, type CgiDevInfo, type CgiDeviceInfoEntries, type CgiEnc, type CgiEncStream, type CgiEncValue, type CgiGetAbilityResponse, type CgiGetAbilityValue, type CgiGetAiStateResponse, type CgiGetChannelstatusResponse, type CgiGetChannelstatusValue, type CgiGetChnTypeInfoResponse, type CgiGetDevInfoResponse, type CgiGetDevInfoValue, type CgiGetEncResponse, type CgiGetOsdValue, type CgiGetRtspUrlResponse, type CgiGetRtspUrlValue, type CgiGetVideoclipsParams, type CgiNetPort, type CgiOsd, type CgiPirInfo, type CgiPtzPreset, type CgiSetOsdParam, type CgiSetPirInfoParam, type CgiSetWhiteLedParam, type CgiWhiteLed, type ChannelPushCacheEntry, type ChannelPushDataEntry, type ChannelRecordingFile, type ChannelStreamMetadata, type ChimeAlarmCfg, type ChimeCfg, type ChimeDevice, type ChimeParams, type CollectNvrDiagnosticsOptions, CompositeRtspServer, type CompositeRtspServerOptions, CompositeStream, type CompositeStreamOptions, type CompositeStreamPipOptions, DUAL_LENS_DUAL_MOTION_MODELS, DUAL_LENS_MODELS, DUAL_LENS_SINGLE_MOTION_MODELS, type DayNightThresholdConfig, type DebugConfig, type DebugOptions, type DeviceAbilities, type DeviceCapabilities, type DeviceCapabilitiesCacheEntry, type DeviceCapabilitiesDebugInfo, type DeviceCapabilitiesResult, type DeviceInfoResponse, type DeviceInputData, type DeviceObjectType, type DeviceStatusResponse, type DeviceSupportFlags, type DeviceType, type DiagnosticsCollectorResult, type DiagnosticsStreamKind, type DiscoveredDevice, type DiscoveryOptions, type DownloadRecordingParams, type DualLensChannelAnalysis, type DualLensChannelInfo, type EmailTaskConfig, type EncryptionProtocol, type Events, type EventsResponse, type FloodlightTaskConfig, type FtpTaskConfig, type GetRecordingVideoResult, type GetRecordingVideoStats, type GetVideoclipsParams, type GetVodUrlParams, H264RtpDepacketizer, H265RtpDepacketizer, type HardwiredChimeState, type HddInfoListConfig, type HlsCodec, type HlsHttpResponse, type HlsServerStatus, type HlsSession, HlsSessionManager, type HlsSessionManagerOptions, type HlsSessionParams, Intercom, type IntercomOptions, type JsonObject, type JsonPrimitive, type JsonValue, type LastSleepProbe, type LogLevel, type Logger, type LoggerCallback, type LoginResponseValue, type MaxEncryption, type MediaStream, type MjpegFrame, MjpegTransformer, type MjpegTransformerOptions, type MotionAlarmConfig, type MotionEvent, NVR_HUB_EXACT_TYPES, NVR_HUB_MODEL_PATTERNS, type NativeVideoStreamVariant, type NvrChannelsSummaryCacheEntry, type OnlineUserListConfig, type OsdChannel, type OsdConfig, type OsdTime, type ParsedRecordingFileName, type PipPosition, type PirConfig, type PirState, type PlaybackSnapshotStreamInfo, type PtzCommand, type PtzPosition, type PtzPreset, type RecEncConfig, type RecordingAudioCodec, type RecordingDetectionClass, type RecordingDevType, type RecordingFile, type RecordingPlaybackUrls, type RecordingStreamType, type RecordingVideoCodec, type RecordingVodFlags, type RecordingVodStreamHint, type RecordingsCacheEntry, type RecordingsQueueItem, type ReolinkAiNotification, ReolinkBaichuanApi, type ReolinkBaichuanChannelIdentity, type ReolinkBaichuanChannelInfo, type ReolinkBaichuanDeviceSummary, type ReolinkBaichuanNetworkInfo, type ReolinkBaichuanPorts, ReolinkCgiApi, type ReolinkCmdRequest, type ReolinkCmdResponse, type ReolinkCmdResponseExt, type ReolinkDayNightNotification, type ReolinkDeviceInfo, type ReolinkDeviceInfoTag, type ReolinkEvent, ReolinkHttpClient, type ReolinkHttpClientOptions, type ReolinkJson, type ReolinkMotionNotification, type ReolinkNvrChannelInfo, type ReolinkNvrDeviceGroupSummary, type ReolinkNvrDeviceGroupsResult, type ReolinkSimpleEvent, type ReolinkSimpleEventType, type ReolinkSupportedStream, type ReolinkVideoStreamOptionsResult, type ReolinkVisitorNotification, type ReplayHttpServer, type ReplayHttpServerOptions, type ResponseMediaStreamOptions, type Rfc4571ApiFactoryContext, type Rfc4571Client, Rfc4571Muxer, type Rfc4571ReplayServer, type Rfc4571ReplayServerOptions, type Rfc4571TcpServer, type Rfc4571TcpServerOptions, type RtpPacketizationOptions, type RtspCreateOptions, type RtspProxyServerOptions, type RtspStreamProfile, type RunAllDiagnosticsConsecutivelyParams, type RunAllDiagnosticsConsecutivelyResult, type RunMultifocalDiagnosticsConsecutivelyParams, type RunMultifocalDiagnosticsConsecutivelyResult, type SirenState, type SirenStatusConfig, type SleepState, type SleepStatus, type StreamMetadata, type StreamProfile, type StreamSamplingOptions, type StreamSamplingSelection, type SupportConfig, type SupportInfo, type SupportItem, type SystemGeneralConfig, type TalkAbility$1 as TalkAbility, type TalkAudioConfig, type TalkConfig, type TalkSession$1 as TalkSession, type TalkSessionInfo, type TimelapseCfgConfig, type TwoWayAudioConfig, type VideoCodec, type VideoInputConfig, type VideoParamSets, type VideoStreamOptions, type VideoStreamOptionsCacheEntry, type VideoType, type VideoclipClientInfo, type VideoclipModeDecision, type VideoclipThumbnailResult, type VideoclipTranscodeMode, type VodFile, type VodSearchResponse, type VodSearchResult, type VodSearchStatus, type WakeUpOptions, type WebRTCAnswer, type WebRTCIceCandidate, type WebRTCOffer, type WebRTCSessionInfo, type WhiteLedConfig, type WhiteLedState, type WirelessChimeSilentState, type ZoomFocusStatus, type ZoomFocusTriplet, abilitiesHasAny, aesDecrypt, aesEncrypt, asLogger, autoDetectDeviceType, bcDecrypt, bcEncrypt, bcHeaderHasPayloadOffset, buildAacAudioSpecificConfigHex, buildAbilityInfoExtensionXml, buildBinaryExtensionXml, buildChannelExtensionXml, buildFloodlightManualXml, buildHlsRedirectUrl, buildLoginXml, buildLogoutXml, buildPreviewStopXml, buildPreviewStopXmlV11, buildPreviewXml, buildPreviewXmlV11, buildPtzControlXml, buildPtzPresetXml, buildPtzPresetXmlV2, buildRfc4571Sdp, buildRtspPath, buildRtspUrl, buildSirenManualXml, buildSirenTimesXml, buildStartZoomFocusXml, buildWhiteLedStateXml, collectCgiDiagnostics, collectMultifocalDiagnostics, collectNativeDiagnostics, collectNvrDiagnostics, computeDeviceCapabilities, convertToAnnexB as convertH265ToAnnexB, convertToAnnexB$1 as convertToAnnexB, convertToLengthPrefixed, createBaichuanEndpointsServer, createDebugGateLogger, createDiagnosticsBundle, createLogger, createMjpegBoundary, createNativeStream, createNullLogger, createReplayHttpServer, createRfc4571TcpServer, createRfc4571TcpServerForReplay, createRtspProxyServer, createTaggedLogger, decideVideoclipTranscodeMode, decodeHeader, deriveAesKey, detectIosClient, detectVideoCodecFromNal, discoverReolinkDevices, discoverViaHttpScan, discoverViaUdpBroadcast, discoverViaUdpDirect, encodeHeader, extractH264ParamSetsFromAccessUnit, extractH265ParamSetsFromAccessUnit, extractPpsFromAnnexB, extractSpsFromAnnexB, extractVpsFromAnnexB, flattenAbilitiesForChannel, formatMjpegFrame, getConstructedVideoStreamOptions, getGlobalLogger, getH265NalType, getMjpegContentType, getSupportItemForChannel, getVideoStream, getVideoclipClientInfo, getXmlText, hasStartCodes as hasH265StartCodes, hasStartCodes$1 as hasStartCodes, isDualLenseModel, isH264KeyframeAnnexB, isH265Irap, isH265KeyframeAnnexB, isNvrHubModel, isTcpFailureThatShouldFallbackToUdp, isValidH264AnnexBAccessUnit, isValidH265AnnexBAccessUnit, maskUid, md5HexUpper, md5StrModern, normalizeUid, packetizeAacAdtsFrame, packetizeAacRawFrame, packetizeH264, packetizeH265, parseAdtsHeader, parseBcMedia, parseRecordingFileName, parseSupportXml, printNvrDiagnostics, runAllDiagnosticsConsecutively, runMultifocalDiagnosticsConsecutively, sampleStreams, setGlobalLogger, splitAnnexBToNalPayloads$1 as splitAnnexBToNalPayloads, splitAnnexBToNals, splitAnnexBToNalPayloads as splitH265AnnexBToNalPayloads, testChannelStreams, xmlEscape, zipDirectory };
8759
+ export { type AIDetectionState, type AIEvent, type AIState, type AbilityInfo, type AccessUserListConfig, AesStreamDecryptor, type AiAlarmConfig, type AiConfig, type AiDenoiseConfig, type AiKey, type AiTypesCacheEntry, type AnyBuffer, type AudioAlarmParams, type AudioCfgConfig, type AudioConfig, type AudioTaskConfig, type AutoDetectInputs, type AutoDetectMode, type AutoDetectResult, AutodiscoveryClient, type AutodiscoveryClientOptions, BC_AES_IV, BC_CLASS_FILE_DOWNLOAD, BC_CLASS_LEGACY, BC_CLASS_MODERN_20, BC_CLASS_MODERN_24, BC_CLASS_MODERN_24_ALT, BC_CMD_ID_ABILITY_INFO, BC_CMD_ID_ALARM_EVENT_LIST, BC_CMD_ID_AUDIO_ALARM_PLAY, BC_CMD_ID_CHANNEL_INFO_ALL, BC_CMD_ID_CMD_123, BC_CMD_ID_CMD_209, BC_CMD_ID_CMD_265, BC_CMD_ID_CMD_440, BC_CMD_ID_COVER_PREVIEW, BC_CMD_ID_COVER_RESPONSE, BC_CMD_ID_COVER_STANDALONE_458, BC_CMD_ID_COVER_STANDALONE_459, BC_CMD_ID_COVER_STANDALONE_460, BC_CMD_ID_COVER_STANDALONE_461, BC_CMD_ID_COVER_STANDALONE_462, BC_CMD_ID_DING_DONG_CTRL, BC_CMD_ID_DING_DONG_OPT, BC_CMD_ID_FILE_INFO_LIST_CLOSE, BC_CMD_ID_FILE_INFO_LIST_DL_VIDEO, BC_CMD_ID_FILE_INFO_LIST_DOWNLOAD, BC_CMD_ID_FILE_INFO_LIST_GET, BC_CMD_ID_FILE_INFO_LIST_OPEN, BC_CMD_ID_FILE_INFO_LIST_REPLAY, BC_CMD_ID_FILE_INFO_LIST_STOP, BC_CMD_ID_FIND_REC_VIDEO_CLOSE, BC_CMD_ID_FIND_REC_VIDEO_GET, BC_CMD_ID_FIND_REC_VIDEO_OPEN, BC_CMD_ID_FLOODLIGHT_STATUS_LIST, BC_CMD_ID_GET_ABILITY_SUPPORT, BC_CMD_ID_GET_ACCESS_USER_LIST, BC_CMD_ID_GET_AI_ALARM, BC_CMD_ID_GET_AI_CFG, BC_CMD_ID_GET_AI_DENOISE, BC_CMD_ID_GET_AUDIO_ALARM, BC_CMD_ID_GET_AUDIO_CFG, BC_CMD_ID_GET_AUDIO_TASK, BC_CMD_ID_GET_BATTERY_INFO, BC_CMD_ID_GET_BATTERY_INFO_LIST, BC_CMD_ID_GET_DAY_NIGHT_THRESHOLD, BC_CMD_ID_GET_DAY_RECORDS, BC_CMD_ID_GET_DING_DONG_CFG, BC_CMD_ID_GET_DING_DONG_LIST, BC_CMD_ID_GET_DING_DONG_SILENT, BC_CMD_ID_GET_EMAIL_TASK, BC_CMD_ID_GET_FTP_TASK, BC_CMD_ID_GET_HDD_INFO_LIST, BC_CMD_ID_GET_KIT_AP_CFG, BC_CMD_ID_GET_LED_STATE, BC_CMD_ID_GET_MOTION_ALARM, BC_CMD_ID_GET_ONLINE_USER_LIST, BC_CMD_ID_GET_OSD_DATETIME, BC_CMD_ID_GET_PIR_INFO, BC_CMD_ID_GET_PTZ_POSITION, BC_CMD_ID_GET_PTZ_PRESET, BC_CMD_ID_GET_RECORD, BC_CMD_ID_GET_RECORD_CFG, BC_CMD_ID_GET_REC_ENC_CFG, BC_CMD_ID_GET_SIREN_STATUS, BC_CMD_ID_GET_SLEEP_STATE, BC_CMD_ID_GET_STREAM_INFO_LIST, BC_CMD_ID_GET_SUPPORT, BC_CMD_ID_GET_SYSTEM_GENERAL, BC_CMD_ID_GET_TIMELAPSE_CFG, BC_CMD_ID_GET_VIDEO_INPUT, BC_CMD_ID_GET_WHITE_LED, BC_CMD_ID_GET_WIFI, BC_CMD_ID_GET_WIFI_SIGNAL, BC_CMD_ID_GET_ZOOM_FOCUS, BC_CMD_ID_LOGIN, BC_CMD_ID_LOGOUT, BC_CMD_ID_PING, BC_CMD_ID_PTZ_CONTROL, BC_CMD_ID_PTZ_CONTROL_PRESET, BC_CMD_ID_PUSH_COORDINATE_POINT_LIST, BC_CMD_ID_PUSH_DINGDONG_LIST, BC_CMD_ID_PUSH_NET_INFO, BC_CMD_ID_PUSH_SERIAL, BC_CMD_ID_PUSH_SLEEP_STATUS, BC_CMD_ID_PUSH_VIDEO_INPUT, BC_CMD_ID_QUICK_REPLY_PLAY, BC_CMD_ID_SET_AI_ALARM, BC_CMD_ID_SET_AI_CFG, BC_CMD_ID_SET_AUDIO_TASK, BC_CMD_ID_SET_DING_DONG_CFG, BC_CMD_ID_SET_DING_DONG_SILENT, BC_CMD_ID_SET_MOTION_ALARM, BC_CMD_ID_SET_PIR_INFO, BC_CMD_ID_SET_WHITE_LED_STATE, BC_CMD_ID_SET_WHITE_LED_TASK, BC_CMD_ID_SET_ZOOM_FOCUS, BC_CMD_ID_SUPPORT, BC_CMD_ID_TALK, BC_CMD_ID_TALK_ABILITY, BC_CMD_ID_TALK_CONFIG, BC_CMD_ID_TALK_RESET, BC_CMD_ID_UDP_KEEP_ALIVE, BC_CMD_ID_VIDEO, BC_CMD_ID_VIDEO_STOP, BC_MAGIC, BC_MAGIC_REV, BC_TCP_DEFAULT_PORT, BC_XML_KEY, type BaichuanCachedPush, BaichuanClient, type BaichuanClientOptions, type BaichuanCoordinatePointListPush, type BaichuanDingdongListPush, type BaichuanEndpointsServerOptions, BaichuanEventEmitter, type BaichuanFrame, BaichuanFrameParser, type BaichuanGetOsdDatetimeResult, type BaichuanHeader, BaichuanHlsServer, type BaichuanHlsServerOptions, BaichuanHttpStreamServer, type BaichuanHttpStreamServerOptions, type BaichuanLedState, BaichuanMjpegServer, type BaichuanMjpegServerOptions, type BaichuanNetInfoPush, type BaichuanOsdChannelName, type BaichuanOsdDatetime, type BaichuanRecordCfg, type BaichuanRecordSchedule, BaichuanRtspServer, type BaichuanRtspServerOptions, type BaichuanSerialPush, type BaichuanSettingsPushCacheEntry, type BaichuanSleepState, type BaichuanSleepStatusPush, type BaichuanStreamEncodeTable, type BaichuanStreamInfo, type BaichuanStreamInfoList, type BaichuanTransport, type BaichuanVideoInputPush, BaichuanVideoStream, type BaichuanVideoStreamOptions, BaichuanWebRTCServer, type BaichuanWebRTCServerOptions, type BaichuanWifi, type BaichuanWifiSignal, type BatteryInfo, type BatteryInfoResponse, type BcMedia, type BcMediaAac, type BcMediaAdpcm, BcMediaAnnexBDecoder, type BcMediaAnnexBDecoderStats, type BcMediaAnnexBInfo, type BcMediaAudioFrame, type BcMediaAudioType, BcMediaCodec, type BcMediaIframe, type BcMediaInfoV1, type BcMediaInfoV2, type BcMediaPframe, type BcMediaType, type BcMediaVideoFrame, type BcMediaVideoType, type BcUdpDiscoveryMethod, BcUdpStream, type BcUdpStreamOptions, type CgiAbility, type CgiAbilityChn, type CgiAbilityLeaf, type CgiAiKey, type CgiAiStateValue, type CgiAudioAlarmPlayParam, type CgiBattery, type CgiChannelStatusEntry, type CgiChnTypeInfoValue, type CgiDetectionState, type CgiDevInfo, type CgiDeviceInfoEntries, type CgiEnc, type CgiEncStream, type CgiEncValue, type CgiGetAbilityResponse, type CgiGetAbilityValue, type CgiGetAiStateResponse, type CgiGetChannelstatusResponse, type CgiGetChannelstatusValue, type CgiGetChnTypeInfoResponse, type CgiGetDevInfoResponse, type CgiGetDevInfoValue, type CgiGetEncResponse, type CgiGetOsdValue, type CgiGetRtspUrlResponse, type CgiGetRtspUrlValue, type CgiGetVideoclipsParams, type CgiNetPort, type CgiOsd, type CgiPirInfo, type CgiPtzPreset, type CgiSetOsdParam, type CgiSetPirInfoParam, type CgiSetWhiteLedParam, type CgiWhiteLed, type ChannelPushCacheEntry, type ChannelPushDataEntry, type ChannelRecordingFile, type ChannelStreamMetadata, type ChimeAlarmCfg, type ChimeCfg, type ChimeDevice, type ChimeParams, type CollectNvrDiagnosticsOptions, CompositeRtspServer, type CompositeRtspServerOptions, CompositeStream, type CompositeStreamOptions, type CompositeStreamPipOptions, DUAL_LENS_DUAL_MOTION_MODELS, DUAL_LENS_MODELS, DUAL_LENS_SINGLE_MOTION_MODELS, type DayNightThresholdConfig, type DebugConfig, type DebugOptions, type DeviceAbilities, type DeviceCapabilities, type DeviceCapabilitiesCacheEntry, type DeviceCapabilitiesDebugInfo, type DeviceCapabilitiesResult, type DeviceInfoResponse, type DeviceInputData, type DeviceObjectType, type DeviceStatusResponse, type DeviceSupportFlags, type DeviceType, type DiagnosticsCollectorResult, type DiagnosticsStreamKind, type DiscoveredDevice, type DiscoveryOptions, type DownloadRecordingParams, type DualLensChannelAnalysis, type DualLensChannelInfo, type EmailTaskConfig, type EncryptionProtocol, type Events, type EventsResponse, type FloodlightTaskConfig, type FtpTaskConfig, type GetRecordingVideoResult, type GetRecordingVideoStats, type GetVideoclipsParams, type GetVodUrlParams, H264RtpDepacketizer, H265RtpDepacketizer, type HardwiredChimeState, type HddInfoListConfig, type HlsCodec, type HlsHttpResponse, type HlsServerStatus, type HlsSession, HlsSessionManager, type HlsSessionManagerOptions, type HlsSessionParams, Intercom, type IntercomOptions, type JsonObject, type JsonPrimitive, type JsonValue, type LastSleepProbe, type LogLevel, type Logger, type LoggerCallback, type LoginResponseValue, type MaxEncryption, type MediaStream, type MjpegFrame, MjpegTransformer, type MjpegTransformerOptions, type MotionAlarmConfig, type MotionEvent, NVR_HUB_EXACT_TYPES, NVR_HUB_MODEL_PATTERNS, type NativeVideoStreamVariant, type NvrChannelsSummaryCacheEntry, type OnlineUserListConfig, type OsdChannel, type OsdConfig, type OsdTime, type ParsedRecordingFileName, type PipPosition, type PirConfig, type PirState, type PlaybackSnapshotStreamInfo, type PtzCommand, type PtzPosition, type PtzPreset, type RecEncConfig, type RecordingAudioCodec, type RecordingDetectionClass, type RecordingDevType, type RecordingFile, type RecordingPlaybackUrls, type RecordingStreamType, type RecordingVideoCodec, type RecordingVodFlags, type RecordingVodStreamHint, type RecordingsCacheEntry, type RecordingsQueueItem, type ReolinkAiNotification, ReolinkBaichuanApi, type ReolinkBaichuanChannelIdentity, type ReolinkBaichuanChannelInfo, type ReolinkBaichuanDeviceSummary, type ReolinkBaichuanNetworkInfo, type ReolinkBaichuanPorts, ReolinkCgiApi, type ReolinkCmdRequest, type ReolinkCmdResponse, type ReolinkCmdResponseExt, type ReolinkDayNightNotification, type ReolinkDeviceInfo, type ReolinkDeviceInfoTag, type ReolinkEvent, ReolinkHttpClient, type ReolinkHttpClientOptions, type ReolinkJson, type ReolinkMotionNotification, type ReolinkNvrChannelInfo, type ReolinkNvrDeviceGroupSummary, type ReolinkNvrDeviceGroupsResult, type ReolinkSimpleEvent, type ReolinkSimpleEventType, type ReolinkSupportedStream, type ReolinkVideoStreamOptionsResult, type ReolinkVisitorNotification, type ReplayHttpServer, type ReplayHttpServerOptions, type ResponseMediaStreamOptions, type Rfc4571ApiFactoryContext, type Rfc4571Client, Rfc4571Muxer, type Rfc4571ReplayServer, type Rfc4571ReplayServerOptions, type Rfc4571TcpServer, type Rfc4571TcpServerOptions, type RtpPacketizationOptions, type RtspCreateOptions, type RtspProxyServerOptions, type RtspStreamProfile, type RunAllDiagnosticsConsecutivelyParams, type RunAllDiagnosticsConsecutivelyResult, type RunMultifocalDiagnosticsConsecutivelyParams, type RunMultifocalDiagnosticsConsecutivelyResult, type SirenState, type SirenStatusConfig, type SleepState, type SleepStatus, type StreamMetadata, type StreamProfile, type StreamSamplingOptions, type StreamSamplingSelection, type SupportConfig, type SupportInfo, type SupportItem, type SystemGeneralConfig, type TalkAbility$1 as TalkAbility, type TalkAudioConfig, type TalkConfig, type TalkSession$1 as TalkSession, type TalkSessionInfo, type TimelapseCfgConfig, type TwoWayAudioConfig, type VideoCodec, type VideoInputConfig, type VideoParamSets, type VideoStreamOptions, type VideoStreamOptionsCacheEntry, type VideoType, type VideoclipClientInfo, type VideoclipModeDecision, type VideoclipThumbnailResult, type VideoclipTranscodeMode, type VodFile, type VodSearchResponse, type VodSearchResult, type VodSearchStatus, type WakeUpOptions, type WebRTCAnswer, type WebRTCIceCandidate, type WebRTCOffer, type WebRTCSessionInfo, type WhiteLedConfig, type WhiteLedState, type WirelessChimeSilentState, type ZoomFocusStatus, type ZoomFocusTriplet, abilitiesHasAny, aesDecrypt, aesEncrypt, asLogger, autoDetectDeviceType, bcDecrypt, bcEncrypt, bcHeaderHasPayloadOffset, buildAacAudioSpecificConfigHex, buildAbilityInfoExtensionXml, buildBinaryExtensionXml, buildChannelExtensionXml, buildFloodlightManualXml, buildHlsRedirectUrl, buildLoginXml, buildLogoutXml, buildPreviewStopXml, buildPreviewStopXmlV11, buildPreviewXml, buildPreviewXmlV11, buildPtzControlXml, buildPtzPresetXml, buildPtzPresetXmlV2, buildRfc4571Sdp, buildRtspPath, buildRtspUrl, buildSirenManualXml, buildSirenTimesXml, buildStartZoomFocusXml, buildWhiteLedStateXml, collectCgiDiagnostics, collectMultifocalDiagnostics, collectNativeDiagnostics, collectNvrDiagnostics, computeDeviceCapabilities, convertToAnnexB as convertH265ToAnnexB, convertToAnnexB$1 as convertToAnnexB, convertToLengthPrefixed, createBaichuanEndpointsServer, createDebugGateLogger, createDiagnosticsBundle, createLogger, createMjpegBoundary, createNativeStream, createNullLogger, createReplayHttpServer, createRfc4571TcpServer, createRfc4571TcpServerForReplay, createRtspProxyServer, createTaggedLogger, decideVideoclipTranscodeMode, decodeHeader, deriveAesKey, detectIosClient, detectVideoCodecFromNal, discoverReolinkDevices, discoverViaArpTable, discoverViaDhcpListener, discoverViaHttpScan, discoverViaOnvif, discoverViaTcpPortScan, discoverViaUdpBroadcast, discoverViaUdpDirect, encodeHeader, extractH264ParamSetsFromAccessUnit, extractH265ParamSetsFromAccessUnit, extractPpsFromAnnexB, extractSpsFromAnnexB, extractVpsFromAnnexB, flattenAbilitiesForChannel, formatMjpegFrame, getConstructedVideoStreamOptions, getGlobalLogger, getH265NalType, getMjpegContentType, getSupportItemForChannel, getVideoStream, getVideoclipClientInfo, getXmlText, hasStartCodes as hasH265StartCodes, hasStartCodes$1 as hasStartCodes, isDualLenseModel, isH264KeyframeAnnexB, isH265Irap, isH265KeyframeAnnexB, isNvrHubModel, isTcpFailureThatShouldFallbackToUdp, isValidH264AnnexBAccessUnit, isValidH265AnnexBAccessUnit, maskUid, md5HexUpper, md5StrModern, normalizeUid, packetizeAacAdtsFrame, packetizeAacRawFrame, packetizeH264, packetizeH265, parseAdtsHeader, parseBcMedia, parseRecordingFileName, parseSupportXml, printNvrDiagnostics, runAllDiagnosticsConsecutively, runMultifocalDiagnosticsConsecutively, sampleStreams, setGlobalLogger, splitAnnexBToNalPayloads$1 as splitAnnexBToNalPayloads, splitAnnexBToNals, splitAnnexBToNalPayloads as splitH265AnnexBToNalPayloads, testChannelStreams, xmlEscape, zipDirectory };
package/dist/index.d.ts CHANGED
@@ -300,27 +300,30 @@ export declare type AutoDetectResult = {
300
300
  };
301
301
 
302
302
  /**
303
- * Client per discovery continuato di telecamere Reolink sulla rete.
304
- * Supporta TCP/IPC (HTTP/HTTPS scanning) e/o UDP broadcast discovery.
303
+ * Continuous discovery client for Reolink cameras on the network.
304
+ * Runs periodic scans using all configured discovery methods and maintains
305
+ * an always-up-to-date list of discovered devices.
305
306
  *
306
- * Mantiene una lista aggiornata delle telecamere discoverate e offre
307
- * metodi per ottenere la lista corrente e controllare il processo di discovery.
307
+ * Supports callbacks for new/updated devices, making it ideal for plugins
308
+ * that want to be notified as cameras appear (e.g. battery cameras waking up).
308
309
  *
309
310
  * @example
310
311
  * ```typescript
311
312
  * const client = new AutodiscoveryClient({
312
- * username: "admin",
313
- * password: "password",
314
- * scanIntervalMs: 30000, // 30 secondi
313
+ * enableArpLookup: true,
314
+ * enableOnvifDiscovery: true,
315
+ * scanIntervalMs: 60_000,
315
316
  * autoStart: true,
317
+ * onDeviceDiscovered: (device) => {
318
+ * console.log(`New device: ${device.host} (${device.model})`);
319
+ * },
316
320
  * });
317
321
  *
318
- * // Ottieni la lista corrente
322
+ * // Get the current list
319
323
  * const devices = client.getDiscoveredDevices();
320
- * console.log(`Trovate ${devices.length} telecamere`);
321
324
  *
322
- * // Ferma il discovery
323
- * await client.stop();
325
+ * // Stop
326
+ * client.stop();
324
327
  * ```
325
328
  */
326
329
  export declare class AutodiscoveryClient {
@@ -329,96 +332,54 @@ export declare class AutodiscoveryClient {
329
332
  private scanTimer;
330
333
  private isRunning;
331
334
  private currentScanPromise;
332
- /**
333
- * Costruttore del client di autodiscovery.
334
- *
335
- * @param options - Opzioni di configurazione per il discovery
336
- */
337
335
  constructor(options?: AutodiscoveryClientOptions);
338
336
  /**
339
- * Avvia il discovery continuato.
340
- * Se già in esecuzione, non fa nulla.
337
+ * Start continuous discovery. If already running, does nothing.
341
338
  */
342
339
  start(): void;
343
340
  /**
344
- * Ferma il discovery continuato.
345
- * Se non è in esecuzione, non fa nulla.
341
+ * Stop continuous discovery. If not running, does nothing.
346
342
  */
347
343
  stop(): void;
348
344
  /**
349
- * Restituisce la lista corrente delle telecamere discoverate.
350
- *
351
- * @returns Array di dispositivi discoverati, ordinati per host
345
+ * Returns the current list of discovered devices, sorted by host IP.
352
346
  */
353
347
  getDiscoveredDevices(): DiscoveredDevice[];
354
348
  /**
355
- * Restituisce il numero di telecamere attualmente discoverate.
356
- *
357
- * @returns Numero di dispositivi discoverati
349
+ * Returns the number of currently discovered devices.
358
350
  */
359
351
  getDeviceCount(): number;
360
352
  /**
361
- * Verifica se il discovery è attualmente in esecuzione.
362
- *
363
- * @returns `true` se il discovery è in esecuzione, `false` altrimenti
353
+ * Returns whether continuous discovery is currently running.
364
354
  */
365
355
  isActive(): boolean;
366
356
  /**
367
- * Forza un scan immediato (non aspetta l'intervallo programmato).
368
- * Se uno scan è già in corso, attende il completamento prima di avviarne uno nuovo.
369
- *
370
- * @returns Promise che si risolve quando lo scan è completato
357
+ * Force an immediate scan (doesn't wait for the scheduled interval).
358
+ * If a scan is already in progress, waits for it to complete.
371
359
  */
372
360
  scanNow(): Promise<void>;
373
361
  /**
374
- * Rimuove un dispositivo dalla lista (utile se si sa che non è più disponibile).
375
- *
376
- * @param host - Indirizzo IP del dispositivo da rimuovere
377
- * @returns `true` se il dispositivo è stato rimosso, `false` se non era presente
362
+ * Remove a device from the discovered list.
378
363
  */
379
364
  removeDevice(host: string): boolean;
380
365
  /**
381
- * Pulisce tutte le telecamere discoverate dalla lista.
366
+ * Clear all discovered devices.
382
367
  */
383
368
  clearDevices(): void;
384
- /**
385
- * Esegue un singolo scan della rete.
386
- */
387
369
  private performScan;
388
- /**
389
- * Unisce le informazioni di un dispositivo esistente con quelle di un nuovo scan.
390
- * Restituisce il dispositivo aggiornato se ci sono state modifiche, altrimenti `null`.
391
- */
392
370
  private mergeDeviceInfo;
393
- /**
394
- * Programma il prossimo scan.
395
- */
396
371
  private scheduleNextScan;
397
372
  }
398
373
 
399
- export declare interface AutodiscoveryClientOptions {
400
- /** Network CIDR to scan (e.g., "192.168.1.0/24"). If not provided, auto-detects local network */
401
- networkCidr?: string;
402
- /** Username to use for authentication attempts (default: "admin") */
403
- username?: string;
404
- /** Password to use for authentication attempts (default: empty, will try unauthenticated) */
405
- password?: string;
406
- /** Timeout per HTTP probe in milliseconds (default: 2000) */
407
- httpProbeTimeoutMs?: number;
408
- /** Maximum number of concurrent HTTP probes (default: 50) */
409
- maxConcurrentProbes?: number;
410
- /** Logger instance for debug output */
411
- logger?: Logger;
412
- /** Ports to scan for HTTP (default: [80, 443]) */
413
- httpPorts?: number[];
414
- /** Interval between discovery scans in milliseconds (default: 60000 = 60 seconds) */
374
+ export declare interface AutodiscoveryClientOptions extends DiscoveryOptions {
375
+ /** Interval between discovery scans in milliseconds (default: 120000 = 2 minutes) */
415
376
  scanIntervalMs?: number;
416
377
  /** Whether to start discovery automatically on construction (default: false) */
417
378
  autoStart?: boolean;
418
- /** Discovery method to use: "http" (TCP/IPC), "udp" (broadcast), or "both" (default: "http") */
419
- discoveryMethod?: "http" | "udp" | "both";
420
- /** Timeout for UDP broadcast in milliseconds (default: 5000) */
421
- udpBroadcastTimeoutMs?: number;
379
+ /** Called when new (previously unseen) devices are discovered */
380
+ onDeviceDiscovered?: (device: DiscoveredDevice) => void;
381
+ /** Called when an existing device's info is updated (e.g. model filled in) */
382
+ onDeviceUpdated?: (device: DiscoveredDevice) => void;
422
383
  }
423
384
 
424
385
  export declare type BaichuanCachedPush<T> = {
@@ -3628,7 +3589,7 @@ export declare interface DiscoveredDevice {
3628
3589
  /** Firmware version (if available) */
3629
3590
  firmwareVersion?: string;
3630
3591
  /** Discovery method used to find this device */
3631
- discoveryMethod: "http_probe" | "udp_broadcast" | "udp_direct";
3592
+ discoveryMethod: "http_probe" | "udp_broadcast" | "udp_direct" | "tcp_port_scan" | "arp" | "dhcp" | "onvif";
3632
3593
  /** Whether HTTPS is supported */
3633
3594
  supportsHttps?: boolean;
3634
3595
  /** Whether the device is accessible via HTTP */
@@ -3657,11 +3618,45 @@ export declare interface DiscoveredDevice {
3657
3618
  */
3658
3619
  export declare function discoverReolinkDevices(options?: DiscoveryOptions): Promise<DiscoveredDevice[]>;
3659
3620
 
3621
+ /**
3622
+ * Discover Reolink devices by reading the system ARP table and filtering
3623
+ * for Reolink MAC address prefixes (EC:71:DB). This mirrors the DHCP-based
3624
+ * discovery used by Home Assistant but reads the already-populated ARP cache
3625
+ * instead of sniffing live DHCP packets.
3626
+ *
3627
+ * Works on Linux, macOS, and Docker containers (reads /proc/net/arp or `arp -a`).
3628
+ */
3629
+ export declare function discoverViaArpTable(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
3630
+
3631
+ /**
3632
+ * Discover Reolink devices by passively listening for DHCP traffic (port 67/68).
3633
+ * Parses DHCP ACK/REQUEST packets and filters for Reolink MAC prefix or hostname.
3634
+ * Requires root or CAP_NET_RAW (typical in Docker with --net=host).
3635
+ *
3636
+ * This mirrors Home Assistant's DHCP discovery: matches hostname "reolink*" or MAC "EC:71:DB".
3637
+ */
3638
+ export declare function discoverViaDhcpListener(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
3639
+
3660
3640
  /**
3661
3641
  * Discover devices via HTTP port scanning.
3662
3642
  */
3663
3643
  export declare function discoverViaHttpScan(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
3664
3644
 
3645
+ /**
3646
+ * Discover devices via ONVIF WS-Discovery (multicast probe on 239.255.255.250:3702).
3647
+ * Most Reolink cameras and NVRs support ONVIF and will respond with their service
3648
+ * endpoint (XAddrs), model, and scopes. This is the standard IP camera discovery
3649
+ * mechanism used by NVRs, VMS, and similar software.
3650
+ */
3651
+ export declare function discoverViaOnvif(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
3652
+
3653
+ /**
3654
+ * Discover Reolink devices by scanning TCP port 9000 (Baichuan protocol).
3655
+ * This is the most reliable method — every Reolink camera/NVR listens on port 9000.
3656
+ * It only checks if the port is open; it does not authenticate or extract device info.
3657
+ */
3658
+ export declare function discoverViaTcpPortScan(options: DiscoveryOptions): Promise<DiscoveredDevice[]>;
3659
+
3665
3660
  /**
3666
3661
  * Discover devices via UDP broadcast (for battery cameras).
3667
3662
  */
@@ -3692,6 +3687,20 @@ export declare type DiscoveryOptions = {
3692
3687
  enableUdpDiscovery?: boolean;
3693
3688
  /** Whether to enable HTTP port scanning (default: true) */
3694
3689
  enableHttpScanning?: boolean;
3690
+ /** Whether to enable TCP port 9000 scanning (Baichuan protocol). Works with all Reolink devices. (default: false) */
3691
+ enableTcpPortScan?: boolean;
3692
+ /** Timeout per TCP port probe in milliseconds (default: 1500) */
3693
+ tcpProbeTimeoutMs?: number;
3694
+ /** Whether to enable ARP table lookup for Reolink MAC prefix (ec:71:db). Similar to Home Assistant DHCP discovery. (default: false) */
3695
+ enableArpLookup?: boolean;
3696
+ /** Whether to enable passive DHCP listening for Reolink devices (requires root/NET_RAW). (default: false) */
3697
+ enableDhcpListener?: boolean;
3698
+ /** Timeout for DHCP listener in milliseconds (default: 10000) */
3699
+ dhcpListenerTimeoutMs?: number;
3700
+ /** Whether to enable ONVIF WS-Discovery (multicast probe on 239.255.255.250:3702). Most Reolink cameras support ONVIF. (default: false) */
3701
+ enableOnvifDiscovery?: boolean;
3702
+ /** Timeout for ONVIF WS-Discovery in milliseconds (default: 5000) */
3703
+ onvifDiscoveryTimeoutMs?: number;
3695
3704
  /** Ports to scan for HTTP (default: [80, 443]) */
3696
3705
  httpPorts?: number[];
3697
3706
  };