﻿£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
from typing import Dict, Optional, TypedDict, Union

from pydantic import BaseModel
from typing_extensions import NotRequired

MetadataType = TypedDict(
    "MetadataType",
    {
        "entityId": str,
        "entityName": str,
        "eventName": str,
        "publisherName": NotRequired[str],
        "publishDate": NotRequired[str],
        "authorization": NotRequired[str],
        "traceparent": NotRequired[str],
        "tracestate": NotRequired[str],
        "containsPersonalData": NotRequired[bool],
        "token": NotRequired[str],
    },
)
ParamsType = TypedDict(
    "ParamsType", {"metadata": MetadataType, "payload": Dict[str, str]}
)


class Metadata(BaseModel):
    entityId: str
    entityName: str
    eventName: str
    publisherName: str = ""
    publishDate: str = ""
    authorization: Optional[str] = None
    traceparent: str = ""
    tracestate: str = ""
    containsPersonalData: bool = False
    token: str = ""


class Params(BaseModel):
    metadata: Metadata
    payload: dict = {}

    @staticmethod
    def from_dict(data: Union[dict, ParamsType]):
        return Params(
            metadata=Metadata(**data.get("metadata", {})),
            payload=data.get("payload", {}),
        )


class Payload(BaseModel):
    method: str
    params: Params
    jsonrpc: str
    id: int
