openvibers/openvibe.billing Commits

openvibe-shared v4.199.0 (was v4.197.0) (#255)

OP OpenVibers committed 3 days ago · d2836c5672 · 5 files, +130 −10

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

Changes

ddiff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
iindex 850dd6d..a1019ba 100644
---- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
@@@ -14,4 +14,4 @@ jobs:
test: 'eval "$(node_modules/openvibe-sdk/scripts/test-services.sh up)" && npm test && npm run test:pg'
# Secret scan (gitleaks) and dependency audit, shared by every OpenVibers repo (Track Q).
security:
-- uses: OpenVibers/OpenVibe.Shared/.github/workflows/security.yml@e80c595ff3d4bc46b7e0f41fdb040b985885cb30
++ uses: OpenVibers/OpenVibe.Shared/.github/workflows/security.yml@15b927b7d9fe35fe64ee4b7f3b4792b46ebdbddb
ddiff --git a/README.md b/README.md
iindex 20b1720..9158a48 100644
---- a/README.md
++++ b/README.md
@@@ -69,7 +69,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.384.0, `openvibe-sdk` v0.133.0 (service tokens, per-person limits, `openvibe-sdk/db`, `openvibe-sdk/service`, `openvibe-sdk/vibes`), `openvibe-shared` v4.197.0, pinned by release tarball
++- `openvibe-contracts` v0.384.0, `openvibe-sdk` v0.133.0 (service tokens, per-person limits, `openvibe-sdk/db`, `openvibe-sdk/service`, `openvibe-sdk/vibes`), `openvibe-shared` v4.199.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)
@@@ -518,5 +518,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
<!-- versions:start -->
- openvibe-contracts: v0.384.0
- openvibe-sdk: v0.133.0
--- openvibe-shared: v4.197.0
++- openvibe-shared: v4.199.0
<!-- versions:end -->
ddiff --git a/STATUS.json b/STATUS.json
iindex 8ca1b0b..8dc8bc1 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.384.0",
"sdk": "openvibe-sdk v0.133.0",
-- "shared": "openvibe-shared v4.197.0",
++ "shared": "openvibe-shared v4.199.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 1ac531f..c7b80b9 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.384.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.133.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.197.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.199.0",
"pg": "^8.23.0"
},
"devDependencies": {
@@@ -43,6 +43,51 @@
"integrity": "sha512-/B9W4qKSSITDii5nkBCHyPkIkAi+ealUtr1oqBJsLxjSRLka4pxun2VvMNSmcwgAMxgXtQfl0qRv7TE+udPJzg==",
"license": "MIT"
},
++ "node_modules/@jridgewell/gen-mapping": {
++ "version": "0.3.13",
++ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
++ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
++ "license": "MIT",
++ "dependencies": {
++ "@jridgewell/sourcemap-codec": "^1.5.0",
++ "@jridgewell/trace-mapping": "^0.3.24"
++ }
++ },
++ "node_modules/@jridgewell/resolve-uri": {
++ "version": "3.1.2",
++ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
++ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
++ "license": "MIT",
++ "engines": {
++ "node": ">=6.0.0"
++ }
++ },
++ "node_modules/@jridgewell/source-map": {
++ "version": "0.3.11",
++ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
++ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
++ "license": "MIT",
++ "dependencies": {
++ "@jridgewell/gen-mapping": "^0.3.5",
++ "@jridgewell/trace-mapping": "^0.3.25"
++ }
++ },
++ "node_modules/@jridgewell/sourcemap-codec": {
++ "version": "1.6.0",
++ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
++ "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
++ "license": "MIT"
++ },
++ "node_modules/@jridgewell/trace-mapping": {
++ "version": "0.3.31",
++ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
++ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
++ "license": "MIT",
++ "dependencies": {
++ "@jridgewell/resolve-uri": "^3.1.0",
++ "@jridgewell/sourcemap-codec": "^1.4.14"
++ }
++ },
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@@ -56,6 +101,18 @@
"node": ">= 0.6"
}
},
++ "node_modules/acorn": {
++ "version": "8.19.0",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz",
++ "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==",
++ "license": "MIT",
++ "bin": {
++ "acorn": "bin/acorn"
++ },
++ "engines": {
++ "node": ">=0.4.0"
++ }
++ },
"node_modules/ajv": {
"version": "8.20.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
@@@ -138,6 +195,12 @@
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
"license": "BSD-3-Clause"
},
++ "node_modules/buffer-from": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
++ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
++ "license": "MIT"
++ },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@@ -176,6 +239,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
++ "node_modules/clean-css": {
++ "version": "5.3.3",
++ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
++ "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
++ "license": "MIT",
++ "dependencies": {
++ "source-map": "~0.6.0"
++ },
++ "engines": {
++ "node": ">= 10.0"
++ }
++ },
"node_modules/cluster-key-slot": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
@@@ -185,6 +260,12 @@
"node": ">=0.10.0"
}
},
++ "node_modules/commander": {
++ "version": "2.20.3",
++ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
++ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
++ "license": "MIT"
++ },
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@@ -1147,13 +1228,15 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "4.197.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.197.0",
-- "integrity": "sha512-qlZ/S5cHnfeqzUnzuadQc6FrSW6VvRImigBs5LwZA0ydROJMN6WUR4D6PRuWcweksLXEyoqn/tSnLFOx/qRLMA==",
++ "version": "4.199.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.199.0",
++ "integrity": "sha512-xzQFVeNaLuCymN3twCks01EpiWUbxW3Zzc+XE84U3auSSe+NTNTaydLqwi1sf2RTTAKbVBjgC44cbKb2Jm3zjQ==",
"license": "MIT",
"dependencies": {
++ "clean-css": "^5.3.3",
"jsonwebtoken": "^9.0.0",
-- "linkedom": "^0.18.13"
++ "linkedom": "^0.18.13",
++ "terser": "^5.51.2"
},
"bin": {
"openvibe-build-assets": "scripts/build-assets.js"
@@@ -1550,6 +1633,25 @@
"url": "https://github.com/sponsors/ljharb"
}
},
++ "node_modules/source-map": {
++ "version": "0.6.1",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
++ "license": "BSD-3-Clause",
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/source-map-support": {
++ "version": "0.5.21",
++ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
++ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
++ "license": "MIT",
++ "dependencies": {
++ "buffer-from": "^1.0.0",
++ "source-map": "^0.6.0"
++ }
++ },
"node_modules/split2": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
@@@ -1574,6 +1676,24 @@
"node": ">= 0.8"
}
},
++ "node_modules/terser": {
++ "version": "5.51.2",
++ "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz",
++ "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==",
++ "license": "BSD-2-Clause",
++ "dependencies": {
++ "@jridgewell/source-map": "^0.3.3",
++ "acorn": "^8.15.0",
++ "commander": "^2.20.0",
++ "source-map-support": "~0.5.20"
++ },
++ "bin": {
++ "terser": "bin/terser"
++ },
++ "engines": {
++ "node": ">=10"
++ }
++ },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
ddiff --git a/package.json b/package.json
iindex 96aab4a..3b20a99 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.384.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.133.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.197.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.199.0",
"pg": "^8.23.0"
},
"engines": {