Repository navigation
Releases
v2.1.2
What's Changed
- π§ Tux: Enforce pnpm exclusivity and node-version in publish workflow by @IcanBENCHurCAT in #187
- β‘ Bolt: Memoize Hono req.json to prevent redundant parsing by @IcanBENCHurCAT in #188
- β‘ Bolt: Optimize base64 padding string lookup overhead by @IcanBENCHurCAT in #189
- π§ Tux: Enforce strict pnpm exclusivity and remove package-lock.json by @IcanBENCHurCAT in #190
- π‘οΈ Sentinel: [CRITICAL] Remove hardcoded mnemonics from Python scripts by @IcanBENCHurCAT in #191
- π§ Tux: Fix invalid GitHub Actions versions by @IcanBENCHurCAT in #192
- β‘ Bolt: Optimize local storage unpinning to avoid O(N) readdir scans by @IcanBENCHurCAT in #202
- chore(deps): bump pnpm/action-setup from 4 to 6 by @dependabot[bot] in #193
- chore(deps): bump actions/setup-node from 4 to 7 by @dependabot[bot] in #194
- chore(deps)(deps): bump @x402/avm from 2.23.0 to 2.25.0 by @dependabot[bot] in #195
- chore(deps): bump docker/metadata-action from 5 to 6 by @dependabot[bot] in #196
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #197
- chore(deps)(deps): bump @x402/hono from 2.23.0 to 2.25.0 by @dependabot[bot] in #198
- chore(deps)(deps): bump @x402/evm from 2.24.0 to 2.25.0 by @dependabot[bot] in #199
- chore(deps): bump @x402/extensions from 2.24.0 to 2.25.0 by @IcanBENCHurCAT in #203
- chore(deps)(deps): bump @x402/core from 2.24.0 to 2.25.0 by @dependabot[bot] in #201
- π§ Tux: Add comprehensive TSDoc comments to public SDK interfaces by @IcanBENCHurCAT in #204
- β‘ Bolt: Optimize Buffer allocations in calculateLocalCid by @IcanBENCHurCAT in #206
- π¨ Palette: Add pre-encoding max payload size validation by @IcanBENCHurCAT in #205
- π§ Tux: Add comprehensive TSDoc comments to SDK Error classes and methods by @IcanBENCHurCAT in #207
- π‘οΈ Sentinel: [HIGH] Fix escrow drain vulnerability via spoofed content-length in pricing calculation by @IcanBENCHurCAT in #208
- fix: point agent-card and OpenAPI discovery URLs at live DuckDNS endpoint by @IcanBENCHurCAT in #209
- π§ Tux: Fix incorrect licenses in SDK package manifests by @IcanBENCHurCAT in #210
- β‘ Bolt: Avoid intermediate array allocation in Set validation loop by @IcanBENCHurCAT in #211
- β‘ Bolt: Cache array representation of registered networks by @IcanBENCHurCAT in #212
- π§ Tux: Add engines field to SDK package.json by @IcanBENCHurCAT in #213
- π‘οΈ Sentinel: [CRITICAL] Fix missing data validation in calculateUsdcPrice by @IcanBENCHurCAT in #214
- β‘ Bolt: Prevent O(N) memory scanning for large payload validation by @IcanBENCHurCAT in #215
- π§ Tux: Add JSDoc to SDK custom Error classes by @IcanBENCHurCAT in #216
- π‘οΈ Sentinel: [MEDIUM] Fix missing input validation on renew endpoint by @IcanBENCHurCAT in #217
- β‘ Bolt: Replace map and slice with pre-allocated arrays in queue loops by @IcanBENCHurCAT in #218
- π§ Tux: Add .editorconfig for consistent code formatting by @IcanBENCHurCAT in #220
- β‘ Bolt: Replace map with for-loop in avmSigner signTransactions by @IcanBENCHurCAT in #227
- π‘οΈ Sentinel: [MEDIUM] Fix missing input validation on renew endpoint by @IcanBENCHurCAT in #226
- π‘ OTel Tracing + Structured JSON Logging Across the Entire Stack by @IcanBENCHurCAT in #219
- π OpenAPI 3.0.2 Specification + Generated Client SDKs (TS + Python) by @IcanBENCHurCAT in #228
- chore(deps)(deps): bump @x402/avm from 2.25.0 to 2.26.0 by @dependabot[bot] in #221
- chore(deps)(deps): bump @x402/evm from 2.25.0 to 2.26.0 by @dependabot[bot] in #222
- chore(deps)(deps): bump @supabase/supabase-js from 2.114.0 to 2.116.0 by @dependabot[bot] in #224
- chore(deps)(deps): bump hono from 4.13.5 to 4.13.8 by @dependabot[bot] in #225
- chore(deps)(deps): bump @types/node from 26.4.1 to 26.6.1 by @dependabot[bot] in #223
- π¨ Palette: Add explicit CID boundary validation to prevent malformed routing errors by @IcanBENCHurCAT in #230
- π§ Tux: Fix broken and invalid GitHub Actions versions by @IcanBENCHurCAT in #231
- π‘οΈ Sentinel: [MEDIUM] Fix type confusion vulnerability in filename parameter by @IcanBENCHurCAT in #232
- π§Ή Code Health: Verify retry attempt count logic in FileQueue by @IcanBENCHurCAT in #233
- β‘ Bolt: optimize USDC asset lookup in opt-in script by @IcanBENCHurCAT in #234
- π‘οΈ Sentinel: [CRITICAL] Remove leaked Supabase URL from runbook by @IcanBENCHurCAT in #235
- chore(deps)(deps): bump @types/node from 26.6.1 to 26.6.2 by @dependabot[bot] in #243
- chore(deps)(deps): bump @x402/extensions from 2.25.0 to 2.27.0 by @dependabot[bot] in #241
- chore(deps)(deps): bump hono from 4.13.8 to 4.13.9 by @dependabot[bot] in #239
- chore(deps): bump actions/setup-node from 4 to 7 by @dependabot[bot] in #238
- chore(deps): bump pnpm/action-setup from 4 to 6 by @dependabot[bot] in #237
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #236
- chore(deps)(deps): bump @supabase/supabase-js from 2.116.0 to 2.117.1 by @dependabot[bot] in #242
- chore(deps)(deps): bump @x402/hono from 2.25.0 to 2.27.0 by @dependabot[bot] in #240
- π Fix overly permissive CORS policy by @IcanBENCHurCAT in #254
- π§ͺ Testing: Add unit tests for successful on-chain refund execution by @IcanBENCHurCAT in #258
- π§Ή Code Health: Replace inline require('crypto') with top-level ESM import by @IcanBENCHurCAT in #257
- π§ͺ Testing: add unit tests for DbManager.findByTxHash by @IcanBENCHurCAT in #256
- π§Ή Refactor long processJobs function in FileQueue by @IcanBENCHurCAT in #255
- β‘ Check in-memory itemsByTxHash cache before DB query in findByTxHash by @IcanBENCHurCAT in #252
- π§Ή Code Health: Disambiguate dotenv config import in src/index.ts by @IcanBENCHurCAT in #250
- π§Ή Code Health: Remove unused setGauge import in metricsMiddleware by @IcanBENCHurCAT in #249
- π§ͺ add test for get_status HTTP error path by @IcanBENCHurCAT in #248
- π§Ή remove commented-out code from Heroku trigger script by @IcanBENCHurCAT in #247
- π¨ Palette: Export constants and enhance validation by @IcanBENCHurCAT in #259
- π§ Tux: Fix invalid GitHub action versions by @IcanBENCHurCAT in #262
- π§ͺ test(python-sdk): add error path test for pin_bytes failure by @IcanBENCHurCAT in #244
- π§ͺ Add unit test for _select_best_option when no accepts match by @IcanBENCHurCAT in #245
- π§ͺ test: add unit tests for...
v2.1.1
v2.1.1 β 2026-09-07
π‘οΈ Security (Sentinel)
- CORS Middleware (#173) β Added global CORS middleware to allow browser-based dApps and agent dashboards to interact with the gateway.
- Secure HTTP Headers β Implemented security response headers to prevent clickjacking, MIME-sniffing, and XSS.
- Input Boundary Validation (#186) β Added strict 25-word boundary checks and try-catch wraps for Algorand mnemonic configuration parsing in SDK.
β‘ Performance (Bolt)
- Base32 CID Encoding Optimization β Uses \Buffer.allocUnsafe\ to avoid zero-fill overhead during high-frequency CID computations.
- File mtime Registry Cache (#185) β Caches local registry reads using filesystem \mtimeMs\ to eliminate blocking \JSON.parse\ calls on repeated reads.
- Zero-Allocation Content-Type Validation β Direct buffer inspection prevents string allocations during magic-byte detection.
- O(1) txHash Lookups β Optimized transaction hash indexing in the memory buffer queue.
- Optimized Array Allocations in DbManager (#164) β Eliminates temporary intermediate arrays during item enumeration.
π§ CI & Publishing (Tux)
- NPM OIDC Trusted Publishing Restored β Standardized on Node 22 and npm 11.5.1 with cryptographic SLSA provenance for tokenless npm publishing.
- Test Suite Expansion β Added configuration boundary tests (\ ests/config.test.ts) and Python SDK unit tests for \pin_file\ and payment selection (101/101 test suite passing).
π¦ Dependency Updates
- Upgraded @x402/core, @x402/evm, @x402/extensions\ to \2.24.0.
- Upgraded @supabase/supabase-js\ to \2.114.0.
- Upgraded \hono\ to \4.13.5.
- Upgraded \οΏ½xios\ to \1.20.0.
v2.1.0
v2.1.0 β 2026-08-28
π‘οΈ Security (Sentinel)
- [CRITICAL] Fix escrow drain via spoofed content-length (#160) β Patches request validation to verify actual body size before issuing payment challenges.
- Fix Path Traversal in Filename Sanitization (#149) β Enforces path normalization and prevents directory escape in file uploads.
- Fix Predictable Temporary File Generation in DbManager β Secure random temporary file generation for local DB sync backups.
- Fix IP Spoofing in Rate Limiter Middleware β Validates trusted proxy headers before extracting client IP addresses.
- Sanitize Exception Logs and Production Error Responses β Prevents sensitive environment or database credentials from leaking in stack traces.
β‘ Performance (Bolt)
- Prevent Cache Stampede in Queue getItems (#159) β In-memory lock and debounce on concurrent queue reads.
- Optimize Timestamp Parsing & Allocations (#158) β Avoids redundant Date object allocations inside high-throughput queue iteration loops.
- Parallelize Storage Unpinning in processExpiredPins (#150) β Unpins expired files asynchronously using Promise.all concurrency pools.
- Stream Disk Files in Queue Worker β Directly streams buffered files to storage endpoints to minimize memory footprint.
- Cache Parsed Timestamps in DB Sync (#144) β Reduces serialization CPU cycles during periodic Supabase synchronizations.
- O(1) Map Lookups for CID Searches (#142) β Replaced O(N) array scans with indexed map lookups in memory registry.
- Zero-Redundant JSON I/O on DB Reads (#139) β Bypasses redundant file reads when memory cache is valid.
π§ CI & Testing (Tux)
- NPM OIDC Trusted Publishing β Configured Node 22 and npm 11.5.1 for tokenless SLSA-provenance publishing.
- PyPI Idempotency β Enabled skip-existing for safe release re-runs.
- Unit Tests for TypeScript SDK (#156) β Added 12 comprehensive unit tests for \IpfsPayToPinClient.
- Unit Tests for Python SDK (#147, #161) β Added pytest suite and
enew_pin\ test coverage. - GitHub Issue Forms (#138) β Upgraded issue templates to GitHub Issue Forms with unified validation.
π¨ SDK & DX (Palette)
- Domain-Specific GatewayError & JSDocs (#140) β Added typed error subclasses and JSDocs for \getPinStatus\ and client operations.
v2.0.2
v2.0.2 β 2026-08-23
π‘οΈ Security (Sentinel)
- Fix Escrow Drain Vulnerability β Patches critical escrow drain vector in x402 challenge handler
- [MEDIUM] Fix missing Content Security Policy header (#114) β Added CSP header via Sentinel middleware
β‘ Performance (Bolt)
- Avoid intermediate allocations β O(1) metrics caching, no more temp arrays in hot path
- Throttle synchronous O(N) cache sweeps in rate limiter β Background sweep instead of blocking requests
- Throttle O(N) map pruning in rate limiter (#111) β Bounded pruning to prevent cache stalls
- Optimize magic byte content type validation (#113) β Direct array lookup instead of regex
- Cache O(1) metrics in queue middleware β Queue size now O(1) lookup
- Optimize circuit breaker queue metrics to O(1) (#90) β Same treatment for circuit breaker
π§ CI/Tooling (Tux)
- Use
.node-versionfile as single source of truth (#117) β Actions now read Node version from file, not hardcoded - Enforce PR Title formats via GitHub Actions (#115) β PR titles must follow persona prefix convention
- Enhance CI workflow to enforce SDK type checking (#107) β Both JS and Python SDKs now type-checked in CI
- Consolidate SDK publishing workflows β Unified
publish.ymlfor NPM and PyPI - Add
continue-on-errorto PyPI publish step β Manual dispatches no longer fail the pipeline if PyPI is skipped - Fix
.gitignorequeue artifacts β Clean up CI queue temp files
π SDK
- Add exports field for explicit ESM and CJS support (#91) β Dual-package resolution now proper, no more CommonJS/ESM interop issues
- Add lint scripts for workspace type verification β Prevents cross-language type drift in monorepo
π¨ Docs / Developer Experience (Palette)
- Add custom errors and JSDoc for
IpfsPayToPinClient(#108) β Better IDE autocomplete and error handling
β¨ Features
- Add pnpm-lock.yaml sync validation (pre-commit hook) (#93) β Prevents lockfile drift between JS/Python envs
- Add OCI container migration & CI/CD blueprints skill β New skill for containerizing services
π¦ Dependency Updates
| Package | From | To |
|---|---|---|
@x402/core |
2.20.0 | 2.22.0 |
@types/node |
22.20.1 | 26.2.0 |
dotenv |
16.6.1 | 17.4.2 |
hono |
4.13.0 | 4.13.3 |
@hono/node-server |
2.0.10 | 2.1.1 |
algosdk |
3.6.0 | 3.7.0 |
vitest |
4.1.10 | 4.1.11 |
tsx |
4.23.5 | 4.23.12 |
@supabase/supabase-js |
2.112.1 | 2.112.3 |
pg / @types/pg |
latest | latest |
GitHub Actions (all bumped to latest)
actions/checkout 4β7 Β· actions/setup-node 4β7 Β· actions/setup-python 5β7 Β· actions/setup-qemu-action 3β4 Β· actions/setup-buildx-action 3β4 Β· docker/build-push-action 5β7 Β· docker/login-action 3β4 Β· gitleaks/gitleaks-action 2β3 Β· pnpm/action-setup 4β6
42 commits since v2.0.1 Β· 16 PRs merged Β· 10 Dependabot bumps
Release v2.0.1
Release v2.0.1 includes rekeyed Algorand account support in Python SDK and AVM x402 payment signature formatting fixes.
v2.0.0 - Multi-Chain Payment Expansion (Base L2, Solana, Algorand, Ethereum L1)
What's Changed
- Multi-Chain x402 Gateway: Full support for Base L2 (\eip155:8453), Solana (\solana:5eykt4...), Algorand (\οΏ½lgorand:mainnet), and Ethereum L1 (\eip155:1) microUSDC payments.
- Gasless EVM Permits (EIP-3009): Base L2 payments use off-chain signed \ ransferWithAuthorization\ permits (.00 ETH gas from clients).
- TypeScript Client SDK v2.0.0 (\ipfs-pay-to-pin-client): Multi-chain signer options and automated low-cost network selection.
- Python Client SDK v2.0.0 (\ipfs-pay-to-pin-client\ on PyPI): Multi-chain signer options for Python scripts & AI agents.
- OCI Infrastructure & Monitoring: 1-click Terraform setup with automated health checks, metric alarms, and operational runbook skill.
v1.3.0: Python PyPI SDK & OIDC Dual-Publish Pipeline
What's New in v1.3.0
- Official Python PyPI Client SDK (\ipfs-pay-to-pin-client): Full x402 challenge parsing, microUSDC transaction signing, rekey detection, and budget limit checks (\max_price_usdc).
- Automated OIDC Dual-Publish Pipeline: GitHub Actions workflow automatically builds and publishes NPM and PyPI packages via trusted publishing upon release.
- Architecture & Constitution Update: Updated ADR 0006 and project constitution to v1.3.0.
v1.2.0
What's Changed
- π§ Tux: Fix CI workflow action versions and pnpm documentation by @IcanBENCHurCAT in #65
- feat(python-sdk): implement Python PyPI client SDK and post-release workflow by @IcanBENCHurCAT in #67
Full Changelog: v1.1.1...v1.2.0
Release v1.1.0: Rekeyed Wallet Support
What's Changed in v1.1.0 π
This release introduces native support for Algorand Rekeyed accounts in the IPFS Pay-to-Pin client SDK!
π Rekeyed Wallet Support
We discovered that the @x402/avm signer wasn't accurately attributing the correct USDC sender if the signing key belonged to an Authorized Rekeyed address instead of the asset-holding wallet.
This caused the transaction simulation to drop with an asset missing error.
The IpfsPayToPinClient SDK configuration now supports a sender parameter:
const client = new IpfsPayToPinClient({
mnemonic: 'your authorized signer 25-word mnemonic or base64 key',
sender: 'YOUR_ASSET_HOLDER_ADDRESS', // The actual USDC vault address
network: 'mainnet'
});When sender is provided, the SDK will intercept the x402 payment challenge and automatically construct a transaction signed by your authorized key but sent from your asset holder wallet, smoothly settling your IPFS pin!
Full Changelog
- fix: Update IpfsPayToPinClient config to support custom
sendermapping for rekeyed accounts by @IcanBENCHurCAT
v1.0.0
π IPFS "Pay-to-Pin" Gateway v1.0.0 β Production Release! π
** Decentralized File Storage Meets Micropayments.**
Gate IPFS pinning using standard HTTP 402 Payment Required challenges settled directly in microUSDC on the Algorand blockchain.
π Highlights & Key Features
β‘ Algorand x402 Micropayments: Instant, low-friction file storage gated by standard @x402/hono headers on Algorand Mainnet & Testnet (.well-known/x402).
π¦ Pluggable Dual-Layer Persistence: Enterprise-grade Supabase PostgreSQL persistence backed by a zero-dependency local JSON/SQLite queue fallback.
π‘οΈ Buffer Queue & Circuit Breaker: Synchronous client HTTP response (201 Created) decoupled from upstream Pinata IPFS pinning β ensuring users never pay for dropped uploads.
β³ 365-Day Retention & Early Renewal: Timeboxed 1-year pin expiration dates with a standard /renew endpoint offering a 50% early renewal discount.
ποΈ 1-Click OCI Always-Free Infrastructure: Complete Terraform module deploying a containerized stack (Hono, Caddy HTTPS, DuckDNS DDNS, automated Let's Encrypt SSL certificates) on Oracle Cloud Always-Free tier.
π 1-Line Client SDK: Released ipfs-pay-to-pin-client@1.0.0 on npm for instant integration into node/browser dApps.
π οΈ What's Changed (Categorized & Condensed)
π Features & Architecture
x402 & Algorand Core: Implemented microUSDC payment verification engine, x402 challenge generation, and CAIP-2 chain network registration (#2, #5, #49, #50).
IPFS & Buffer Queue: Implemented Pinata pinning adapter, local buffer queue, circuit breaker, and deterministic local IPFS CID calculation (#3, #4, #8).
Retention & Renewals: Added 365-day timeboxed pinning and early retention renewal endpoint (#24).
Pluggable DB & WebSockets: Implemented Supabase PostgreSQL adapter with local fallback and global WebSocket polyfills (#7, #63).
Client SDK: Introduced 1-line JS/TS client library published directly to npm (#11, #25, #28).
β‘ Performance Optimizations
Memory & Storage: O(1) Base64 length calculation, optimized in-memory queue metrics caching, eliminated intermediate array allocations, and stripped synchronous fs.existsSync calls from hot paths (#12, #16, #22, #26, #32, #36).
π‘οΈ Security & Hardening
Header & Key Protection: Fixed escrow drain vector via header spoofing, sanitized fallback mnemonics, fixed random number generators, enforced HSTS, and removed hardcoded credentials (#18, #20, #23, #27, #31, #35, #56, #61).
Reliability & Crash Resilience: Prevented Heroku H10/boot crashes by wrapping x402 router configuration and registering global uncaught exception handlers (#33, #37, #48).
ποΈ Infrastructure, DevOps & Maintenance
Infrastructure: Added 1-Click OCI Terraform deployment with Docker Compose, Caddy reverse proxy, and DuckDNS DDNS (#30, #57).
Workflows & Ecosystem: Migrated workspace to pnpm, added Dependabot, hardened CI workflows, added SECURITY.md, and updated core dependencies (hono, @x402/hono, @supabase/supabase-js, typescript) (#13, #14, #15, #21, #29, #34, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #58, #62).
π€ New Contributors
@IcanBENCHurCAT made their first contribution in #1! π
Full Changelog: v0.1.1...v1.0.0