+
    Vi7                         R t ^ RIt^ RIt^ RIt^ RIHtHtHtHtH	t	H
t
Ht ^ RIt^RIHtHtHt ^RIHt ]R,          t]	]]3,          t ! R R4      tR# )z
WebSocket-based watcher for v2 jobs (crawl and batch), mirroring v1 behavior.

Usage:
    watcher = client.watcher(job_id, kind="crawl")
    watcher.add_listener(lambda status: print(status.status))
    watcher.start()
N)CallableListOptionalLiteralUnionDictAny)CrawlJobBatchScrapeJobDocument)normalize_document_inputc                      a  ] tR t^t o RV 3R lR lltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )WatcherNc                L   < V ^8  d   QhRS[ RS[RS[RS[RS[S[,          RR/# )   clientjob_idkindpoll_intervaltimeoutreturnN)objectstrJobKindintr   )format__classdict__s   "S/home/ubuntu/hermes-agent/venv/lib/python3.14/site-packages/firecrawl/v2/watcher.py__annotate__Watcher.__annotate__   sK     ' '' ' 	'
 ' #' 
'    c                F   Wn         W n        W0n        WPn        W@n        . V n        R V n        \        P                  ! 4       V n	        \        VRR 4      p\        VRR 4      V n        \        VRR 4      V n        RV n        . V n        R. R. R. /V n        RV n        RV n        R # )	Nhttp_clientapi_urlapi_keyscrapingdoneerrordocumentF)_client_job_id_kind_timeout_poll_interval
_listeners_thread	threadingEvent_stopgetattr_api_url_api_keystatusdata_event_handlers
_sent_done_sent_error)selfr   r   r   r   r   r"   s   &&&&&& r   __init__Watcher.__init__   s     
+;=37__&
fmT:'.{It'L'.{It'L &*,	BRS

 !&!&r    c                :   < V ^8  d   QhRS[ S[.R3,          RR/# )r   callbackNr   )r   JobType)r   r   s   "r   r   r   :   s&     ) )Xwio%> )4 )r    c                <    V P                   P                  V4       R # N)r.   append)r;   r?   s   &&r   add_listenerWatcher.add_listener:   s    x(r    c                $   < V ^8  d   QhRS[ RR/# )r   r6   r   N)r@   )r   r   s   "r   r   r   =   s      G  r    c                t    \        V P                  4       F  p V! V4       K  	  R #   \         d     K   i ; irB   )listr.   	Exception)r;   r6   cbs   && r   _emitWatcher._emit=   s5    t'B6
 (  s   (77c                V   < V ^8  d   QhRS[ RS[S[S[ S[3,          .R3,          RR/# )r   
event_typehandlerNr   )r   r   r   r   )r   r   s   "r   r   r   E   s9     = =S =8T#s(^DTVZDZ;[ =`d =r    c                n    WP                   9   d%   V P                   V,          P                  V4       R # R # rB   )r8   rC   )r;   rN   rO   s   &&&r   add_event_listenerWatcher.add_event_listenerE   s,    ---  ,33G< .r    c                @   < V ^8  d   QhRS[ RS[S[ S[3,          RR/# )r   rN   detailr   N)r   r   r   )r   r   s   "r   r   r   I   s*       d38n  r    c                    WP                   9   d&   V P                   V,           F  p V! V4       K  	  R # R #   \         d     K"  i ; irB   )r8   rI   )r;   rN   rT   rO   s   &&& r   dispatch_eventWatcher.dispatch_eventI   sK    ---//
;;FO < . ! s   8AAc                    < V ^8  d   QhRS[ /# r   r   )r   )r   r   s   "r   r   r   Q   s     ; ;s ;r    c                    V P                   '       g   \        R 4      hV P                   P                  RR4      P                  RR^4      pV P                  R8X  d   V RV P                   2# V RV P                   2# )z)API URL is required for WebSocket watcherzhttps://zwss://zhttp://zws://crawlz
/v2/crawl/z/v2/batch/scrape/)r4   
ValueErrorreplacer+   r*   )r;   ws_bases   & r   _build_ws_urlWatcher._build_ws_urlQ   su    }}}HII--''
H=EEiQXZ[\:: Yj77+DLL>::r    c                   < V ^8  d   QhRR/# r   r   N )r   r   s   "r   r   r   Y   s     n' n't n'r    c                  "   V P                  4       p. pV P                  '       d!   VP                  R RV P                   234        \        P                  ! VRVR7      ;_uu_4       GRj  xL
 pV P
                  '       d5   \        P                  ! 4       P                  4       V P
                  ,           MRpV P                  P                  4       '       Eg   VeV   \        RV\        P                  ! 4       P                  4       ,
          4      p\        V P                  ;'       g    TV4      pMV P                  ;'       g    ^p \        P                  ! VP                  4       VR7      G Rj  xL
 p \4        P6                  ! T4      pTP9                  R4      p	T	R8X  d   RT n        T P-                  RRT P(                  R	T P.                  RTP9                  R4      R
T P0                  /4       RT n        T P<                  R8X  d   \?        R^ ^ ^ RR. R7      p
M\A        R^ ^ ^ RR. R7      p
T PC                  T
4       EMoT	R8X  d   TP9                  R	/ 4      pTP9                  RT P(                  4      T n        TP9                  R	. 4      pT P.                  PE                  T4       T F#  pT P-                  RR	TR
T P0                  /4       K%  	  EMT	R8X  de   TP9                  R	4      p\G        T\H        4      '       d<   T P.                  P                  T4       T P-                  RR	TR
T P0                  /4       EMT	R8X  Ed   RT n        TP9                  R	/ 4      ;'       g    / pTP9                  R	. 4      ;'       g    . p\G        T\J        4      '       dE   T'       d=   T F6  p\G        T\H        4      '       g   K  T P.                  P                  T4       K8  	  T P-                  RRT P(                  R	T P.                  R
T P0                  /4       RT n        . pT P.                   F@  p\G        T\H        4      '       g   K  \M        T4      pTP                  \O        R/ TB 4       KB  	  T P<                  R8X  db   \?        RTP9                  R^ 4      TP9                  R^ 4      TP9                  R^ 4      TP9                  R4      TP9                  R4      TR7      p
M`\A        RTP9                  R^ 4      TP9                  R^ 4      TP9                  R^ 4      TP9                  R4      TP9                  R4      TR7      p
T PC                  T
4       EM]TP9                  R	T4      p\G        T\H        4      ;'       d    RT9   ;'       g    RT9   pT'       g   EK  TP9                  RTP9                  RT P(                  4      4      pT P<                  R8X  Edn   . pTP9                  R	. 4       F@  p\G        T\H        4      '       g   K  \M        T4      pTP                  \O        R/ TB 4       KB  	  \?        TTP9                  R^ 4      TP9                  R^ 4      TP9                  R^ 4      TP9                  R4      TP9                  R4      TR7      p
T PC                  T
4       TR9   d   TR8X  dF   T P*                  '       g4   T P-                  RRTR	T P.                  R
T P0                  /4       RT n        TR8X  dF   T P:                  '       g4   T P-                  RRTR	T P.                  R
T P0                  /4       RT n        EMnEK  . pTP9                  R	. 4       F@  p\G        T\H        4      '       g   K  \M        T4      pTP                  \O        R/ TB 4       KB  	  \A        TTP9                  R^ 4      TP9                  R^ 4      TP9                  R4      TP9                  R4      TP9                  R4      TR7      p
T PC                  T
4       TR9   g   EKb  TR8X  dF   T P*                  '       g4   T P-                  RRTR	T P.                  R
T P0                  /4       RT n        TR8X  dF   T P:                  '       g4   T P-                  RRTR	T P.                  R
T P0                  /4       RT n         RRR4      GRj  xL
  T P(                  R8X  dT   T P*                  '       g@   T P-                  RRT P(                  R	T P.                  R
T P0                  /4       RT n        R# R# R#  EL EL  \        P                    d(    T P#                  4       G Rj  xL 
 '       d    K   EK  \        P$                   d     K  \&         Ed    T P                  P                  4       '       Egr   T P#                  4       G Rj  xL 
 '       dy    RRR4      GRj  xL 
  T P(                  R8X  dT   T P*                  '       g@   T P-                  RRT P(                  R	T P.                  R
T P0                  /4       RT n        R# R# R# Te   \        P                  ! 4       P                  4       T8  dy    RRR4      GRj  xL 
  T P(                  R8X  dT   T P*                  '       g@   T P-                  RRT P(                  R	T P.                  R
T P0                  /4       RT n        R# R# R# \        P2                  ! T P                  ;'       g    ^4      G Rj  xL 
  EK   RRR4      GRj  xL 
  T P(                  R8X  dT   T P*                  '       g@   T P-                  RRT P(                  R	T P.                  R
T P0                  /4       RT n        R# R# R# i ; i  \&         d     E
K  i ; i EL  + GRj  xL 
 '       g   i     EL; i  \&         d     ELi ; i  T P(                  R8X  dR   T P*                  '       g?   T P-                  RRT P(                  R	T P.                  R
T P0                  /4       RT n        i i i ; i5i)AuthorizationzBearer N)max_sizeadditional_headersg        r   	completedr&   r6   r7   idTtyper'   failedr[   )r6   ri   totalcredits_used
expires_atnextr7   catchupr(   rm   creditsUsed	expiresAtrp   rc   ri   rl   	cancelled)(r_   r5   rC   
websocketsconnectr,   asyncioget_event_looptimer2   is_setmaxminr-   wait_forrecvTimeoutError_poll_status_onceCancelledErrorrI   r6   r9   rV   r7   r*   sleepjsonloadsgetr:   r+   r	   r
   rK   extend
isinstancedictrH   r   r   )r;   uriheaders_list	websocketdeadline	remainingr   msgbodymsg_typejobddocs_indocraw_payloaddocspayloadhas_status_field
status_strs   &                  r   _run_wsWatcher._run_wsY   s)
      "===GDMM?2K LMh	'!))#Q]^^^bkNRmmm711388:T]]Jae**++--+$'X8N8N8P8U8U8W-W$X	"%d&9&9&F&FY	"R"&"5"5":":$+$4$4Y^^5Ew$WW&!#zz#
  $xx/H7*&.++G$dkk"DII#TXXg%6 $,,	6  ,0(::0"*(aq_`mqx|  DF  #GC"0AUVefsw  C  JL  #MC

3!Y. HHVR0&'eeHdkk&B"#%%"3		((1#*C //
VS$PTP\P\<]^ $+!Z/"hhv.%c400 II,,S1 //
VS$PTP\P\<]^!V+&1&*hhvr&:&@&@b"-//&""="C"C%gt44'.#-c4#8#8$(II$4$4S$9 (/ ++FXt{{FTXT]T]_ceieqeq4rs*./1#'99C)#t44$<S$A $HMqM : $-  ::0"*'2*5//+q*I&1oogq&A-8__]A-N+6??;+G%0__V%<%)#C #1'2*5//+q*I&1oogq&A-8__]A-N+6??;+G%0__V%<%)#C 

3"hhvt4G(27D(A(Y(YhRYFY'p'p_gko_o$+ !(Xtxx$++7V!WJzzW,!#*;;vr#:C)#t44$<S$A $HMqM : $; '#-&-kk+q&A")++gq"9)0]A)F'.{{;'?!(V!4!% 

3%)MM)[8 $ 3 3FXzSY[_[d[dfjlplxlx<y z26)X5d>N>N>N $ 3 3Gh
TZ\`\e\egkmqmymy=z {37 0! N  "#*;;vr#:C)#t44$<S$A $HMqM : $; -#-&-kk+q&A")++gq"9)0])C'.{{;'?!(V!4!% 

3%)MM)[8 $ 3 3FXzSY[_[d[dfjlplxlx<y z26)X5d>N>N>N $ 3 3Gh
TZ\`\e\egkmqmymy=z {37 0!A _^J {{k)$///##FXt{{FDIIW[]a]i]i,jk"& 3B)K _ X"// %!%!7!7!999!$"11 $ "&**"3"3"5"5%)%;%;%=== &/ _^^J {{k)$///##FXt{{FDIIW[]a]i]i,jk"& 3B)[  (38N8N8P8U8U8W[c8c &3 _^^J {{k)$///##FXt{{FDIIW[]a]i]i,jk"& 3B)W #*--0C0C0H0Hq"III7 _^^J {{k)$///##FXt{{FDIIW[]a]i]i,jk"& 3B)e % ! !? _^^^B  		 {{k)$///##FXt{{FDIIW[]a]i]i,jk"& 3B)s2  Aq%o -d+.o 1A)n2An2+n2n2)d14d.5d1:nGn2+n2 n2(n2B n2
D6n2n2n2A+n2B9n2An2A"n29Bn2n25An24n25o  n/o "q(Aq+o .d11(ne

n%n2,n?n n2	n!n/ng

nn2o go  "qAq,n2n23o >j?o "q'Aq*"n
nl
n n2!o ,l/-o 2"qAqnn2n,'n2+n,,n2/o 2o	8n;9
o	o	o 
o! o oo! oo! !#qA qqc                    < V ^8  d   QhRS[ /# rY   )bool)r   r   s   "r   r   r   	  s       r    c                  "    V P                   R8X  d?   \        P                  ! V P                  P                  V P
                  4      G Rj  xL
 pM>\        P                  ! V P                  P                  V P
                  4      G Rj  xL
 p VP                  V n        V P                  V4       VP                  R9   d   VP                  R8X  dm   V P                  '       g[   T P                  RRVP                  RVP                   Uu. uF  q"P                  4       NK  	  upR	V P
                  /4       R
V n
        VP                  R8X  dm   V P                  '       g[   T P                  RRVP                  RVP                   Uu. uF  q"P                  4       NK  	  upR	V P
                  /4       R
V n        R
# R#  ELu EL:  \         d     R# i ; iu upi u upi 5i)z9Poll job status over HTTP once. Returns True if terminal.r[   NFri   rl   r&   r6   r7   rj   Tr'   rt   )r+   rx   	to_threadr)   get_crawl_statusr*   get_batch_scrape_statusrI   r6   rK   r9   rV   r7   
model_dumpr:   )r;   r   r   s   &  r   r   Watcher._poll_status_once	  s    	zzW$&-&7&78U8UW[WcWc&d d,3,=,=dll>b>bdhdpdp,q&q jj

3::==zz[(##FXszz6dgdldlKmdl_`LLNdlKmosuy  vB  vB  -C  D"&zzX%d.>.>.>##Gh

FehememLnem`a\\^emLnptvz  wC  wC  .D  E#' ! !e&q 		 Ln Mos~   G$A	G GG G$8G GG AG$''G$G&=G$$'G$G#G$G G GG$GG$c                   < V ^8  d   QhRR/# rb   rc   )r   r   s   "r   r   r     s     $ $t $r    c                N    \         P                  ! V P                  4       4       R # rB   )rx   runr   r;   s   &r   _loopWatcher._loop  s    DLLN#r    c                   < V ^8  d   QhRR/# rb   rc   )r   r   s   "r   r   r   "  s      t r    c                $   V P                   '       d#   V P                   P                  4       '       d   R # V P                  P                  4        \        P
                  ! V P                  RR7      V n         V P                   P                  4        R # )NT)targetdaemon)r/   is_aliver2   clearr0   Threadr   startr   s   &r   r   Watcher.start"  sX    <<<DLL1133

 ''tzz$Gr    c                   < V ^8  d   QhRR/# rb   rc   )r   r   s   "r   r   r   )  s     ) )d )r    c                    V P                   P                  4        V P                  '       d   V P                  P                  ^R7       R# R# )   rh   N)r2   setr/   joinr   s   &r   stopWatcher.stop)  s3    

<<<LLa( r    )r5   r4   r)   r8   r*   r+   r.   r-   r9   r:   r2   r/   r,   r7   r6   )r[   r   N)__name__
__module____qualname____firstlineno__r<   rD   rK   rQ   rV   r_   r   r   r   r   r   __static_attributes____classdictcell__)r   s   @r   r   r      sw     ' '@) ) = = ; ;n' n'` ,$ $ ) )r    r   )r[   batch)__doc__rx   r   r0   typingr   r   r   r   r   r   r   rv   typesr	   r
   r   utils.normalizer   r   r@   r   rc   r    r   <module>r      sR       F F F  5 5 5 "
#
.(
)S) S)r    