
    `xj<                        d dl mZ d dlZd dlmZ d dlmZ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mZmZmZmZmZmZmZmZ d dlmZmZmZmZ g d	Zh d
Z ddZ!dddZ"ddddZ# e#            Z$dS )    )annotationsN)urlparse)FastAPIRequest)CORSMiddleware)JSONResponse)budgetcashcryptocrypto_traderequityhealthmarketoverview	positionspostfinancereportssystem
truewealth)WRITE_METHODSis_local_requestis_write_request_allowedresolve_write_mode)zhttp://localhost:5173zhttp://127.0.0.1:5173zhttp://100.85.29.67:5173z#http://agent.tailbd371b.ts.net:5173zhttp://localhost:8503zhttp://127.0.0.1:8503>   /api/portfolio/policy/preview/api/truewealth/imports/preview /api/portfolio/ingestion/preview /api/postfinance/imports/preview%/api/truewealth/manual-values/preview*/api/budget/household/review/items/preview,/api/crypto/reconciliation/snapshots/preview,/api/crypto/reconciliation/transfers/preview3/api/budget/household/transactions/category/preview3/api/portfolio/performance/reclassification/preview7/api/portfolio/performance/truewealth-cashflows/preview;/api/portfolio/performance/truewealth-bank-payments/preview@/api/portfolio/performance/truewealth/activation-package-preview(/api/market/equity/update-quotes/dry-runoriginstrreturnboolc                    t          |           }|j        dk    s|j        r|j        sdS |j                                        }|dv rdS |                    d          rdS |                    d          rdS dS )NhttpF>   	127.0.0.1	localhostTz100.z.ts.net)r   schemehostnameportlower
startswithendswith)r(   parsedr1   s      V/home/agent/.hermes/worktrees/FinanceManager-sprint20g1/src/jarvis_finance/api/main.py_is_safe_local_originr8   '   s    fF}foV[u$$&&H---t6"" t## t5    environdict[str, str] | None	list[str]c                D   | pt           j        }t          t                    }|                    dd                              d          D ]S}|                                                    d          }|r(t          |          r||vr|	                    |           T|S )NJARVIS_FINANCE_CORS_ORIGINS ,/)
osr:   listLOCAL_ORIGINSgetsplitstriprstripr8   append)r:   envorigins
raw_originr(   s        r7   build_local_originsrM   5   s    

RZC=!!Ggg;R@@FFsKK # #
!!##**3// 	#+F33 	#g8M8MNN6"""Nr9   )
write_moderN   
str | Noner   c                j   t          |           t          ddd          }|                    t          t	                      ddk    rddgng d	d
g           |                    d          dfd            }|j        _        t          j	        t          j	        t          j	        t          j	        t          j	        t          j	        t          j	        t           j	        t"          j	        t$          j	        t&          j	        t(          j	        t*          j	        fD ]}|                    |d           |S )NzJARVIS Finance APIz0.1.0z@Read-only FastAPI v0 skeleton for the future Vue User Dashboard.)titleversiondescriptionFdisabledGETPOST)rU   rV   PUTPATCHDELETE*)allow_originsallow_credentialsallow_methodsallow_headersr-   requestr   c                F  K   | j         dk    o| j        j        t          v }| j         dk    r2| j        j        dk    r"t	          |           st          dddi          S | j         t          v r%|s#t          |           st          dddi          S  ||            d {V S )NrV   r'   i  detaillocal_request_required)status_codecontentwrite_operations_disabled)methodurlpathREAD_ONLY_POST_PATHSr   r   r   r   )r_   	call_nextread_only_postactive_write_modes      r7   block_untrusted_writesz*create_app.<locals>.block_untrusted_writesN   s       61^gk6FJ^6^>V##(8<f(f(fo  AH  pI  pI(fC(D\9]^^^^>]**>*Jbcjl}J~J~*C(D_9`aaaaYw'''''''''r9   z/api)prefix)r_   r   )r   r   add_middlewarer   rM   
middlewarestaterN   r   routerr   r   r   r   r
   r   r   r	   r   r   r   r   include_router)rN   apprm   rr   rl   s       @r7   
create_appru   ?   so   *:66
"V  C
 )++):j)H)HufooNwNwNwe     	^^F( ( ( ( ( ( -CI=(/6=-BVX^Xegkgrt{  uC  EN  EU  W]  Wd  fl  fs  u{  uB  DN  DU  Wb  Wi  j 2 26&1111Jr9   )r(   r)   r*   r+   )N)r:   r;   r*   r<   )rN   rO   r*   r   )%
__future__r   rB   urllib.parser   fastapir   r   fastapi.middleware.corsr   fastapi.responsesr   jarvis_finance.api.routersr	   r
   r   r   r   r   r   r   r   r   r   r   r   jarvis_finance.api.securityr   r   r   r   rD   ri   r8   rM   ru   rt    r9   r7   <module>r~      s   " " " " " " 				 ! ! ! ! ! ! $ $ $ $ $ $ $ $ 2 2 2 2 2 2 * * * * * * b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b  b u u u u u u u u u u u u     $        ,0      < jllr9   