o
    pjM'                     @  sR  d Z ddlmZ ddlmZmZmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZmZmZmZmZ d
dg ddddgdd
ddddgidddgidddgidddddddd
iddddddddd
dddiddidddgidddgiddddZedddded d!d
d"d#gd$d%ed&d'ed
g d(d$d)dd)d*d+d,d-
ed.d/d
dd0gd0ddiidd
g d(d$d1d2d3ed4d5d
dd6gd6ddiidd
g d7d$d8d9d:ed;d<d
g d=d$d
d6d>gd$d)d)d+d?d@edAdBd
g dCd$d
dDdEgd$d)d)d+dFd@dGedHdIdJdKdLdMdNdOZdPdQ ZdRdS ZdTdU Zd^dXdYZd_d[d\Zd]S )`zGPlatform Standard v1 entrypoint for centralized SMS and email delivery.    )annotations)ActionContractAppManifestWordPressPackageContract)error_envelopesuccess_envelope)SecretsManager   )default_registry)MessagingRepository)MessagingErrorMessagingService_delivery_data_requesting_app
_tenant_idobjectF)channel	recipienttemplate_keytemplate_datapurposeidempotency_keystringsmsemail)typeenumr   null)user_idphoner   )r   additionalProperties
properties   )r   	minLength	maxLength@      )requested_by_appcorrelation_idresource_typeresource_id)r   r   r   r   r   r   metadata)r   r    requiredr!   messaging_servicezMessaging Servicez1.0.0z>Centralized tenant-aware template delivery over SMS and email.zplatform.healthz&Report local messaging runtime health.healthydrivers)r   r,   )
capabilitydescriptionoutput_schemamessaging.template.sendz2Render and deliver an authorized message template.)delivery_idr   status
created_atT   
restricted)	invalid_inputinvalid_recipientpermission_deniedtemplate_not_foundtemplate_invalidprovider_unavailablerate_limit_exceededtenant_context_missingcaller_context_missing)
r0   r1   input_schemar2   side_effects
idempotentidempotency_key_requiredtimeout_secondsdata_classificationerrorsmessaging.delivery.status.readz)Read one tenant-isolated delivery status.r4   confidential)r9   delivery_not_foundr;   )r0   r1   rB   r2   rG   rH   zmessaging.provider.health.checkz*Run a bounded provider connectivity check.provider_id)rL   r5   	connected
checked_at   )provider_not_foundr;   )r0   r1   rB   r2   rF   rH   zmessaging.provider.configurezICreate or update a provider and optionally replace its write-only secret.)namedriverr   configsecret_configured)r;   invalid_configuration)r0   r1   rB   r2   rC   rD   rG   rH   zmessaging.permission.configurez3Configure one trusted caller's messaging allowlist.)requesting_appchannels	templatespurposesrV   enabled)r;   r9   )	health_v1send_template_v1get_delivery_status_v1health_check_provider_v1configure_provider_v1configure_permission_v1messaging_service_wpz	1.0.0-devz#wordpress-pack/messaging-service-wpzmessaging-service-wp.phpz-messaging-service-wp/messaging-service-wp.php)r3   rI   )
package_idversionsource_directory
entrypointplugin_filecapabilities)app_iddisplay_nameapp_versionr1   actionswordpress_packagec                 C  s  t | pi dp	d}zt }| pi dpi }|dkr/ttj||dtt  dddW S |d	kr:|	| |}nv|d
krn|j
t| t |dpKd}|sWtdddd|jt| krit| sitddddt|}nB|dkrt|  || t |dpd}n,|dkrt|  t| ||}n|dkrt|  t| ||j
}nttj||ddddfW S ttj|||dW S  ty } zttj|||jt ||jd|jfW  Y d }~S d }~w ttfy } zttj||dt |ddfW  Y d }~S d }~ww )N
request_id payloadr[   TF)r.   r/   provider_checked)rh   actionrm   datar\   r]   r4   rK   zDelivery was not found.i  r5   r;   z#Delivery belongs to another caller.  r^   rL   r_   r`   action_not_foundz&The requested action is not supported.)rh   rq   rm   codemessage)rh   rq   rm   rv   rw   	retryablerU   i  )strgetr   r   APP_MANIFESTrh   listr
   namessend_template
repositorydeliveryr   r   rV   r   	_is_adminr   _require_adminhealth_check_configure_provider_configure_permissionr   rv   rx   r5   
ValueErrorLookupError)contextrq   rm   servicero   rr   r   exc r   "apps/messaging_service/__init__.pyhandle_requestB   sV   
 
$


r   c           	      C  sD  | dpi }|j t| d| t| }t| dp(d| dd d dd	}| d
rLt j|t	j
|t|d
 t|  dpHdd | dt|d t|d t|d ||t| ddt| dd| d| dt| ddd}|j||}tt j|t	j
|d}|j|j|j|j|j|dS )NrS   rR   
secret_refz	provider.rQ   providerz.credential _secretr   rn   )	tenant_idrh   secret_namesecret_valueactor_idrL   r   rZ   Tpriorityd   daily_limitper_minute_limitmax_retries   )rL   rQ   rR   r   config_jsonr   rZ   r   r   r   r   )r   rh   r   )rL   rQ   rR   r   rZ   rT   )rz   registryry   validate_configurationr   lowerreplacer   
put_secretr{   rh   boolintr   save_provider
get_secretrL   rQ   rR   r   rZ   )	r   ro   r   rS   r   r   valuesr   
configuredr   r   r   r   d   s&   .

r   c              
   C  s   t |d t|ddt|dpg t|dpg t|dp#g t|ddd	}|t| |}|j|j|j|j	|j
|jd
S )NrV   rZ   TrW   rX   rY   allow_fallbackF)rV   rZ   channels_jsontemplates_jsonpurposes_jsonr   )rV   rZ   rW   rX   rY   r   )ry   r   rz   r|   save_permissionr   rV   rZ   r   r   r   r   )r   ro   r   r   recordr   r   r   r   w   s    r   returnr   c                 C  s.   | pi  d}t|oh dtt|dd@ S )Nidentity>   adminadministratorplatform_adminrolesr   )rz   r   setgetattr)r   r   r   r   r   r      s    r   Nonec                 C  s   t | stddddd S )Nr;   zAdministrator role is required.rt   rs   )r   r   )r   r   r   r   r      s   r   N)r   r   )r   r   )__doc__
__future__r   bridge_platform.apps.contractsr   r   r   bridge_platform.apps.envelopesr   r   'bridge_platform.secrets.secrets_managerr   r/   r
   r   r   r   r   r   r   r   r   
SEND_INPUTr{   r   r   r   r   r   r   r   r   r   <module>   s    "


#"
	