Ë
    ö%9j‚  ã                   ó¢   — d 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  G d„ d«      Z G d„ d«      Z	 G d„ d«      Z
 G d	„ d
ej                  «      Zy)z=Encoding and validation utils for the messaging (FCM) module.é    Nc                   ó"   — e Zd ZdZ	 	 dd„Zd„ Zy)ÚMessagea  A message that can be sent via Firebase Cloud Messaging.

    Contains payload information as well as recipient information. In particular, the message must
    contain exactly one of token, topic or condition fields.

    Args:
        data: A dictionary of data fields (optional). All keys and values in the dictionary must be
            strings.
        notification: An instance of ``messaging.Notification`` (optional).
        android: An instance of ``messaging.AndroidConfig`` (optional).
        webpush: An instance of ``messaging.WebpushConfig`` (optional).
        apns: An instance of ``messaging.ApnsConfig`` (optional).
        fcm_options: An instance of ``messaging.FCMOptions`` (optional).
        token: The registration token of the device to which the message should be sent (optional).
        topic: Name of the FCM topic to which the message should be sent (optional). Topic name
            may contain the ``/topics/`` prefix.
        condition: The FCM condition to which the message should be sent (optional).
    Nc
                 ó‚   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        y ©N)	ÚdataÚnotificationÚandroidÚwebpushÚapnsÚfcm_optionsÚtokenÚtopicÚ	condition)
Úselfr   r   r	   r
   r   r   r   r   r   s
             ú]/var/www/html/truck-me/venv/lib/python3.12/site-packages/firebase_admin/_messaging_encoder.pyÚ__init__zMessage.__init__.   sC   € àˆŒ	Ø(ˆÔØˆŒØˆŒØˆŒ	Ø&ˆÔØˆŒ
ØˆŒ
Ø"ˆ�ó    c                 ó:   — t        j                  | t        d¬«      S )NT)ÚclsÚ	sort_keys)ÚjsonÚdumpsÚMessageEncoder)r   s    r   Ú__str__zMessage.__str__:   s   € Ü�z‰z˜$¤N¸dÔCÐCr   )	NNNNNNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r      s   „ ñð& W[ØEIó
#óDr   r   c                   ó   — e Zd ZdZ	 	 dd„Zy)ÚMulticastMessagea~  A message that can be sent to multiple tokens via Firebase Cloud Messaging.

    Args:
        tokens: A list of registration tokens of targeted devices.
        data: A dictionary of data fields (optional). All keys and values in the dictionary must be
            strings.
        notification: An instance of ``messaging.Notification`` (optional).
        android: An instance of ``messaging.AndroidConfig`` (optional).
        webpush: An instance of ``messaging.WebpushConfig`` (optional).
        apns: An instance of ``messaging.ApnsConfig`` (optional).
        fcm_options: An instance of ``messaging.FCMOptions`` (optional).
    Nc                 óÄ   — t         j                  d|«       t        |«      dkD  rt        d«      ‚|| _        || _        || _        || _        || _        || _	        || _
        y )NzMulticastMessage.tokensiô  z>MulticastMessage.tokens must not contain more than 500 tokens.)Ú_ValidatorsÚcheck_string_listÚlenÚ
ValueErrorÚtokensr   r   r	   r
   r   r   )r   r'   r   r   r	   r
   r   r   s           r   r   zMulticastMessage.__init__K   s^   € ä×%Ñ%Ð&?ÀÔHÜˆv‹;˜ÒÜÐ]Ó^Ð^ØˆŒØˆŒ	Ø(ˆÔØˆŒØˆŒØˆŒ	Ø&ˆÕr   )NNNNNN)r   r   r   r   r   r   r   r   r!   r!   >   s   „ ñð _cØ!ô'r   r!   c                   ó’   — e Zd ZdZedd„«       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zy
)r#   z‚A collection of data validation utilities.

    Methods provided in this class raise ``ValueErrors`` if any validations fail.
    c                 óÔ   — |€yt        |t        «      s6|rt        dj                  |«      «      ‚t        dj                  |«      «      ‚|r|st        dj                  |«      «      ‚|S )z&Checks if the given value is a string.Nz{0} must be a non-empty string.z{0} must be a string.)Ú
isinstanceÚstrr&   Úformat)r   ÚlabelÚvalueÚ	non_emptys       r   Úcheck_stringz_Validators.check_string_   sh   € ð ˆ=ØÜ˜%¤Ô%ÙÜ Ð!B×!IÑ!IÈ%Ó!PÓQÐQÜÐ4×;Ñ;¸EÓBÓCÐCÙ™UÜÐ>×EÑEÀeÓLÓMÐMØˆr   c                 ót   — |€y t        |t        j                  «      st        dj	                  |«      «      ‚|S )Nz{0} must be a number.)r*   ÚnumbersÚNumberr&   r,   ©r   r-   r.   s      r   Úcheck_numberz_Validators.check_numberl   s4   € àˆ=ØÜ˜%¤§¡Ô0ÜÐ4×;Ñ;¸EÓBÓCÐCØˆr   c                 óŠ  — |�|i k(  ryt        |t        «      st        dj                  |«      «      ‚|D �cg c]  }t        |t        «      rŒ|‘Œ }}|rt        dj                  |«      «      ‚|j                  «       D �cg c]  }t        |t        «      rŒ|‘Œ }}|rt        dj                  |«      «      ‚|S c c}w c c}w )zSChecks if the given value is a dictionary comprised only of string keys and values.Nz{0} must be a dictionary.z%{0} must not contain non-string keys.ú'{0} must not contain non-string values.)r*   Údictr&   r,   r+   Úvalues)r   r-   r.   ÚkÚnon_strÚvs         r   Úcheck_string_dictz_Validators.check_string_dictt   sµ   € ð ˆ=˜E RšKØÜ˜%¤Ô&ÜÐ8×?Ñ?ÀÓFÓGÐGØ#Ö>˜¬:°a¼Õ+=’1Ð>ˆÐ>ÙÜÐD×KÑKÈEÓRÓSÐSØ#Ÿl™l›nÖG˜´J¸qÄ#Õ4F’1ÐGˆÐGÙÜÐF×MÑMÈeÓTÓUÐUØˆùò ?ùò Hs   ·B;ÁB;ÂC ÂC c                 óì   — |�|g k(  ryt        |t        «      st        dj                  |«      «      ‚|D �cg c]  }t        |t        «      rŒ|‘Œ }}|rt        dj                  |«      «      ‚|S c c}w )z>Checks if the given value is a list comprised only of strings.Nz{0} must be a list of strings.r7   )r*   Úlistr&   r,   r+   )r   r-   r.   r:   r;   s        r   r$   z_Validators.check_string_listƒ   ss   € ð ˆ=˜E RšKØÜ˜%¤Ô&ÜÐ=×DÑDÀUÓKÓLÐLØ#Ö>˜¬:°a¼Õ+=’1Ð>ˆÐ>ÙÜÐF×MÑMÈeÓTÓUÐUØˆùò ?s   ·A1ÁA1c                 ó   — |�|g k(  ryt        |t        «      st        dj                  |«      «      ‚|D �cg c]  }t        |t        j
                  «      rŒ|‘Œ! }}|rt        dj                  |«      «      ‚|S c c}w )z>Checks if the given value is a list comprised only of numbers.Nz{0} must be a list of numbers.z'{0} must not contain non-number values.)r*   r?   r&   r,   r2   r3   )r   r-   r.   r:   Ú
non_numbers        r   Úcheck_number_listz_Validators.check_number_list�   sx   € ð ˆ=˜E RšKØÜ˜%¤Ô&ÜÐ=×DÑDÀUÓKÓLÐLØ!&ÖL˜A¬j¸¼G¿N¹NÕ.K’aÐLˆ
ÐLÙÜÐF×MÑMÈeÓTÓUÐUØˆùò Ms   ·A;ÁA;c                 ó–   — t         j                  ||«      }|�0t        j                  d|«      st	        dj                  |«      «      ‚|S )z5Checks if the given value is a valid analytics label.z^[a-zA-Z0-9-_.~%]{1,50}$zMalformed {}.)r#   r0   ÚreÚmatchr&   r,   r4   s      r   Úcheck_analytics_labelz!_Validators.check_analytics_label›   sE   € ô ×(Ñ(¨°Ó6ˆØÐ¤R§X¡XÐ.IÈ5Ô%QÜ˜_×3Ñ3°EÓ:Ó;Ð;Øˆr   c                 ó`   — |€yt        |t        «      st        dj                  |«      «      ‚|S )z%Checks if the given value is boolean.Nz{0} must be a boolean.)r*   Úboolr&   r,   r4   s      r   Úcheck_booleanz_Validators.check_boolean£   s2   € ð ˆ=ØÜ˜%¤Ô&ÜÐ5×<Ñ<¸UÓCÓDÐDØˆr   c                 ót   — |€yt        |t        j                  «      st        dj                  |«      «      ‚|S )z(Checks if the given value is a datetime.Nz{0} must be a datetime.)r*   Údatetimer&   r,   r4   s      r   Úcheck_datetimez_Validators.check_datetime¬   s8   € ð ˆ=ØÜ˜%¤×!2Ñ!2Ô3ÜÐ6×=Ñ=¸eÓDÓEÐEØˆr   N)F)r   r   r   r   Úclassmethodr0   r5   r=   r$   rB   rF   rI   rL   r   r   r   r#   r#   Y   s§   „ ñð
 ò
ó ð
ð ñó ðð ñó ðð ñ	ó ð	ð ñ	ó ð	ð ñó ðð ñó ðð ñó ñr   r#   c                   óV  — e Zd ZdZed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zed„ «       Zy)r   zTA custom ``JSONEncoder`` implementation for serializing Message instances into JSON.c                 óf   — |j                  «       D ��ci c]  \  }}|d g i fvsŒ||“Œ c}}S c c}}w r   )Úitems)r   Ú
dict_valuer:   r<   s       r   Úremove_null_valuesz!MessageEncoder.remove_null_values¹   s4   € à!+×!1Ñ!1Ó!3×O™˜˜A°qÀÀrÈ2ÀÒ7N��1‘ÓOÐOùÓOs   ”-¤-c                 ó˜  — |€yt        |t        j                  «      st        d«      ‚t        j                  d|j                  «      t        j                  d|j                  «      | j                  |j                  «      t        j                  d|j                  d¬«      t        j                  d|j                  «      | j                  |j                  «      | j                  |j                   «      t        j#                  d	|j$                  «      d
œ}| j'                  |«      }|j)                  d«      }|r|dvrt        d«      ‚|S )z0Encodes an ``AndroidConfig`` instance into JSON.Nz;Message.android must be an instance of AndroidConfig class.zAndroidConfig.collapse_keyzAndroidConfig.datazAndroidConfig.priorityT©r/   z%AndroidConfig.restricted_package_namezAndroidConfig.direct_boot_ok)Úcollapse_keyr   r   ÚpriorityÚrestricted_package_nameÚttlr   Údirect_boot_okrV   )ÚhighÚnormalz2AndroidConfig.priority must be "high" or "normal".)r*   Ú_messaging_utilsÚAndroidConfigr&   r#   r0   rU   r=   r   Úencode_android_notificationr   rV   rW   Ú
encode_ttlrX   Úencode_android_fcm_optionsr   rI   rY   rR   Úget)r   r	   ÚresultrV   s       r   Úencode_androidzMessageEncoder.encode_android½   s*  € ð ˆ?ØÜ˜'Ô#3×#AÑ#AÔBÜÐZÓ[Ð[ä'×4Ñ4Ø,¨g×.BÑ.BóDä×1Ñ1Ø$ g§l¡ló4à×;Ñ;¸G×<PÑ<PÓQÜ#×0Ñ0Ø(¨'×*:Ñ*:Àdð 1ó Lä'2×'?Ñ'?Ø7¸×9XÑ9Xó(Zà—>‘> '§+¡+Ó.Ø×9Ñ9¸'×:MÑ:MÓNÜ)×7Ñ7Ø.°×0FÑ0FóHñ
ˆð ×'Ñ'¨Ó/ˆØ—:‘:˜jÓ)ˆÙ˜Ð(:Ñ:ÜÐQÓRÐRØˆr   c                 ó¼   — |€yt        |t        j                  «      st        d«      ‚dt        j                  d|j                  «      i}| j                  |«      }|S )z4Encodes an ``AndroidFCMOptions`` instance into JSON.NzIAndroidConfig.fcm_options must be an instance of AndroidFCMOptions class.Úanalytics_labelz!AndroidFCMOptions.analytics_label)r*   r\   ÚAndroidFCMOptionsr&   r#   rF   re   rR   ©r   r   rb   s      r   r`   z)MessageEncoder.encode_android_fcm_optionsÙ   sl   € ð ÐØÜ˜+Ô'7×'IÑ'IÔJÜð 8ó 9ð 9ð œ{×@Ñ@Ø3°[×5PÑ5Pó Rð
ˆð ×'Ñ'¨Ó/ˆØˆr   c                 óÊ  — |€yt        |t        j                  «      rt        j                  |¬«      }t        |t        j                  «      st        d«      ‚|j                  «       }|dk  rt        d«      ‚t        t        j                  |«      «      }t        ||z
  dz  «      }|r*dj                  |t        |«      j                  d«      «      S d	j                  |«      S )
z<Encodes an ``AndroidConfig`` ``TTL`` duration into a string.N)ÚsecondszUAndroidConfig.ttl must be a duration in seconds or an instance of datetime.timedelta.r   z'AndroidConfig.ttl must not be negative.ç    eÍÍAú{0}.{1}sé	   ú{0}s)r*   r2   r3   rK   Ú	timedeltar&   Útotal_secondsÚintÚmathÚfloorr,   r+   Úzfill)r   rX   ro   ri   Únanoss        r   r_   zMessageEncoder.encode_ttlè   sÉ   € ð ˆ;ØÜ�cœ7Ÿ>™>Ô*Ü×$Ñ$¨SÔ1ˆCÜ˜#œx×1Ñ1Ô2Üð 3ó 4ð 4à×)Ñ)Ó+ˆØ˜1ÒÜÐFÓGÐGÜ”d—j‘j Ó/Ó0ˆÜ�] WÑ,°Ñ3Ó4ˆÙØ×$Ñ$ W¬c°%«j×.>Ñ.>¸qÓ.AÓBÐBØ�}‰}˜WÓ%Ð%r   c                 ó  — |€yt        |t        j                  «      rt        j                  |¬«      }t        |t        j                  «      st        dj                  |«      «      ‚|j                  «       }|dk  rt        dj                  |«      «      ‚t        t        j                  |«      «      }t        ||z
  dz  «      }|r*dj                  |t        |«      j                  d«      «      S d	j                  |«      S )
z1Encodes a duration in milliseconds into a string.N)ÚmillisecondszL{0} must be a duration in milliseconds or an instance of datetime.timedelta.r   z{0} must not be negative.rj   rk   rl   rm   )r*   r2   r3   rK   rn   r&   r,   ro   rp   rq   rr   r+   rs   )r   r-   Úmsecro   ri   rt   s         r   Úencode_millisecondsz"MessageEncoder.encode_millisecondsû   sß   € ð ˆ<ØÜ�dœGŸN™NÔ+Ü×%Ñ%°4Ô8ˆDÜ˜$¤× 2Ñ 2Ô3Üð 3ß39±6¸%³=óBð Bà×*Ñ*Ó,ˆØ˜1ÒÜÐ8×?Ñ?ÀÓFÓGÐGÜ”d—j‘j Ó/Ó0ˆÜ�] WÑ,°Ñ3Ó4ˆÙØ×$Ñ$ W¬c°%«j×.>Ñ.>¸qÓ.AÓBÐBØ�}‰}˜WÓ%Ð%r   c                 óD	  — |€yt        |t        j                  «      st        d«      ‚i dt        j                  d|j                  «      “dt        j                  d|j                  «      “dt        j                  d|j                  «      “d	t        j                  d
|j                  «      “dt        j                  d|j                  d¬«      “dt        j                  d|j                  «      “dt        j                  d|j                  «      “dt        j                  d|j                  «      “dt        j                  d|j                  «      “dt        j                  d|j                   «      “dt        j                  d|j"                  «      “dt        j                  d|j$                  «      “dt        j                  d|j&                  «      “dt        j                  d|j(                  «      “d |j*                  “d!t        j-                  d"|j.                  «      “d#|j0                  “t        j                  d$|j2                  d¬«      t        j5                  d%|j6                  «      |j8                  |j:                  |j<                  | j?                  |j@                  «      t        j                  d&|jB                  d¬«      t        jE                  d'|jF                  «      d(œ¥}| jI                  |«      }|jK                  d«      }|r!tM        jN                  d)|«      st        d*«      ‚|jK                  d«      r|jK                  d«      st        d+«      ‚|jK                  d«      r|jK                  d«      st        d,«      ‚|jK                  d!«      }|rI|jP                  �)|jS                  tT        jV                  jX                  «      }|j[                  d-«      |d!<   |jK                  d.«      }|r%|d/vrt        d0«      ‚d1|j]                  «       z   |d.<   |jK                  d2«      }|r"|d3vrt        d4«      ‚|j]                  «       |d2<   |jK                  d5«      }|r1g }|D ]%  }	| j_                  d%|	«      }
|ja                  |
«       Œ' ||d5<   |S )6z6Encodes an ``AndroidNotification`` instance into JSON.NzLAndroidConfig.notification must be an instance of AndroidNotification class.ÚbodyzAndroidNotification.bodyÚbody_loc_argsz!AndroidNotification.body_loc_argsÚbody_loc_keyz AndroidNotification.body_loc_keyÚclick_actionz AndroidNotification.click_actionÚcolorzAndroidNotification.colorTrT   ÚiconzAndroidNotification.iconÚsoundzAndroidNotification.soundÚtagzAndroidNotification.tagÚtitlezAndroidNotification.titleÚtitle_loc_argsz"AndroidNotification.title_loc_argsÚtitle_loc_keyz!AndroidNotification.title_loc_keyÚ
channel_idzAndroidNotification.channel_idÚimageÚtickerzAndroidNotification.tickerÚstickyÚ
event_timez#AndroidNotification.event_timestampÚ
local_onlyzAndroidNotification.priorityz*AndroidNotification.vibrate_timings_milliszAndroidNotification.visibilityz&AndroidNotification.notification_count)Únotification_priorityÚvibrate_timingsÚdefault_vibrate_timingsÚdefault_soundÚdefault_light_settingsÚlight_settingsÚ
visibilityÚnotification_countú^#[0-9a-fA-F]{6}$z6AndroidNotification.color must be in the form #RRGGBB.zKAndroidNotification.body_loc_key is required when specifying body_loc_args.zMAndroidNotification.title_loc_key is required when specifying title_loc_args.z%Y-%m-%dT%H:%M:%S.%fZr‹   )ÚminÚlowÚdefaultrZ   ÚmaxzNAndroidNotification.priority must be "default", "min", "low", "high" or "max".Ú	PRIORITY_r‘   )ÚprivateÚpublicÚsecretzGAndroidNotification.visibility must be "private", "public" or "secret".rŒ   )1r*   r\   ÚAndroidNotificationr&   r#   r0   rz   r$   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   rL   Úevent_timestamprŠ   rV   rB   Úvibrate_timings_millisr�   rŽ   r�   Úencode_light_settingsr�   r‘   r5   r’   rR   ra   rD   rE   ÚtzinfoÚ
astimezonerK   ÚtimezoneÚutcÚstrftimeÚupperrx   Úappend)r   r   rb   r~   r‰   rV   r‘   rž   Úvibrate_timing_stringsrw   Úformated_strings              r   r^   z*MessageEncoder.encode_android_notification  sæ  € ð ÐØÜ˜,Ô(8×(LÑ(LÔMÜð :ó ;ð ;ð-
Ø”K×,Ñ,Ø*¨L×,=Ñ,=ó?ð-
ð œ[×:Ñ:Ø3°\×5OÑ5OóQð-
ð
 œK×4Ñ4Ø2°L×4MÑ4MóOð-
ð œK×4Ñ4Ø2°L×4MÑ4MóOð-
ð ”[×-Ñ-Ø+¨\×-?Ñ-?È4ð .ó Qð-
ð ”K×,Ñ,Ø*¨L×,=Ñ,=ó?ð-
ð ”[×-Ñ-Ø+¨\×-?Ñ-?óAð-
ð ”;×+Ñ+Ø)¨<×+;Ñ+;ó=ð-
ð" ”[×-Ñ-Ø+¨\×-?Ñ-?óAð#-
ð& œk×;Ñ;Ø4°l×6QÑ6QóSð'-
ð* œ[×5Ñ5Ø3°\×5OÑ5OóQð+-
ð. œ+×2Ñ2Ø0°,×2IÑ2IóKð/-
ð2 ”[×-Ñ-Ø˜×+Ñ+ó-ð3-
ð6 ”k×.Ñ.Ø,¨l×.AÑ.AóCð7-
ð: �l×)Ñ)ð;-
ð< œ+×4Ñ4Ø5°|×7SÑ7SóUð=-
ð@ ˜,×1Ñ1ðA-
ôB &1×%=Ñ%=Ø.°×0EÑ0EÐQUð &>ó &Wä*×<Ñ<Ø<¸l×>aÑ>aó cà'3×'KÑ'KØ)×7Ñ7Ø&2×&IÑ&IØ!×7Ñ7¸×8SÑ8SÓTÜ%×2Ñ2Ø0°,×2IÑ2IÐUYð 3ó [ä"-×":Ñ":Ø8¸,×:YÑ:Yó#[òW-
ˆð\ ×'Ñ'¨Ó/ˆØ—
‘
˜7Ó#ˆÙœŸ™Ð"6¸Ô>ÜØHóJð Jà�:‰:�oÔ&¨v¯z©z¸.Ô/IÜØ]ó_ð _à�:‰:Ð&Ô'°·
±
¸?Ô0KÜØ_óað að —Z‘Z Ó-ˆ
Ùð × Ñ Ð,Ø'×2Ñ2´8×3DÑ3D×3HÑ3HÓI�
Ø#-×#6Ñ#6Ð7NÓ#OˆF�<Ñ à—:‘:Ð5Ó6ˆÙØÐGÑGÜ ð "4ó 5ð 5à.9¸H¿N¹NÓ<LÑ.LˆFÐ*Ñ+à—Z‘Z Ó-ˆ
ÙØÐ!@Ñ@Ü Ø]ó_ð _à#-×#3Ñ#3Ó#5ˆF�<Ñ à!'§¡Ð,=Ó!>ÐÙ!Ø%'Ð"Ø.ò ?�Ø"%×"9Ñ"9Ø@À$ó#H�à&×-Ñ-¨oÕ>ð?ð )?ˆFÐ$Ñ%Øˆr   c           	      óî  — |€yt        |t        j                  «      st        d«      ‚t        j                  d|j                  d¬«      | j                  d|j                  «      | j                  d|j                  «      dœ}| j                  |«      }|j                  d	«      }|st        d
«      ‚|j                  d«      }|st        d«      ‚|j                  d«      }|st        d«      ‚t        j                  d|«      s!t        j                  d|«      st        d«      ‚t        |«      dk(  r|dz   }dD �cg c]  }t        |||dz    d«      dz  ‘Œ }}|d   |d   |d   |d   dœ|d<   |S c c}w )z/Encodes a ``LightSettings`` instance into JSON.NzNAndroidNotification.light_settings must be an instance of LightSettings class.zLightSettings.colorTrT   z&LightSettings.light_on_duration_millisz'LightSettings.light_off_duration_millis)r~   Úlight_on_durationÚlight_off_durationrª   z3LightSettings.light_on_duration_millis is required.r«   z4LightSettings.light_off_duration_millis is required.r~   z LightSettings.color is required.r“   z^#[0-9a-fA-F]{8}$z=LightSettings.color must be in the form #RRGGBB or #RRGGBBAA.é   ÚFF)é   é   é   r¬   é   é   g     ào@r   r®   r¯   )ÚredÚgreenÚblueÚalpha)r*   r\   ÚLightSettingsr&   r#   r0   r~   rx   Úlight_on_duration_millisÚlight_off_duration_millisrR   ra   rD   rE   r%   rp   )r   r�   rb   rª   r«   r~   ÚiÚrgbas           r   rŸ   z$MessageEncoder.encode_light_settingsp  s¨  € ð Ð!ØÜ˜.Ô*:×*HÑ*HÔIÜØ`óbð bô !×-Ñ-Ø% ~×';Ñ';Àtð .ó Mà!$×!8Ñ!8Ø8¸.×:aÑ:aó"cà"%×"9Ñ"9Ø9Ø×8Ñ8ó#:ñ
ˆð ×'Ñ'¨Ó/ˆØ"ŸJ™JÐ':Ó;ÐÙ ÜØEóGð Gð $ŸZ™ZÐ(<Ó=ÐÙ!ÜØFóHð Hð —
‘
˜7Ó#ˆÙÜÐ?Ó@Ð@Ü�x‰xÐ,¨eÔ4¼R¿X¹XÐFZÐ\aÔ=bÜØOóQð Qäˆu‹:˜Š?Ø˜4‘ZˆEØ9EÖF°A”�E˜!˜A ™E�N BÓ'¨%Ó/ÐFˆÐFØ"& q¡'°D¸±GØ#'¨¡7°T¸!±Wñ>ˆˆw‰àˆùò Gs   Ä<E2c                 ó^  — |€yt        |t        j                  «      st        d«      ‚t        j                  d|j                  «      t        j                  d|j                  «      | j                  |j                  «      | j                  |j                  «      dœ}| j                  |«      S )z/Encodes a ``WebpushConfig`` instance into JSON.Nz;Message.webpush must be an instance of WebpushConfig class.zWebpushConfig.datazWebpushConfig.headers)r   Úheadersr   r   )r*   r\   ÚWebpushConfigr&   r#   r=   r   r½   Úencode_webpush_notificationr   Úencode_webpush_fcm_optionsr   rR   )r   r
   rb   s      r   Úencode_webpushzMessageEncoder.encode_webpush™  s™   € ð ˆ?ØÜ˜'Ô#3×#AÑ#AÔBÜÐZÓ[Ð[ä×1Ñ1Ø$ g§l¡ló4ä"×4Ñ4Ø'¨¯©ó:à×;Ñ;¸G×<PÑ<PÓQØ×9Ñ9¸'×:MÑ:MÓNñ
ˆð ×%Ñ% fÓ-Ð-r   c                 óz  — |€yt        |t        j                  «      st        d«      ‚| j	                  |j
                  «      t        j                  d|j                  «      t        j                  d|j                  «      |j                  t        j                  d|j                  «      t        j                  d|j                  «      t        j                  d|j                  «      t        j                  d|j                  «      |j                  |j                   |j"                  t        j                  d	|j$                  «      t        j'                  d
|j(                  «      t        j                  d|j*                  «      |j,                  dœ}|j/                  d«      }|r|dvrt        d«      ‚|j0                  �jt        |j0                  t2        «      st        d«      ‚|j0                  j5                  «       D ](  \  }}||v rt        dj7                  |«      «      ‚|||<   Œ* | j9                  |«      S )z5Encodes a ``WebpushNotification`` instance into JSON.NzLWebpushConfig.notification must be an instance of WebpushNotification class.zWebpushNotification.badgezWebpushNotification.bodyzWebpushNotification.directionzWebpushNotification.iconzWebpushNotification.imagezWebpushNotification.languagezWebpushNotification.tagz$WebpushNotification.timestamp_milliszWebpushNotification.title)ÚactionsÚbadgerz   r   Údirr   r†   ÚlangÚrenotifyÚrequireInteractionÚsilentr�   Ú	timestampr‚   ÚvibraterÅ   )ÚautoÚltrÚrtlz=WebpushNotification.direction must be "auto", "ltr" or "rtl".z/WebpushNotification.custom_data must be a dict.z7Multiple specifications for {0} in WebpushNotification.)r*   r\   ÚWebpushNotificationr&   Ú#encode_webpush_notification_actionsrÃ   r#   r0   rÄ   rz   r   Ú	directionr   r†   ÚlanguagerÇ   Úrequire_interactionrÉ   r�   r5   Útimestamp_millisr‚   rË   ra   Úcustom_datar8   rP   r,   rR   )r   r   rb   rÑ   Úkeyr.   s         r   r¿   z*MessageEncoder.encode_webpush_notificationª  s  € ð ÐØÜ˜,Ô(8×(LÑ(LÔMÜð :ó ;ð ;ð ×>Ñ>¸|×?SÑ?SÓTÜ ×-Ñ-Ø+¨\×-?Ñ-?óAä×,Ñ,Ø*¨L×,=Ñ,=ó?à ×%Ñ%Ü×+Ñ+Ø/°×1GÑ1GóIä×,Ñ,Ø*¨L×,=Ñ,=ó?ä ×-Ñ-Ø+¨\×-?Ñ-?óAä×,Ñ,Ø.°×0EÑ0EóGà$×-Ñ-Ø".×"BÑ"BØ"×)Ñ)Ü×+Ñ+Ø)¨<×+;Ñ+;ó=ä$×1Ñ1Ø6¸×8UÑ8UóWä ×-Ñ-Ø+¨\×-?Ñ-?óAà#×+Ñ+ñ1
ˆð4 —J‘J˜uÓ%ˆ	Ù˜Ð*@Ñ@ÜÐ\Ó]Ð]Ø×#Ñ#Ð/Ü˜l×6Ñ6¼Ô=Ü Ð!RÓSÐSØ*×6Ñ6×<Ñ<Ó>ò $‘
��UØ˜&‘=Ü$ØQ×XÑXÐY\Ó]ó_ð _à#��s’ð	$ð
 ×%Ñ% fÓ-Ð-r   c                 óž  — |€yt        |t        «      st        d«      ‚g }|D ]§  }t        |t        j                  «      st        d«      ‚t
        j                  d|j                  «      t
        j                  d|j                  «      t
        j                  d|j                  «      dœ}|j                  | j                  |«      «       Œ© |S )z;Encodes a list of ``WebpushNotificationActions`` into JSON.NzYWebpushConfig.notification.actions must be a list of WebpushNotificationAction instances.z WebpushNotificationAction.actionzWebpushNotificationAction.titlezWebpushNotificationAction.icon)Úactionr‚   r   )r*   r?   r&   r\   ÚWebpushNotificationActionr#   r0   rØ   r‚   r   r¦   rR   )r   rÃ   ÚresultsrØ   rb   s        r   rÐ   z2MessageEncoder.encode_webpush_notification_actionsÙ  sÖ   € ð ˆ?ØÜ˜'¤4Ô(Üð Dó Eð EàˆØò 	;ˆFÜ˜fÔ&6×&PÑ&PÔQÜ ð "Hó Ið Iô &×2Ñ2Ø6¸¿¹óGä$×1Ñ1Ø5°v·|±|óEä#×0Ñ0Ø4°f·k±kóCñˆFð �N‰N˜3×1Ñ1°&Ó9Õ:ð	;ð ˆr   c                 óÐ   — |€ydt         j                  d|j                  «      i}| j                  |«      }|j	                  d«      }|�|j                  d«      st        d«      ‚|S )z3Encodes a ``WebpushFCMOptions`` instance into JSON.NÚlinkzWebpushConfig.fcm_options.linkzhttps://z+WebpushFCMOptions.link must be a HTTPS URL.)r#   r0   rÜ   rR   ra   Ú
startswithr&   )r   Úoptionsrb   rÜ   s       r   rÀ   z)MessageEncoder.encode_webpush_fcm_optionsñ  sl   € ð ˆ?Øà”K×,Ñ,Ð-MÈwÏ|É|Ó\ð
ˆð ×'Ñ'¨Ó/ˆØ�z‰z˜&Ó!ˆØÐ D§O¡O°JÔ$?ÜÐJÓKÐKØˆr   c                 ó   — |€yt        |t        j                  «      st        d«      ‚t        j                  d|j                  «      | j                  |j                  «      | j                  |j                  «      dœ}| j                  |«      S )z-Encodes an ``APNSConfig`` instance into JSON.Nz5Message.apns must be an instance of APNSConfig class.zAPNSConfig.headers)r½   Úpayloadr   )r*   r\   Ú
APNSConfigr&   r#   r=   r½   Úencode_apns_payloadrà   Úencode_apns_fcm_optionsr   rR   )r   r   rb   s      r   Úencode_apnszMessageEncoder.encode_apnsÿ  s€   € ð ˆ<ØÜ˜$Ô 0× ;Ñ ;Ô<ÜÐTÓUÐUä"×4Ñ4Ø$ d§l¡ló4à×.Ñ.¨t¯|©|Ó<Ø×6Ñ6°t×7GÑ7GÓHñ	
ˆð ×%Ñ% fÓ-Ð-r   c                 óü   — |€yt        |t        j                  «      st        d«      ‚d| j	                  |j
                  «      i}|j                  j                  «       D ]
  \  }}|||<   Œ | j                  |«      S )z.Encodes an ``APNSPayload`` instance into JSON.Nz<APNSConfig.payload must be an instance of APNSPayload class.Úaps)	r*   r\   ÚAPNSPayloadr&   Ú
encode_apsræ   rÕ   rP   rR   )r   rà   rb   rÖ   r.   s        r   râ   z"MessageEncoder.encode_apns_payload  s€   € ð ˆ?ØÜ˜'Ô#3×#?Ñ#?Ô@ÜÐ[Ó\Ð\à�3—>‘> '§+¡+Ó.ð
ˆð "×-Ñ-×3Ñ3Ó5ò 	 ‰JˆC�ØˆF�3ŠKð	 à×%Ñ% fÓ-Ð-r   c                 óú   — |€yt        |t        j                  «      st        d«      ‚t        j                  d|j                  «      t        j                  d|j                  «      dœ}| j                  |«      }|S )z1Encodes an ``APNSFCMOptions`` instance into JSON.NzCAPNSConfig.fcm_options must be an instance of APNSFCMOptions class.zAPNSFCMOptions.analytics_labelzAPNSFCMOptions.image)re   r†   )
r*   r\   ÚAPNSFCMOptionsr&   r#   rF   re   r0   r†   rR   rg   s      r   rã   z&MessageEncoder.encode_apns_fcm_options  sy   € ð ÐØÜ˜+Ô'7×'FÑ'FÔGÜÐbÓcÐcä*×@Ñ@Ø0°+×2MÑ2Mó Oä ×-Ñ-Ð.DÀk×FWÑFWÓXñ
ˆð
 ×'Ñ'¨Ó/ˆØˆr   c                 óú  — t        |t        j                  «      st        d«      ‚| j	                  |j
                  «      t        j                  d|j                  «      | j                  |j                  «      t        j                  d|j                  «      t        j                  d|j                  «      dœ}|j                  du rd|d<   |j                  du rd|d	<   |j                   �€t        |j                   t"        «      st        d
«      ‚|j                   j%                  «       D ]>  \  }}t        j                  d|«       ||v rt        dj'                  |«      «      ‚|||<   Œ@ | j)                  |«      S )z&Encodes an ``Aps`` instance into JSON.z1APNSPayload.aps must be an instance of Aps class.z	Aps.badgezAps.categoryzAps.thread_id)ÚalertrÄ   r€   Úcategoryz	thread-idTr®   zcontent-availablezmutable-contentzAps.custom_data must be a dict.zAps.custom_data keyz'Multiple specifications for {0} in Aps.)r*   r\   ÚApsr&   Úencode_aps_alertrì   r#   r5   rÄ   Úencode_aps_soundr€   r0   rí   Ú	thread_idÚcontent_availableÚmutable_contentrÕ   r8   rP   r,   rR   )r   ræ   rb   rÖ   Úvals        r   rè   zMessageEncoder.encode_aps+  sL  € ô ˜#Ô/×3Ñ3Ô4ÜÐPÓQÐQà×)Ñ)¨#¯)©)Ó4Ü ×-Ñ-¨k¸3¿9¹9ÓEØ×)Ñ)¨#¯)©)Ó4Ü#×0Ñ0°ÀÇÁÓNÜ$×1Ñ1°/À3Ç=Á=ÓQñ
ˆð × Ñ  DÑ(Ø*+ˆFÐ&Ñ'Ø×Ñ $Ñ&Ø()ˆFÐ$Ñ%Ø�?‰?Ð&Ü˜cŸo™o¬tÔ4Ü Ð!BÓCÐCØŸO™O×1Ñ1Ó3ò "‘��SÜ×(Ñ(Ð)>ÀÔDØ˜&‘=Ü$Ð%N×%UÑ%UÐVYÓ%ZÓ[Ð[Ø!��s’ð	"ð
 ×%Ñ% fÓ-Ð-r   c                 óœ  — |€y|rt        |t        «      r|S t        |t        j                  «      st	        d«      ‚t
        j                  d|j                  d¬«      t
        j                  d|j                  «      dœ}|j                  rd|d	<   |d
   st	        d«      ‚|d   }|�|dk  s|dkD  rt	        d«      ‚| j                  |«      S )z.Encodes an APNs sound configuration into JSON.NzKAps.sound must be a non-empty string or an instance of CriticalSound class.zCriticalSound.nameTrT   zCriticalSound.volume)ÚnameÚvolumer®   Úcriticalrö   z-CriticalSond.name must be a non-empty string.r÷   r   z3CriticalSound.volume must be in the interval [0,1].)r*   r+   r\   ÚCriticalSoundr&   r#   r0   rö   r5   r÷   rø   rR   )r   r€   rb   r÷   s       r   rð   zMessageEncoder.encode_aps_soundE  sØ   € ð ˆ=ØÙ”Z ¤sÔ+ØˆLÜ˜%Ô!1×!?Ñ!?Ô@ÜØ]ó_ð _ô  ×,Ñ,Ð-AÀ5Ç:Á:ÐY]Ð,Ó^Ü!×.Ñ.Ð/EÀuÇ|Á|ÓTñ
ˆð �>Š>Ø!"ˆF�:ÑØ�fŠ~ÜÐLÓMÐMØ˜Ñ!ˆØÐ 6¨A¢:°¸!²ÜÐRÓSÐSØ×%Ñ% fÓ-Ð-r   c                 ó\  — |€yt        |t        «      r|S t        |t        j                  «      st	        d«      ‚t
        j                  d|j                  «      t
        j                  d|j                  «      t
        j                  d|j                  «      t
        j                  d|j                  «      t
        j                  d|j                  «      t
        j                  d|j                  «      t
        j                  d	|j                  «      t
        j                  d
|j                  «      t
        j                  d|j                   «      dœ	}|j#                  d«      r|j#                  d«      st	        d«      ‚|j#                  d«      r|j#                  d«      st	        d«      ‚|j$                  �bt        |j$                  t&        «      st	        d«      ‚|j$                  j)                  «       D ]   \  }}t
        j                  d|«       |||<   Œ" | j+                  |«      S )z+Encodes an ``ApsAlert`` instance into JSON.Nz<Aps.alert must be a string or an instance of ApsAlert class.zApsAlert.titlezApsAlert.subtitlezApsAlert.bodyzApsAlert.title_loc_keyzApsAlert.title_loc_argszApsAlert.loc_keyzApsAlert.loc_argszApsAlert.action_loc_keyzApsAlert.launch_image)	r‚   Úsubtitlerz   útitle-loc-keyútitle-loc-argsúloc-keyúloc-argszaction-loc-keyzlaunch-imagerÿ   rþ   z6ApsAlert.loc_key is required when specifying loc_args.rý   rü   zBApsAlert.title_loc_key is required when specifying title_loc_args.z$ApsAlert.custom_data must be a dict.zApsAlert.custom_data key)r*   r+   r\   ÚApsAlertr&   r#   r0   r‚   rû   rz   r„   r$   rƒ   Úloc_keyÚloc_argsÚaction_loc_keyÚlaunch_imagera   rÕ   r8   rP   rR   )r   rì   rb   rÖ   rô   s        r   rï   zMessageEncoder.encode_aps_alert\  sß  € ð ˆ=ØÜ�eœSÔ!ØˆLÜ˜%Ô!1×!:Ñ!:Ô;ÜÐ[Ó\Ð\ä ×-Ñ-Ð.>ÀÇÁÓLÜ#×0Ñ0Ð1DÀeÇnÁnÓUÜ×,Ñ,¨_¸e¿j¹jÓIÜ(×5Ñ5Ø(¨%×*=Ñ*=ó?ä)×;Ñ;Ø)¨5×+?Ñ+?óAä"×/Ñ/Ø" E§M¡Mó3ä#×5Ñ5Ø# U§^¡^ó5ä)×6Ñ6Ø)¨5×+?Ñ+?óAä'×4Ñ4Ø'¨×);Ñ);ó=ñ
ˆð" �:‰:�jÔ!¨&¯*©*°YÔ*?ÜØHóJð Jà�:‰:Ð&Ô'°·
±
¸?Ô0KÜØTóVð Và×ÑÐ(Ü˜e×/Ñ/´Ô6Ü Ð!GÓHÐHØ!×-Ñ-×3Ñ3Ó5ò "‘��SÜ×(Ñ(Ð)CÀSÔIð "��s’ð	"ð
 ×%Ñ% fÓ-Ð-r   c                 ó4  — |€yt        |t        j                  «      st        d«      ‚t        j                  d|j                  «      t        j                  d|j                  «      t        j                  d|j                  «      dœ}| j                  |«      S )z.Encodes a ``Notification`` instance into JSON.Nz?Message.notification must be an instance of Notification class.zNotification.bodyzNotification.titlezNotification.image)rz   r‚   r†   )
r*   r\   ÚNotificationr&   r#   r0   rz   r‚   r†   rR   )r   r   rb   s      r   Úencode_notificationz"MessageEncoder.encode_notification†  s‰   € ð ÐØÜ˜,Ô(8×(EÑ(EÔFÜÐ^Ó_Ð_ä×,Ñ,Ð-@À,×BSÑBSÓTÜ ×-Ñ-Ð.BÀL×DVÑDVÓWÜ ×-Ñ-Ð.BÀL×DVÑDVÓWñ
ˆð
 ×%Ñ% fÓ-Ð-r   c                 ó�   — |syd}|j                  |«      r|t        |«      d }t        j                  d|«      st	        d«      ‚|S )z<Removes the /topics/ prefix from the topic name, if present.Nz/topics/z^[a-zA-Z0-9-_\.~%]+$zMalformed topic name.)rÝ   r%   rD   rE   r&   )r   r   Úprefixs      r   Úsanitize_topic_namez"MessageEncoder.sanitize_topic_name”  sM   € ñ ØØˆØ×Ñ˜FÔ#Øœ#˜f›+˜,Ð'ˆEä�x‰xÐ/°Ô7ÜÐ4Ó5Ð5Øˆr   c                 ót  — t        |t        «      s t        j                  j	                  | |«      S t
        j                  |j                  «      t
        j                  |j                  «      t        j                  d|j                  d¬«      t        j                  d|j                  «      t
        j                  |j                   «      t        j                  d|j"                  d¬«      t        j                  d|j$                  d¬«      t
        j'                  |j(                  «      t
        j+                  |j,                  «      dœ	}t
        j/                  |j1                  d«      «      |d<   t
        j3                  |«      }t5        d	D �cg c]  }||v ‘Œ c}«      }|d
k7  rt7        d«      ‚|S c c}w )NzMessage.conditionTrT   zMessage.datazMessage.tokenzMessage.topic)	r	   r   r   r   r   r   r   r
   r   r   )r   r   r   r®   z;Exactly one of token, topic or condition must be specified.)r*   r   r   ÚJSONEncoderr–   r   rc   r	   rä   r   r#   r0   r   r=   r   r  r   r   r   rÁ   r
   Úencode_fcm_optionsr   r
  ra   rR   Úsumr&   )r   Úorb   ÚtÚtarget_counts        r   r–   zMessageEncoder.default¡  sU  € Ü˜!œWÔ%Ü×#Ñ#×+Ñ+¨D°!Ó4Ð4ä%×4Ñ4°Q·Y±YÓ?Ü"×.Ñ.¨q¯v©vÓ6Ü$×1Ñ1Ø# Q§[¡[¸Dð 2ó Bä×1Ñ1°.À!Ç&Á&ÓIÜ*×>Ñ>¸q¿~¹~ÓNÜ ×-Ñ-¨o¸q¿w¹wÐRVÐ-ÓWÜ ×-Ñ-¨o¸q¿w¹wÐRVÐ-ÓWÜ%×4Ñ4°Q·Y±YÓ?Ü)×<Ñ<¸Q¿]¹]ÓKñ
ˆô )×<Ñ<¸V¿Z¹ZÈÓ=PÓQˆˆw‰Ü×2Ñ2°6Ó:ˆÜÐ1PÖQ¨A˜A šKÒQÓRˆØ˜1ÒÜÐZÓ[Ð[Øˆùò Rs   ÆF5c                 ó¼   — |€yt        |t        j                  «      st        d«      ‚dt        j                  d|j                  «      i}| j                  |«      }|S )z-Encodes an ``FCMOptions`` instance into JSON.Nz<Message.fcm_options must be an instance of FCMOptions class.re   zFCMOptions.analytics_label)r*   r\   Ú
FCMOptionsr&   r#   rF   re   rR   rg   s      r   r  z!MessageEncoder.encode_fcm_options·  sd   € ð ÐØÜ˜+Ô'7×'BÑ'BÔCÜÐ[Ó\Ð\àœ{×@Ñ@Ø,¨k×.IÑ.Ió Kð
ˆð ×'Ñ'¨Ó/ˆØˆr   N)r   r   r   r   rM   rR   rc   r`   r_   rx   r^   rŸ   rÁ   r¿   rÐ   rÀ   rä   râ   rã   rè   rð   rï   r  r
  r–   r  r   r   r   r   r   ¶   s   „ Ù^àñPó ðPð ñó ðð6 ñó ðð ñ&ó ð&ð$ ñ&ó ð&ð$ ñ_ó ð_ðB ñ&ó ð&ðP ñ.ó ð.ð  ñ,.ó ð,.ð\ ñó ðð. ñó ðð ñ.ó ð.ð ñ.ó ð.ð ñó ðð ñ.ó ð.ð2 ñ.ó ð.ð, ñ'.ó ð'.ðR ñ.ó ð.ð ñ
ó ð
òð, ñó ñr   r   )r   rK   r   rq   r2   rD   Úfirebase_admin._messaging_utilsr\   r   r!   r#   r  r   r   r   r   ú<module>r     sU   ðñ Dã Û Û Û Û 	å :÷!Dñ !D÷H'ñ '÷6Zñ ZôzM�T×%Ñ%õ Mr   