Skip to main content

Command line wallet tooling built on the pollyweb library.

Project description

pollyweb-cli

pollyweb-cli provides the pw command, a small wallet-style CLI built on top of the pollyweb Python package.

It helps you:

  • create a local PollyWeb key pair
  • bind that identity to a PollyWeb-enabled domain
  • send an echo request to a domain and verify the signed reply
  • send a signed PollyWeb message from a file
  • listen for notifier chat events over AppSync Events
  • send signed shell commands to a remote domain

Install

Install the CLI globally from PyPI with pipx:

pipx install pollyweb-cli

Or install it globally with pip:

python3 -m pip install pollyweb-cli

After installation, the CLI is available as:

pw --help

To confirm which release is installed:

pw --version

For more setup details, see docs/install.md.

Quick Start

Create your local key pair:

pw config

This writes your keys to:

  • ~/.pollyweb/private.pem
  • ~/.pollyweb/public.pem

Bind your wallet to a domain:

pw bind vault.example.com

This sends a signed Bind@Vault request to https://pw.vault.example.com/inbox using the compact public-key value in the request body. When there is no wallet-specific sender yet, the CLI sends From: Anonymous and still omits Schema, then stores the returned bind token in ~/.pollyweb/binds.yaml. Rebinding the same domain replaces the existing bind for that domain unless the server returns a different Schema, in which case both entries are kept.

Open an interactive shell against a domain:

pw shell vault.example.com

Listen for notifier chat events on the configured wallet channel:

pw chat

Override the configured notifier for a single chat session:

pw chat notifier.example.com --debug --test

Publish a one-shot "TEST" event immediately after the websocket connection is acknowledged, then keep listening:

pw chat --test

Send a one-shot echo request and verify the synchronous signed response:

pw echo vault.example.com

This sends a signed Echo@Domain message to https://pw.<domain>/inbox, expects a synchronous PollyWeb message in return, verifies the reply signature using the responding domain's DKIM key, and checks that the response From, To, Subject, and Correlation values match the target domain and the original request.

Send a signed message from a file:

pw msg ./message.yaml

This reads a YAML, JSON, or Python message definition, or you can pass a raw JSON object string or inline Key:Value fields. The CLI signs the message with the configured wallet key, sends it to https://pw.<To>/inbox, and prints the raw synchronous response body.

pw msg '{"To":"vault.example.com","Subject":"Echo@Domain","Body":{"Ping":"pong"}}'
pw msg To:any-domain.org Subject:topic@role DynamicBodyProperty:123
pw msg to:any-domain.dom subject:Echo@Domain --debug

For pw msg, inline header keys like to and subject are matched case-insensitively, and a To domain ending in .dom is expanded to .pollyweb.org before signing and sending.

Run a wrapped message test fixture:

pw test ./test.yaml

This reads a YAML file with Outbound and optional Inbound sections. The CLI sends only Outbound, then if Inbound is present it parses the synchronous JSON response and verifies that the expected Inbound fields appear in the returned payload.

Each command you enter is parsed into a base Command plus an Arguments dictionary, then sent as a signed Shell@Domain message whose From header is set to the first stored bind for that domain. Long flags like --all 123 become {"all":"123"}, short flags like -a 123 become {"a":"123"}, key=value tokens like a=123 become {"a":"123"}, and plain positional arguments remain indexed as {"0":"value"}. pw shell also keeps the last 20 commands for that exact domain in ~/.pollyweb/history/, so you can use the up/down arrows to revisit recent commands. Commands are recorded before the network request is sent, which means failed requests still appear in that domain's history.

To inspect the signed shell request and response for each command as colorized, indented YAML, including the full inbox URL the POST is sent to:

pw shell --debug vault.example.com

Debugging Bind Requests

Use --debug with pw bind to print the outbound request payload, the full inbox URL the POST is sent to, and the inbound response body as colorized, indented YAML:

pw bind --debug vault.example.com

This is useful when you want to inspect the exact message contents being sent or troubleshoot an unexpected server response.

Command Summary

  • pw config generates a PollyWeb key pair in ~/.pollyweb
  • pw config --force replaces an existing key pair
  • pw bind <domain> requests and stores a bind token for a domain
  • pw bind --debug <domain> shows the target inbox URL plus bind request and response payloads as colorized YAML
  • pw echo <domain> sends Echo@Domain and verifies the signed synchronous response
  • pw echo --debug <domain> shows the target inbox URL plus echo request and response payloads as colorized YAML
  • pw msg <message...> sends a signed message from a YAML, JSON, or Python file, a JSON object string, or inline Key:Value fields
  • pw msg --debug <message...> shows the target inbox URL plus message request and response payloads as colorized YAML
  • pw test <path> sends a wrapped Outbound fixture and verifies the returned payload against Inbound
  • pw test --debug <path> shows the target inbox URL plus test request and response payloads as colorized YAML
  • pw chat listens for AppSync Events on the configured notifier and wallet channel
  • pw chat [domain] optionally overrides Helpers.Notifier for that run
  • pw chat --test publishes a "TEST" event immediately after connecting, then listens
  • pw shell <domain> starts an interactive remote shell session
  • pw shell <domain> remembers the last 20 commands per domain for arrow-key navigation
  • pw shell --debug <domain> shows the target inbox URL plus shell request and response payloads as colorized YAML
  • pw --version prints the installed CLI version

For more examples and command behavior, see docs/usage.md and the command-specific guides in docs/commands/.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

pollyweb_cli-0.1.57.tar.gz (42.1 kB view details)

Uploaded Source

Built Distribution

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

pollyweb_cli-0.1.57-py3-none-any.whl (31.2 kB view details)

Uploaded Python 3

File details

Details for the file pollyweb_cli-0.1.57.tar.gz.

File metadata

  • Download URL: pollyweb_cli-0.1.57.tar.gz
  • Upload date:
  • Size: 42.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pollyweb_cli-0.1.57.tar.gz
Algorithm Hash digest
SHA256 26b57c164324efba5ebc6254946e0f5d6410fb064050a3a2a4eb7c15c9e17374
MD5 2a24c9ed63f018d972254760c599ae7e
BLAKE2b-256 593066e83387187455d568d9758d97be700c00224eecdaaa2b4c778dca406634

See more details on using hashes here.

Provenance

The following attestation bundles were made for pollyweb_cli-0.1.57.tar.gz:

Publisher: publish.yml on pollycore/wallet-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pollyweb_cli-0.1.57-py3-none-any.whl.

File metadata

  • Download URL: pollyweb_cli-0.1.57-py3-none-any.whl
  • Upload date:
  • Size: 31.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pollyweb_cli-0.1.57-py3-none-any.whl
Algorithm Hash digest
SHA256 cb68419c88238d53d6ee67ccbc46e064c7474ec45859ec3f230a9f780364282a
MD5 191c91df123907f30e93b8a816ae923b
BLAKE2b-256 b292967c2f9791a6d5af0bbb5c962f141530c1408ba5398af8b1ea24bb9595bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pollyweb_cli-0.1.57-py3-none-any.whl:

Publisher: publish.yml on pollycore/wallet-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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