flexitracker 0.3.0__tar.gz → 0.3.1__tar.gz

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.
Files changed (53) hide show
  1. {flexitracker-0.3.0 → flexitracker-0.3.1}/PKG-INFO +1 -1
  2. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/sender.py +9 -1
  3. {flexitracker-0.3.0 → flexitracker-0.3.1}/.gitignore +0 -0
  4. {flexitracker-0.3.0 → flexitracker-0.3.1}/README.md +0 -0
  5. {flexitracker-0.3.0 → flexitracker-0.3.1}/install/README.md +0 -0
  6. {flexitracker-0.3.0 → flexitracker-0.3.1}/install/flexitracker.service +0 -0
  7. {flexitracker-0.3.0 → flexitracker-0.3.1}/install/install.ps1 +0 -0
  8. {flexitracker-0.3.0 → flexitracker-0.3.1}/install/install.sh +0 -0
  9. {flexitracker-0.3.0 → flexitracker-0.3.1}/pyinstaller_entry.py +0 -0
  10. {flexitracker-0.3.0 → flexitracker-0.3.1}/pyproject.toml +0 -0
  11. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/__init__.py +0 -0
  12. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/__main__.py +0 -0
  13. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/_backend.py +0 -0
  14. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/cli.py +0 -0
  15. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/config.py +0 -0
  16. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/core.py +0 -0
  17. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/idle.py +0 -0
  18. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/login.py +0 -0
  19. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/outbox.py +0 -0
  20. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/state_machine.py +0 -0
  21. {flexitracker-0.3.0 → flexitracker-0.3.1}/src/flexitracker/version.py +0 -0
  22. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/test_cli.py +0 -0
  23. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/test_config.py +0 -0
  24. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/test_conformance.py +0 -0
  25. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/test_idle.py +0 -0
  26. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/test_login.py +0 -0
  27. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/test_outbox.py +0 -0
  28. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/test_sender_body.py +0 -0
  29. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/01-activation-debounced-backdated.json +0 -0
  30. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/02-idle-backdated-to-last-input.json +0 -0
  31. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/03-short-break-absorbed.json +0 -0
  32. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/04-brief-activity-debounced.json +0 -0
  33. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/05-sustained-return-backdated.json +0 -0
  34. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/06-heartbeats-while-active.json +0 -0
  35. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/07-recover-after-sudden-shutdown.json +0 -0
  36. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/08-locked-session-goes-idle.json +0 -0
  37. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/09-recover-anchors-later-evidence.json +0 -0
  38. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/10-suspend-longer-closes-span.json +0 -0
  39. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/11-suspend-with-immediate-wake.json +0 -0
  40. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/12-suspend-shorter-absorbed.json +0 -0
  41. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/13-backwards-clock-watermark.json +0 -0
  42. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/14-small-forward-clock-absorbed.json +0 -0
  43. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/15-recover-from-active-matches-loop.json +0 -0
  44. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/16-explicit-close-no-double-close.json +0 -0
  45. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/17-freshness-independent-of-poll.json +0 -0
  46. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/18-short-reading-pause.json +0 -0
  47. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/19-presence-must-be-sustained.json +0 -0
  48. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/20-gap-kills-pending-return.json +0 -0
  49. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/21-idle-backdating-exact.json +0 -0
  50. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/22-min-inactivity-exact-boundary.json +0 -0
  51. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/23-large-timestamps.json +0 -0
  52. {flexitracker-0.3.0 → flexitracker-0.3.1}/tests/vectors/24-all-kinds-lowercase.json +0 -0
  53. {flexitracker-0.3.0 → flexitracker-0.3.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flexitracker
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: FlexiTracker activity daemon — pure-Python.
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.11
@@ -14,6 +14,14 @@ from dataclasses import dataclass
14
14
  from typing import Optional
15
15
 
16
16
  from .config import ThresholdCfg
17
+ from .version import get_version
18
+
19
+ # Cloudflare's bot-fight mode blocks urllib's default "Python-urllib/x.y" User-
20
+ # Agent outright (HTTP 403, body "error code: 1010") on every route, Access-
21
+ # bypassed or not — it's a zone-level WAF check, unrelated to Access. Every
22
+ # real request this client makes needs a non-default UA or it never leaves
23
+ # the edge.
24
+ USER_AGENT = f"flexitracker-daemon/{get_version()}"
17
25
 
18
26
 
19
27
  class SenderError(Exception):
@@ -22,7 +30,7 @@ class SenderError(Exception):
22
30
 
23
31
  def _request(url: str, key: Optional[str], method: str, body: Optional[dict]) -> dict:
24
32
  data = None
25
- headers = {}
33
+ headers = {"user-agent": USER_AGENT}
26
34
  if key:
27
35
  headers["authorization"] = f"Bearer {key}"
28
36
  if body is not None:
File without changes
File without changes
File without changes