Coverage for src / npm_mcp / models.py: 100%
104 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-21 05:55 +0400
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-21 05:55 +0400
1"""Data models for NPM entities."""
3from typing import List, Optional
4from pydantic import BaseModel, Field
7class ProxyHostLocation(BaseModel):
8 path: str = "/"
9 forward_scheme: str = "http"
10 forward_host: str
11 forward_port: int
14class ProxyHost(BaseModel):
15 id: Optional[int] = None
16 created_on: Optional[str] = None
17 modified_on: Optional[str] = None
18 owner_user_id: Optional[int] = None
19 domain_names: List[str]
20 forward_scheme: str = "http"
21 forward_host: str
22 forward_port: int
23 access_list_id: Optional[int] = None
24 certificate_id: Optional[int] = None
25 ssl_forced: bool = False
26 caching_enabled: bool = False
27 block_exploits: bool = True
28 advanced_config: str = ""
29 meta: dict = Field(default_factory=dict)
30 allow_websocket_upgrade: bool = False
31 http2_support: bool = False
32 hsts_enabled: bool = False
33 hsts_subdomains: bool = False
34 enabled: bool = True
35 locations: List[ProxyHostLocation] = Field(default_factory=list)
38class Certificate(BaseModel):
39 id: Optional[int] = None
40 created_on: Optional[str] = None
41 modified_on: Optional[str] = None
42 provider: str = "letsencrypt"
43 nice_name: str
44 domain_names: List[str]
45 expires_on: Optional[str] = None
46 meta: dict = Field(default_factory=dict)
49class AccessList(BaseModel):
50 id: Optional[int] = None
51 created_on: Optional[str] = None
52 modified_on: Optional[str] = None
53 name: str
54 satisfy_any: bool = False
55 pass_auth: bool = True
56 meta: dict = Field(default_factory=dict)
57 items: List[dict] = Field(default_factory=list)
60class RedirectionHost(BaseModel):
61 id: Optional[int] = None
62 created_on: Optional[str] = None
63 modified_on: Optional[str] = None
64 owner_user_id: Optional[int] = None
65 domain_names: List[str]
66 forward_scheme: str = "auto"
67 forward_http_code: int = 302
68 forward_domain_name: str
69 preserve_path: bool = False
70 certificate_id: Optional[int] = None
71 ssl_forced: bool = False
72 hsts_enabled: bool = False
73 hsts_subdomains: bool = False
74 http2_support: bool = False
75 block_exploits: bool = True
76 advanced_config: str = ""
77 meta: dict = Field(default_factory=dict)
78 enabled: bool = True
81class Stream(BaseModel):
82 id: Optional[int] = None
83 created_on: Optional[str] = None
84 modified_on: Optional[str] = None
85 owner_user_id: Optional[int] = None
86 incoming_port: int
87 forwarding_host: str
88 forwarding_port: int
89 tcp_forwarding: bool = True
90 udp_forwarding: bool = False
91 certificate_id: Optional[int] = None
92 meta: dict = Field(default_factory=dict)
93 enabled: bool = True
96class DeadHost(BaseModel):
97 id: Optional[int] = None
98 created_on: Optional[str] = None
99 modified_on: Optional[str] = None
100 owner_user_id: Optional[int] = None
101 domain_names: List[str]
102 certificate_id: Optional[int] = None
103 ssl_forced: bool = False
104 hsts_enabled: bool = False
105 hsts_subdomains: bool = False
106 http2_support: bool = False
107 advanced_config: str = ""
108 meta: dict = Field(default_factory=dict)
109 enabled: bool = True
112class User(BaseModel):
113 id: Optional[int] = None
114 created_on: Optional[str] = None
115 modified_on: Optional[str] = None
116 name: str
117 nickname: str = ""
118 email: str
119 avatar: str = ""
120 roles: List[str] = Field(default_factory=list)
121 is_disabled: bool = False
124class Setting(BaseModel):
125 id: Optional[str] = None
126 name: Optional[str] = None
127 description: Optional[str] = None
128 value: str = ""
129 meta: dict = Field(default_factory=dict)
132class AuditLogEntry(BaseModel):
133 id: Optional[int] = None
134 created_on: Optional[str] = None
135 modified_on: Optional[str] = None
136 user_id: Optional[int] = None
137 object_type: Optional[str] = None
138 object_id: Optional[int] = None
139 action: Optional[str] = None
140 meta: dict = Field(default_factory=dict)
143class NPMToken(BaseModel):
144 token: str
145 expires: str
148class NPMConfig(BaseModel):
149 url: str
150 email: str
151 password: str