diff --git a/crowdsec_service_api/__init__.py b/crowdsec_service_api/__init__.py index 575ab77..226be57 100644 --- a/crowdsec_service_api/__init__.py +++ b/crowdsec_service_api/__init__.py @@ -113,6 +113,7 @@ class Server(Enum): 'RawMetrics', 'RemediationMetrics', 'RemediationMetricsData', + 'RemediationStats', 'Share', 'SourceInfo', 'SourceType', diff --git a/crowdsec_service_api/__pycache__/__init__.cpython-311.pyc b/crowdsec_service_api/__pycache__/__init__.cpython-311.pyc index 1638331..68481bf 100644 Binary files a/crowdsec_service_api/__pycache__/__init__.cpython-311.pyc and b/crowdsec_service_api/__pycache__/__init__.cpython-311.pyc differ diff --git a/crowdsec_service_api/__pycache__/base_model.cpython-311.pyc b/crowdsec_service_api/__pycache__/base_model.cpython-311.pyc index 20476fb..c0aa44a 100644 Binary files a/crowdsec_service_api/__pycache__/base_model.cpython-311.pyc and b/crowdsec_service_api/__pycache__/base_model.cpython-311.pyc differ diff --git a/crowdsec_service_api/__pycache__/http_client.cpython-311.pyc b/crowdsec_service_api/__pycache__/http_client.cpython-311.pyc index d4fd394..fbc0e17 100644 Binary files a/crowdsec_service_api/__pycache__/http_client.cpython-311.pyc and b/crowdsec_service_api/__pycache__/http_client.cpython-311.pyc differ diff --git a/crowdsec_service_api/__pycache__/models.cpython-311.pyc b/crowdsec_service_api/__pycache__/models.cpython-311.pyc index aa29759..8bfb82d 100644 Binary files a/crowdsec_service_api/__pycache__/models.cpython-311.pyc and b/crowdsec_service_api/__pycache__/models.cpython-311.pyc differ diff --git a/crowdsec_service_api/models.py b/crowdsec_service_api/models.py index 72bb22c..aff99dd 100644 --- a/crowdsec_service_api/models.py +++ b/crowdsec_service_api/models.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2026-04-21T09:21:23+00:00 +# timestamp: 2026-05-06T08:54:01+00:00 from __future__ import annotations @@ -516,6 +516,23 @@ class RemediationMetricsData(BaseModelSdk): ] +class RemediationStats(BaseModelSdk): + dropped_rate: Annotated[ + Optional[Dict[str, Optional[float]]], + Field( + description='Percentage of dropped traffic over total processed traffic, per unit, rounded to 2 decimals. Null when no processed traffic was observed for the unit.', + title='Dropped Rate', + ), + ] = None + allowed_rate: Annotated[ + Optional[Dict[str, Optional[float]]], + Field( + description='Percentage of allowed (passed-through) traffic over total processed traffic, per unit, rounded to 2 decimals. Null when no processed traffic was observed for the unit.', + title='Allowed Rate', + ), + ] = None + + class Share(BaseModelSdk): organization_id: Annotated[str, Field(title='Organization Id')] permission: Permission @@ -1017,6 +1034,7 @@ class ThreatContext(BaseModelSdk): Optional[Dict[str, int]], Field( description='Attacker country distribution (country code → count)', + examples=[{'FR': 18, 'NL': 23, 'US': 36}], title='Attacker Countries', ), ] = None @@ -1024,6 +1042,7 @@ class ThreatContext(BaseModelSdk): Optional[Dict[str, int]], Field( description='Defender country distribution (country code → count)', + examples=[{'BE': 13, 'FR': 22, 'NL': 22}], title='Defender Countries', ), ] = None @@ -1031,6 +1050,7 @@ class ThreatContext(BaseModelSdk): Optional[Dict[str, int]], Field( description='Industry type distribution (type → count)', + examples=[{'commerce': 65, 'government': 5, 'non_profit': 30}], title='Industry Types', ), ] = None @@ -1038,6 +1058,7 @@ class ThreatContext(BaseModelSdk): Optional[Dict[str, int]], Field( description='Industry risk profile distribution (profile → count)', + examples=[{'SOHO': 25, 'public_service': 10, 'technology_business': 65}], title='Industry Risk Profiles', ), ] = None @@ -1045,6 +1066,7 @@ class ThreatContext(BaseModelSdk): Optional[Dict[str, int]], Field( description='Attacker objective distribution (objective → count)', + examples=[{'data_exfiltration': 10, 'infrastructure_takeover': 90}], title='Attacker Objectives', ), ] = None @@ -1306,7 +1328,7 @@ class BlocklistsUploadBlocklistContentQueryParameters(BaseModelSdk): Optional[datetime], Field( description='Blocklist expiration', - examples=['2026-04-17T08:43:44.302226+00:00'], + examples=['2026-05-06T08:51:29.433616+00:00'], title='Expiration', ), ] = None @@ -4457,3 +4479,7 @@ class ComputedMetrics(BaseModelSdk): class GetRemediationMetricsResponse(BaseModelSdk): raw: Annotated[RawMetrics, Field(description='Raw metrics data')] computed: Annotated[ComputedMetrics, Field(description='Computed metrics data')] + stats: Annotated[ + Optional[RemediationStats], + Field(description='Aggregate stats computed over the time window'), + ] = None diff --git a/crowdsec_service_api/services/__pycache__/__init__.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/__init__.cpython-311.pyc index c6a1954..b820b79 100644 Binary files a/crowdsec_service_api/services/__pycache__/__init__.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/__init__.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/allowlists.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/allowlists.cpython-311.pyc index 6ea5649..ca69ae7 100644 Binary files a/crowdsec_service_api/services/__pycache__/allowlists.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/allowlists.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/blocklists.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/blocklists.cpython-311.pyc index 3e7126a..b59a5fd 100644 Binary files a/crowdsec_service_api/services/__pycache__/blocklists.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/blocklists.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/cves.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/cves.cpython-311.pyc index 9a07699..88bcc5a 100644 Binary files a/crowdsec_service_api/services/__pycache__/cves.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/cves.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/decisions.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/decisions.cpython-311.pyc index 1941bf8..66da39e 100644 Binary files a/crowdsec_service_api/services/__pycache__/decisions.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/decisions.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/fingerprints.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/fingerprints.cpython-311.pyc index 100a01d..2350bba 100644 Binary files a/crowdsec_service_api/services/__pycache__/fingerprints.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/fingerprints.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/hub.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/hub.cpython-311.pyc index 54c3d53..cc87297 100644 Binary files a/crowdsec_service_api/services/__pycache__/hub.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/hub.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/info.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/info.cpython-311.pyc index 431d4d1..51556db 100644 Binary files a/crowdsec_service_api/services/__pycache__/info.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/info.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/integrations.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/integrations.cpython-311.pyc index 98ae2af..0a25024 100644 Binary files a/crowdsec_service_api/services/__pycache__/integrations.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/integrations.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/metrics.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/metrics.cpython-311.pyc index 319ef0f..dbd28f0 100644 Binary files a/crowdsec_service_api/services/__pycache__/metrics.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/metrics.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/products.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/products.cpython-311.pyc index a5ee5cc..e572fa5 100644 Binary files a/crowdsec_service_api/services/__pycache__/products.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/products.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/tracker_events.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/tracker_events.cpython-311.pyc index 8bdc48e..0cbc2fa 100644 Binary files a/crowdsec_service_api/services/__pycache__/tracker_events.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/tracker_events.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/tracker_tags.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/tracker_tags.cpython-311.pyc index 0b93d87..4d4fa17 100644 Binary files a/crowdsec_service_api/services/__pycache__/tracker_tags.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/tracker_tags.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/__pycache__/vendors.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/vendors.cpython-311.pyc index fc8e302..3dfff2f 100644 Binary files a/crowdsec_service_api/services/__pycache__/vendors.cpython-311.pyc and b/crowdsec_service_api/services/__pycache__/vendors.cpython-311.pyc differ diff --git a/crowdsec_service_api/services/allowlists.py b/crowdsec_service_api/services/allowlists.py index 8076a5e..4db5448 100644 --- a/crowdsec_service_api/services/allowlists.py +++ b/crowdsec_service_api/services/allowlists.py @@ -11,7 +11,7 @@ class Allowlists(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def list_allowlists( self, diff --git a/crowdsec_service_api/services/blocklists.py b/crowdsec_service_api/services/blocklists.py index 65bf0d6..526ee26 100644 --- a/crowdsec_service_api/services/blocklists.py +++ b/crowdsec_service_api/services/blocklists.py @@ -11,7 +11,7 @@ class Blocklists(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_blocklists( self, diff --git a/crowdsec_service_api/services/cves.py b/crowdsec_service_api/services/cves.py index b0d0745..b9bc34a 100644 --- a/crowdsec_service_api/services/cves.py +++ b/crowdsec_service_api/services/cves.py @@ -11,7 +11,7 @@ class Cves(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_cves( self, diff --git a/crowdsec_service_api/services/decisions.py b/crowdsec_service_api/services/decisions.py index 077a642..7341652 100644 --- a/crowdsec_service_api/services/decisions.py +++ b/crowdsec_service_api/services/decisions.py @@ -11,7 +11,7 @@ class Decisions(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_decisions( self, diff --git a/crowdsec_service_api/services/fingerprints.py b/crowdsec_service_api/services/fingerprints.py index 25d9ac6..da7a66c 100644 --- a/crowdsec_service_api/services/fingerprints.py +++ b/crowdsec_service_api/services/fingerprints.py @@ -11,7 +11,7 @@ class Fingerprints(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_fingerprint_rules( self, diff --git a/crowdsec_service_api/services/hub.py b/crowdsec_service_api/services/hub.py index d488520..00737de 100644 --- a/crowdsec_service_api/services/hub.py +++ b/crowdsec_service_api/services/hub.py @@ -11,7 +11,7 @@ class Hub(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_index( self, diff --git a/crowdsec_service_api/services/info.py b/crowdsec_service_api/services/info.py index 9137d39..f504a1c 100644 --- a/crowdsec_service_api/services/info.py +++ b/crowdsec_service_api/services/info.py @@ -11,7 +11,7 @@ class Info(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_info( self, diff --git a/crowdsec_service_api/services/integrations.py b/crowdsec_service_api/services/integrations.py index d5e2589..3a40354 100644 --- a/crowdsec_service_api/services/integrations.py +++ b/crowdsec_service_api/services/integrations.py @@ -11,7 +11,7 @@ class Integrations(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_integrations( self, diff --git a/crowdsec_service_api/services/metrics.py b/crowdsec_service_api/services/metrics.py index df84939..50ea9eb 100644 --- a/crowdsec_service_api/services/metrics.py +++ b/crowdsec_service_api/services/metrics.py @@ -11,7 +11,7 @@ class Metrics(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_metrics_remediation( self, diff --git a/crowdsec_service_api/services/products.py b/crowdsec_service_api/services/products.py index 02e32df..0044f3d 100644 --- a/crowdsec_service_api/services/products.py +++ b/crowdsec_service_api/services/products.py @@ -11,7 +11,7 @@ class Products(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_products( self, diff --git a/crowdsec_service_api/services/tracker_events.py b/crowdsec_service_api/services/tracker_events.py index eddace0..d3e4ed5 100644 --- a/crowdsec_service_api/services/tracker_events.py +++ b/crowdsec_service_api/services/tracker_events.py @@ -11,7 +11,7 @@ class TrackerEvents(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_exploitation_phase_change_events( self, diff --git a/crowdsec_service_api/services/tracker_tags.py b/crowdsec_service_api/services/tracker_tags.py index 5485b3f..83634f4 100644 --- a/crowdsec_service_api/services/tracker_tags.py +++ b/crowdsec_service_api/services/tracker_tags.py @@ -11,7 +11,7 @@ class TrackerTags(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_tags( self, diff --git a/crowdsec_service_api/services/vendors.py b/crowdsec_service_api/services/vendors.py index c5ae5fb..ab13c6b 100644 --- a/crowdsec_service_api/services/vendors.py +++ b/crowdsec_service_api/services/vendors.py @@ -11,7 +11,7 @@ class Vendors(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.15.26") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.121.0") def get_vendors( self, diff --git a/doc/Models.md b/doc/Models.md index 6d2e3e8..088f518 100644 --- a/doc/Models.md +++ b/doc/Models.md @@ -630,6 +630,7 @@ raw, computed |----------|------|-------------|---------| | raw | RawMetrics | None || | computed | ComputedMetrics | None || +| stats | RemediationStats | None || # **HTTPValidationError** ## Properties @@ -865,6 +866,13 @@ value, timestamp | value | Union[int, float] | Value of the metric || | timestamp | str | Timestamp of the metric || +# **RemediationStats** +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| dropped_rate | Dropped Rate | Percentage of dropped traffic over total processed traffic, per unit, rounded to 2 decimals. Null when no processed traffic was observed for the unit. || +| allowed_rate | Allowed Rate | Percentage of allowed (passed-through) traffic over total processed traffic, per unit, rounded to 2 decimals. Null when no processed traffic was observed for the unit. || + # **Share** ## Required: organization_id, permission diff --git a/doc/README.md b/doc/README.md index 6d0b091..809ced9 100644 --- a/doc/README.md +++ b/doc/README.md @@ -199,6 +199,8 @@ You can find a Quickstart about this SDK, following this [documentation](https:/ [RemediationMetricsData](./Models.md#remediationmetricsdata) +[RemediationStats](./Models.md#remediationstats) + [Share](./Models.md#share) [SourceInfo](./Models.md#sourceinfo) diff --git a/public-openapi.json b/public-openapi.json index 0492c9e..d64b563 100644 --- a/public-openapi.json +++ b/public-openapi.json @@ -3,7 +3,7 @@ "info": { "title": "Service API", "description": "This is the API to manage Crowdsec services", - "version": "1.70.4", + "version": "1.70.9", "contact": { "name": "CrowdSec", "url": "https://crowdsec.net", @@ -1243,7 +1243,7 @@ ], "description": "Blocklist expiration", "examples": [ - "2026-04-17T08:43:44.302226+00:00" + "2026-05-06T08:51:29.433616+00:00" ], "title": "Expiration" }, @@ -7980,6 +7980,10 @@ "computed": { "$ref": "#/components/schemas/ComputedMetrics", "description": "Computed metrics data" + }, + "stats": { + "$ref": "#/components/schemas/RemediationStats", + "description": "Aggregate stats computed over the time window" } }, "type": "object", @@ -9094,6 +9098,48 @@ ], "title": "RemediationMetricsData" }, + "RemediationStats": { + "properties": { + "dropped_rate": { + "additionalProperties": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "propertyNames": { + "$ref": "#/components/schemas/MetricUnits" + }, + "type": "object", + "title": "Dropped Rate", + "description": "Percentage of dropped traffic over total processed traffic, per unit, rounded to 2 decimals. Null when no processed traffic was observed for the unit." + }, + "allowed_rate": { + "additionalProperties": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "propertyNames": { + "$ref": "#/components/schemas/MetricUnits" + }, + "type": "object", + "title": "Allowed Rate", + "description": "Percentage of allowed (passed-through) traffic over total processed traffic, per unit, rounded to 2 decimals. Null when no processed traffic was observed for the unit." + } + }, + "type": "object", + "title": "RemediationStats" + }, "Share": { "properties": { "organization_id": { @@ -13402,7 +13448,14 @@ }, "type": "object", "title": "Attacker Countries", - "description": "Attacker country distribution (country code \u2192 count)" + "description": "Attacker country distribution (country code \u2192 count)", + "examples": [ + { + "FR": 18, + "NL": 23, + "US": 36 + } + ] }, "defender_countries": { "additionalProperties": { @@ -13410,7 +13463,14 @@ }, "type": "object", "title": "Defender Countries", - "description": "Defender country distribution (country code \u2192 count)" + "description": "Defender country distribution (country code \u2192 count)", + "examples": [ + { + "BE": 13, + "FR": 22, + "NL": 22 + } + ] }, "industry_types": { "additionalProperties": { @@ -13421,7 +13481,14 @@ }, "type": "object", "title": "Industry Types", - "description": "Industry type distribution (type \u2192 count)" + "description": "Industry type distribution (type \u2192 count)", + "examples": [ + { + "commerce": 65, + "government": 5, + "non_profit": 30 + } + ] }, "industry_risk_profiles": { "additionalProperties": { @@ -13432,7 +13499,14 @@ }, "type": "object", "title": "Industry Risk Profiles", - "description": "Industry risk profile distribution (profile \u2192 count)" + "description": "Industry risk profile distribution (profile \u2192 count)", + "examples": [ + { + "SOHO": 25, + "public_service": 10, + "technology_business": 65 + } + ] }, "attacker_objectives": { "additionalProperties": { @@ -13443,7 +13517,13 @@ }, "type": "object", "title": "Attacker Objectives", - "description": "Attacker objective distribution (objective \u2192 count)" + "description": "Attacker objective distribution (objective \u2192 count)", + "examples": [ + { + "data_exfiltration": 10, + "infrastructure_takeover": 90 + } + ] } }, "type": "object", diff --git a/pyproject.toml b/pyproject.toml index a0f93d8..f01ed4c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "crowdsec_service_api" -version = "v0.15.26" +version = "1.121.0" license = { text = "MIT" } authors = [ { name="crowdsec", email="info@crowdsec.net" } diff --git a/uv.lock b/uv.lock index 613efa8..ad0488a 100644 --- a/uv.lock +++ b/uv.lock @@ -26,30 +26,30 @@ wheels = [ [[package]] name = "botocore" -version = "1.42.92" +version = "1.43.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jmespath" }, { name = "python-dateutil" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d5/0a/6785ce224ba4483b3e1282d959e1dd2c2898823336f013464c43cb154036/botocore-1.42.92.tar.gz", hash = "sha256:f1193d3057a2d0267353d7ef4e136be37ea432336d097fcb1951fae566ca3a22", size = 15235239, upload-time = "2026-04-20T19:38:05.085Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c1/45/f73f2a126752ed4c762a46210315c80cb7e67a96887aaa2f9c32d41631c6/botocore-1.43.4.tar.gz", hash = "sha256:1a95c90fa9ca6ee85c1a02b04c8e05e948661d201b85b443000d676857905019", size = 15317239, upload-time = "2026-05-05T19:34:27.317Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/b8/41d4d7ba75a4fb4f11362e96371a12695bc6ba0bb7cc680137db0213f97e/botocore-1.42.92-py3-none-any.whl", hash = "sha256:09ddefddbb1565ceef4b44b4b6e61b1ca5f12701d1494ecc85c1133d1b1e81fb", size = 14916275, upload-time = "2026-04-20T19:38:01.684Z" }, + { url = "https://files.pythonhosted.org/packages/5d/53/8dfb1f8f0be68cce735181d876d8f7c537c5c44656b3b9ab4b3b9e973320/botocore-1.43.4-py3-none-any.whl", hash = "sha256:f1897d3254965cacac7514cfed1b6ff016166b165ee2e06232b4a3954cf9d713", size = 14999193, upload-time = "2026-05-05T19:34:23.893Z" }, ] [[package]] name = "certifi" -version = "2026.2.25" +version = "2026.4.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, + { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" }, ] [[package]] name = "crowdsec-service-api" -version = "0.15.26" +version = "1.121.0" source = { editable = "." } dependencies = [ { name = "botocore" }, @@ -126,11 +126,11 @@ wheels = [ [[package]] name = "idna" -version = "3.11" +version = "3.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210, upload-time = "2026-04-22T16:42:42.314Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, + { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629, upload-time = "2026-04-22T16:42:40.909Z" }, ] [[package]] @@ -320,11 +320,11 @@ wheels = [ [[package]] name = "tzdata" -version = "2026.1" +version = "2026.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/19/f5/cd531b2d15a671a40c0f66cf06bc3570a12cd56eef98960068ebbad1bf5a/tzdata-2026.1.tar.gz", hash = "sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98", size = 197639, upload-time = "2026-04-03T11:25:22.002Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl", hash = "sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9", size = 348952, upload-time = "2026-04-03T11:25:20.313Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, ] [[package]]