Skip to main content

Server implementation for the Wallet Attached Storage specification

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wallet_attached_storage_server-0.1.0.tar.gz (94.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file wallet_attached_storage_server-0.1.0.tar.gz.

File metadata

  • Download URL: wallet_attached_storage_server-0.1.0.tar.gz
  • Upload date:
  • Size: 94.9 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for wallet_attached_storage_server-0.1.0.tar.gz
Algorithm Hash digest
SHA256 163e953e3d72965df100dcdad2a72e7a39baf5add6778314ebab91c5f93a111d
MD5 c95c183197212e5735ef53af0c3c9d33
BLAKE2b-256 9babbe1f4e7a0c24dacc682d910eb153a85e3bf165ee5b22b4c13a0a5c703297

See more details on using hashes here.

File details

Details for the file wallet_attached_storage_server-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: wallet_attached_storage_server-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for wallet_attached_storage_server-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 41cd6fc0a950b4c5c9c031e20bf229b393efd15703f879d37717350951ece74a
MD5 280e2868c11120a261e7c89dd9e807fc
BLAKE2b-256 7f2eddf0f5c5bea5519ab752c858cbea3f02012bc46d75e1fe2f9145b55283bd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page