slim-bindings 0.5.0__tar.gz → 0.6.0__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.
Potentially problematic release.
This version of slim-bindings might be problematic. Click here for more details.
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/Cargo.lock +17 -8
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/Cargo.toml +8 -8
- slim_bindings-0.6.0/PKG-INFO +233 -0
- slim_bindings-0.6.0/README.md +213 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/CHANGELOG.md +11 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/Cargo.toml +1 -1
- slim_bindings-0.6.0/core/auth/src/auth_provider.rs +514 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/jwt.rs +10 -10
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/jwt_middleware.rs +7 -7
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/lib.rs +1 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/resolver.rs +18 -36
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/shared_secret.rs +0 -3
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/CHANGELOG.md +11 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/Cargo.toml +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/auth/basic.rs +2 -2
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/auth/jwt.rs +139 -66
- slim_bindings-0.6.0/core/config/src/auth/static_jwt.rs +184 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/auth.rs +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/client.rs +4 -4
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/server.rs +1 -25
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/opaque.rs +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/tls/common.rs +65 -22
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/tls/server.rs +19 -14
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/tests/e2e.rs +67 -8
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/CHANGELOG.md +12 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/Cargo.toml +6 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/proto/v1/controller.proto +44 -28
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/src/api/gen/controller.proto.v1.rs +51 -30
- slim_bindings-0.6.0/core/controller/src/config.rs +631 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/src/service.rs +602 -82
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/CHANGELOG.md +18 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/Cargo.toml +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/README.md +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/build.rs +1 -1
- slim_bindings-0.6.0/core/datapath/proto/v1/data-plane.proto +127 -0
- slim_bindings-0.5.0/core/datapath/src/api/gen/pubsub.proto.v1.rs → slim_bindings-0.6.0/core/datapath/src/api/gen/dataplane.proto.v1.rs +83 -67
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/api/proto.rs +2 -2
- slim_bindings-0.6.0/core/datapath/src/api.rs +22 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/connection.rs +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/message_processing.rs +9 -8
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/messages/encoder.rs +4 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/messages/utils.rs +143 -24
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/tables/subscription_table.rs +23 -16
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/tests/data_path_test.rs +2 -2
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/mls/CHANGELOG.md +6 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/mls/Cargo.toml +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/service/CHANGELOG.md +29 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/service/Cargo.toml +2 -1
- slim_bindings-0.6.0/core/service/src/app.rs +603 -0
- slim_bindings-0.6.0/core/service/src/errors.rs +48 -0
- slim_bindings-0.6.0/core/service/src/lib.rs +21 -0
- slim_bindings-0.5.0/core/service/src/lib.rs → slim_bindings-0.6.0/core/service/src/service.rs +102 -127
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/channel_endpoint.rs +369 -69
- slim_bindings-0.6.0/core/service/src/session/common.rs +37 -0
- slim_bindings-0.6.0/core/service/src/session/config.rs +110 -0
- slim_bindings-0.6.0/core/service/src/session/context.rs +285 -0
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/errors.rs +7 -45
- slim_bindings-0.6.0/core/service/src/session/handle.rs +1008 -0
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/interceptor.rs +4 -3
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/interceptor_mls.rs +19 -13
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/moderator_task.rs +3 -1
- slim_bindings-0.5.0/core/service/src/streaming.rs → slim_bindings-0.6.0/core/service/src/session/multicast.rs +351 -400
- slim_bindings-0.6.0/core/service/src/session/notification.rs +26 -0
- slim_bindings-0.5.0/core/service/src/fire_and_forget.rs → slim_bindings-0.6.0/core/service/src/session/point_to_point.rs +839 -454
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/producer_buffer.rs +20 -6
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/receiver_buffer.rs +98 -15
- slim_bindings-0.6.0/core/service/src/session/session_layer.rs +629 -0
- {slim_bindings-0.5.0/core/service/src → slim_bindings-0.6.0/core/service/src/session}/timer.rs +6 -3
- slim_bindings-0.6.0/core/service/src/session/traits.rs +102 -0
- slim_bindings-0.6.0/core/service/src/session/transmitter.rs +317 -0
- slim_bindings-0.6.0/core/service/src/session.rs +55 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/tracing/CHANGELOG.md +6 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/tracing/Cargo.toml +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/tracing/src/lib.rs +9 -8
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/pyproject.toml +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/CHANGELOG.md +30 -0
- slim_bindings-0.6.0/python/bindings/README.md +213 -0
- slim_bindings-0.6.0/python/bindings/SESSION.md +353 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/Taskfile.yaml +1 -1
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/examples/CHANGELOG.md +12 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/examples/Dockerfile +1 -0
- slim_bindings-0.6.0/python/bindings/examples/README.md +486 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/examples/Taskfile.yaml +24 -35
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/examples/pyproject.toml +4 -6
- slim_bindings-0.6.0/python/bindings/examples/src/slim_bindings_examples/README_group.md +214 -0
- slim_bindings-0.6.0/python/bindings/examples/src/slim_bindings_examples/README_point_to_point.md +182 -0
- slim_bindings-0.6.0/python/bindings/examples/src/slim_bindings_examples/__init__.py +76 -0
- slim_bindings-0.6.0/python/bindings/examples/src/slim_bindings_examples/common.py +384 -0
- slim_bindings-0.6.0/python/bindings/examples/src/slim_bindings_examples/group.py +295 -0
- slim_bindings-0.6.0/python/bindings/examples/src/slim_bindings_examples/point_to_point.py +229 -0
- slim_bindings-0.6.0/python/bindings/examples/src/slim_bindings_examples/slim.py +154 -0
- slim_bindings-0.6.0/python/bindings/slim_bindings/__init__.py +77 -0
- slim_bindings-0.6.0/python/bindings/slim_bindings/_slim_bindings.pyi +476 -0
- slim_bindings-0.6.0/python/bindings/slim_bindings/errors.py +53 -0
- slim_bindings-0.6.0/python/bindings/slim_bindings/session.py +219 -0
- slim_bindings-0.6.0/python/bindings/slim_bindings/slim.py +383 -0
- slim_bindings-0.6.0/python/bindings/slim_bindings/version.py +38 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/src/lib.rs +7 -4
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/src/pyidentity.rs +233 -0
- slim_bindings-0.6.0/python/bindings/src/pymessage.rs +117 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/src/pyservice.rs +231 -186
- slim_bindings-0.6.0/python/bindings/src/pysession.rs +407 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/src/utils.rs +8 -9
- slim_bindings-0.6.0/python/bindings/tests/common.py +58 -0
- slim_bindings-0.6.0/python/bindings/tests/conftest.py +78 -0
- slim_bindings-0.6.0/python/bindings/tests/test_bindings.py +486 -0
- slim_bindings-0.6.0/python/bindings/tests/test_identity.py +203 -0
- slim_bindings-0.6.0/python/bindings/tests/test_multicast.py +233 -0
- slim_bindings-0.6.0/python/bindings/tests/test_point_to_point.py +176 -0
- slim_bindings-0.6.0/python/bindings/tests/test_session_metadata.py +80 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/uv.lock +25 -2
- slim_bindings-0.6.0/slim_bindings/__init__.py +77 -0
- slim_bindings-0.6.0/slim_bindings/_slim_bindings.pyi +476 -0
- slim_bindings-0.6.0/slim_bindings/errors.py +53 -0
- slim_bindings-0.6.0/slim_bindings/session.py +219 -0
- slim_bindings-0.6.0/slim_bindings/slim.py +383 -0
- slim_bindings-0.6.0/slim_bindings/version.py +38 -0
- slim_bindings-0.5.0/PKG-INFO +0 -61
- slim_bindings-0.5.0/README.md +0 -41
- slim_bindings-0.5.0/core/config/src/auth/bearer.rs +0 -95
- slim_bindings-0.5.0/core/controller/src/config.rs +0 -83
- slim_bindings-0.5.0/core/datapath/proto/v1/pubsub.proto +0 -114
- slim_bindings-0.5.0/core/datapath/src/api.rs +0 -22
- slim_bindings-0.5.0/core/service/src/app.rs +0 -1224
- slim_bindings-0.5.0/core/service/src/session.rs +0 -591
- slim_bindings-0.5.0/core/service/src/testutils.rs +0 -70
- slim_bindings-0.5.0/core/service/src/transmitter.rs +0 -105
- slim_bindings-0.5.0/python/bindings/README.md +0 -41
- slim_bindings-0.5.0/python/bindings/examples/src/slim_bindings_examples/__init__.py +0 -47
- slim_bindings-0.5.0/python/bindings/examples/src/slim_bindings_examples/common.py +0 -259
- slim_bindings-0.5.0/python/bindings/examples/src/slim_bindings_examples/fire_and_forget.py +0 -201
- slim_bindings-0.5.0/python/bindings/examples/src/slim_bindings_examples/pubsub.py +0 -150
- slim_bindings-0.5.0/python/bindings/examples/src/slim_bindings_examples/request_reply.py +0 -182
- slim_bindings-0.5.0/python/bindings/examples/src/slim_bindings_examples/slim.py +0 -87
- slim_bindings-0.5.0/python/bindings/slim_bindings/__init__.py +0 -712
- slim_bindings-0.5.0/python/bindings/slim_bindings/_slim_bindings.pyi +0 -161
- slim_bindings-0.5.0/python/bindings/src/pysession.rs +0 -208
- slim_bindings-0.5.0/python/bindings/tests/common.py +0 -24
- slim_bindings-0.5.0/python/bindings/tests/conftest.py +0 -39
- slim_bindings-0.5.0/python/bindings/tests/test_bindings.py +0 -366
- slim_bindings-0.5.0/python/bindings/tests/test_fire_forget.py +0 -99
- slim_bindings-0.5.0/python/bindings/tests/test_identity.py +0 -169
- slim_bindings-0.5.0/python/bindings/tests/test_pubsub.py +0 -161
- slim_bindings-0.5.0/python/bindings/tests/test_request_reply.py +0 -94
- slim_bindings-0.5.0/python/bindings/tests/test_streaming.py +0 -149
- slim_bindings-0.5.0/slim_bindings/__init__.py +0 -712
- slim_bindings-0.5.0/slim_bindings/_slim_bindings.pyi +0 -161
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/README.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/builder.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/errors.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/file_watcher.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/testutils.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/auth/src/traits.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/README.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/build.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/proto/hello.proto +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/component/configuration.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/component/id.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/component.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/compression.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/errors.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/headers_middleware.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/helloworld.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/proxy.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/schema/client-config.schema.json +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc/schema/generate_schema.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/grpc.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/lib.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/metadata.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/provider/env.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/provider/file.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/provider/lib.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/provider.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/testutils/helloworld.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/testutils/tower_service.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/testutils.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/tls/client.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/tls/provider.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/src/tls.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/grpc/ca.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/grpc/server.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/grpc/server.key +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/ec256-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/ec256-wrong.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/ec256.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/ec384-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/ec384-wrong.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/ec384.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/eddsa-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/eddsa-wrong.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/eddsa.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/rsa-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/rsa-wrong.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/jwt/rsa.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/testfile +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/ca-1.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/ca-2.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/ca-bad.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/client-1.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/client-1.key +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/client-2.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/client-2.key +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/server-1.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/server-1.key +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/server-2.crt +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/testdata/tls/server-2.key +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/config/tests/tls.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/README.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/build.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/src/api/proto.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/src/api.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/src/errors.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/controller/src/lib.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/benches/pool_benchmark.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/errors.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/forwarder.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/lib.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/messages.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/tables/connection_table.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/tables/errors.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/tables/pool.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/tables/remote_subscription_table.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/datapath/src/tables.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/mls/README.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/mls/src/errors.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/mls/src/identity_provider.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/mls/src/lib.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/mls/src/mls.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/service/README.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/signal/CHANGELOG.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/signal/Cargo.toml +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/signal/README.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/signal/src/lib.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/tracing/README.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/core/tracing/src/utils.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/BUILD.md +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/Cargo.toml +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/build.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/src/bin/stub_gen.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/src/build_info.rs +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/ec256-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/ec256.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/ec384-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/ec384.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/eddsa-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/eddsa.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/rsa-public.pem +0 -0
- {slim_bindings-0.5.0 → slim_bindings-0.6.0}/python/bindings/tests/testdata/rsa.pem +0 -0
|
@@ -29,7 +29,7 @@ dependencies = [
|
|
|
29
29
|
|
|
30
30
|
[[package]]
|
|
31
31
|
name = "agntcy-slim"
|
|
32
|
-
version = "0.
|
|
32
|
+
version = "0.6.0"
|
|
33
33
|
dependencies = [
|
|
34
34
|
"agntcy-slim-config",
|
|
35
35
|
"agntcy-slim-service",
|
|
@@ -51,7 +51,7 @@ dependencies = [
|
|
|
51
51
|
|
|
52
52
|
[[package]]
|
|
53
53
|
name = "agntcy-slim-auth"
|
|
54
|
-
version = "0.3.
|
|
54
|
+
version = "0.3.1"
|
|
55
55
|
dependencies = [
|
|
56
56
|
"agntcy-slim-config",
|
|
57
57
|
"async-trait",
|
|
@@ -102,7 +102,7 @@ dependencies = [
|
|
|
102
102
|
|
|
103
103
|
[[package]]
|
|
104
104
|
name = "agntcy-slim-config"
|
|
105
|
-
version = "0.
|
|
105
|
+
version = "0.4.0"
|
|
106
106
|
dependencies = [
|
|
107
107
|
"agntcy-slim-auth",
|
|
108
108
|
"base64 0.22.1",
|
|
@@ -141,19 +141,24 @@ dependencies = [
|
|
|
141
141
|
|
|
142
142
|
[[package]]
|
|
143
143
|
name = "agntcy-slim-controller"
|
|
144
|
-
version = "0.
|
|
144
|
+
version = "0.4.0"
|
|
145
145
|
dependencies = [
|
|
146
|
+
"agntcy-slim-auth",
|
|
146
147
|
"agntcy-slim-config",
|
|
147
148
|
"agntcy-slim-datapath",
|
|
148
149
|
"agntcy-slim-signal",
|
|
149
150
|
"agntcy-slim-tracing",
|
|
151
|
+
"base64 0.22.1",
|
|
152
|
+
"bincode",
|
|
150
153
|
"drain",
|
|
151
154
|
"h2 0.4.10",
|
|
152
155
|
"parking_lot",
|
|
153
156
|
"prost 0.13.5",
|
|
154
157
|
"protoc-bin-vendored",
|
|
158
|
+
"rand 0.9.1",
|
|
155
159
|
"serde",
|
|
156
160
|
"serde_json",
|
|
161
|
+
"serde_yaml",
|
|
157
162
|
"thiserror 2.0.12",
|
|
158
163
|
"tokio",
|
|
159
164
|
"tokio-stream",
|
|
@@ -167,7 +172,7 @@ dependencies = [
|
|
|
167
172
|
|
|
168
173
|
[[package]]
|
|
169
174
|
name = "agntcy-slim-datapath"
|
|
170
|
-
version = "0.
|
|
175
|
+
version = "0.10.0"
|
|
171
176
|
dependencies = [
|
|
172
177
|
"agntcy-slim-config",
|
|
173
178
|
"agntcy-slim-tracing",
|
|
@@ -196,7 +201,7 @@ dependencies = [
|
|
|
196
201
|
|
|
197
202
|
[[package]]
|
|
198
203
|
name = "agntcy-slim-mls"
|
|
199
|
-
version = "0.1.
|
|
204
|
+
version = "0.1.2"
|
|
200
205
|
dependencies = [
|
|
201
206
|
"agntcy-slim-auth",
|
|
202
207
|
"agntcy-slim-datapath",
|
|
@@ -223,7 +228,7 @@ dependencies = [
|
|
|
223
228
|
|
|
224
229
|
[[package]]
|
|
225
230
|
name = "agntcy-slim-service"
|
|
226
|
-
version = "0.
|
|
231
|
+
version = "0.7.0"
|
|
227
232
|
dependencies = [
|
|
228
233
|
"agntcy-slim-auth",
|
|
229
234
|
"agntcy-slim-config",
|
|
@@ -231,6 +236,7 @@ dependencies = [
|
|
|
231
236
|
"agntcy-slim-datapath",
|
|
232
237
|
"agntcy-slim-mls",
|
|
233
238
|
"async-trait",
|
|
239
|
+
"base64 0.22.1",
|
|
234
240
|
"bincode",
|
|
235
241
|
"dirs",
|
|
236
242
|
"drain",
|
|
@@ -255,7 +261,7 @@ dependencies = [
|
|
|
255
261
|
|
|
256
262
|
[[package]]
|
|
257
263
|
name = "agntcy-slim-tracing"
|
|
258
|
-
version = "0.2.
|
|
264
|
+
version = "0.2.4"
|
|
259
265
|
dependencies = [
|
|
260
266
|
"agntcy-slim-config",
|
|
261
267
|
"once_cell",
|
|
@@ -3760,11 +3766,14 @@ dependencies = [
|
|
|
3760
3766
|
"agntcy-slim",
|
|
3761
3767
|
"agntcy-slim-auth",
|
|
3762
3768
|
"agntcy-slim-config",
|
|
3769
|
+
"agntcy-slim-controller",
|
|
3763
3770
|
"agntcy-slim-datapath",
|
|
3764
3771
|
"agntcy-slim-mls",
|
|
3765
3772
|
"agntcy-slim-service",
|
|
3766
3773
|
"agntcy-slim-signal",
|
|
3774
|
+
"anyhow",
|
|
3767
3775
|
"clap",
|
|
3776
|
+
"prost 0.13.5",
|
|
3768
3777
|
"tokio",
|
|
3769
3778
|
"tracing",
|
|
3770
3779
|
]
|
|
@@ -21,15 +21,15 @@ resolver = "2"
|
|
|
21
21
|
|
|
22
22
|
[workspace.dependencies]
|
|
23
23
|
# Local dependencies
|
|
24
|
-
agntcy-slim = { path = "core/slim", version = "0.
|
|
25
|
-
agntcy-slim-auth = { path = "core/auth", version = "0.3.
|
|
26
|
-
agntcy-slim-config = { path = "core/config", version = "0.
|
|
27
|
-
agntcy-slim-controller = { path = "core/controller", version = "0.
|
|
28
|
-
agntcy-slim-datapath = { path = "core/datapath", version = "0.
|
|
29
|
-
agntcy-slim-mls = { path = "core/mls", version = "0.1.
|
|
30
|
-
agntcy-slim-service = { path = "core/service", version = "0.
|
|
24
|
+
agntcy-slim = { path = "core/slim", version = "0.6.0" }
|
|
25
|
+
agntcy-slim-auth = { path = "core/auth", version = "0.3.1" }
|
|
26
|
+
agntcy-slim-config = { path = "core/config", version = "0.4.0" }
|
|
27
|
+
agntcy-slim-controller = { path = "core/controller", version = "0.4.0" }
|
|
28
|
+
agntcy-slim-datapath = { path = "core/datapath", version = "0.10.0" }
|
|
29
|
+
agntcy-slim-mls = { path = "core/mls", version = "0.1.2" }
|
|
30
|
+
agntcy-slim-service = { path = "core/service", version = "0.7.0" }
|
|
31
31
|
agntcy-slim-signal = { path = "core/signal", version = "0.1.3" }
|
|
32
|
-
agntcy-slim-tracing = { path = "core/tracing", version = "0.2.
|
|
32
|
+
agntcy-slim-tracing = { path = "core/tracing", version = "0.2.4" }
|
|
33
33
|
|
|
34
34
|
anyhow = "1.0.98"
|
|
35
35
|
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: slim-bindings
|
|
3
|
+
Version: 0.6.0
|
|
4
|
+
Classifier: Development Status :: 3 - Alpha
|
|
5
|
+
Classifier: Intended Audience :: Developers
|
|
6
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
7
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Summary: SLIM Rust bindings for Python
|
|
13
|
+
License-Expression: Apache-2.0
|
|
14
|
+
Requires-Python: >=3.9, <4.0
|
|
15
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
16
|
+
Project-URL: Repository, https://github.com/agntcy/slim
|
|
17
|
+
Project-URL: Issues, https://github.com/agntcy/slim/issues
|
|
18
|
+
Project-URL: Changelog, https://github.com/agntcy/slim/blob/main/data-plane/python/bindings/CHANGELOG.md
|
|
19
|
+
|
|
20
|
+
# SLIM Python Bindings
|
|
21
|
+
|
|
22
|
+
High-level asynchronous Python bindings for the SLIM data‑plane service (Rust core).
|
|
23
|
+
They let you embed SLIM directly into your Python application to:
|
|
24
|
+
|
|
25
|
+
- Instantiate a local SLIM service (`Slim.new`)
|
|
26
|
+
- Run a server listener (start / stop a SLIM endpoint)
|
|
27
|
+
- Establish outbound client connections (`connect` / `disconnect`)
|
|
28
|
+
- Create, accept, configure, and delete sessions (Point2Point / Group)
|
|
29
|
+
- Publish / receive messages (point‑to‑point or group (channel) based)
|
|
30
|
+
- Manage routing and subscriptions (add / remove routes, subscribe / unsubscribe)
|
|
31
|
+
- Configure identity & trust (shared secret, static JWT, dynamic signing JWT, JWKS auto‑resolve)
|
|
32
|
+
- Integrate tracing / OpenTelemetry
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Supported Session Types
|
|
37
|
+
|
|
38
|
+
| Type | Description | Sticky Peer | Metadata | MLS (group security) |
|
|
39
|
+
|-------------|------------------------------------------------------------------------------------------|-------------|----------|----------------------|
|
|
40
|
+
| Point2Point | Point-to-point with a fixed destination | Yes | Yes | Yes |
|
|
41
|
+
| Group | Many-to-many via channel/topic name (channel moderator can invite/remove participants) | N/A | Yes | Yes |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Identity & Authentication
|
|
46
|
+
|
|
47
|
+
You can choose among multiple identity provider / verifier strategies:
|
|
48
|
+
|
|
49
|
+
| Provider Variant | Use Case | Notes |
|
|
50
|
+
|--------------------------------------|-----------------------------------------|-------|
|
|
51
|
+
| `PyIdentityProvider.SharedSecret` | Local dev / tests | Symmetric; not for production |
|
|
52
|
+
| `PyIdentityProvider.StaticJwt` | Pre-issued token loaded from file | No key rotation; simple |
|
|
53
|
+
| `PyIdentityProvider.Jwt` | Dynamically signed JWT (private key) | Supports exp, iss, aud, sub, duration |
|
|
54
|
+
| `PyIdentityVerifier.Jwt` | Verifies JWT (public key or JWKS auto) | Optional claim requirements (`require_iss`, etc.) |
|
|
55
|
+
| `PyIdentityVerifier.SharedSecret` | Matches shared secret provider | Symmetric validation |
|
|
56
|
+
|
|
57
|
+
JWKS auto‑resolution (when configured in the verifier with `autoresolve=True`) will:
|
|
58
|
+
1. Try OpenID discovery (`/.well-known/openid-configuration`) for `jwks_uri`
|
|
59
|
+
2. Fallback to `/.well-known/jwks.json`
|
|
60
|
+
3. Cache the key set with a TTL and prefer `kid` match, else algorithm match.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Quick Start
|
|
65
|
+
|
|
66
|
+
### 1. Install
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install slim-bindings
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2. Minimal Receiver Example
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
import asyncio
|
|
76
|
+
import slim_bindings
|
|
77
|
+
|
|
78
|
+
async def main():
|
|
79
|
+
# 1. Create identity (shared secret for demo)
|
|
80
|
+
provider = slim_bindings.PyIdentityProvider.SharedSecret(identity="demo", shared_secret="secret")
|
|
81
|
+
verifier = slim_bindings.PyIdentityVerifier.SharedSecret(identity="demo", shared_secret="secret")
|
|
82
|
+
|
|
83
|
+
local_name = slim_bindings.PyName("org", "namespace", "demo")
|
|
84
|
+
slim = await slim_bindings.Slim.new(local_name, provider, verifier)
|
|
85
|
+
|
|
86
|
+
# 2. (Optionally) connect as a client to a remote endpoint
|
|
87
|
+
# await slim.connect({"endpoint": "http://127.0.0.1:50000", "tls": {"insecure": True}})
|
|
88
|
+
|
|
89
|
+
# 3. (Optionally) run a local server (insecure TLS for local dev)
|
|
90
|
+
# await slim.run_server({"endpoint": "127.0.0.1:40000", "tls": {"insecure": True}})
|
|
91
|
+
|
|
92
|
+
# 4. Wait for inbound session
|
|
93
|
+
print("Waiting for an inbound session...")
|
|
94
|
+
session = await slim.listen_for_session()
|
|
95
|
+
|
|
96
|
+
# 5. Receive one message and reply
|
|
97
|
+
msg_ctx, payload = await session.get_message()
|
|
98
|
+
print("Received:", payload)
|
|
99
|
+
await session.publish_to(msg_ctx, b"echo:" + payload)
|
|
100
|
+
|
|
101
|
+
# 6. Clean shutdown
|
|
102
|
+
await slim.delete_session(session)
|
|
103
|
+
await slim.stop_server("127.0.0.1:40000")
|
|
104
|
+
|
|
105
|
+
asyncio.run(main())
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 3. Outbound Session (PointToPoint)
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
remote = slim_bindings.PyName("org", "namespace", "peer")
|
|
112
|
+
session = await slim.create_session(
|
|
113
|
+
slim_bindings.PySessionConfiguration.PointToPoint(
|
|
114
|
+
peer_name=remote,
|
|
115
|
+
mls_enabled=True,
|
|
116
|
+
metadata={"trace_id": "abc123"},
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
await slim.set_route(remote)
|
|
120
|
+
await session.publish(b"hello")
|
|
121
|
+
ctx, reply = await session.get_message()
|
|
122
|
+
print("Reply:", reply)
|
|
123
|
+
await slim.delete_session(session)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Tracing / Observability
|
|
129
|
+
|
|
130
|
+
Initialize tracing (optionally enabling OpenTelemetry export):
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
await slim_bindings.init_tracing({
|
|
134
|
+
"log_level": "info",
|
|
135
|
+
"opentelemetry": {
|
|
136
|
+
"enabled": True,
|
|
137
|
+
"grpc": {"endpoint": "http://localhost:4317"}
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Installation
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
pip install slim-bindings
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Include as Dependency
|
|
153
|
+
|
|
154
|
+
### With `pyproject.toml`
|
|
155
|
+
|
|
156
|
+
```toml
|
|
157
|
+
[project]
|
|
158
|
+
name = "slim-example"
|
|
159
|
+
version = "0.1.0"
|
|
160
|
+
description = "Python program using SLIM"
|
|
161
|
+
requires-python = ">=3.9"
|
|
162
|
+
dependencies = [
|
|
163
|
+
"slim-bindings>=0.6.0"
|
|
164
|
+
]
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### With Poetry
|
|
168
|
+
|
|
169
|
+
```toml
|
|
170
|
+
[tool.poetry]
|
|
171
|
+
name = "slim-example"
|
|
172
|
+
version = "0.1.0"
|
|
173
|
+
description = "Python program using SLIM"
|
|
174
|
+
|
|
175
|
+
[tool.poetry.dependencies]
|
|
176
|
+
python = ">=3.9,<3.14"
|
|
177
|
+
slim-bindings = ">=0.5.0"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Feature Highlights
|
|
183
|
+
|
|
184
|
+
| Area | Capability |
|
|
185
|
+
|-----------------|------------|
|
|
186
|
+
| Server | `run_server`, `stop_server` |
|
|
187
|
+
| Client | `connect`, `disconnect`, automatic subscribe to local name |
|
|
188
|
+
| Routing | `set_route`, `remove_route` |
|
|
189
|
+
| Subscriptions | `subscribe`, `unsubscribe` |
|
|
190
|
+
| Sessions | `create_session`, `listen_for_session`, `delete_session`, `set_session_config` |
|
|
191
|
+
| Messaging | `publish`, `publish_to`, `get_message` |
|
|
192
|
+
| Identity | Shared secret, static JWT, dynamic JWT signing, JWT verification (public key / JWKS) |
|
|
193
|
+
| Tracing | Structured logs & optional OpenTelemetry export |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Example Programs
|
|
198
|
+
|
|
199
|
+
Complete runnable examples (point2point, group, server) live in the repository:
|
|
200
|
+
|
|
201
|
+
https://github.com/agntcy/slim/tree/slim-v0.5.0/data-plane/python/bindings/examples
|
|
202
|
+
|
|
203
|
+
You can install and invoke them (after building) via:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
slim-bindings-examples point2point ...
|
|
207
|
+
slim-bindings-examples group ...
|
|
208
|
+
slim-bindings-examples slim ...
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## When to Use Each Session Type
|
|
214
|
+
|
|
215
|
+
| Use Case | Recommended Type |
|
|
216
|
+
|----------------------------------|-------------------|
|
|
217
|
+
| Stable peer workflow / stateful | Point2Point |
|
|
218
|
+
| Group chat / fan-out | Group |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Security Notes
|
|
223
|
+
|
|
224
|
+
- Prefer asymmetric JWT-based identity in production.
|
|
225
|
+
- Rotate keys periodically and enable `require_iss`, `require_aud`, `require_sub`.
|
|
226
|
+
- Shared secret is only suitable for local tests and prototypes.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## License
|
|
231
|
+
|
|
232
|
+
Apache-2.0 (see repository for full license text).
|
|
233
|
+
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# SLIM Python Bindings
|
|
2
|
+
|
|
3
|
+
High-level asynchronous Python bindings for the SLIM data‑plane service (Rust core).
|
|
4
|
+
They let you embed SLIM directly into your Python application to:
|
|
5
|
+
|
|
6
|
+
- Instantiate a local SLIM service (`Slim.new`)
|
|
7
|
+
- Run a server listener (start / stop a SLIM endpoint)
|
|
8
|
+
- Establish outbound client connections (`connect` / `disconnect`)
|
|
9
|
+
- Create, accept, configure, and delete sessions (Point2Point / Group)
|
|
10
|
+
- Publish / receive messages (point‑to‑point or group (channel) based)
|
|
11
|
+
- Manage routing and subscriptions (add / remove routes, subscribe / unsubscribe)
|
|
12
|
+
- Configure identity & trust (shared secret, static JWT, dynamic signing JWT, JWKS auto‑resolve)
|
|
13
|
+
- Integrate tracing / OpenTelemetry
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Supported Session Types
|
|
18
|
+
|
|
19
|
+
| Type | Description | Sticky Peer | Metadata | MLS (group security) |
|
|
20
|
+
|-------------|------------------------------------------------------------------------------------------|-------------|----------|----------------------|
|
|
21
|
+
| Point2Point | Point-to-point with a fixed destination | Yes | Yes | Yes |
|
|
22
|
+
| Group | Many-to-many via channel/topic name (channel moderator can invite/remove participants) | N/A | Yes | Yes |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Identity & Authentication
|
|
27
|
+
|
|
28
|
+
You can choose among multiple identity provider / verifier strategies:
|
|
29
|
+
|
|
30
|
+
| Provider Variant | Use Case | Notes |
|
|
31
|
+
|--------------------------------------|-----------------------------------------|-------|
|
|
32
|
+
| `PyIdentityProvider.SharedSecret` | Local dev / tests | Symmetric; not for production |
|
|
33
|
+
| `PyIdentityProvider.StaticJwt` | Pre-issued token loaded from file | No key rotation; simple |
|
|
34
|
+
| `PyIdentityProvider.Jwt` | Dynamically signed JWT (private key) | Supports exp, iss, aud, sub, duration |
|
|
35
|
+
| `PyIdentityVerifier.Jwt` | Verifies JWT (public key or JWKS auto) | Optional claim requirements (`require_iss`, etc.) |
|
|
36
|
+
| `PyIdentityVerifier.SharedSecret` | Matches shared secret provider | Symmetric validation |
|
|
37
|
+
|
|
38
|
+
JWKS auto‑resolution (when configured in the verifier with `autoresolve=True`) will:
|
|
39
|
+
1. Try OpenID discovery (`/.well-known/openid-configuration`) for `jwks_uri`
|
|
40
|
+
2. Fallback to `/.well-known/jwks.json`
|
|
41
|
+
3. Cache the key set with a TTL and prefer `kid` match, else algorithm match.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Quick Start
|
|
46
|
+
|
|
47
|
+
### 1. Install
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pip install slim-bindings
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. Minimal Receiver Example
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
import asyncio
|
|
57
|
+
import slim_bindings
|
|
58
|
+
|
|
59
|
+
async def main():
|
|
60
|
+
# 1. Create identity (shared secret for demo)
|
|
61
|
+
provider = slim_bindings.PyIdentityProvider.SharedSecret(identity="demo", shared_secret="secret")
|
|
62
|
+
verifier = slim_bindings.PyIdentityVerifier.SharedSecret(identity="demo", shared_secret="secret")
|
|
63
|
+
|
|
64
|
+
local_name = slim_bindings.PyName("org", "namespace", "demo")
|
|
65
|
+
slim = await slim_bindings.Slim.new(local_name, provider, verifier)
|
|
66
|
+
|
|
67
|
+
# 2. (Optionally) connect as a client to a remote endpoint
|
|
68
|
+
# await slim.connect({"endpoint": "http://127.0.0.1:50000", "tls": {"insecure": True}})
|
|
69
|
+
|
|
70
|
+
# 3. (Optionally) run a local server (insecure TLS for local dev)
|
|
71
|
+
# await slim.run_server({"endpoint": "127.0.0.1:40000", "tls": {"insecure": True}})
|
|
72
|
+
|
|
73
|
+
# 4. Wait for inbound session
|
|
74
|
+
print("Waiting for an inbound session...")
|
|
75
|
+
session = await slim.listen_for_session()
|
|
76
|
+
|
|
77
|
+
# 5. Receive one message and reply
|
|
78
|
+
msg_ctx, payload = await session.get_message()
|
|
79
|
+
print("Received:", payload)
|
|
80
|
+
await session.publish_to(msg_ctx, b"echo:" + payload)
|
|
81
|
+
|
|
82
|
+
# 6. Clean shutdown
|
|
83
|
+
await slim.delete_session(session)
|
|
84
|
+
await slim.stop_server("127.0.0.1:40000")
|
|
85
|
+
|
|
86
|
+
asyncio.run(main())
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 3. Outbound Session (PointToPoint)
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
remote = slim_bindings.PyName("org", "namespace", "peer")
|
|
93
|
+
session = await slim.create_session(
|
|
94
|
+
slim_bindings.PySessionConfiguration.PointToPoint(
|
|
95
|
+
peer_name=remote,
|
|
96
|
+
mls_enabled=True,
|
|
97
|
+
metadata={"trace_id": "abc123"},
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
await slim.set_route(remote)
|
|
101
|
+
await session.publish(b"hello")
|
|
102
|
+
ctx, reply = await session.get_message()
|
|
103
|
+
print("Reply:", reply)
|
|
104
|
+
await slim.delete_session(session)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Tracing / Observability
|
|
110
|
+
|
|
111
|
+
Initialize tracing (optionally enabling OpenTelemetry export):
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
await slim_bindings.init_tracing({
|
|
115
|
+
"log_level": "info",
|
|
116
|
+
"opentelemetry": {
|
|
117
|
+
"enabled": True,
|
|
118
|
+
"grpc": {"endpoint": "http://localhost:4317"}
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Installation
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
pip install slim-bindings
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Include as Dependency
|
|
134
|
+
|
|
135
|
+
### With `pyproject.toml`
|
|
136
|
+
|
|
137
|
+
```toml
|
|
138
|
+
[project]
|
|
139
|
+
name = "slim-example"
|
|
140
|
+
version = "0.1.0"
|
|
141
|
+
description = "Python program using SLIM"
|
|
142
|
+
requires-python = ">=3.9"
|
|
143
|
+
dependencies = [
|
|
144
|
+
"slim-bindings>=0.6.0"
|
|
145
|
+
]
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### With Poetry
|
|
149
|
+
|
|
150
|
+
```toml
|
|
151
|
+
[tool.poetry]
|
|
152
|
+
name = "slim-example"
|
|
153
|
+
version = "0.1.0"
|
|
154
|
+
description = "Python program using SLIM"
|
|
155
|
+
|
|
156
|
+
[tool.poetry.dependencies]
|
|
157
|
+
python = ">=3.9,<3.14"
|
|
158
|
+
slim-bindings = ">=0.5.0"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Feature Highlights
|
|
164
|
+
|
|
165
|
+
| Area | Capability |
|
|
166
|
+
|-----------------|------------|
|
|
167
|
+
| Server | `run_server`, `stop_server` |
|
|
168
|
+
| Client | `connect`, `disconnect`, automatic subscribe to local name |
|
|
169
|
+
| Routing | `set_route`, `remove_route` |
|
|
170
|
+
| Subscriptions | `subscribe`, `unsubscribe` |
|
|
171
|
+
| Sessions | `create_session`, `listen_for_session`, `delete_session`, `set_session_config` |
|
|
172
|
+
| Messaging | `publish`, `publish_to`, `get_message` |
|
|
173
|
+
| Identity | Shared secret, static JWT, dynamic JWT signing, JWT verification (public key / JWKS) |
|
|
174
|
+
| Tracing | Structured logs & optional OpenTelemetry export |
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Example Programs
|
|
179
|
+
|
|
180
|
+
Complete runnable examples (point2point, group, server) live in the repository:
|
|
181
|
+
|
|
182
|
+
https://github.com/agntcy/slim/tree/slim-v0.5.0/data-plane/python/bindings/examples
|
|
183
|
+
|
|
184
|
+
You can install and invoke them (after building) via:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
slim-bindings-examples point2point ...
|
|
188
|
+
slim-bindings-examples group ...
|
|
189
|
+
slim-bindings-examples slim ...
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## When to Use Each Session Type
|
|
195
|
+
|
|
196
|
+
| Use Case | Recommended Type |
|
|
197
|
+
|----------------------------------|-------------------|
|
|
198
|
+
| Stable peer workflow / stateful | Point2Point |
|
|
199
|
+
| Group chat / fan-out | Group |
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Security Notes
|
|
204
|
+
|
|
205
|
+
- Prefer asymmetric JWT-based identity in production.
|
|
206
|
+
- Rotate keys periodically and enable `require_iss`, `require_aud`, `require_sub`.
|
|
207
|
+
- Shared secret is only suitable for local tests and prototypes.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## License
|
|
212
|
+
|
|
213
|
+
Apache-2.0 (see repository for full license text).
|
|
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.1](https://github.com/agntcy/slim/compare/slim-auth-v0.3.0...slim-auth-v0.3.1) - 2025-10-09
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- implement control plane group management ([#554](https://github.com/agntcy/slim/pull/554))
|
|
15
|
+
- remove bearer auth in favour of static jwt ([#774](https://github.com/agntcy/slim/pull/774))
|
|
16
|
+
|
|
17
|
+
### Other
|
|
18
|
+
|
|
19
|
+
- upgrade to rust toolchain 1.90.0 ([#730](https://github.com/agntcy/slim/pull/730))
|
|
20
|
+
|
|
10
21
|
## [0.3.0](https://github.com/agntcy/slim/compare/slim-auth-v0.2.0...slim-auth-v0.3.0) - 2025-09-17
|
|
11
22
|
|
|
12
23
|
### Added
|