@softure-ai/billing 0.1.5 → 0.1.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.
- package/CHANGELOG.md +10 -0
- package/README.md +1 -5
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/next/context.js +2 -2
- package/dist/next/context.js.map +1 -1
- package/module.json +2 -2
- package/package.json +6 -2
- package/src/index.ts +2 -2
- package/src/next/context.ts +2 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Newest first. Each version lists what changed for an app that uses `@softure-ai/billing`. When an app has run a version in
|
|
4
|
+
production, the version gets a line `verified in: <app>@<commit>` ([docs/05](../../docs/05-adoption-playbook.md),
|
|
5
|
+
"Definition of done"). Versions before the first one below are described in their GitHub Releases (`billing@x.y.z`).
|
|
6
|
+
|
|
7
|
+
## 0.1.6
|
|
8
|
+
|
|
9
|
+
- `module.json` names `mailing` and `ops` as optional dependencies.
|
|
10
|
+
- Adapters and commands use the configured database handle; `@softure-ai/ui` is a peer dependency.
|
package/README.md
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
# @softure-ai/billing
|
|
2
2
|
|
|
3
|
-
**
|
|
4
|
-
and the manual adapter (MO-2); Stripe Checkout with verified webhooks and refunds (MO-3); stored
|
|
5
|
-
invoice requests, recorded manual grants with revoke and an account history (FU-9); reminder mail
|
|
6
|
-
before and after access ends (FU-6) · depends on: core, db, ui, security, auth (mailing optional, for
|
|
7
|
-
`@softure-ai/billing/mailing`)
|
|
3
|
+
**Depends on:** core, db, ui, security, auth (mailing optional, for `@softure-ai/billing/mailing`).
|
|
8
4
|
|
|
9
5
|
Decides whether an account may still write: a trial every account starts with, paid access (dated
|
|
10
6
|
or lifetime) and a read-only state once both end. It replaces FIRE_TRACKER's access logic
|
package/dist/index.js
CHANGED
|
@@ -25,8 +25,8 @@ export const BILLING_RATE_LIMIT_BUCKETS = {
|
|
|
25
25
|
export const billing = defineModule({
|
|
26
26
|
manifest: {
|
|
27
27
|
id: MODULE_ID,
|
|
28
|
-
version: "0.1.
|
|
29
|
-
dependsOn: { security: "^0.1.0", auth: "^0.1.0" },
|
|
28
|
+
version: "0.1.6",
|
|
29
|
+
dependsOn: { security: "^0.1.0", auth: "^0.1.0", mailing: "^0.1.0?", ops: "^0.1.0?" },
|
|
30
30
|
dbSchema: "billing",
|
|
31
31
|
tables: ["entitlements", "payments", "payment_requests", "manual_grants"],
|
|
32
32
|
env: [
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,iGAAiG;AACjG,yFAAyF;AACzF,wFAAwF;AACxF,oGAAoG;AACpG,2FAA2F;AAC3F,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;CAC1C,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC;IAClC,QAAQ,EAAE;QACR,EAAE,EAAE,SAAS;QACb,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/next/context.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// undeclared `adminRole`) fails on the first one.
|
|
4
4
|
import { systemClock } from "@softure-ai/core";
|
|
5
5
|
import { getSoftureConfig } from "@softure-ai/core/next";
|
|
6
|
-
import {
|
|
6
|
+
import { getConfiguredDatabase } from "@softure-ai/db";
|
|
7
7
|
import { assertAdminRoleDeclared } from "../server/setup.js";
|
|
8
8
|
export async function getBillingContext(config = getSoftureConfig()) {
|
|
9
9
|
assertAdminRoleDeclared(config);
|
|
@@ -11,7 +11,7 @@ export async function getBillingContext(config = getSoftureConfig()) {
|
|
|
11
11
|
// Unreachable for a validated config: the module has a database schema.
|
|
12
12
|
throw new Error("@softure-ai/billing: softure.config.ts has no database; billing needs one");
|
|
13
13
|
}
|
|
14
|
-
const { db } = await
|
|
14
|
+
const { db } = await getConfiguredDatabase(config.database);
|
|
15
15
|
return { db, clock: systemClock, config };
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=context.js.map
|
package/dist/next/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/next/context.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,6FAA6F;AAC7F,kDAAkD;AAClD,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/next/context.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,6FAA6F;AAC7F,kDAAkD;AAClD,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAwB,gBAAgB,EAAE;IAChF,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,wEAAwE;QACxE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC"}
|
package/module.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "billing",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"dependsOn": { "security": "^0.1.0", "auth": "^0.1.0" },
|
|
3
|
+
"version": "0.1.6",
|
|
4
|
+
"dependsOn": { "security": "^0.1.0", "auth": "^0.1.0", "mailing": "^0.1.0?", "ops": "^0.1.0?" },
|
|
5
5
|
"dbSchema": "billing",
|
|
6
6
|
"tables": ["entitlements", "payments", "payment_requests", "manual_grants"],
|
|
7
7
|
"env": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softure-ai/billing",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "SOFTURE AI billing module: trial, paid and read-only entitlements from a pure state machine, billing.entitlements apart from auth.users, a write guard for server actions, access badge and notice components, a privacy contributor, reminder mail before access ends over @softure-ai/mailing, manual invoice requests handed to the owner once and expired after a configurable age, grant-plan and revoke-grant ops scripts, and import-entitlements and pin-trials ops scripts for accounts that exist before billing is turned on.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
17
|
"dist",
|
|
18
|
+
"CHANGELOG.md",
|
|
18
19
|
"src",
|
|
19
20
|
"!src/**/*.test.ts",
|
|
20
21
|
"!src/**/*.test.tsx",
|
|
@@ -66,15 +67,18 @@
|
|
|
66
67
|
"@softure-ai/db": "^0.1.0",
|
|
67
68
|
"@softure-ai/ops": "^0.1.0",
|
|
68
69
|
"@softure-ai/security": "^0.1.0",
|
|
69
|
-
"@softure-ai/ui": "^0.1.0",
|
|
70
70
|
"zod": "^4.6.5"
|
|
71
71
|
},
|
|
72
72
|
"peerDependencies": {
|
|
73
73
|
"@softure-ai/mailing": "^0.1.0",
|
|
74
|
+
"@softure-ai/ui": "^0.1.0",
|
|
74
75
|
"drizzle-orm": "^0.45.2",
|
|
75
76
|
"next": "^16.0.0",
|
|
76
77
|
"react": "^19.0.0"
|
|
77
78
|
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@softure-ai/ui": "^0.1.7"
|
|
81
|
+
},
|
|
78
82
|
"peerDependenciesMeta": {
|
|
79
83
|
"@softure-ai/mailing": {
|
|
80
84
|
"optional": true
|
package/src/index.ts
CHANGED
|
@@ -28,8 +28,8 @@ export const BILLING_RATE_LIMIT_BUCKETS = {
|
|
|
28
28
|
export const billing = defineModule({
|
|
29
29
|
manifest: {
|
|
30
30
|
id: MODULE_ID,
|
|
31
|
-
version: "0.1.
|
|
32
|
-
dependsOn: { security: "^0.1.0", auth: "^0.1.0" },
|
|
31
|
+
version: "0.1.6",
|
|
32
|
+
dependsOn: { security: "^0.1.0", auth: "^0.1.0", mailing: "^0.1.0?", ops: "^0.1.0?" },
|
|
33
33
|
dbSchema: "billing",
|
|
34
34
|
tables: ["entitlements", "payments", "payment_requests", "manual_grants"],
|
|
35
35
|
env: [
|
package/src/next/context.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// undeclared `adminRole`) fails on the first one.
|
|
4
4
|
import { systemClock, type SoftureConfig } from "@softure-ai/core";
|
|
5
5
|
import { getSoftureConfig } from "@softure-ai/core/next";
|
|
6
|
-
import {
|
|
6
|
+
import { getConfiguredDatabase } from "@softure-ai/db";
|
|
7
7
|
import type { BillingContext } from "../server/entitlements.js";
|
|
8
8
|
import { assertAdminRoleDeclared } from "../server/setup.js";
|
|
9
9
|
|
|
@@ -13,6 +13,6 @@ export async function getBillingContext(config: SoftureConfig = getSoftureConfig
|
|
|
13
13
|
// Unreachable for a validated config: the module has a database schema.
|
|
14
14
|
throw new Error("@softure-ai/billing: softure.config.ts has no database; billing needs one");
|
|
15
15
|
}
|
|
16
|
-
const { db } = await
|
|
16
|
+
const { db } = await getConfiguredDatabase(config.database);
|
|
17
17
|
return { db, clock: systemClock, config };
|
|
18
18
|
}
|