@venturekit-pro/billing 0.0.0-dev.20260701100017 → 0.0.1
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.
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
-- @venturekit/billing — auto-created tables
|
|
2
|
+
-- Run automatically when billing is added to a project via vk migrate up
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS vk_billing_plans (
|
|
5
|
+
id VARCHAR(64) PRIMARY KEY,
|
|
6
|
+
name VARCHAR(200) NOT NULL,
|
|
7
|
+
description TEXT,
|
|
8
|
+
price INTEGER NOT NULL, -- smallest currency unit (cents)
|
|
9
|
+
currency VARCHAR(3) NOT NULL DEFAULT 'USD',
|
|
10
|
+
interval VARCHAR(10) NOT NULL DEFAULT 'month', -- month | year | week | day
|
|
11
|
+
interval_count INTEGER NOT NULL DEFAULT 1,
|
|
12
|
+
trial_days INTEGER DEFAULT 0,
|
|
13
|
+
active BOOLEAN NOT NULL DEFAULT true,
|
|
14
|
+
metadata JSONB,
|
|
15
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
16
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE TABLE IF NOT EXISTS vk_billing_plan_features (
|
|
20
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
21
|
+
plan_id VARCHAR(64) NOT NULL REFERENCES vk_billing_plans(id) ON DELETE CASCADE,
|
|
22
|
+
feature_key VARCHAR(128) NOT NULL, -- e.g. 'seats', 'storage_gb', 'api_calls'
|
|
23
|
+
limit_value INTEGER, -- NULL = unlimited
|
|
24
|
+
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
25
|
+
metadata JSONB,
|
|
26
|
+
UNIQUE(plan_id, feature_key)
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS vk_billing_subscriptions (
|
|
30
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
31
|
+
customer_id VARCHAR(128) NOT NULL,
|
|
32
|
+
plan_id VARCHAR(64) NOT NULL REFERENCES vk_billing_plans(id),
|
|
33
|
+
status VARCHAR(20) NOT NULL DEFAULT 'active', -- active | canceled | past_due | trialing | paused
|
|
34
|
+
current_period_start TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
35
|
+
current_period_end TIMESTAMPTZ NOT NULL,
|
|
36
|
+
cancel_at_period_end BOOLEAN NOT NULL DEFAULT false,
|
|
37
|
+
canceled_at TIMESTAMPTZ,
|
|
38
|
+
trial_start TIMESTAMPTZ,
|
|
39
|
+
trial_end TIMESTAMPTZ,
|
|
40
|
+
metadata JSONB,
|
|
41
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
42
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX idx_vk_billing_subscriptions_customer ON vk_billing_subscriptions(customer_id);
|
|
46
|
+
CREATE INDEX idx_vk_billing_subscriptions_status ON vk_billing_subscriptions(status);
|
|
47
|
+
|
|
48
|
+
CREATE TABLE IF NOT EXISTS vk_billing_invoices (
|
|
49
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
50
|
+
number VARCHAR(50) NOT NULL UNIQUE,
|
|
51
|
+
customer_id VARCHAR(128) NOT NULL,
|
|
52
|
+
subscription_id UUID REFERENCES vk_billing_subscriptions(id),
|
|
53
|
+
status VARCHAR(20) NOT NULL DEFAULT 'draft', -- draft | open | paid | void | uncollectible
|
|
54
|
+
currency VARCHAR(3) NOT NULL DEFAULT 'USD',
|
|
55
|
+
subtotal INTEGER NOT NULL DEFAULT 0,
|
|
56
|
+
tax INTEGER NOT NULL DEFAULT 0,
|
|
57
|
+
total INTEGER NOT NULL DEFAULT 0,
|
|
58
|
+
amount_paid INTEGER NOT NULL DEFAULT 0,
|
|
59
|
+
amount_due INTEGER NOT NULL DEFAULT 0,
|
|
60
|
+
due_date TIMESTAMPTZ,
|
|
61
|
+
paid_at TIMESTAMPTZ,
|
|
62
|
+
pdf_url TEXT,
|
|
63
|
+
metadata JSONB,
|
|
64
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
65
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
CREATE INDEX idx_vk_billing_invoices_customer ON vk_billing_invoices(customer_id);
|
|
69
|
+
CREATE INDEX idx_vk_billing_invoices_status ON vk_billing_invoices(status);
|
|
70
|
+
|
|
71
|
+
CREATE TABLE IF NOT EXISTS vk_billing_invoice_items (
|
|
72
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
73
|
+
invoice_id UUID NOT NULL REFERENCES vk_billing_invoices(id) ON DELETE CASCADE,
|
|
74
|
+
feature_key VARCHAR(128), -- links to vk_billing_plan_features.feature_key
|
|
75
|
+
description TEXT NOT NULL,
|
|
76
|
+
quantity INTEGER NOT NULL DEFAULT 1,
|
|
77
|
+
unit_price INTEGER NOT NULL, -- smallest currency unit
|
|
78
|
+
amount INTEGER NOT NULL,
|
|
79
|
+
tax_rate NUMERIC(5,2),
|
|
80
|
+
tax_amount INTEGER DEFAULT 0,
|
|
81
|
+
metadata JSONB
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
CREATE INDEX idx_vk_billing_invoice_items_invoice ON vk_billing_invoice_items(invoice_id);
|
|
85
|
+
CREATE INDEX idx_vk_billing_invoice_items_feature ON vk_billing_invoice_items(feature_key);
|
package/package.json
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venturekit-pro/billing",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.1",
|
|
4
4
|
"description": "Invoicing, plans, usage tracking, and feature gating for VentureKit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"files": [
|
|
9
|
-
"dist"
|
|
9
|
+
"dist",
|
|
10
|
+
"src/migrations/*.sql"
|
|
10
11
|
],
|
|
12
|
+
"vk": {
|
|
13
|
+
"migrations": "src/migrations"
|
|
14
|
+
},
|
|
11
15
|
"repository": {
|
|
12
16
|
"type": "git",
|
|
13
17
|
"url": "https://github.com/venturekit-dev/venturekit.private.git",
|
|
@@ -26,14 +30,14 @@
|
|
|
26
30
|
}
|
|
27
31
|
},
|
|
28
32
|
"dependencies": {
|
|
29
|
-
"@venturekit/core": "0.0.
|
|
33
|
+
"@venturekit/core": "0.0.1"
|
|
30
34
|
},
|
|
31
35
|
"devDependencies": {
|
|
32
36
|
"@types/node": "^25.6.0",
|
|
33
37
|
"typescript": "^5.3.0"
|
|
34
38
|
},
|
|
35
39
|
"scripts": {
|
|
36
|
-
"build": "tsc",
|
|
40
|
+
"build": "tsc && node -e \"require('fs').cpSync('src/migrations','dist/migrations',{recursive:true})\"",
|
|
37
41
|
"dev": "tsc --watch",
|
|
38
42
|
"clean": "rm -rf dist"
|
|
39
43
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
-- @venturekit/billing — auto-created tables
|
|
2
|
+
-- Run automatically when billing is added to a project via vk migrate up
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS vk_billing_plans (
|
|
5
|
+
id VARCHAR(64) PRIMARY KEY,
|
|
6
|
+
name VARCHAR(200) NOT NULL,
|
|
7
|
+
description TEXT,
|
|
8
|
+
price INTEGER NOT NULL, -- smallest currency unit (cents)
|
|
9
|
+
currency VARCHAR(3) NOT NULL DEFAULT 'USD',
|
|
10
|
+
interval VARCHAR(10) NOT NULL DEFAULT 'month', -- month | year | week | day
|
|
11
|
+
interval_count INTEGER NOT NULL DEFAULT 1,
|
|
12
|
+
trial_days INTEGER DEFAULT 0,
|
|
13
|
+
active BOOLEAN NOT NULL DEFAULT true,
|
|
14
|
+
metadata JSONB,
|
|
15
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
16
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE TABLE IF NOT EXISTS vk_billing_plan_features (
|
|
20
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
21
|
+
plan_id VARCHAR(64) NOT NULL REFERENCES vk_billing_plans(id) ON DELETE CASCADE,
|
|
22
|
+
feature_key VARCHAR(128) NOT NULL, -- e.g. 'seats', 'storage_gb', 'api_calls'
|
|
23
|
+
limit_value INTEGER, -- NULL = unlimited
|
|
24
|
+
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
25
|
+
metadata JSONB,
|
|
26
|
+
UNIQUE(plan_id, feature_key)
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS vk_billing_subscriptions (
|
|
30
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
31
|
+
customer_id VARCHAR(128) NOT NULL,
|
|
32
|
+
plan_id VARCHAR(64) NOT NULL REFERENCES vk_billing_plans(id),
|
|
33
|
+
status VARCHAR(20) NOT NULL DEFAULT 'active', -- active | canceled | past_due | trialing | paused
|
|
34
|
+
current_period_start TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
35
|
+
current_period_end TIMESTAMPTZ NOT NULL,
|
|
36
|
+
cancel_at_period_end BOOLEAN NOT NULL DEFAULT false,
|
|
37
|
+
canceled_at TIMESTAMPTZ,
|
|
38
|
+
trial_start TIMESTAMPTZ,
|
|
39
|
+
trial_end TIMESTAMPTZ,
|
|
40
|
+
metadata JSONB,
|
|
41
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
42
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX idx_vk_billing_subscriptions_customer ON vk_billing_subscriptions(customer_id);
|
|
46
|
+
CREATE INDEX idx_vk_billing_subscriptions_status ON vk_billing_subscriptions(status);
|
|
47
|
+
|
|
48
|
+
CREATE TABLE IF NOT EXISTS vk_billing_invoices (
|
|
49
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
50
|
+
number VARCHAR(50) NOT NULL UNIQUE,
|
|
51
|
+
customer_id VARCHAR(128) NOT NULL,
|
|
52
|
+
subscription_id UUID REFERENCES vk_billing_subscriptions(id),
|
|
53
|
+
status VARCHAR(20) NOT NULL DEFAULT 'draft', -- draft | open | paid | void | uncollectible
|
|
54
|
+
currency VARCHAR(3) NOT NULL DEFAULT 'USD',
|
|
55
|
+
subtotal INTEGER NOT NULL DEFAULT 0,
|
|
56
|
+
tax INTEGER NOT NULL DEFAULT 0,
|
|
57
|
+
total INTEGER NOT NULL DEFAULT 0,
|
|
58
|
+
amount_paid INTEGER NOT NULL DEFAULT 0,
|
|
59
|
+
amount_due INTEGER NOT NULL DEFAULT 0,
|
|
60
|
+
due_date TIMESTAMPTZ,
|
|
61
|
+
paid_at TIMESTAMPTZ,
|
|
62
|
+
pdf_url TEXT,
|
|
63
|
+
metadata JSONB,
|
|
64
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
65
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
CREATE INDEX idx_vk_billing_invoices_customer ON vk_billing_invoices(customer_id);
|
|
69
|
+
CREATE INDEX idx_vk_billing_invoices_status ON vk_billing_invoices(status);
|
|
70
|
+
|
|
71
|
+
CREATE TABLE IF NOT EXISTS vk_billing_invoice_items (
|
|
72
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
73
|
+
invoice_id UUID NOT NULL REFERENCES vk_billing_invoices(id) ON DELETE CASCADE,
|
|
74
|
+
feature_key VARCHAR(128), -- links to vk_billing_plan_features.feature_key
|
|
75
|
+
description TEXT NOT NULL,
|
|
76
|
+
quantity INTEGER NOT NULL DEFAULT 1,
|
|
77
|
+
unit_price INTEGER NOT NULL, -- smallest currency unit
|
|
78
|
+
amount INTEGER NOT NULL,
|
|
79
|
+
tax_rate NUMERIC(5,2),
|
|
80
|
+
tax_amount INTEGER DEFAULT 0,
|
|
81
|
+
metadata JSONB
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
CREATE INDEX idx_vk_billing_invoice_items_invoice ON vk_billing_invoice_items(invoice_id);
|
|
85
|
+
CREATE INDEX idx_vk_billing_invoice_items_feature ON vk_billing_invoice_items(feature_key);
|