ipguard-api 0.1.1__tar.gz → 0.1.2__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.
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/DEVELOPMENT.md +1 -1
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/PKG-INFO +2 -2
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/README.md +1 -1
- ipguard_api-0.1.2/docs/PROTOCOL.md +33 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/docs/USAGE.md +2 -2
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/pyproject.toml +2 -1
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/uv.lock +1 -1
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/.gitignore +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/.python-version +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/LICENSE +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/build-constraints.txt +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/conftest.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/scripts/packaging_policy.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/scripts/release_metadata.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/__init__.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/client.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/errors.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/models.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/protocol.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/py.typed +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/transport.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/src/ipguard_api/validation.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/tests/test_cloud.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/tests/test_contract.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/tests/test_network_guard.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/tests/test_packaging.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/tests/test_protocol.py +0 -0
- {ipguard_api-0.1.1 → ipguard_api-0.1.2}/uv.toml +0 -0
|
@@ -53,4 +53,4 @@ Keep the Android handset profile independent of package releases. Human-readable
|
|
|
53
53
|
|
|
54
54
|
Incoming-call callbacks expose only sanitized board information. The SDK is passive by default. An explicit `auto_hangup=True` enables one immediate hangup attempt with cause zero after notification. The SDK does not retain media offers, answer calls, or implement media transport. Disconnect and shutdown cancel owned work. The SDK never replays uncertain attempts.
|
|
55
55
|
|
|
56
|
-
Store credentials in the consumer's private session storage. Keep raw packets, session contents, arbitrary provider errors, call tokens, and media data out of logs, tracebacks, and callback data. [
|
|
56
|
+
Store credentials in the consumer's private session storage. Keep raw packets, session contents, arbitrary provider errors, call tokens, and media data out of logs, tracebacks, and callback data. See [Protocol behavior and limits](docs/PROTOCOL.md) for transport security and verification limits. [API usage](docs/USAGE.md) covers client setup and examples.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ipguard-api
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Typed asynchronous client for the IPGUARD cloud service
|
|
5
5
|
Project-URL: Repository, https://github.com/KennyTangHK/ipguard-api
|
|
6
6
|
Project-URL: Issues, https://github.com/KennyTangHK/ipguard-api/issues
|
|
@@ -42,7 +42,7 @@ See the [API guide](docs/USAGE.md) for account setup and examples.
|
|
|
42
42
|
|
|
43
43
|
Incoming-call notifications are passive by default. Set `auto_hangup=True` to make one immediate hangup attempt after a notification. This is intended to trigger carrier-call fallback sooner. The provider and account configuration determine the actual routing and timing.
|
|
44
44
|
|
|
45
|
-
Enrollment uses unencrypted TCP
|
|
45
|
+
Enrollment uses unencrypted TCP. A door-release acknowledgement does not confirm that the physical door opened. See [protocol behavior and limits](docs/PROTOCOL.md) for transport security, supported behavior and verification limits.
|
|
46
46
|
|
|
47
47
|
## Development
|
|
48
48
|
|
|
@@ -26,7 +26,7 @@ See the [API guide](docs/USAGE.md) for account setup and examples.
|
|
|
26
26
|
|
|
27
27
|
Incoming-call notifications are passive by default. Set `auto_hangup=True` to make one immediate hangup attempt after a notification. This is intended to trigger carrier-call fallback sooner. The provider and account configuration determine the actual routing and timing.
|
|
28
28
|
|
|
29
|
-
Enrollment uses unencrypted TCP
|
|
29
|
+
Enrollment uses unencrypted TCP. A door-release acknowledgement does not confirm that the physical door opened. See [protocol behavior and limits](docs/PROTOCOL.md) for transport security, supported behavior and verification limits.
|
|
30
30
|
|
|
31
31
|
## Development
|
|
32
32
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Protocol behavior and compatibility limits
|
|
2
|
+
|
|
3
|
+
This document describes the behavior and limits of `ipguard-api`. The library supports account enrollment, saved authorization, relay discovery, door-release commands and incoming-call notifications. For client setup and code examples, see [API usage](USAGE.md).
|
|
4
|
+
|
|
5
|
+
## Enrollment and saved authorization
|
|
6
|
+
|
|
7
|
+
Verification requests and resends require an explicit method call. A reconnection with saved authorization does not request another code or replace an installation. The library refuses replacement by default. The application must obtain user consent before it enables replacement, which can disable the previous installation. Revoked authorization stops reconnection and requires enrollment again.
|
|
8
|
+
|
|
9
|
+
Serialized sessions contain the account identifier, installation UUID, verification code, server public key and any activation credential returned by the service. The application is responsible for private storage of this data. Treat serialized sessions and their backups as credentials. Do not include them in issue reports or debug captures. The SDK omits credentials, raw packets and arbitrary provider error text from diagnostics.
|
|
10
|
+
|
|
11
|
+
## Transport security
|
|
12
|
+
|
|
13
|
+
The default enrollment endpoint is `tcp://zmq.campiserveur.com:5579`. This connection is not encrypted. The client gets the server public key during that exchange. ZeroMQ CURVE then protects the authenticated connection at `tcp://zmq.campiserveur.com:5577` with that key.
|
|
14
|
+
|
|
15
|
+
CURVE does not protect the earlier enrollment exchange. Enrollment does not use HTTPS, and the SDK has no encrypted enrollment fallback. Do not disable CURVE authentication to work around connection failures.
|
|
16
|
+
|
|
17
|
+
## Door-release commands
|
|
18
|
+
|
|
19
|
+
A relay can receive a release command only if it has current remote-release permission and does not need badge confirmation. The SDK checks permission immediately before transmission. It rejects unavailable or busy operations. It does not put a release command in a queue for a later connection.
|
|
20
|
+
|
|
21
|
+
A successful result means that the board sent a matching acknowledgement. It does not show if the physical door moved, or if it is open or locked. If a command may have been sent but there is no matching acknowledgement, its outcome is unknown. The SDK does not automatically replay release commands. The application must report the uncertainty and leave any further attempt to the user.
|
|
22
|
+
|
|
23
|
+
## Incoming calls
|
|
24
|
+
|
|
25
|
+
A fresh, validated incoming call on the active account connection causes a callback. Callbacks include sanitized board information when the caller can be identified. Unknown callers still cause a callback. The SDK suppresses duplicates for a limited time. It validates and discards media descriptions. It does not expose call tokens, caller routes or media credentials through callbacks. Calls missed during a disconnection are not recovered.
|
|
26
|
+
|
|
27
|
+
The SDK is passive by default. It does not acknowledge, answer or hang up an incoming call. An application can set `auto_hangup=True` to enable one immediate hangup attempt after notification. This is intended to start carrier-call fallback sooner. Routing and timing depend on the provider and account configuration. The SDK skips the attempt if the call or connection is no longer current or the write is busy. It cancels pending work on disconnect or close. It does not queue, retry or replay an uncertain write. See [Automatic hangup](USAGE.md#automatic-hangup) for client configuration.
|
|
28
|
+
|
|
29
|
+
Video calls, camera streaming, audio conversation, call answering, manual call controls, Firebase, Bluetooth and SIP calling are not supported. Incoming calls do not cause a door release.
|
|
30
|
+
|
|
31
|
+
## Verification limits
|
|
32
|
+
|
|
33
|
+
Automated SDK tests use synthetic accounts and loopback plaintext/CURVE servers. These checks validate client behavior against fixtures. They do not establish current provider acceptance, credential lifetime, account aliases, simultaneous mobile installations, incoming-call delivery, carrier routing or a physical door release. Routing and delivery depend on the provider and account configuration. A live account or physical check requires explicit user direction.
|
|
@@ -81,7 +81,7 @@ Video calling and camera streaming are not supported. The SDK has no API to reta
|
|
|
81
81
|
|
|
82
82
|
### Automatic hangup
|
|
83
83
|
|
|
84
|
-
`IpguardClient(auto_hangup=True)` enables one immediate hangup attempt after each fresh, validated incoming-call notification. This is intended to trigger carrier-call fallback sooner. The provider and account configuration determine the actual routing and timing. The
|
|
84
|
+
`IpguardClient(auto_hangup=True)` enables one immediate hangup attempt after each fresh, validated incoming-call notification. This is intended to trigger carrier-call fallback sooner. The provider and account configuration determine the actual routing and timing. The SDK defaults to `auto_hangup=False`. In that mode, it gives incoming-call notifications without sending a hangup. Applications enable this option separately for each client.
|
|
85
85
|
|
|
86
86
|
An attempt requires a current call, connection, and installation. The client skips busy, stale, disconnected, or superseded attempts. Call termination, disconnect, or shutdown cancels pending work. The client does not queue or replay attempts. It does not retry a send with an uncertain outcome. Duplicate suppression stays available across reconnects for the same installation. It does not persist after the client closes or the process restarts. The SDK has no manual hangup or call-answering API.
|
|
87
87
|
|
|
@@ -97,7 +97,7 @@ The SDK checks the current permission and rejects a concurrent release for the s
|
|
|
97
97
|
|
|
98
98
|
## Transport and logging
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
For the default endpoints and enrollment security, see [Transport security](PROTOCOL.md#transport-security). Do not disable CURVE authentication to work around connection failures.
|
|
101
101
|
|
|
102
102
|
The constructor accepts test endpoints, `timeout`, `reconnect_delay`, and `max_reconnect_delay`. Saved sessions retain their endpoints.
|
|
103
103
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ipguard-api"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.2"
|
|
8
8
|
description = "Typed asynchronous client for the IPGUARD cloud service"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.14.2,<3.15"
|
|
@@ -58,6 +58,7 @@ only-include = [
|
|
|
58
58
|
"uv.lock",
|
|
59
59
|
"build-constraints.txt",
|
|
60
60
|
"DEVELOPMENT.md",
|
|
61
|
+
"docs/PROTOCOL.md",
|
|
61
62
|
"docs/USAGE.md",
|
|
62
63
|
"README.md",
|
|
63
64
|
"LICENSE",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|