kalir-python 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kalir/__init__.py +11 -0
- kalir/api/__init__.py +1 -0
- kalir/api/assets/__init__.py +1 -0
- kalir/api/assets/create_asset.py +193 -0
- kalir/api/assets/delete_asset.py +182 -0
- kalir/api/assets/get_asset.py +186 -0
- kalir/api/assets/list_assets.py +165 -0
- kalir/api/assets/update_asset.py +206 -0
- kalir/api/events/__init__.py +1 -0
- kalir/api/events/get_event.py +194 -0
- kalir/api/events/ingest_event.py +215 -0
- kalir/api/events/list_events.py +259 -0
- kalir/api/exposures/__init__.py +1 -0
- kalir/api/exposures/count_exposures.py +165 -0
- kalir/api/exposures/get_infostealer_summary.py +181 -0
- kalir/api/exposures/list_exposures.py +225 -0
- kalir/api/incidents/__init__.py +1 -0
- kalir/api/incidents/get_incident.py +194 -0
- kalir/api/incidents/list_incidents.py +265 -0
- kalir/api/incidents/update_incident_status.py +207 -0
- kalir/api/intel/__init__.py +1 -0
- kalir/api/intel/get_ransomware_stats.py +165 -0
- kalir/api/intel/list_ransomware_victims.py +165 -0
- kalir/api/mentions/__init__.py +1 -0
- kalir/api/mentions/list_mentions.py +283 -0
- kalir/api/overview/__init__.py +1 -0
- kalir/api/overview/get_overview.py +184 -0
- kalir/api/phishing/__init__.py +1 -0
- kalir/api/phishing/list_phishing.py +245 -0
- kalir/api/reports/__init__.py +1 -0
- kalir/api/reports/create_report.py +193 -0
- kalir/api/reports/download_report.py +186 -0
- kalir/api/reports/list_reports.py +165 -0
- kalir/api/rules/__init__.py +1 -0
- kalir/api/rules/create_rule.py +193 -0
- kalir/api/rules/delete_rule.py +183 -0
- kalir/api/rules/get_rule.py +187 -0
- kalir/api/rules/list_rules.py +165 -0
- kalir/api/rules/replace_rule.py +207 -0
- kalir/api/takedowns/__init__.py +1 -0
- kalir/api/takedowns/count_takedowns.py +165 -0
- kalir/api/takedowns/create_takedown.py +193 -0
- kalir/api/takedowns/delete_takedown.py +183 -0
- kalir/api/takedowns/get_takedown.py +187 -0
- kalir/api/takedowns/list_takedowns.py +165 -0
- kalir/api/takedowns/replace_takedown.py +210 -0
- kalir/api/takedowns/update_takedown.py +210 -0
- kalir/api/webhooks/__init__.py +1 -0
- kalir/api/webhooks/create_webhook.py +222 -0
- kalir/api/webhooks/delete_webhook.py +190 -0
- kalir/api/webhooks/get_webhook.py +194 -0
- kalir/api/webhooks/get_webhook_delivery.py +194 -0
- kalir/api/webhooks/list_webhook_deliveries.py +239 -0
- kalir/api/webhooks/list_webhook_event_types.py +165 -0
- kalir/api/webhooks/list_webhooks.py +172 -0
- kalir/api/webhooks/retry_webhook_delivery.py +190 -0
- kalir/api/webhooks/rotate_webhook_secret.py +202 -0
- kalir/api/webhooks/send_webhook_test.py +202 -0
- kalir/api/webhooks/update_webhook.py +229 -0
- kalir/client.py +271 -0
- kalir/errors.py +14 -0
- kalir/models/__init__.py +195 -0
- kalir/models/asset.py +162 -0
- kalir/models/asset_create.py +122 -0
- kalir/models/asset_create_asset_type.py +14 -0
- kalir/models/asset_create_metadata.py +64 -0
- kalir/models/count_exposures_response_200.py +78 -0
- kalir/models/count_takedowns_response_200.py +96 -0
- kalir/models/create_report_body.py +96 -0
- kalir/models/create_report_body_type.py +10 -0
- kalir/models/create_webhook_response_201.py +111 -0
- kalir/models/error.py +84 -0
- kalir/models/error_error.py +106 -0
- kalir/models/error_error_type.py +15 -0
- kalir/models/event.py +151 -0
- kalir/models/event_asset.py +87 -0
- kalir/models/event_ingest.py +146 -0
- kalir/models/event_ingest_asset.py +87 -0
- kalir/models/event_ingest_evidence.py +64 -0
- kalir/models/event_ingest_source.py +87 -0
- kalir/models/exposure.py +137 -0
- kalir/models/exposure_webhook_event.py +152 -0
- kalir/models/exposure_webhook_event_data.py +115 -0
- kalir/models/exposure_webhook_event_data_exposure.py +149 -0
- kalir/models/exposure_webhook_event_data_infection.py +136 -0
- kalir/models/exposure_webhook_event_type.py +8 -0
- kalir/models/get_incident_response_200.py +174 -0
- kalir/models/get_infostealer_summary_response_200.py +100 -0
- kalir/models/get_ransomware_stats_response_200.py +156 -0
- kalir/models/get_ransomware_stats_response_200_top_countries_7d_item.py +64 -0
- kalir/models/get_ransomware_stats_response_200_top_groups_7d_item.py +64 -0
- kalir/models/incident.py +170 -0
- kalir/models/incident_severity.py +10 -0
- kalir/models/incident_status.py +10 -0
- kalir/models/incident_webhook_event.py +152 -0
- kalir/models/incident_webhook_event_data.py +115 -0
- kalir/models/incident_webhook_event_data_previous.py +88 -0
- kalir/models/incident_webhook_event_type.py +9 -0
- kalir/models/infostealer_domain_summary.py +122 -0
- kalir/models/infostealer_domain_summary_snapshot.py +201 -0
- kalir/models/infostealer_domain_summary_snapshot_top_employee_urls_item.py +87 -0
- kalir/models/infostealer_domain_summary_snapshot_top_families_item.py +87 -0
- kalir/models/list_assets_response_200.py +100 -0
- kalir/models/list_events_response_200.py +109 -0
- kalir/models/list_exposures_response_200.py +127 -0
- kalir/models/list_incidents_bucket.py +10 -0
- kalir/models/list_incidents_response_200.py +149 -0
- kalir/models/list_incidents_response_200_counts.py +106 -0
- kalir/models/list_incidents_status.py +12 -0
- kalir/models/list_mentions_response_200.py +122 -0
- kalir/models/list_mentions_source.py +8 -0
- kalir/models/list_phishing_response_200.py +122 -0
- kalir/models/list_phishing_verdict.py +11 -0
- kalir/models/list_ransomware_victims_response_200.py +109 -0
- kalir/models/list_ransomware_victims_response_200_victims_item.py +64 -0
- kalir/models/list_reports_response_200.py +109 -0
- kalir/models/list_rules_response_200.py +100 -0
- kalir/models/list_takedowns_response_200.py +109 -0
- kalir/models/list_webhook_deliveries_response_200.py +122 -0
- kalir/models/list_webhook_event_types_response_200.py +100 -0
- kalir/models/list_webhook_event_types_response_200_data_item.py +87 -0
- kalir/models/list_webhooks_response_200.py +100 -0
- kalir/models/mention.py +194 -0
- kalir/models/mention_source.py +8 -0
- kalir/models/overview.py +231 -0
- kalir/models/overview_assets.py +96 -0
- kalir/models/overview_exposures.py +105 -0
- kalir/models/overview_incidents.py +114 -0
- kalir/models/overview_phishing.py +87 -0
- kalir/models/overview_risk_level.py +10 -0
- kalir/models/overview_takedowns.py +87 -0
- kalir/models/pagination.py +105 -0
- kalir/models/phishing_domain.py +186 -0
- kalir/models/phishing_domain_verdict.py +11 -0
- kalir/models/report.py +182 -0
- kalir/models/report_parameters.py +181 -0
- kalir/models/report_parameters_date_range.py +11 -0
- kalir/models/report_parameters_language.py +8 -0
- kalir/models/report_parameters_sections_item.py +15 -0
- kalir/models/report_status.py +10 -0
- kalir/models/rotate_webhook_secret_response_200.py +87 -0
- kalir/models/rule.py +174 -0
- kalir/models/rule_input.py +134 -0
- kalir/models/rule_input_actions_item.py +64 -0
- kalir/models/takedown.py +163 -0
- kalir/models/takedown_create.py +113 -0
- kalir/models/takedown_update.py +96 -0
- kalir/models/update_incident_status_body.py +90 -0
- kalir/models/update_incident_status_body_status.py +10 -0
- kalir/models/webhook_delivery.py +274 -0
- kalir/models/webhook_delivery_payload.py +64 -0
- kalir/models/webhook_delivery_status.py +9 -0
- kalir/models/webhook_endpoint.py +216 -0
- kalir/models/webhook_endpoint_input.py +124 -0
- kalir/models/webhook_endpoint_input_event_types_item.py +11 -0
- kalir/models/webhook_incident.py +232 -0
- kalir/models/webhook_incident_severity.py +10 -0
- kalir/py.typed +1 -0
- kalir/types.py +53 -0
- kalir/webhooks.py +63 -0
- kalir_python-0.1.0.dist-info/METADATA +76 -0
- kalir_python-0.1.0.dist-info/RECORD +163 -0
- kalir_python-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..models.webhook_delivery_status import WebhookDeliveryStatus
|
|
12
|
+
from ..types import UNSET, Unset
|
|
13
|
+
from typing import cast
|
|
14
|
+
from uuid import UUID
|
|
15
|
+
import datetime
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from ..models.webhook_delivery_payload import WebhookDeliveryPayload
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
T = TypeVar("T", bound="WebhookDelivery")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@_attrs_define
|
|
29
|
+
class WebhookDelivery:
|
|
30
|
+
"""
|
|
31
|
+
Attributes:
|
|
32
|
+
id (UUID | Unset):
|
|
33
|
+
endpoint_id (UUID | Unset):
|
|
34
|
+
event_id (str | Unset):
|
|
35
|
+
event_type (str | Unset):
|
|
36
|
+
payload (WebhookDeliveryPayload | Unset):
|
|
37
|
+
status (WebhookDeliveryStatus | Unset):
|
|
38
|
+
attempts (int | Unset):
|
|
39
|
+
next_attempt_at (datetime.datetime | Unset):
|
|
40
|
+
response_status (int | Unset):
|
|
41
|
+
response_body (str | Unset):
|
|
42
|
+
error (str | Unset):
|
|
43
|
+
duration_ms (int | Unset):
|
|
44
|
+
created_at (datetime.datetime | Unset):
|
|
45
|
+
delivered_at (datetime.datetime | Unset):
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
id: UUID | Unset = UNSET
|
|
49
|
+
endpoint_id: UUID | Unset = UNSET
|
|
50
|
+
event_id: str | Unset = UNSET
|
|
51
|
+
event_type: str | Unset = UNSET
|
|
52
|
+
payload: WebhookDeliveryPayload | Unset = UNSET
|
|
53
|
+
status: WebhookDeliveryStatus | Unset = UNSET
|
|
54
|
+
attempts: int | Unset = UNSET
|
|
55
|
+
next_attempt_at: datetime.datetime | Unset = UNSET
|
|
56
|
+
response_status: int | Unset = UNSET
|
|
57
|
+
response_body: str | Unset = UNSET
|
|
58
|
+
error: str | Unset = UNSET
|
|
59
|
+
duration_ms: int | Unset = UNSET
|
|
60
|
+
created_at: datetime.datetime | Unset = UNSET
|
|
61
|
+
delivered_at: datetime.datetime | Unset = UNSET
|
|
62
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def to_dict(self) -> dict[str, Any]:
|
|
69
|
+
from ..models.webhook_delivery_payload import WebhookDeliveryPayload # noqa: PLC0415
|
|
70
|
+
id: str | Unset = UNSET
|
|
71
|
+
if not isinstance(self.id, Unset):
|
|
72
|
+
id = str(self.id)
|
|
73
|
+
|
|
74
|
+
endpoint_id: str | Unset = UNSET
|
|
75
|
+
if not isinstance(self.endpoint_id, Unset):
|
|
76
|
+
endpoint_id = str(self.endpoint_id)
|
|
77
|
+
|
|
78
|
+
event_id = self.event_id
|
|
79
|
+
|
|
80
|
+
event_type = self.event_type
|
|
81
|
+
|
|
82
|
+
payload: dict[str, Any] | Unset = UNSET
|
|
83
|
+
if not isinstance(self.payload, Unset):
|
|
84
|
+
payload = self.payload.to_dict()
|
|
85
|
+
|
|
86
|
+
status: str | Unset = UNSET
|
|
87
|
+
if not isinstance(self.status, Unset):
|
|
88
|
+
status = self.status.value
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
attempts = self.attempts
|
|
92
|
+
|
|
93
|
+
next_attempt_at: str | Unset = UNSET
|
|
94
|
+
if not isinstance(self.next_attempt_at, Unset):
|
|
95
|
+
next_attempt_at = self.next_attempt_at.isoformat()
|
|
96
|
+
|
|
97
|
+
response_status = self.response_status
|
|
98
|
+
|
|
99
|
+
response_body = self.response_body
|
|
100
|
+
|
|
101
|
+
error = self.error
|
|
102
|
+
|
|
103
|
+
duration_ms = self.duration_ms
|
|
104
|
+
|
|
105
|
+
created_at: str | Unset = UNSET
|
|
106
|
+
if not isinstance(self.created_at, Unset):
|
|
107
|
+
created_at = self.created_at.isoformat()
|
|
108
|
+
|
|
109
|
+
delivered_at: str | Unset = UNSET
|
|
110
|
+
if not isinstance(self.delivered_at, Unset):
|
|
111
|
+
delivered_at = self.delivered_at.isoformat()
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
field_dict: dict[str, Any] = {}
|
|
115
|
+
field_dict.update(self.additional_properties)
|
|
116
|
+
field_dict.update({
|
|
117
|
+
})
|
|
118
|
+
if id is not UNSET:
|
|
119
|
+
field_dict["id"] = id
|
|
120
|
+
if endpoint_id is not UNSET:
|
|
121
|
+
field_dict["endpoint_id"] = endpoint_id
|
|
122
|
+
if event_id is not UNSET:
|
|
123
|
+
field_dict["event_id"] = event_id
|
|
124
|
+
if event_type is not UNSET:
|
|
125
|
+
field_dict["event_type"] = event_type
|
|
126
|
+
if payload is not UNSET:
|
|
127
|
+
field_dict["payload"] = payload
|
|
128
|
+
if status is not UNSET:
|
|
129
|
+
field_dict["status"] = status
|
|
130
|
+
if attempts is not UNSET:
|
|
131
|
+
field_dict["attempts"] = attempts
|
|
132
|
+
if next_attempt_at is not UNSET:
|
|
133
|
+
field_dict["next_attempt_at"] = next_attempt_at
|
|
134
|
+
if response_status is not UNSET:
|
|
135
|
+
field_dict["response_status"] = response_status
|
|
136
|
+
if response_body is not UNSET:
|
|
137
|
+
field_dict["response_body"] = response_body
|
|
138
|
+
if error is not UNSET:
|
|
139
|
+
field_dict["error"] = error
|
|
140
|
+
if duration_ms is not UNSET:
|
|
141
|
+
field_dict["duration_ms"] = duration_ms
|
|
142
|
+
if created_at is not UNSET:
|
|
143
|
+
field_dict["created_at"] = created_at
|
|
144
|
+
if delivered_at is not UNSET:
|
|
145
|
+
field_dict["delivered_at"] = delivered_at
|
|
146
|
+
|
|
147
|
+
return field_dict
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@classmethod
|
|
152
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
153
|
+
from ..models.webhook_delivery_payload import WebhookDeliveryPayload # noqa: PLC0415
|
|
154
|
+
d = dict(src_dict)
|
|
155
|
+
_id = d.pop("id", UNSET)
|
|
156
|
+
id: UUID | Unset
|
|
157
|
+
if isinstance(_id, Unset):
|
|
158
|
+
id = UNSET
|
|
159
|
+
else:
|
|
160
|
+
id = UUID(_id)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
_endpoint_id = d.pop("endpoint_id", UNSET)
|
|
166
|
+
endpoint_id: UUID | Unset
|
|
167
|
+
if isinstance(_endpoint_id, Unset):
|
|
168
|
+
endpoint_id = UNSET
|
|
169
|
+
else:
|
|
170
|
+
endpoint_id = UUID(_endpoint_id)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
event_id = d.pop("event_id", UNSET)
|
|
176
|
+
|
|
177
|
+
event_type = d.pop("event_type", UNSET)
|
|
178
|
+
|
|
179
|
+
_payload = d.pop("payload", UNSET)
|
|
180
|
+
payload: WebhookDeliveryPayload | Unset
|
|
181
|
+
if isinstance(_payload, Unset):
|
|
182
|
+
payload = UNSET
|
|
183
|
+
else:
|
|
184
|
+
payload = WebhookDeliveryPayload.from_dict(_payload)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
_status = d.pop("status", UNSET)
|
|
190
|
+
status: WebhookDeliveryStatus | Unset
|
|
191
|
+
if isinstance(_status, Unset):
|
|
192
|
+
status = UNSET
|
|
193
|
+
else:
|
|
194
|
+
status = WebhookDeliveryStatus(_status)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
attempts = d.pop("attempts", UNSET)
|
|
200
|
+
|
|
201
|
+
_next_attempt_at = d.pop("next_attempt_at", UNSET)
|
|
202
|
+
next_attempt_at: datetime.datetime | Unset
|
|
203
|
+
if isinstance(_next_attempt_at, Unset):
|
|
204
|
+
next_attempt_at = UNSET
|
|
205
|
+
else:
|
|
206
|
+
next_attempt_at = datetime.datetime.fromisoformat(_next_attempt_at)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
response_status = d.pop("response_status", UNSET)
|
|
212
|
+
|
|
213
|
+
response_body = d.pop("response_body", UNSET)
|
|
214
|
+
|
|
215
|
+
error = d.pop("error", UNSET)
|
|
216
|
+
|
|
217
|
+
duration_ms = d.pop("duration_ms", UNSET)
|
|
218
|
+
|
|
219
|
+
_created_at = d.pop("created_at", UNSET)
|
|
220
|
+
created_at: datetime.datetime | Unset
|
|
221
|
+
if isinstance(_created_at, Unset):
|
|
222
|
+
created_at = UNSET
|
|
223
|
+
else:
|
|
224
|
+
created_at = datetime.datetime.fromisoformat(_created_at)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
_delivered_at = d.pop("delivered_at", UNSET)
|
|
230
|
+
delivered_at: datetime.datetime | Unset
|
|
231
|
+
if isinstance(_delivered_at, Unset):
|
|
232
|
+
delivered_at = UNSET
|
|
233
|
+
else:
|
|
234
|
+
delivered_at = datetime.datetime.fromisoformat(_delivered_at)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
webhook_delivery = cls(
|
|
240
|
+
id=id,
|
|
241
|
+
endpoint_id=endpoint_id,
|
|
242
|
+
event_id=event_id,
|
|
243
|
+
event_type=event_type,
|
|
244
|
+
payload=payload,
|
|
245
|
+
status=status,
|
|
246
|
+
attempts=attempts,
|
|
247
|
+
next_attempt_at=next_attempt_at,
|
|
248
|
+
response_status=response_status,
|
|
249
|
+
response_body=response_body,
|
|
250
|
+
error=error,
|
|
251
|
+
duration_ms=duration_ms,
|
|
252
|
+
created_at=created_at,
|
|
253
|
+
delivered_at=delivered_at,
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
webhook_delivery.additional_properties = d
|
|
258
|
+
return webhook_delivery
|
|
259
|
+
|
|
260
|
+
@property
|
|
261
|
+
def additional_keys(self) -> list[str]:
|
|
262
|
+
return list(self.additional_properties.keys())
|
|
263
|
+
|
|
264
|
+
def __getitem__(self, key: str) -> Any:
|
|
265
|
+
return self.additional_properties[key]
|
|
266
|
+
|
|
267
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
268
|
+
self.additional_properties[key] = value
|
|
269
|
+
|
|
270
|
+
def __delitem__(self, key: str) -> None:
|
|
271
|
+
del self.additional_properties[key]
|
|
272
|
+
|
|
273
|
+
def __contains__(self, key: str) -> bool:
|
|
274
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T", bound="WebhookDeliveryPayload")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@_attrs_define
|
|
22
|
+
class WebhookDeliveryPayload:
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def to_dict(self) -> dict[str, Any]:
|
|
32
|
+
|
|
33
|
+
field_dict: dict[str, Any] = {}
|
|
34
|
+
field_dict.update(self.additional_properties)
|
|
35
|
+
|
|
36
|
+
return field_dict
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
42
|
+
d = dict(src_dict)
|
|
43
|
+
webhook_delivery_payload = cls(
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
webhook_delivery_payload.additional_properties = d
|
|
48
|
+
return webhook_delivery_payload
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def additional_keys(self) -> list[str]:
|
|
52
|
+
return list(self.additional_properties.keys())
|
|
53
|
+
|
|
54
|
+
def __getitem__(self, key: str) -> Any:
|
|
55
|
+
return self.additional_properties[key]
|
|
56
|
+
|
|
57
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
58
|
+
self.additional_properties[key] = value
|
|
59
|
+
|
|
60
|
+
def __delitem__(self, key: str) -> None:
|
|
61
|
+
del self.additional_properties[key]
|
|
62
|
+
|
|
63
|
+
def __contains__(self, key: str) -> bool:
|
|
64
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..types import UNSET, Unset
|
|
12
|
+
from typing import cast
|
|
13
|
+
from uuid import UUID
|
|
14
|
+
import datetime
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
T = TypeVar("T", bound="WebhookEndpoint")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@_attrs_define
|
|
26
|
+
class WebhookEndpoint:
|
|
27
|
+
"""
|
|
28
|
+
Attributes:
|
|
29
|
+
id (UUID | Unset):
|
|
30
|
+
url (str | Unset):
|
|
31
|
+
description (str | Unset):
|
|
32
|
+
event_types (list[str] | Unset):
|
|
33
|
+
enabled (bool | Unset):
|
|
34
|
+
disabled_reason (str | Unset):
|
|
35
|
+
consecutive_failures (int | Unset):
|
|
36
|
+
last_delivery_at (datetime.datetime | Unset):
|
|
37
|
+
last_status (int | Unset):
|
|
38
|
+
created_at (datetime.datetime | Unset):
|
|
39
|
+
updated_at (datetime.datetime | Unset):
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
id: UUID | Unset = UNSET
|
|
43
|
+
url: str | Unset = UNSET
|
|
44
|
+
description: str | Unset = UNSET
|
|
45
|
+
event_types: list[str] | Unset = UNSET
|
|
46
|
+
enabled: bool | Unset = UNSET
|
|
47
|
+
disabled_reason: str | Unset = UNSET
|
|
48
|
+
consecutive_failures: int | Unset = UNSET
|
|
49
|
+
last_delivery_at: datetime.datetime | Unset = UNSET
|
|
50
|
+
last_status: int | Unset = UNSET
|
|
51
|
+
created_at: datetime.datetime | Unset = UNSET
|
|
52
|
+
updated_at: datetime.datetime | Unset = UNSET
|
|
53
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def to_dict(self) -> dict[str, Any]:
|
|
60
|
+
id: str | Unset = UNSET
|
|
61
|
+
if not isinstance(self.id, Unset):
|
|
62
|
+
id = str(self.id)
|
|
63
|
+
|
|
64
|
+
url = self.url
|
|
65
|
+
|
|
66
|
+
description = self.description
|
|
67
|
+
|
|
68
|
+
event_types: list[str] | Unset = UNSET
|
|
69
|
+
if not isinstance(self.event_types, Unset):
|
|
70
|
+
event_types = self.event_types
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
enabled = self.enabled
|
|
75
|
+
|
|
76
|
+
disabled_reason = self.disabled_reason
|
|
77
|
+
|
|
78
|
+
consecutive_failures = self.consecutive_failures
|
|
79
|
+
|
|
80
|
+
last_delivery_at: str | Unset = UNSET
|
|
81
|
+
if not isinstance(self.last_delivery_at, Unset):
|
|
82
|
+
last_delivery_at = self.last_delivery_at.isoformat()
|
|
83
|
+
|
|
84
|
+
last_status = self.last_status
|
|
85
|
+
|
|
86
|
+
created_at: str | Unset = UNSET
|
|
87
|
+
if not isinstance(self.created_at, Unset):
|
|
88
|
+
created_at = self.created_at.isoformat()
|
|
89
|
+
|
|
90
|
+
updated_at: str | Unset = UNSET
|
|
91
|
+
if not isinstance(self.updated_at, Unset):
|
|
92
|
+
updated_at = self.updated_at.isoformat()
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
field_dict: dict[str, Any] = {}
|
|
96
|
+
field_dict.update(self.additional_properties)
|
|
97
|
+
field_dict.update({
|
|
98
|
+
})
|
|
99
|
+
if id is not UNSET:
|
|
100
|
+
field_dict["id"] = id
|
|
101
|
+
if url is not UNSET:
|
|
102
|
+
field_dict["url"] = url
|
|
103
|
+
if description is not UNSET:
|
|
104
|
+
field_dict["description"] = description
|
|
105
|
+
if event_types is not UNSET:
|
|
106
|
+
field_dict["event_types"] = event_types
|
|
107
|
+
if enabled is not UNSET:
|
|
108
|
+
field_dict["enabled"] = enabled
|
|
109
|
+
if disabled_reason is not UNSET:
|
|
110
|
+
field_dict["disabled_reason"] = disabled_reason
|
|
111
|
+
if consecutive_failures is not UNSET:
|
|
112
|
+
field_dict["consecutive_failures"] = consecutive_failures
|
|
113
|
+
if last_delivery_at is not UNSET:
|
|
114
|
+
field_dict["last_delivery_at"] = last_delivery_at
|
|
115
|
+
if last_status is not UNSET:
|
|
116
|
+
field_dict["last_status"] = last_status
|
|
117
|
+
if created_at is not UNSET:
|
|
118
|
+
field_dict["created_at"] = created_at
|
|
119
|
+
if updated_at is not UNSET:
|
|
120
|
+
field_dict["updated_at"] = updated_at
|
|
121
|
+
|
|
122
|
+
return field_dict
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@classmethod
|
|
127
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
128
|
+
d = dict(src_dict)
|
|
129
|
+
_id = d.pop("id", UNSET)
|
|
130
|
+
id: UUID | Unset
|
|
131
|
+
if isinstance(_id, Unset):
|
|
132
|
+
id = UNSET
|
|
133
|
+
else:
|
|
134
|
+
id = UUID(_id)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
url = d.pop("url", UNSET)
|
|
140
|
+
|
|
141
|
+
description = d.pop("description", UNSET)
|
|
142
|
+
|
|
143
|
+
event_types = cast(list[str], d.pop("event_types", UNSET))
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
enabled = d.pop("enabled", UNSET)
|
|
147
|
+
|
|
148
|
+
disabled_reason = d.pop("disabled_reason", UNSET)
|
|
149
|
+
|
|
150
|
+
consecutive_failures = d.pop("consecutive_failures", UNSET)
|
|
151
|
+
|
|
152
|
+
_last_delivery_at = d.pop("last_delivery_at", UNSET)
|
|
153
|
+
last_delivery_at: datetime.datetime | Unset
|
|
154
|
+
if isinstance(_last_delivery_at, Unset):
|
|
155
|
+
last_delivery_at = UNSET
|
|
156
|
+
else:
|
|
157
|
+
last_delivery_at = datetime.datetime.fromisoformat(_last_delivery_at)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
last_status = d.pop("last_status", UNSET)
|
|
163
|
+
|
|
164
|
+
_created_at = d.pop("created_at", UNSET)
|
|
165
|
+
created_at: datetime.datetime | Unset
|
|
166
|
+
if isinstance(_created_at, Unset):
|
|
167
|
+
created_at = UNSET
|
|
168
|
+
else:
|
|
169
|
+
created_at = datetime.datetime.fromisoformat(_created_at)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
_updated_at = d.pop("updated_at", UNSET)
|
|
175
|
+
updated_at: datetime.datetime | Unset
|
|
176
|
+
if isinstance(_updated_at, Unset):
|
|
177
|
+
updated_at = UNSET
|
|
178
|
+
else:
|
|
179
|
+
updated_at = datetime.datetime.fromisoformat(_updated_at)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
webhook_endpoint = cls(
|
|
185
|
+
id=id,
|
|
186
|
+
url=url,
|
|
187
|
+
description=description,
|
|
188
|
+
event_types=event_types,
|
|
189
|
+
enabled=enabled,
|
|
190
|
+
disabled_reason=disabled_reason,
|
|
191
|
+
consecutive_failures=consecutive_failures,
|
|
192
|
+
last_delivery_at=last_delivery_at,
|
|
193
|
+
last_status=last_status,
|
|
194
|
+
created_at=created_at,
|
|
195
|
+
updated_at=updated_at,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
webhook_endpoint.additional_properties = d
|
|
200
|
+
return webhook_endpoint
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def additional_keys(self) -> list[str]:
|
|
204
|
+
return list(self.additional_properties.keys())
|
|
205
|
+
|
|
206
|
+
def __getitem__(self, key: str) -> Any:
|
|
207
|
+
return self.additional_properties[key]
|
|
208
|
+
|
|
209
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
210
|
+
self.additional_properties[key] = value
|
|
211
|
+
|
|
212
|
+
def __delitem__(self, key: str) -> None:
|
|
213
|
+
del self.additional_properties[key]
|
|
214
|
+
|
|
215
|
+
def __contains__(self, key: str) -> bool:
|
|
216
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..models.webhook_endpoint_input_event_types_item import WebhookEndpointInputEventTypesItem
|
|
12
|
+
from ..types import UNSET, Unset
|
|
13
|
+
from typing import cast
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
T = TypeVar("T", bound="WebhookEndpointInput")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@_attrs_define
|
|
25
|
+
class WebhookEndpointInput:
|
|
26
|
+
"""
|
|
27
|
+
Attributes:
|
|
28
|
+
url (str | Unset): Example: https://hooks.example.com/kalir.
|
|
29
|
+
description (str | Unset):
|
|
30
|
+
event_types (list[WebhookEndpointInputEventTypesItem] | Unset): Empty or omitted = every event type.
|
|
31
|
+
enabled (bool | Unset):
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
url: str | Unset = UNSET
|
|
35
|
+
description: str | Unset = UNSET
|
|
36
|
+
event_types: list[WebhookEndpointInputEventTypesItem] | Unset = UNSET
|
|
37
|
+
enabled: bool | Unset = UNSET
|
|
38
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def to_dict(self) -> dict[str, Any]:
|
|
45
|
+
url = self.url
|
|
46
|
+
|
|
47
|
+
description = self.description
|
|
48
|
+
|
|
49
|
+
event_types: list[str] | Unset = UNSET
|
|
50
|
+
if not isinstance(self.event_types, Unset):
|
|
51
|
+
event_types = []
|
|
52
|
+
for event_types_item_data in self.event_types:
|
|
53
|
+
event_types_item = event_types_item_data.value
|
|
54
|
+
event_types.append(event_types_item)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
enabled = self.enabled
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
field_dict: dict[str, Any] = {}
|
|
62
|
+
field_dict.update(self.additional_properties)
|
|
63
|
+
field_dict.update({
|
|
64
|
+
})
|
|
65
|
+
if url is not UNSET:
|
|
66
|
+
field_dict["url"] = url
|
|
67
|
+
if description is not UNSET:
|
|
68
|
+
field_dict["description"] = description
|
|
69
|
+
if event_types is not UNSET:
|
|
70
|
+
field_dict["event_types"] = event_types
|
|
71
|
+
if enabled is not UNSET:
|
|
72
|
+
field_dict["enabled"] = enabled
|
|
73
|
+
|
|
74
|
+
return field_dict
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@classmethod
|
|
79
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
80
|
+
d = dict(src_dict)
|
|
81
|
+
url = d.pop("url", UNSET)
|
|
82
|
+
|
|
83
|
+
description = d.pop("description", UNSET)
|
|
84
|
+
|
|
85
|
+
_event_types = d.pop("event_types", UNSET)
|
|
86
|
+
event_types: list[WebhookEndpointInputEventTypesItem] | Unset = UNSET
|
|
87
|
+
if _event_types is not UNSET:
|
|
88
|
+
event_types = []
|
|
89
|
+
for event_types_item_data in _event_types:
|
|
90
|
+
event_types_item = WebhookEndpointInputEventTypesItem(event_types_item_data)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
event_types.append(event_types_item)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
enabled = d.pop("enabled", UNSET)
|
|
98
|
+
|
|
99
|
+
webhook_endpoint_input = cls(
|
|
100
|
+
url=url,
|
|
101
|
+
description=description,
|
|
102
|
+
event_types=event_types,
|
|
103
|
+
enabled=enabled,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
webhook_endpoint_input.additional_properties = d
|
|
108
|
+
return webhook_endpoint_input
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def additional_keys(self) -> list[str]:
|
|
112
|
+
return list(self.additional_properties.keys())
|
|
113
|
+
|
|
114
|
+
def __getitem__(self, key: str) -> Any:
|
|
115
|
+
return self.additional_properties[key]
|
|
116
|
+
|
|
117
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
118
|
+
self.additional_properties[key] = value
|
|
119
|
+
|
|
120
|
+
def __delitem__(self, key: str) -> None:
|
|
121
|
+
del self.additional_properties[key]
|
|
122
|
+
|
|
123
|
+
def __contains__(self, key: str) -> bool:
|
|
124
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
|
|
3
|
+
class WebhookEndpointInputEventTypesItem(StrEnum):
|
|
4
|
+
EXPOSURE_DETECTED = "exposure.detected"
|
|
5
|
+
INCIDENT_CREATED = "incident.created"
|
|
6
|
+
INCIDENT_UPDATED = "incident.updated"
|
|
7
|
+
INFOSTEALER_DETECTED = "infostealer.detected"
|
|
8
|
+
PHISHING_DETECTED = "phishing.detected"
|
|
9
|
+
|
|
10
|
+
def __str__(self) -> str:
|
|
11
|
+
return str(self.value)
|