Skip to content

Commit 4c066a4

Browse files
committed
Remove Polar and make PayKit Stripe-only
1 parent 6dac3b5 commit 4c066a4

104 files changed

Lines changed: 2360 additions & 2544 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<h3 align="center">The billing framework for TypeScript</h3>
1515

1616
<p align="center">
17-
Define products in code. Any provider. Gate features. Track usage.
17+
Define plans in code. Gate features. Track usage. Webhooks handled for you.
1818
</p>
1919

2020
<p align="center">
@@ -37,7 +37,6 @@
3737
PayKit is an embedded billing framework for TypeScript apps. It sits inside your app, uses your database, and gives you a single API to manage products, subscriptions, entitlements, and usage billing without touching provider dashboards.
3838

3939
```ts
40-
import { stripe } from "@paykitjs/stripe";
4140
import { createPayKit, feature, plan } from "paykitjs";
4241

4342
const messages = feature({ id: "messages", type: "metered" });
@@ -57,10 +56,10 @@ const pro = plan({
5756
});
5857

5958
export const paykit = createPayKit({
60-
provider: stripe({
59+
stripe: {
6160
secretKey: process.env.STRIPE_SECRET_KEY!,
6261
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
63-
}),
62+
},
6463
database: process.env.DATABASE_URL!,
6564
products: [free, pro],
6665
});

apps/demo/drizzle.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import "dotenv/config";
44
export default defineConfig({
55
dialect: "postgresql",
66
schema: "../../packages/paykit/src/database/schema.ts",
7+
out: "../../packages/paykit/src/database/migrations",
78
dbCredentials: {
8-
url: process.env.POLAR_DATABASE_URL!,
9+
url: process.env.PAYKIT_DATABASE_URL!,
910
},
1011
migrations: {
1112
schema: "public",

apps/demo/next.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { fileURLToPath } from "node:url";
77

88
/** @type {import("next").NextConfig} */
99
const config = {
10-
transpilePackages: ["paykitjs", "@paykitjs/polar", "@paykitjs/stripe", "autumn-js"],
10+
transpilePackages: ["paykitjs", "autumn-js"],
1111
serverExternalPackages: ["pg"],
1212
turbopack: {
1313
root: fileURLToPath(new URL("../..", import.meta.url)),

apps/demo/package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,14 @@
1818
"tunnel": "set -a; [ -f .env ] && . ./.env; set +a; if [ -n \"$CF_TUNNEL_ID\" ]; then cloudflared tunnel --url http://localhost:3000 run \"$CF_TUNNEL_ID\"; fi",
1919
"paykitjs": "bun ../../packages/paykit/src/cli/index.ts",
2020
"typecheck": "tsc --noEmit",
21-
"push": "bun push:auth && bun push:paykit:polar && bun push:paykit:stripe && bun push:autumn",
21+
"push": "bun push:auth && bun push:paykit && bun push:autumn",
2222
"push:auth": "bunx auth migrate --config src/lib/auth.ts --yes",
23-
"push:paykit:polar": "set -a; [ -f .env ] && . ./.env; set +a; if [ -n \"$POLAR_DATABASE_URL\" ] && [ -n \"$POLAR_ACCESS_TOKEN\" ] && [ -n \"$POLAR_WEBHOOK_SECRET\" ]; then bunx paykitjs push --config paykit.polar.config.ts --yes; else printf '%s\\n' 'Skipping PayKit Polar push: provider env incomplete'; fi",
24-
"push:paykit:stripe": "set -a; [ -f .env ] && . ./.env; set +a; if [ -n \"$STRIPE_DATABASE_URL\" ] && [ -n \"$STRIPE_SECRET_KEY\" ] && [ -n \"$STRIPE_WEBHOOK_SECRET\" ]; then bunx paykitjs push --config paykit.stripe.config.ts --yes; else printf '%s\\n' 'Skipping PayKit Stripe push: provider env incomplete'; fi",
23+
"push:paykit": "set -a; [ -f .env ] && . ./.env; set +a; bunx paykitjs push --config paykit.config.ts --yes",
2524
"push:autumn": "set -a; [ -f .env ] && . ./.env; set +a; if [ -n \"$AUTUMN_SECRET_KEY\" ]; then atmn push; else printf '%s\\n' 'Skipping Autumn push: provider env incomplete'; fi",
2625
"db:studio": "drizzle-kit studio"
2726
},
2827
"dependencies": {
2928
"@base-ui/react": "^1.2.0",
30-
"@paykitjs/polar": "workspace:*",
31-
"@paykitjs/stripe": "workspace:*",
3229
"@t3-oss/env-nextjs": "^0.12.0",
3330
"@tanstack/react-query": "^5.69.0",
3431
"@trpc/client": "^11.0.0",

apps/demo/paykit.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { paykit } from "./src/lib/paykit";
2+
3+
export { paykit };
4+
export default paykit;

apps/demo/paykit.polar.config.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

apps/demo/paykit.stripe.config.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

apps/demo/scripts/push-sandbox.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,16 @@ async function main() {
3030
env,
3131
);
3232

33-
if (hasEnv(values, ["POLAR_DATABASE_URL", "POLAR_ACCESS_TOKEN", "POLAR_WEBHOOK_SECRET"])) {
34-
console.log("Push PayKit Polar config");
33+
if (hasEnv(values, ["PAYKIT_DATABASE_URL", "STRIPE_SECRET_KEY", "STRIPE_WEBHOOK_SECRET"])) {
34+
console.log("Push PayKit config");
3535
await runCommand(
3636
"bunx",
37-
["paykitjs", "push", "--config", "paykit.polar.config.ts", "--yes"],
37+
["paykitjs", "push", "--config", "paykit.config.ts", "--yes"],
3838
demoDir,
3939
env,
4040
);
4141
} else {
42-
console.log("Skipping PayKit Polar push: provider env incomplete");
43-
}
44-
45-
if (hasEnv(values, ["STRIPE_DATABASE_URL", "STRIPE_SECRET_KEY", "STRIPE_WEBHOOK_SECRET"])) {
46-
console.log("Push PayKit Stripe config");
47-
await runCommand(
48-
"bunx",
49-
["paykitjs", "push", "--config", "paykit.stripe.config.ts", "--yes"],
50-
demoDir,
51-
env,
52-
);
53-
} else {
54-
console.log("Skipping PayKit Stripe push: provider env incomplete");
42+
console.log("Skipping PayKit push: env incomplete");
5543
}
5644

5745
if (hasEnv(values, ["AUTUMN_SECRET_KEY"])) {

apps/demo/scripts/sandbox.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const sandboxConfig = {
1515
target: "production",
1616
} as const;
1717

18-
export const paykitPackages = ["paykitjs", "@paykitjs/polar", "@paykitjs/stripe"] as const;
18+
export const paykitPackages = ["paykitjs"] as const;
1919

2020
const scriptsDir = fileURLToPath(new URL(".", import.meta.url));
2121

apps/demo/src/app/_components/checkout-page-content.tsx

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,16 @@ import { Separator } from "@/components/ui/separator";
1313
import { Skeleton } from "@/components/ui/skeleton";
1414
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
1515
import { authClient } from "@/lib/auth-client";
16-
import { paykitScenarios } from "@/lib/paykit-scenarios";
17-
import type { PayKitScenario } from "@/lib/paykit-scenarios";
1816
import { api } from "@/trpc/react";
1917

20-
function PayKitTabContent({ scenario }: { scenario: PayKitScenario }) {
18+
function PayKitTabContent() {
2119
return (
22-
<TabsContent value={`paykit-${scenario}`} className="flex flex-col gap-8 pt-4">
23-
<SubscribePanel scenario={scenario} />
20+
<TabsContent value="paykit" className="flex flex-col gap-8 pt-4">
21+
<SubscribePanel />
2422
<Separator />
2523
<section className="flex flex-col gap-3">
2624
<h2 className="text-sm font-medium">Features</h2>
27-
<FeaturesPanel scenario={scenario} />
25+
<FeaturesPanel />
2826
</section>
2927
</TabsContent>
3028
);
@@ -37,14 +35,8 @@ export function CheckoutPageContent() {
3735
const router = useRouter();
3836
const toastShown = useRef(false);
3937

40-
const configuredPaykitScenarios = paykitScenarios.filter(
41-
(scenario) => scenarios.data?.[scenario.id]?.configured,
42-
);
4338
const hasAutumn = scenarios.data?.autumn?.configured === true;
44-
const availableTabs = [
45-
...configuredPaykitScenarios.map((scenario) => scenario.tab),
46-
...(hasAutumn ? ["autumn-stripe"] : []),
47-
];
39+
const availableTabs = ["paykit", ...(hasAutumn ? ["autumn-stripe"] : [])];
4840
const tab = searchParams.get("tab");
4941
const activeTab = tab && availableTabs.includes(tab) ? tab : availableTabs[0];
5042
const setTab = useCallback(
@@ -109,18 +101,6 @@ export function CheckoutPageContent() {
109101
);
110102
}
111103

112-
if (!activeTab) {
113-
return (
114-
<div className="space-y-3">
115-
<h1 className="text-2xl font-semibold tracking-tight">Billing</h1>
116-
<p className="text-muted-foreground text-sm">
117-
No billing providers are configured. Add a complete provider env group and restart the
118-
demo.
119-
</p>
120-
</div>
121-
);
122-
}
123-
124104
return (
125105
<div className="flex flex-col gap-8">
126106
<div className="flex items-center justify-between">
@@ -146,16 +126,10 @@ export function CheckoutPageContent() {
146126
<Separator />
147127
<Tabs value={activeTab} onValueChange={setTab}>
148128
<TabsList>
149-
{configuredPaykitScenarios.map((scenario) => (
150-
<TabsTrigger key={scenario.id} value={scenario.tab}>
151-
{scenario.label}
152-
</TabsTrigger>
153-
))}
129+
<TabsTrigger value="paykit">PayKit</TabsTrigger>
154130
{hasAutumn ? <TabsTrigger value="autumn-stripe">Autumn Stripe</TabsTrigger> : null}
155131
</TabsList>
156-
{configuredPaykitScenarios.map((scenario) => (
157-
<PayKitTabContent key={scenario.id} scenario={scenario.id} />
158-
))}
132+
<PayKitTabContent />
159133
{hasAutumn ? (
160134
<TabsContent value="autumn-stripe" className="flex flex-col gap-8 pt-4">
161135
<AutumnSubscribePanel />

0 commit comments

Comments
 (0)