Skip to content

Releases

v2.1.2

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 30 Sep 10:02

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...
Read more

v2.1.1

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 08 Sep 02:07

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

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 29 Aug 01:05

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

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 23 Aug 17:32

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-version file 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.yml for NPM and PyPI
  • Add continue-on-error to PyPI publish step β€” Manual dispatches no longer fail the pipeline if PyPI is skipped
  • Fix .gitignore queue 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

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 14 Aug 01:33

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)

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 12 Aug 01:10
d2a34a2

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

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 10 Aug 04:39

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

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 10 Aug 03:55
536eedd

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

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 10 Aug 00:43

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 sender mapping for rekeyed accounts by @IcanBENCHurCAT

v1.0.0

Choose a tag to compare

@IcanBENCHurCAT IcanBENCHurCAT released this 10 Aug 00:09

πŸŽ‰ 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