
    j;l                       U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ  ej,                  e      Z ed	d
      Zded<   dZdZdZdZdZdZ dZ!dZ" e#h d      Z$ G d de%      Z& ed       G d d             Z' ed       G d d             Z( G d d      Z)d)d Z*d*d!Z+d+d"Z,dd#	 	 	 	 	 	 	 d,d$Z- G d% d&      Z. G d' d(      Z/y)-zBDurable, privacy-safe acknowledgement gating for Telegram polling.    )annotationsN)CallableIterableIterator)	dataclass)contextmanager)
ContextVar)Pathtelegram_ingress_update_id)defaultzContextVar[int | None]_CURRENT_UPDATE_ID         receipthandledrecovery_receiptbusiness_commit_reconciledblocked_receipt>   duplicate_replayhandler_exceptionreceipt_lock_failedreceipt_write_failedreceipt_store_corruptr   recovery_authority_mismatchc                      e Zd ZdZy)TelegramIngressReceiptErrorz>The durable update-ID receipt authority cannot be used safely.N)__name__
__module____qualname____doc__     j/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/gateway/platforms/telegram_polling_receipts.pyr   r   -   s    Hr#   r   T)frozenc                  ,    e Zd ZU ded<   ded<   ded<   y)_ReceiptStatezfrozenset[int]pendingzdict[int, str]	recoveredfailedNr   r   r    __annotations__r"   r#   r$   r'   r'   1   s    r#   r'   c                  T    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   y
)!TelegramBusinessRecoveryCandidateint	update_idstrprovenance_digestactor_idchat_idtopic_id
message_idcallback_dataNr+   r"   r#   r$   r.   r.   8   s'    NMLMOr#   r.   c                      e Zd ZdZddZddZddZdd	 	 	 	 	 	 	 ddZddZdd	Z	dd
Z
ddZedd       ZddZedd       Ze	 	 	 	 	 	 dd       Z	 	 	 	 	 	 	 	 ddZd dZ	 	 	 	 	 	 d!dZy)"TelegramIngressReceiptStorezIPersist only pending update-ID receipts until Telegram acknowledges them.c                    t        |      | _        | j                  j                  | j                  j                  dz         | _        y )Nz.lock)r
   _pathwith_suffixsuffix
_lock_path)selfpaths     r$   __init__z$TelegramIngressReceiptStore.__init__F   s2    $Z
**001B1BW1LMr#   c                    | j                         5 }| j                  |      }||j                  v xs ||j                  v cd d d        S # 1 sw Y   y xY wN)_locked_read_unlockedr(   r)   r?   r0   directory_fdstates       r$   containsz$TelegramIngressReceiptStore.containsJ   sA    \\^|''5E-Meoo1M ^^s   /A

Ac           	     :   | j                         5 }| j                  |      }||j                  v s||j                  v r
	 d d d        y | j	                  |t        |j                  |hz  |j                  |j                               d d d        y # 1 sw Y   y xY wrC   )rD   rE   r(   r)   _write_unlockedr'   r*   rF   s       r$   recordz"TelegramIngressReceiptStore.recordO   sz    \\^|''5EEMM)Y%//-I ^   emmyk95??ELLY	 ^^s   /B	?BBFheal_handler_failurec          
        t              t        us%dk  s t        |      dk7  st        d |D              rt	        d      | j                         5 }| j                  |      }|j                  j                        }||r|dk7  rt        |      |j                  j                        }|||k7  rt        d      	 ddd       yt        |j                        }||<   t        |j                        }	|	j                  d       | j                  |t        t        fd|j                   D              ||	             ddd       y# 1 sw Y   yxY w)	zARetain a terminal receipt for authenticated post-commit recovery.r   @   c              3  $   K   | ]  }|d v 
 yw0123456789abcdefNr"   .0	characters     r$   	<genexpr>z?TelegramIngressReceiptStore.record_recovered.<locals>.<genexpr>e   s     ZHY99$66HY   z!invalid Telegram recovery receiptNr   r   c              3  .   K   | ]  }|k7  s	|  y wrC   r"   )rU   itemr0   s     r$   rW   z?TelegramIngressReceiptStore.record_recovered.<locals>.<genexpr>{   s     R}t	@Qd}s   
)typer/   lenany
ValueErrorrD   rE   r*   getr   r)   dictpoprK   r'   	frozensetr(   )
r?   r0   r2   rN   rG   rH   failureexistingr)   r*   s
    `        r$   record_recoveredz,TelegramIngressReceiptStore.record_recoveredY   s6    O3&1}$%+ZHYZZ@AA\\^|''5Ell&&y1G"(G7J,J1'::**95H#0056MNN ^ U__-I#4Ii %,,'FJJy$'  Ru}}RR! ^^s   A/EA:EEc           	        t        |      t        us
|dk  s|dk7  ry| j                         5 }| j                  |      }||j                  v rt        d      |j                  j                  |      }|||k7  rt        d      	 ddd       yt        |j                        }|||<   | j                  |t        |j                  |j                  |             ddd       y# 1 sw Y   yxY w)zBPersist a handler failure so restart recovery cannot overwrite it.r   r   Nr   )r[   r/   rD   rE   r)   r   r*   r_   r`   rK   r'   r(   )r?   r0   reason_coderG   rH   rd   r*   s          r$   record_failedz)TelegramIngressReceiptStore.record_failed   s    	?#%Q+I\:\\\^|''5EEOO+12IJJ||''	2H#{*56MNN ^ %,,'F +F9  emmU__fE ^^s   AC#AC##C,c                    | j                         5 }| j                  |      j                  j                  |      cd d d        S # 1 sw Y   y xY wrC   )rD   rE   r*   r_   r?   r0   rG   s      r$   failure_reasonz*TelegramIngressReceiptStore.failure_reason   s6    \\^|&&|4;;??	J ^^   *AAc                    | j                         5 }| j                  |      j                  j                  |      cd d d        S # 1 sw Y   y xY wrC   )rD   rE   r)   r_   rj   s      r$   recovered_provenancez0TelegramIngressReceiptStore.recovered_provenance   s6    \\^|&&|4>>BB9M ^^rl   c           	     .   | j                         5 }| j                  |      }t        fd|j                  D              }||j                  k7  r1| j	                  |t        ||j                  |j                               d d d        y # 1 sw Y   y xY w)Nc              3  ,   K   | ]  }|k\  r|  y wrC   r"   rU   r0   offsets     r$   rW   z<TelegramIngressReceiptStore.forget_before.<locals>.<genexpr>   s!      !!.I& !.   )rD   rE   rb   r(   rK   r'   r)   r*   )r?   rr   rG   rH   retaineds    `   r$   forget_beforez)TelegramIngressReceiptStore.forget_before   sv    \\^|''5E  !!&! H
 5==($$ !(EOOU\\J ^^s   A0BBc              #  Z  K   d}d}	 | j                         }| j                  | j                  j                  |d       t	        j
                  | j                  j                  | j                  t        j                  t        j                  z  t        j                  z        d|      }| j                  t	        j                  |      d       t        j                  |t        j                         	 | t        j                  |t        j$                         t	        j                   |       t	        j                   |       y # t        $ rE}|dk\  rt	        j                   |       |dk\  rt	        j                   |       t#        d      |d }~wt"        $ r6 |dk\  rt	        j                   |       |dk\  rt	        j                   |        w xY w# t        j                  |t        j$                         t	        j                   |       t	        j                   |       w xY ww)Nr   
error_code  dir_fdr   )_open_authority_directory_validate_optional_regularr>   nameosopen_open_flagsO_CREATO_RDWR
O_NONBLOCK_validate_regularfstatfcntlflockLOCK_EXOSErrorcloser   LOCK_UN)r?   rG   
descriptorexcs       r$   rD   z#TelegramIngressReceiptStore._locked   s    
	99;L++$$0 , 
 $$  bii!7"--!GH#	J ""$0 #  KK
EMM2	#KK
EMM2HHZ HH\"#  	NQ$q &-.CD#M* 	Q$q &	 KK
EMM2HHZ HH\"s?   H+C.E
 7G ;AH+
	GA FAGH+AH((H+c           	     x   | j                   j                  }|j                         rSt        j                  t        j
                  t        j                  t        j                  z        }|j                  dd  }nAt        j                  dt        j                  t        j                  z        }|j                  }	 |D ]  }|dv r|dk(  rt        d      	 t        j                  || j                  t        j                  t        j                  z        |      }	 t        j                  t        j                   |      j"                        st        d      	 t        j&                  |       |} 	 |S # t        $ rr 	 t        j                  |d|       n# t        $ r Y nw xY wt        j                  || j                  t        j                  t        j                  z        |      }Y w xY w# t$        $ r t        j&                  |        w xY w# t$        $ r t        j&                  |        w xY w)Nr   .>    r   z..r   r{   i  )r;   parentis_absoluter   r   sepO_RDONLYO_DIRECTORYpartsr   r   FileNotFoundErrormkdirFileExistsErrorstatS_ISDIRr   st_modeBaseExceptionr   )r?   r   rG   
components	componentchild_fds         r$   r}   z5TelegramIngressReceiptStore._open_authority_directory   s   ""77bnn,L  ab)J77bnn,L  J 	'		)$56KLL!ww!((r~~)EF+ H<<(:(B(BC9:OPP D
 &'9 (@ + ) 	E,G* !ww!((r~~)EF+ H	 % HHX&
  	HH\"	sh   <H AE8=G6H 8	G3FG3	F'$G3&F''A	G30H 2G33H 6 HH  H9c                f    t        t        dd       }t        |      t        urt	        d      | |z  S )N
O_NOFOLLOWr   )getattrr   r[   r/   r   )flags	no_follows     r$   r   z'TelegramIngressReceiptStore._open_flags  s3    Bd3		?#%-.CDDy  r#   c                   t        j                  | j                        r1| j                  dk7  s"t        j                  | j                        dk7  rt        |      y )Nr   rz   )r   S_ISREGr   st_nlinkS_IMODEr   )metadatary   s     r$   r   z-TelegramIngressReceiptStore._validate_regular  sK     X--.  A%||H,,-6-j99 7r#   c                   	 t        j                  ||      }| j                  ||       y # t        $ r Y y t        $ r}t	        |      |d }~ww xY w)Nr{   rx   )r   lstatr   r   r   r   )r?   r   rG   ry   r   r   s         r$   r~   z6TelegramIngressReceiptStore._validate_optional_regular  sY    	Cxx\:H
 	xJ?	 ! 	 	C-j9sB	Cs   - 	AA AAc                
   	 t        j                  | j                  j                  |      }| j                  |d       d}	 t        j                  | j                  j                  | j                  t         j                  t         j                  z        |      }| j                  t        j                  |      d       g }t        j                  |d      x}r*|j!                  |       t        j                  |d      x}r*t#        j$                  dj'                  |      j)                  d            }	 |dk\  rt        j.                  |       	 t1        |t2              st        d      |j5                  d	      }|t6        k(  rd
d	hn|t8        k(  rh dnh d}	|t6        t8        t:        hvs-t=        |      |	k7  st1        |j5                  d
      t2              st        d      t=               }
|d
   j?                         D ]  \  }}t1        |t@              rG|jC                         r7|tA        tE        |            k7  s t1        |t2              r|tF        tH        dk7  rt        d      tE        |      }|dk  rt        d      |
jK                  |        i }|j5                  di       }t1        |t2              st        d      |j?                         D ]   \  }}t1        |t@              r|jC                         r|tA        tE        |            k7  sot1        |t2              r_t=        |      h dk7  sO|j5                  d      tL        k7  s7|j5                  d      tN        k7  st1        |j5                  d      t@              st        d      tE        |      }|d   }|dk  s$tQ        |      dk7  stS        d |D              s||
v rt        d      |||<    i }|j5                  di       }t1        |t2              st        d      |j?                         D ]{  \  }}t1        |t@              r3|jC                         r#|tA        tE        |            k7  s|dtT        dk7  rt        d      tE        |      }|dk  s||
v s||v rt        d      d||<   } t        t        |
      ||      S # t        $ r t        t               i i       cY S t        $ r}t        d      |d }~ww xY w# t        $ r  t        t*        t"        j,                  f$ r}t        d      |d }~ww xY w# |dk\  rt        j.                  |       w w xY w)Nr{   r   rx   rw   i   r#   utf-8r   versionreceipts>   r   r   terminal_receipts>   r   r   terminal_failuresr   )rg   stager   >   r   rg   r2   rg   r   r2   rP   c              3  $   K   | ]  }|d v 
 ywrR   r"   rT   s     r$   rW   z=TelegramIngressReceiptStore._read_unlocked.<locals>.<genexpr>  s     ^L]yy(::L]rX   r   r   )+r   r   r;   r   r   r'   rb   r   r   r   r   r   r   r   r   readappendjsonloadsjoindecodeUnicodeDecodeErrorJSONDecodeErrorr   
isinstancer`   r_   _SCHEMA_VERSION_RECOVERY_SCHEMA_VERSION_FAILURE_SCHEMA_VERSIONsetitemsr1   	isdecimalr/   _RECEIPT_REASON_RECEIPT_STAGEadd_RECOVERY_REASON_RECOVERY_STAGEr\   r]   _FAILURE_STAGE)r?   rG   r   r   r   chunkschunkrawr   expected_keysr   raw_update_idrL   r0   r)   raw_recoveredr2   r*   
raw_faileds                      r$   rE   z*TelegramIngressReceiptStore._read_unlocked(  s   	Pxx

EH
 	. 	 	
 
	%

  r}}!<=#J
 ""$2 #  #%F77:u55%5e$ 77:u55%5**SXXf%5%<%<W%EFC Q$#t$-.EFF'')$ /) # 66 =V 	 O-EG^__3x=(cggj148-.EFF U%(_%:%:%<!M6}c2$..0 CM(:$;;!&$/#2^LM 22IJJM*I1}12IJJLL# &= %'	 3R8-.-.EFF%2%8%8%:!M6}c2$..0 CM(:$;;!&$/v;"OO::m,0@@::g&/9!&**-@"A3G12IJJM*I &': ;A()R/^L]^^(12IJJ#4Ii + &;, "$WW0"5
*d+-.EFF%/%5%5%7!M6}c2$..0 CM(:$;;-@>ZZ12IJJM*I1}	X 5i9O12IJJ 3F9 &8 Yx0)VDDU ! 	6 b"55 	P-.EFCO	P* + 	+T-A-AB 	P-.EFCO	P Q$ sH   +R4 CS0 3S0 4S-S-S((S-0'T(T##T((T+ +Uc           	     ~   |j                   rt        n|j                  rt        nt        t        |j                        D ci c]  }t        |      t        t        d c}d}|j                  s|j                   rOt        |j                  j                               D ci c]  \  }}t        |      t        t        |d c}}|d<   |j                   rJt        |j                   j                               D ci c]  \  }}t        |      t        |d c}}|d<   d| j                  j                   dt!        j"                  d       d	}d
}	 | j%                  | j                  j                  |d       t'        j(                  || j+                  t&        j,                  t&        j.                  z  t&        j0                  z        d|      }| j3                  t'        j4                  |      d       t7        j8                  |dd      j;                  d      }	t'        j<                  |d      5 }
d
}|
j?                  |	      tA        |	      k7  rtC        d      |
jE                          t'        jF                  |
jI                                d d d        t'        jJ                  || j                  j                  ||       t'        jF                  |       	 |dk\  rt'        jN                  |       	 t'        jP                  ||       y c c}w c c}}w c c}}w # 1 sw Y   xY w# tL        $ r  tB        $ r}tM        d      |d }~ww xY w# tR        $ r Y y tB        $ r Y y w xY w# |dk\  rt'        jN                  |       	 t'        jP                  ||       w # tR        $ r Y w tB        $ r Y w w xY wxY w)N)r   rg   )r   r   )r   rg   r2   r   r   r   z	.receipt-   z.tmprw   r   rx   rz   r{   r   r   T)indent	sort_keysr   wbzpartial receipt write)
src_dir_fd
dst_dir_fdr   )*r*   r   r)   r   r   sortedr(   r1   r   r   r   r   r   r   r;   r   secrets	token_hexr~   r   r   r   r   O_EXCLO_WRONLYr   r   r   dumpsencodefdopenwriter\   r   flushfsyncfilenoreplacer   r   unlinkr   )r?   rG   rH   r0   payloadr2   rg   temporary_namer   encodedtemporary_filer   s               r$   rK   z+TelegramIngressReceiptStore._write_unlocked  sp    << (27//. "(!6
 "7I	 I+#2!  "7&
 ??ell 5;5??;P;P;R4S, 5T0I0 I,#3):! 
 5T,G'( << /5U\\5G5G5I.J,
 /K*I{	 I+#.!  /K,G'( 

 	'*;*;B*?)@E 	 
.	++

2 , 
   bii!7"++!EF#	J ""$1 #  jj fWo	 
 :t,
!''0CL@!"9::$$&..01 - JJ

''	 HH\" Q$		.>O,,@ -, + 	 	O-.DE3N	O %   Q$		.>$  s   L""L=LC#L0 7AL$A
L0 ;M $L-)L0 0MMMM/ 	M,!M,+M,/N<N#"N<#	N9,N<.N96N<8N99N<N)r@   r
   returnNone)r0   r/   r   bool)r0   r/   r   r   r0   r/   r2   r1   rN   r   r   r   )r0   r/   rg   r1   r   r   )r0   r/   r   
str | Nonerr   r/   r   r   )r   zIterator[int])r   r/   )r   r/   r   r/   )r   zos.stat_resultry   r1   r   r   )r   r1   rG   r/   ry   r1   r   r   )rG   r/   r   r'   )rG   r/   rH   r'   r   r   )r   r   r    r!   rA   rI   rL   re   rh   rk   rn   ru   r   rD   r}   staticmethodr   r   r~   rE   rK   r"   r#   r$   r9   r9   C   s   SNN
 &+&& &
 #& 
&P(KN &# &#P/b ! ! 
: 
: 
: 
	
: 
:@@ @
 @ 
@mE^VV V 
	Vr#   r9   c                b    t        | dd       }t        |      t        us|dk  rt        d      |S )Nr0   r   r   )r   r[   r/   r   )updater0   s     r$   update_id_from_updater     s4    T2IIc!Y])*ABBr#   c                @    t         j                  t        |              y)zEExpose the PTB update ID to content-free nested callback diagnostics.N)r   r   r   )r   s    r$   set_current_telegram_updater     s    089r#   c                 *    t         j                         S rC   )r   r_   r"   r#   r$   current_telegram_update_idr     s    !!##r#   rg   c                   |t         j                  d| |       y|t        vrt        d      t         j                  d| ||       y)zELog a bounded receipt event without message, callback, or actor data.Nz&telegram_ingress stage=%s update_id=%sz'invalid Telegram ingress receipt reasonz5telegram_ingress stage=%s update_id=%s reason_code=%s)loggerinfo_VALID_REASONSr^   )r   r0   rg   s      r$   log_telegram_ingressr      sJ     <eYO.(BCC
KK?	r#   c                      e Zd ZdZ	 	 	 	 	 	 ddZ	 	 	 	 ddZddZddZddZddZ	dd		 	 	 	 	 	 	 dd
Z
ddZddZe	 	 	 	 	 	 dd       ZddZy)TelegramPollingReceiptGatezGHold PTB's next offset request until every earlier update is receipted.c               v    || _         || _        i | _        i | _        i | _        t               | _        i | _        y rC   )_store_on_blocked_ready_outcome_reasonr   _processing_business_recoveries)r?   store
on_blockeds      r$   rA   z#TelegramPollingReceiptGate.__init__  s:     %02)+')%(URT!r#   c                    | j                   j                  |j                        }|||k7  rt        d      || j                   |j                  <   y )Nr   )r	  r_   r0   r   )r?   	candidaterd   s      r$   register_business_recoveryz5TelegramPollingReceiptGate.register_business_recovery%  sO     ,,001D1DEH	$9-.EFF9B!!)"5"56r#   c                    |D ];  }t        |      }| j                  j                  |t        j                                = y rC   )r   r  
setdefaultasyncioEvent)r?   updatesr   r0   s       r$   capturedz#TelegramPollingReceiptGate.captured.  s0    F-f5IKK""9gmmo> r#   c                  K   t        |      }t        |       | j                  j                  |t	        j
                               }	 | j                  j                  |      }| j                  j                  |      }|K|dk(  r3|1| j                  ||      r| j                  ||j                  d       y| j                  ||       y| j                  j                  |      r!| j                  |d       t!        d|d       y|C| j                  ||      s| j                  |d       y| j                  ||j                  	       y	 || j&                  v r|j)                          d{    y| j&                  j+                  |       y
# t"        $ r%}| j                  |t%        |             Y d}~yd}~ww xY w7 Rw)zHReturn whether the already-receipted update must skip business handlers.Nr   T)r0   r2   rN   r   r   r   r   )r0   r2   F)r   r   r  r  r  r  r  rk   r	  r_   _matches_business_recoveryreconcile_business_commitr2   r*   rI   _resolver   r   r1   r  waitr   )r?   r   r0   readyrc   recoveryr   s          r$   beginz TelegramPollingReceiptGate.begin3  s    )&1	#F+&&y'--/B$	kk00;G0044Y?H"22 ,77I22"+*2*D*D-1 3   KK0{{##I.i.$ 2
 #66vxHKK(EF..'&.&@&@ /   $ (((**,Y' + 	KKC)	
 sm   AGA/F 7G8F 
G;F G&F -G.F #G.G/!G	F>F94G9F>>Gc                ,   t        |      }| j                  j                  |      du ry 	 | j                  j	                  |       | j                  |d       t        d|       y # t
        $ r%}| j                  |t        |             Y d }~y d }~ww xY w)NFTr   )
r   r  r_   r  rL   r   r*   r1   r  r   )r?   r   r0   r   s       r$   	completedz$TelegramPollingReceiptGate.completedd  s~    )&1	==Y'50	KKy) 	i&Y	2	 + 	KKC)	s   A% %	B.BBc                   t        |      }| j                  j                  |      du ry | j                  j	                  |       || j
                  |<   	 | j                  j                  ||       | j                  |d       t        d||       y # t        $ r"}t        |      | j
                  |<   Y d }~Gd }~ww xY w)NTFr   r   )r   r  r_   r  discardr  r  rh   r   r1   r  r   )r?   r   rg   r0   r   s        r$   r*   z!TelegramPollingReceiptGate.failedp  s    )&1	==Y'4/  +"-Y	/KK%%i= 	i'Y	{K + 	/&)#hDLL#	/s   B 	B=B88B=FrM   c               J   | j                   j                  |      du r%t        | j                  j                  |d            | j                  j                  |||       | j                  j                  |       | j                  |d       t        t        |t               y)zEReceipt an authenticated business commit after UI recovery completed.Fr   rM   Tr   N)r  r_   r   r  r  re   r  r   r  r   r   r   )r?   r0   r2   rN   s       r$   r  z4TelegramPollingReceiptGate.reconcile_business_commit}  s     ==Y'50-  ,?@  	$$!5 	% 	

 	  +i&(	
r#   c               X  K   t        fdt        | j                        D              }|r|sy|D ]r  }| j                  |   j                          d {    | j                  j                  |      dusF| j                  || j                  j                  |d              y y7 Rw)Nc              3  ,   K   | ]  }|k  r|  y wrC   r"   rq   s     r$   rW   z<TelegramPollingReceiptGate.permits_offset.<locals>.<genexpr>  s!      
0	6! 0rs   FTr   )tupler   r  r  r  r_   r  r  )r?   rr   runningr(   r0   s    `   r$   permits_offsetz)TelegramPollingReceiptGate.permits_offset  s      
#DKK0
 

 7 I++i(--///}}  +47  LL$$Y0CD  !  0s   AB*B(!B*81B*c                x   	 | j                   j                  |       t        | j                        D ]w  }||k  s	| j                  j                  |d        | j                  j                  |d        | j                  j                  |d        | j                  j                  |       y y # t        $ r Y y w xY wrC   )
r  ru   r   r$  r  ra   r  r  r  r   )r?   rr   r0   s      r$   acknowledged_throughz/TelegramPollingReceiptGate.acknowledged_through  s    	KK%%f- t{{+I6!	40!!)T2  D1  ((3 , + 		s   B- -	B98B9c                   t        | dd       }t        |dd       }t        |dd       }t        |dd       }t        |dd       }|d}t        t        |dd       |j                  k(  xrn t        |dd       |j                  k(  xrR t        |dt        |d	d             |j                  k(  xr+ ||j
                  k(  xr t        |d
d       |j                  k(        S )Ncallback_querymessage	from_userchatmessage_thread_idr   dataidr4   r6   )r   r   r7   r3   r4   r5   r6   )r   r  queryr+  actorr-  r5   s          r$   r  z5TelegramPollingReceiptGate._matches_business_recovery  s    
  0$7%D1{D1w-7$7>HE64(I,C,CC MtT*i.@.@@MdGGY$EF)J[J[[M I...M t4	8L8LL
 	
r#   c                    || j                   |<   | j                  j                  |t        j                               j                          y rC   )r  r  r  r  r  r   )r?   r0   	succeededs      r$   r  z#TelegramPollingReceiptGate._resolve  s3    #,i y'--/:>>@r#   N)r
  r9   r  zCallable[[int, str], None]r   r   )r  r.   r   r   )r  zIterable[object]r   r   )r   objectr   r   r   r5  r   r   )r   r5  rg   r1   r   r   r   )rr   r/   r%  r   r   r   r   )r   r5  r  r.   r   r   )r0   r/   r4  r   r   r   )r   r   r    r!   rA   r  r  r  r  r*   r  r&  r(  r   r  r  r"   r#   r$   r  r    s    QU*U /	U
 
UC4C 
C?
/b
3L$ &+
 
 	

 #
 

2$
4 

4
 

 
&Ar#   r  c                  D    e Zd ZdZ	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 ddZy)	ReceiptGatedTelegramBotzGPTB bot proxy which does not send an advancing offset before a receipt.c               .    || _         || _        || _        y rC   )_bot_gate_is_running)r?   botgate
is_runnings       r$   rA   z ReceiptGatedTelegramBot.__init__  s     	
%r#   c                .    t        | j                  |      S rC   )r   r:  )r?   r   s     r$   __getattr__z#ReceiptGatedTelegramBot.__getattr__  s    tyy$''r#   c                  K   |j                  d      }t        |      t        u r:|dkD  r5| j                  j	                  || j                                d {   sg S t        | j                  d      } ||i | d {   }t        |t        t        f      st        d      | j                  j                  |       t        |      t        u r |dkD  r| j                  j                  |       |S 7 7 uw)Nrr   r   )r%  get_updatesr   )r_   r[   r/   r;  r&  r<  r   r:  r   listr$  r   r  r(  )r?   argskwargsrr   rC  r  s         r$   rC  z#ReceiptGatedTelegramBot.get_updates  s     
 H%<36A:22((* 3    	dii7#T4V44'D%=1-.EFF

G$<36A:JJ++F3 5s%   AC8C4'C8 C6A4C86C8N)r=  r5  r>  r  r?  zCallable[[], bool]r   r   )r   r1   r   r5  )rE  r5  rF  r5  r   r5  )r   r   r    r!   rA   rA  rC  r"   r#   r$   r8  r8    sV    Q	&	& )	&
 '	& 
	&(  
	r#   r8  )r   r5  r   r/   r6  )r   z
int | None)r   r1   r0   r/   rg   r   r   r   )0r!   
__future__r   r  r   r   loggingr   r   r   collections.abcr   r   r   dataclassesr   
contextlibr   contextvarsr	   pathlibr
   	getLoggerr   r   r   r,   r   r   r   r   r   r   r   r   rb   r   RuntimeErrorr   r'   r.   r9   r   r   r   r   r  r8  r"   r#   r$   <module>rP     sF   H "     	   8 8 ! % " 			8	$-7 . * 
   $/ "
I, I $   $  j jZ:
$ #	 	
 
(vA vAr$ $r#   