openvibers/openvibe.billing Commits

openvibe-shared v4.126.0 (was v4.124.0) (#208)

OP OpenVibers committed 6 days ago · 77f45b7cb4 · 5 files, +13 −9

* openvibe-shared v4.126.0 (was v4.124.0)

Opened by scripts/pin-bump.js in OpenVibers/OpenVibe.Shared after the v4.126.0 release.

* Merge origin/main into pin-bump/openvibe-shared-v4.126.0

* openvibe-shared v4.126.0 pin, refreshed on top of main

* the summary classifies every field, set or not

openvibe-shared 4.125.0 classifies every field of the schema, set or not, so the classification is no longer empty while nothing is stored. The test asks for empty values instead.

2026-11-07, the openvibe-shared v4.126.0 pin round.

Changes

ddiff --git a/README.md b/README.md
iindex f8999b9..f3917d4 100644
---- a/README.md
++++ b/README.md
@@@ -66,7 +66,7 @@ promo write changes both in one transaction.
- OpenVibe.Network (JWKS for service tokens; SSO with PKCE for the staff console; `identity.subject.resolve` for the Live import)
- OpenVibe.Events (the SDK outbox relay, when `EVENTS_URL` and the OAuth client secret are set)
- the payment providers whose secrets are configured (none in production today)
--- `openvibe-contracts` v0.312.0, `openvibe-sdk` v0.94.0 (service tokens, per-person limits, `openvibe-sdk/db`, `openvibe-sdk/service`, `openvibe-sdk/vibes`), `openvibe-shared` v4.124.0, pinned by release tarball
++- `openvibe-contracts` v0.312.0, `openvibe-sdk` v0.94.0 (service tokens, per-person limits, `openvibe-sdk/db`, `openvibe-sdk/service`, `openvibe-sdk/vibes`), `openvibe-shared` v4.126.0, pinned by release tarball
- **PostgreSQL 18 and Valkey 9** (OpenVibe.Host `roles/data/`, ADR-035): every read and write is async through
`openvibe-sdk/db`; Valkey holds the per-person limit counters (optional: without `VALKEY_URL` they count in the process)
@@@ -515,5 +515,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
<!-- versions:start -->
- openvibe-contracts: v0.312.0
- openvibe-sdk: v0.94.0
--- openvibe-shared: v4.124.0
++- openvibe-shared: v4.126.0
<!-- versions:end -->
ddiff --git a/STATUS.json b/STATUS.json
iindex e78033f..166db6d 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -10,7 +10,7 @@
"deployment": "The money ledger since the cutover of 2026-10-17 04:50-04:56 UTC (BILLING_AUTHORITY=billing in billing.env and live.env): deployed with `sudo ovhost deploy billing`, /opt/openvibe.billing, unit openvibe-billing, API on 127.0.0.1:4600 (loopback only; /api/v1 is denied on the public host). Public at https://billing.openvibe.network: the staff console (Network SSO + PKCE, BILLING_STAFF_SUBJECTS = the owner only), the billing policy (/policy), a person's own Vibes (/api/me/vibes, CORS for OpenVibe's sites), /api/health, /api/ready, /release.json and /webhooks/*. PowerChat deliveries reach /webhooks/powerchat through openvibe.live's /api/powerchat/webhook (proxied by Live's vhost, OpenVibe.Live#172).",
"contracts": "openvibe-contracts v0.312.0",
"sdk": "openvibe-sdk v0.94.0",
-- "shared": "openvibe-shared v4.124.0",
++ "shared": "openvibe-shared v4.126.0",
"notes": "Runtime, journal, adapters, import, reconciliation and the staff console (cashout approve/deny, review queue, reconciliation, freeze, audit log) are built, tested and deployed, with /metrics (loopback only), hourly scheduled reconciliation, EXTERNAL PowerChat receipts (billing.receipt.external, announced for OpenVibe.Tips), overflow guards and serializable settlement (PostgreSQL, ADR-035). The cutover (README runbook, docs/live-cutover.md) ran on 2026-10-17: final import 0 new rows, 0 holds, 0 anomalies; reconciliation OK before and after; Live's money tables are read-only behind a database tripwire. OpenVibe.Tips and OpenVibe.VIP launched right after (VIP checkout open). Still due: a small real PowerChat purchase settling end to end after the cutover. Live's payouts, refunds and plans have no tables of their own; where they map is docs/live-mapping.md.",
"features": [
"append-only double-entry journal in bits and cents, balanced per currency",
ddiff --git a/package-lock.json b/package-lock.json
iindex 521efd1..d6ea089 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -14,7 +14,7 @@
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.94.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.124.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.126.0",
"pg": "^8.23.0"
},
"devDependencies": {
@@@ -1147,9 +1147,9 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "4.124.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.124.0",
-- "integrity": "sha512-L0u70eK/W5njDfFyH/njXA8cWP2POrsIhWlKPngyF2qXLGSo+8Cup/UDzbO+Bo7zFhniI67iuSLPVSQmAdEzfw==",
++ "version": "4.126.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.126.0",
++ "integrity": "sha512-LF1eiR8xaT2wRtNSQ0qvVHu0lo8lfb2jPpRmkUkK8BJjNzF07fxZNuEcO16GIYYpXy7eloIMwu/DHcZwhF/Xtw==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0",
ddiff --git a/package.json b/package.json
iindex 655f5ad..ab7367a 100644
---- a/package.json
++++ b/package.json
@@@ -28,7 +28,7 @@
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.94.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.124.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.126.0",
"pg": "^8.23.0"
},
"engines": {
ddiff --git a/test/owner-inputs.test.js b/test/owner-inputs.test.js
iindex 57d9a8f..ae14c03 100644
---- a/test/owner-inputs.test.js
++++ b/test/owner-inputs.test.js
@@@ -55,7 +55,11 @@ const SECRETS = [PANEL_KEY, LIVE_KEY, BAD_KEY, WEBHOOK];
assert.deepStrictEqual([p['stripe.webhook_secret']['x-required-for'], p['stripe.webhook_secret']['x-owner-input'].test], ['Card payments', true]);
assert.strictEqual(p['stripe.publishable_key']['x-required-for'], undefined, 'optional: today\'s checkout does not need it');
assert.strictEqual(p['stripe.live']['x-danger'], true);
-- assert.deepStrictEqual(r.json.classification, {}, 'nothing stored yet');
++ // The summary classifies every field of the schema, set or not (openvibe-shared 4.125.0), so the
++ // classification is not empty; what must be empty is the stored value.
++ // 2026-11-07, the openvibe-shared v4.126.0 pin round.
++ assert.deepStrictEqual(r.json.values, {}, 'nothing stored yet');
++ for (const k of Object.keys(p)) assert.ok(r.json.classification[k], k + ' is classified before anyone sets it');
assert.strictEqual(r.json.sealed, true);
});