Wallet Attached Storage Server
Python server for the Wallet Attached Storage specification, built with FastAPI.
Installation
pip install wallet-attached-storage-server
Usage
# Start the server
uvicorn was_server:app --port 8080
# Or with auto-reload for development
uvicorn was_server:app --reload --port 8080
The server exposes the full WAS API at the root path. Clients authenticate with Cavage draft-12 HTTP Signatures using Ed25519 did:key identifiers.
API
Spaces
| Method | Path | Auth | Description |
|---|---|---|---|
PUT |
/space/{id} |
Yes | Create or update a space |
GET |
/space/{id} |
Yes | Read space metadata |
DELETE |
/space/{id} |
Yes | Delete space and all its resources |
POST |
/spaces/ |
Yes | Create a space (server-generated ID) |
GET |
/spaces/ |
Yes | List spaces you control |
Resources
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/space/{id}/{path} |
No | Read a resource |
PUT |
/space/{id}/{path} |
Yes | Create or update |
POST |
/space/{id}/{path} |
Yes | Create (returns 201) |
DELETE |
/space/{id}/{path} |
Yes | Delete (idempotent) |
Authorization
Each space has a controller field set to a did:key DID. All write operations and space reads require an HTTP Signature whose signing key matches the space controller. Resource reads are unsigned (public).
Storage Backend
The server ships with an in-memory storage backend. The storage layer is defined as a Python protocol, so you can swap in a file, database, or S3 backend by implementing StorageBackend.
Development
uv run ruff check
uv run flake8 src tests
uv run bandit -r src
uv run bandit -r tests -s B101
uv run safety scan
uv run -m pytest -vv --cov=src --cov-report=term
CI runs all of the above on every push and PR (Python 3.11–3.14). To publish a release, tag and push:
git tag -sm "Initial release." "v0.1.0"
git push
Acceptance Tests
The companion client library includes a live test suite that runs against localhost:8080:
# Terminal 1
uv run uvicorn was_server:app --port 8080
# Terminal 2 (in the client repo)
uv run -m pytest tests/test_live.py -vv
References
Metadata
Release files for wallet-attached-storage-server 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| wallet_attached_storage_server-0.1.0.tar.gz | 94.9 kB | Without provenance | Details for wallet_attached_storage_server-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| wallet_attached_storage_server-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for wallet_attached_storage_server-0.1.0-py3-none-any.whl |
Total release size: 104.2 kB
Release files / wallet_attached_storage_server-0.1.0.tar.gz
| Download URL | wallet_attached_storage_server-0.1.0.tar.gz |
|---|---|
| Size | 94.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
163e953e3d72965df100dcdad2a72e7a39baf5add6778314ebab91c5f93a111d
|
|
BLAKE2b-256 checksum How to use checksums |
9babbe1f4e7a0c24dacc682d910eb153a85e3bf165ee5b22b4c13a0a5c703297
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / wallet_attached_storage_server-0.1.0-py3-none-any.whl
| Download URL | wallet_attached_storage_server-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
41cd6fc0a950b4c5c9c031e20bf229b393efd15703f879d37717350951ece74a
|
|
BLAKE2b-256 checksum How to use checksums |
7f2eddf0f5c5bea5519ab752c858cbea3f02012bc46d75e1fe2f9145b55283bd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for wallet-attached-storage-server 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.