openreceive-server 0.4.4 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08bf7311603d77400f63f99b2ac15650105a25fdeb21ac3f38f8cf2df243f394'
4
- data.tar.gz: 07ff30f8eab72b50544bc4022135dcf9a4d1e80e28e5062ccb22793bf01222fc
3
+ metadata.gz: e2a6f6628a84d20dca3757b9017ba6e40c0fac41e016257e988173533be5d650
4
+ data.tar.gz: 5d9fd1babd45564b31274141c2af4875a339cb21d7fef33997442e6b39b1ee44
5
5
  SHA512:
6
- metadata.gz: 1f3aa5d0622a47af6f2b0d1f40866f2763359564875cbfa7299781e840ee6a503e0e8bae78ce8d8825545f49d19c7c1a8a047b35780368410df65818ec8da3af
7
- data.tar.gz: b7012062378dcbc8da84cd8ed9488c1e9efff9a0e54abd9580e5093cb38617b35760073d0748b1737807364299a3217ed86ad715f8cb8a70cc78ce678bddc501
6
+ metadata.gz: da0988ee975768e373de725c7417c821df8c46d159186e0993ee3b3273f658c54622e21410c7b46baf6b65892155d9c8b29e7343145b83bffc6580a7e453cd42
7
+ data.tar.gz: fb1518e4924dfb4dab17b32178f056ac78a80d849ca6d4e97502da653189e2411e3115167dd14669c7c1800195c31f2d1ffa04f4abb9d2982773d7c662bc31f8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.6 - 2026-09-11
4
+
5
+ Refresh installation and quickstart documentation and package metadata.
6
+ Release in lockstep with openreceive 0.4.6, including the live-price request fix
7
+ that removes obsolete VEF. No server adapter API change.
8
+
9
+ ## 0.4.5 - 2026-09-07
10
+
11
+ Release in lockstep with the Python/PHP publishing workflow fixes and complete
12
+ WooCommerce integration documentation. Shared HTTP golden fixtures now use
13
+ the canonical placeholder definitions. No Ruby public API change.
14
+
3
15
  ## 0.4.4 - 2026-09-07
4
16
 
5
17
  Version lockstep with the 0.4.4 npm release (every checkout image now ships
data/README.md CHANGED
@@ -1,6 +1,41 @@
1
1
  # openreceive-server
2
2
 
3
- Storage-free Ruby service and Rack handler. Configure a receive-only NWC client. The host
3
+ **Accept Bitcoin Lightning payments in Ruby and Rack. Your app, your wallet.**
4
+
5
+ [OpenReceive](https://openreceive.org) brings Lightning checkout to your existing
6
+ Ruby application. Receive payments directly into a wallet you control, while
7
+ keeping your orders, prices, and fulfillment in your own code.
8
+
9
+ OpenReceive supports optional swaps from **USDT, USDC, SOL, and ETH** through
10
+ a configured swap provider. The provider converts the payment to **BTC over
11
+ Lightning**, which settles into the merchant's connected wallet. Available
12
+ assets and networks depend on the provider; swaps are optional.
13
+
14
+ - Create invoices and check payments through a receive-only Nostr Wallet
15
+ Connect (NWC) client.
16
+ - Use the payment service directly or mount the framework-agnostic Rack handler.
17
+ - Reconcile pending payments with shared settlement rules and exact money math.
18
+ - Keep your existing persistence stack, with no separate OpenReceive service
19
+ or database to deploy.
20
+
21
+ **Building with Rails?** Start with
22
+ [`openreceive-rails`](https://github.com/OpenReceive/openreceive/blob/master/packages/ruby/openreceive-rails/README.md): it adds payment storage,
23
+ reconciliation, and an install generator on top of this gem.
24
+
25
+ ## Install
26
+
27
+ Requires Ruby 3.2 or later. Add to your Gemfile and run `bundle install`:
28
+
29
+ ```ruby
30
+ gem "openreceive-server"
31
+ ```
32
+
33
+ For a custom integration, provide your NWC client, payment repository, and
34
+ application hooks. The service itself has no persistence dependency.
35
+
36
+ ## Connect your application
37
+
38
+ Configure a receive-only NWC client. The host
4
39
  authorizes requests, resolves order amounts, commits payment hashes before responding, and
5
40
  consumes at-least-once verified payment events by hash. The service refuses to start when the
6
41
  NWC connection advertises spend methods (`pay_invoice`, `multi_pay_invoice`,
@@ -46,3 +81,12 @@ they store to `service.reconcile_payments({ attempts:, max_pages:, deadline: })`
46
81
  and apply the per-hash results through `on_paid` — `RackApp` deliberately has
47
82
  no built-in hook, and the durable-gate convenience (`OpenReceive.maybe_reconcile!`)
48
83
  ships only with the Rails engine.
84
+
85
+ ## Links
86
+
87
+ - API reference: [Ruby and Rails APIs](https://github.com/OpenReceive/openreceive/blob/master/docs/guides/api-reference.md)
88
+ - Rails quickstart: [Use the engine with built-in persistence](https://github.com/OpenReceive/openreceive/blob/master/docs/guides/quickstart-rails.md)
89
+ - Source and issues: <https://github.com/openreceive/openreceive>
90
+ - Changelog: [CHANGELOG.md](CHANGELOG.md)
91
+
92
+ MIT license.
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OpenReceive
4
4
  module Server
5
- VERSION = "0.4.4"
5
+ VERSION = "0.4.6"
6
6
  end
7
7
  end
@@ -30,6 +30,7 @@ code** (`NWC_URI`).
30
30
  - Rails: [references/rails.md](references/rails.md)
31
31
  - Django: [references/django.md](references/django.md)
32
32
  - Laravel: [references/laravel.md](references/laravel.md)
33
+ - WordPress + WooCommerce: [references/woocommerce.md](references/woocommerce.md) — the packaged gateway and merchant settings.
33
34
  - BTCPay Server: [references/btcpay.md](references/btcpay.md) — a plugin,
34
35
  configured in BTCPay's store UI or Greenfield API; no application code,
35
36
  no npm packages, no gem. The rest of this file is about the library.
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (BTCPay Server)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Connect a BTCPay Server store to a receive-only NWC wallet with the OpenReceive
6
6
  plugin, and optionally let payers pay BTCPay invoices with USDT, USDC, ETH or
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (Django)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a Django project — the app you are already working in. You
6
6
  do not need a copy of the OpenReceive source: the Python package is on PyPI
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (FastAPI)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a FastAPI application — the app you are already working in.
6
6
  You do not need a copy of the OpenReceive source: the engine is on PyPI
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (Fastify)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a Fastify application — the app you are already working in.
6
6
  You do not need a copy of the OpenReceive source: the packages are on npm, and
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (Laravel)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a Laravel application — the app you are already working in.
6
6
  You do not need a copy of the OpenReceive source: the package is on Packagist
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (Next.js)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a Next.js App Router application — the app you are already
6
6
  working in. You do not need a copy of the OpenReceive source: the packages are
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (Node.js)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a Node application — the app you are already working in. You
6
6
  do not need a copy of the OpenReceive source: the packages are on npm, and the
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (PHP)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a PHP application — the app you are already working in. You
6
6
  do not need a copy of the OpenReceive source: the engine is on Packagist
@@ -1,6 +1,6 @@
1
1
  # OpenReceive agent directions (Rails)
2
2
 
3
- These directions describe OpenReceive 0.4.4.
3
+ These directions describe OpenReceive 0.4.6.
4
4
 
5
5
  Add OpenReceive to a Rails application — the app you are already working in. You
6
6
  do not need a copy of the OpenReceive source: the gem is on RubyGems, the
@@ -0,0 +1,176 @@
1
+ # OpenReceive agent directions (WordPress + WooCommerce)
2
+
3
+ These directions describe OpenReceive 0.4.6.
4
+
5
+ Install and configure the OpenReceive gateway in the existing WooCommerce
6
+ store. Preserve its theme, checkout, customer accounts, order model and prices.
7
+ The plugin bundles the PHP engine and checkout assets; the merchant does not
8
+ install npm or Composer packages on the WordPress server.
9
+
10
+ ## Step 0 — inspect configuration
11
+
12
+ Check WordPress, WooCommerce and PHP versions, GMP and sodium availability,
13
+ whether the plugin is installed, and whether the Doctor panel reports the
14
+ receive-only NWC credential as set. Never display its value. For a real store,
15
+ ask the merchant to configure a receive-only wallet if none is available.
16
+ For repository development, use the Docker demo's explicit testkit override.
17
+
18
+ Upload a built plugin archive, not a zip of the source directory. The plugin
19
+ has not yet been accepted into the WordPress.org directory. Configuration and
20
+ the complete quickstart follow below.
21
+
22
+ The plugin owns only its payment-attempt tables in the WordPress database.
23
+ WooCommerce owns orders, totals, stock and email. Do not add an external
24
+ idempotency store, payment database, browser wallet credentials or custom
25
+ fulfillment implementation. Guest return links use WooCommerce's order key;
26
+ the plugin verifies it before issuing an expiring order-bound cookie.
27
+
28
+ Run `wp openreceive doctor` after configuration. Use the documented scheduled
29
+ reconciliation or optional notifications command for offline settlement.
30
+ Manual merchant refunds and provider-managed payer swap refunds are separate
31
+ flows; a receive-only NWC wallet cannot send payments.
32
+
33
+ ## Further reading
34
+
35
+ - [Express Quickstart (Node)](https://openreceive.org/guides/quickstart-node.md)
36
+ - [Fastify Quickstart](https://openreceive.org/guides/quickstart-fastify.md)
37
+ - [FastAPI Quickstart](https://openreceive.org/guides/quickstart-fastapi.md)
38
+ - [Django Quickstart](https://openreceive.org/guides/quickstart-django.md)
39
+ - [Next.js Quickstart](https://openreceive.org/guides/quickstart-next.md)
40
+ - [Rails Quickstart](https://openreceive.org/guides/quickstart-rails.md)
41
+ - [PHP Quickstart (plain PHP)](https://openreceive.org/guides/quickstart-php.md)
42
+ - [Laravel Quickstart](https://openreceive.org/guides/quickstart-laravel.md)
43
+ - [BTCPay Server Quickstart](https://openreceive.org/guides/quickstart-btcpay.md)
44
+ - [BTCPay Plugin Reference](https://openreceive.org/guides/btcpay-reference.md)
45
+ - [Node ORM Recipes](https://openreceive.org/guides/node-orms.md)
46
+ - [Authorization](https://openreceive.org/guides/authorization.md)
47
+ - [Rate Limiting](https://openreceive.org/guides/rate-limiting.md)
48
+ - [Frontend Checkout](https://openreceive.org/guides/frontend-checkout.md)
49
+ - [Checkout UX](https://openreceive.org/guides/checkout-ux.md)
50
+ - [Headless Checkout](https://openreceive.org/guides/headless-checkout.md)
51
+ - [Automated Swaps](https://openreceive.org/guides/automated-swaps.md)
52
+ - [Swap Refunds](https://openreceive.org/guides/swap-refunds.md)
53
+ - [Lightning Swap Connect URI](https://openreceive.org/guides/lightning-swap-connect.md)
54
+ - [Environment Variables](https://openreceive.org/guides/environment-variables.md)
55
+ - [Payment Storage](https://openreceive.org/guides/storage.md)
56
+ - [Deploying OpenReceive](https://openreceive.org/guides/deploying.md)
57
+ - [Testing Your OpenReceive Integration](https://openreceive.org/guides/host-testing.md)
58
+ - [API Reference](https://openreceive.org/guides/api-reference.md)
59
+ - [Security](https://openreceive.org/guides/security.md)
60
+ - [Provider Registry](https://openreceive.org/guides/provider-registry.md)
61
+ - [Price Feeds](https://openreceive.org/guides/price-feeds.md)
62
+ - [React Material UI Recipe](https://openreceive.org/guides/react-material-ui-recipe.md)
63
+ - [Flask Recipe](https://openreceive.org/guides/flask-recipe.md)
64
+ - [Writing Your Own Checkout Route](https://openreceive.org/guides/custom-checkout-route.md)
65
+ - [Agent Directions: Node.js](https://openreceive.org/guides/agent-directions-node.md)
66
+ - [Agent Directions: Fastify](https://openreceive.org/guides/agent-directions-fastify.md)
67
+ - [Agent Directions: FastAPI](https://openreceive.org/guides/agent-directions-fastapi.md)
68
+ - [Agent Directions: Django](https://openreceive.org/guides/agent-directions-django.md)
69
+ - [Agent Directions: Next.js](https://openreceive.org/guides/agent-directions-next.md)
70
+ - [Agent Directions: Rails](https://openreceive.org/guides/agent-directions-rails.md)
71
+ - [Agent Directions: PHP](https://openreceive.org/guides/agent-directions-php.md)
72
+ - [Agent Directions: Laravel](https://openreceive.org/guides/agent-directions-laravel.md)
73
+ - [Agent Directions: BTCPay Server](https://openreceive.org/guides/agent-directions-btcpay.md)
74
+ - [WordPress + WooCommerce Quickstart](https://openreceive.org/guides/quickstart-woocommerce.md)
75
+
76
+ ---
77
+
78
+ ## The quickstart, in full
79
+
80
+ Inlined verbatim so this file needs no network access — follow it once Step 0
81
+ passes. The page it comes from is https://openreceive.org/guides/quickstart-woocommerce.
82
+
83
+ ## WordPress + WooCommerce quickstart
84
+
85
+ Install the built OpenReceive plugin zip through **Plugins → Add New → Upload
86
+ Plugin**, with WooCommerce already active. The source directory needs a build;
87
+ it cannot be uploaded as-is. WordPress.org submission is still pending.
88
+
89
+ Requirements: WordPress 6.6+, WooCommerce 9+, 64-bit PHP 8.2+ with GMP and sodium,
90
+ and MySQL 8 or MariaDB 10.5+. Activation creates payment-attempt tables in the
91
+ existing WordPress database. No separate database or application is required.
92
+
93
+ ### Get the installable archive
94
+
95
+ Use `openreceive-wordpress-<version>.zip` from the selected
96
+ [OpenReceive GitHub release](https://github.com/OpenReceive/openreceive/releases)
97
+ when that asset is listed. A GitHub source-code zip is not the plugin archive.
98
+ If the release does not yet provide a built zip, build it on a development
99
+ machine with Node 22+, PHP 8.2+, Composer and WP-CLI:
100
+
101
+ ```sh
102
+ git clone https://github.com/OpenReceive/openreceive.git
103
+ cd openreceive
104
+ git checkout <release-tag>
105
+ npm ci
106
+ npm run build:packages
107
+ composer install --working-dir=packages/php/wordpress
108
+ npm run release:wordpress:build
109
+ ```
110
+
111
+ Upload the resulting `dist/openreceive-wordpress-<version>.zip`. WP-CLI must be
112
+ on `PATH`, or set `OPENRECEIVE_WP_CLI` to the absolute path of its phar. The
113
+ WordPress server needs neither Node nor Composer: dependencies and checkout
114
+ assets are bundled inside the built plugin.
115
+
116
+ ### Configure the wallet
117
+
118
+ Open **WooCommerce → Settings → Payments → OpenReceive**. Enter a receive-only
119
+ NWC code, save, then enable the gateway. Saving verifies receive permissions
120
+ and fails closed on a spend-capable wallet unless the explicit override is set.
121
+ The password fields never show saved credentials. Values are encrypted using
122
+ keys derived from WordPress's authentication keys; re-enter them after rotating
123
+ those keys.
124
+
125
+ For managed deployments, configure `OPENRECEIVE_NWC_URI` in `wp-config.php` from
126
+ your server's secret environment. It takes precedence over the settings field.
127
+ Optional `OPENRECEIVE_LSC_URI_PRIMARY` and `OPENRECEIVE_LSC_URI_BACKUP` constants
128
+ configure swap providers. Never put these values in browser code or logs.
129
+
130
+ ### Checkout and settlement
131
+
132
+ Both WooCommerce checkout blocks and classic checkout redirect to the order-pay
133
+ page. The plugin reads the amount from `WC_Order`, serves the bundled checkout,
134
+ and authorizes the customer through their account, checkout session or an
135
+ expiring signed cookie issued after verifying the order-pay key. Keep that
136
+ order-pay URL available to customers returning to a pending payment or swap
137
+ refund. The plugin verifies that each requested payment hash belongs to the order.
138
+
139
+ Payment attempts persist before invoice instructions appear. Settlement commits
140
+ once in the payment transaction. WooCommerce's `payment_complete` then handles
141
+ status, stock and emails. A durable order marker lets subsequent requests and
142
+ scheduled passes repair an interruption between settlement and order completion.
143
+
144
+ The checkout polling drives opportunistic reconciliation through the PHP
145
+ engine's shared database gate. Action Scheduler adds a recurring one-minute
146
+ safety net. Configure a system cron to run WordPress scheduled work on stores
147
+ with little traffic; no page visits means WP-Cron alone cannot guarantee prompt
148
+ settlement. Optional process-manager commands:
149
+
150
+ ```sh
151
+ wp openreceive doctor
152
+ wp openreceive reconcile
153
+ wp openreceive notifications
154
+ ```
155
+
156
+ The notifications command runs as a separate process. The Doctor panel in the
157
+ gateway settings reports schema, credential presence, scheduling and attention
158
+ orders. A currency without a usable price feed makes the gateway unavailable.
159
+
160
+ ### Refunds and removal
161
+
162
+ The receive-only wallet cannot send merchant refunds. Make those manually from
163
+ your wallet. Payer swap refunds use the configured provider through the same
164
+ authorized order-pay page; enabling LSC payments commits the shop to keeping
165
+ that recovery path available. See [swap refunds](https://openreceive.org/guides/swap-refunds.md).
166
+
167
+ Deactivation preserves payment records. Deleting the plugin drops its two
168
+ tables only if **Remove data on uninstall** was enabled. WooCommerce orders are
169
+ retained.
170
+
171
+ ### Local example
172
+
173
+ The repository's `examples/wordpress` Docker stack builds the plugin and seeds
174
+ WooCommerce from the shared button catalog. Run `npm run demo wordpress` for
175
+ the real-wallet mode, or use its documented `compose.testkit.yml` override for
176
+ a disposable fake-wallet shop. No testkit routes are registered by default.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openreceive-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenReceive
@@ -15,18 +15,27 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.4.4
18
+ version: 0.4.6
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.4.4
26
- description: 'Server building blocks for OpenReceive: a storage-free Service that
27
- mirrors the Node engine and a framework-agnostic Rack app implementing the shipped
28
- HTTP routes while the host owns order and payment persistence. Receive-only: it
29
- never exposes a spend path and the NWC secret never leaves the server.'
25
+ version: 0.4.6
26
+ description: |
27
+ Accept Bitcoin Lightning payments directly into a wallet you control, from your
28
+ Ruby or Rack application. OpenReceive provides invoice creation, payment checks,
29
+ and settlement reconciliation through a receive-only Nostr Wallet Connect
30
+ (NWC) client. Optional swaps let customers pay with USDT, USDC, SOL, and ETH
31
+ through a configured provider; you receive BTC over Lightning in your wallet.
32
+ Available assets and networks depend on the provider.
33
+
34
+ Bring your own wallet client, authorization, and payment persistence. The service
35
+ and Rack handler fit into your existing application, with no separate OpenReceive
36
+ service or database to deploy. Your app keeps control of orders, prices, and
37
+ fulfillment; wallet credentials stay on the server. Rails developers can use
38
+ openreceive-rails for built-in payment storage and reconciliation.
30
39
  email:
31
40
  - info@openreceive.org
32
41
  executables: []
@@ -64,6 +73,7 @@ files:
64
73
  - skills/integrate-openreceive/references/node.md
65
74
  - skills/integrate-openreceive/references/php.md
66
75
  - skills/integrate-openreceive/references/rails.md
76
+ - skills/integrate-openreceive/references/woocommerce.md
67
77
  homepage: https://openreceive.org
68
78
  licenses:
69
79
  - MIT
@@ -72,7 +82,7 @@ metadata:
72
82
  source_code_uri: https://github.com/openreceive/openreceive
73
83
  changelog_uri: https://github.com/openreceive/openreceive/blob/master/packages/ruby/openreceive-server/CHANGELOG.md
74
84
  bug_tracker_uri: https://github.com/openreceive/openreceive/issues
75
- documentation_uri: https://rubydoc.info/gems/openreceive-server
85
+ documentation_uri: https://github.com/openreceive/openreceive/blob/master/packages/ruby/openreceive-server/README.md
76
86
  rubygems_mfa_required: 'true'
77
87
  rdoc_options: []
78
88
  require_paths:
@@ -90,5 +100,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
100
  requirements: []
91
101
  rubygems_version: 3.6.9
92
102
  specification_version: 4
93
- summary: Storage-free OpenReceive receive-only service and HTTP routes for Ruby.
103
+ summary: Accept Bitcoin Lightning payments in Ruby and Rack. Your app, your wallet.
94
104
  test_files: []