Releases: 100xPercent/pop-pay-python
Releases · 100xPercent/pop-pay-python
v0.8.6
[0.8.6] - 2026-04-13
Changed
- README cross-link to npm repo: added a note pointing Node.js / JavaScript users to
pop-pay (npm)(npm i -g pop-payorbrew install 100xPercent/tap/pop-pay), noting shared security model and vault format for safe runtime switching. glama.jsonalignment: description and keywords aligned with the CLI-first framing used in the npm repo (maintainer: TPEmist).
Notes
- No source-code changes. Docs / distribution release paired with npm
0.5.6.
v0.6.0 — Credential Vault & Security Hardening
[0.6.0] - 2026-03-31
Security
- Passphrase vault mode: Agent with shell access cannot decrypt vault without knowing the passphrase; passphrase never stored on disk
- TOCTOU injection guard:
inject_payment_infonow verifies the current page domain matches the guardrail-approved vendor before injecting credentials — blocks redirect-to-attacker attacks between approval and injection - SQLite CVV removal:
issued_sealstable no longer storescard_numberorcvvcolumns. Onlymasked_card(e.g.****-****-****-4242) is persisted. An agent with file-read access topop_state.dbcan no longer retrieve real card credentials via SQL. - Vault encryption at rest: New
vault.pyprovides AES-256-GCM encrypted credential storage in~/.config/pop-pay/vault.enc. Key is machine-derived via scrypt; plaintext credentials never touch disk afterpop-init-vaultcompletes. - Injector credential isolation:
inject_payment_info()now receives card credentials as parameters from the in-memoryVirtualSealobject, not by fetching them from the database.get_seal_details()removed entirely. - VirtualSeal repr redaction:
__repr__and__str__onVirtualSealalways emit****-REDACTEDforcard_numberand***forcvv, preventing accidental credential logging. - Core dump prevention:
mcp_server.pydisables core dumps at startup viaresource.setrlimit(RLIMIT_CORE, (0, 0))to prevent credentials appearing in crash dumps.
Added
pop-unlockCLI command: Derives vault key from passphrase and stores in OS keyring; MCP server auto-reads at startup — enables passphrase-protected autonomous sessionspop-init-vault --passphraseflag: Initialize vault with passphrase encryption (PBKDF2-HMAC-SHA256, 600k iterations) for stronger protection than machine-derived keypop_pay/vault.py: AES-256-GCM encrypted credential vault with machine-derived scrypt key, atomic write, and OSS security notice.pop_pay/cli_vault.py: Interactivepop-init-vaultCLI command — prompts for card credentials, encrypts them, optionally wipes.env.pop-init-vaultentry point: New CLI script registered inpyproject.toml.vaultoptional dependency group:pip install 'pop-pay[vault]'pulls incryptography.passphraseoptional dependency group:pip install 'pop-pay[passphrase]'pulls inkeyring.- Cython build pipeline:
_vault_core.pyxCython extension for compiled key derivation; PyPI wheels include compiled.sowith CI-injected secret salt; source builds fall back to_vault_core_fallback.pywith public salt - GitHub Actions
build-wheels.yml: cibuildwheel workflow for multi-platform wheel builds (Linux x86_64/aarch64, macOS x86_64/arm64, Windows) pop-pay init-vault --hardened: Runtime indicator showing whether compiled (PyPI) or OSS salt is in use