feat: dashboard v2, esm, upgrades (#211)

* esm

* wip

* wip

* wip

* wip

* wip

* wip

* subscription notice

* wip

* wip

* wip

* fix envs

* fix: update docker build

* fix

* esm/types

* delete dashboard :D

* add patches to dockerfiles

* update packages + catalogs + ts

* wip

* remove native libs

* ts

* improvements

* fix redirects and fetching session

* try fix favicon

* fixes

* fix

* order and resize reportds within a dashboard

* improvements

* wip

* added userjot to dashboard

* fix

* add op

* wip

* different cache key

* improve date picker

* fix table

* event details loading

* redo onboarding completely

* fix login

* fix

* fix

* extend session, billing and improve bars

* fix

* reduce price on 10M
This commit is contained in:
Carl-Gerhard Lindesvärd
2025-10-16 12:27:44 +02:00
committed by GitHub
parent 436e81ecc9
commit 81a7e5d62e
741 changed files with 32695 additions and 16996 deletions

View File

@@ -1,22 +1,23 @@
{
"name": "@openpanel/payments",
"version": "0.0.1",
"type": "module",
"main": "index.ts",
"scripts": {
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@polar-sh/sdk": "^0.26.1"
"@polar-sh/sdk": "^0.35.4"
},
"devDependencies": {
"@openpanel/db": "workspace:*",
"@openpanel/tsconfig": "workspace:*",
"@types/inquirer": "^9.0.7",
"@types/inquirer-autocomplete-prompt": "^3.0.3",
"@types/node": "20.14.8",
"@types/react": "^18.2.0",
"@types/node": "catalog:",
"@types/react": "catalog:",
"inquirer": "^9.3.5",
"inquirer-autocomplete-prompt": "^3.0.1",
"typescript": "^5.2.2"
"typescript": "catalog:"
}
}

View File

@@ -1,10 +1,8 @@
import { db } from '@openpanel/db';
import { Polar } from '@polar-sh/sdk';
import type { ProductCreate } from '@polar-sh/sdk/models/components/productcreate';
import inquirer from 'inquirer';
import inquirerAutocomplete from 'inquirer-autocomplete-prompt';
import { PRICING, getProducts, getSuccessUrl, polar } from '..';
import { formatEventsCount } from './create-products';
import { getSuccessUrl } from '..';
// Register the autocomplete prompt
inquirer.registerPrompt('autocomplete', inquirerAutocomplete);
@@ -222,6 +220,7 @@ async function main() {
});
const checkoutLink = await polar.checkoutLinks.create({
paymentProcessor: 'stripe',
productId: product.id,
allowDiscountCodes: false,
metadata: {

View File

@@ -1,5 +1,6 @@
import { Polar } from '@polar-sh/sdk';
import type { ProductCreate } from '@polar-sh/sdk/models/components/productcreate';
import type { Product } from '@polar-sh/sdk/dist/esm/models/components/product';
import type { ProductCreate } from '@polar-sh/sdk/dist/esm/models/components/productcreate';
import inquirer from 'inquirer';
import { PRICING } from '../';
@@ -69,7 +70,7 @@ async function main() {
const isDry = process.argv.includes('--dry');
const products = await getProducts();
const createProducts = [];
const createProducts: Product[] = [];
for (const price of PRICING) {
if (price.price === 0) {
const exists = products.find(

View File

@@ -50,13 +50,13 @@ export async function createPortal({
}
export async function createCheckout({
priceId,
productId,
organizationId,
projectId,
user,
ipAddress,
}: {
priceId: string;
productId: string;
organizationId: string;
projectId?: string;
user: {
@@ -68,9 +68,10 @@ export async function createCheckout({
ipAddress: string;
}) {
return polar.checkouts.create({
productPriceId: priceId,
// productPriceId: priceId,
products: [productId],
successUrl: getSuccessUrl(
process.env.NEXT_PUBLIC_DASHBOARD_URL!,
process.env.DASHBOARD_URL || process.env.NEXT_PUBLIC_DASHBOARD_URL!,
organizationId,
projectId,
),
@@ -90,7 +91,6 @@ export async function cancelSubscription(subscriptionId: string) {
id: subscriptionId,
subscriptionUpdate: {
cancelAtPeriodEnd: true,
revoke: null,
},
});
} catch (error) {
@@ -110,7 +110,6 @@ export function reactivateSubscription(subscriptionId: string) {
id: subscriptionId,
subscriptionUpdate: {
cancelAtPeriodEnd: false,
revoke: null,
},
});
}

View File

@@ -26,7 +26,7 @@ export const PRICING: IPrice[] = [
},
{ price: 180, events: 2_500_000 },
{ price: 250, events: 5_000_000 },
{ price: 400, events: 10_000_000 },
{ price: 300, events: 10_000_000 },
];
export const FREE_PRODUCT_IDS = [

View File

@@ -1,12 +1,16 @@
{
"extends": "@openpanel/tsconfig/base.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
},
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"outDir": "./dist",
"rootDir": "./src",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"resolveJsonModule": true,
"allowJs": true
},
"include": ["."],
"exclude": ["node_modules"]
"include": ["src/**/*"]
}