Checkout‑Registrierung validiert jetzt die E‑Mail‑Länge, und die Checkout‑Flows sind Paddle‑only: Stripe‑Endpoints/

Services/Helpers sind entfernt, API/Frontend angepasst, Tests auf Paddle umgestellt. Außerdem wurde die CSP gestrafft
  und Stripe‑Texte in den Abandoned‑Checkout‑Mails ersetzt.
This commit is contained in:
Codex Agent
2025-12-18 11:14:42 +01:00
parent 7213aef108
commit 2e4226a838
33 changed files with 314 additions and 1219 deletions

View File

@@ -2194,39 +2194,13 @@ export async function getTenantAddonHistory(page = 1, perPage = 25): Promise<{
return { data: rows, meta };
}
export async function createTenantPackagePaymentIntent(packageId: number): Promise<string> {
const response = await authorizedFetch('/api/v1/tenant/packages/payment-intent', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ package_id: packageId }),
});
const data = await jsonOrThrow<{ client_secret: string }>(
response,
'Failed to create package payment intent'
);
if (!data.client_secret) {
throw new Error('Missing client secret in response');
}
return data.client_secret;
}
export async function completeTenantPackagePurchase(params: {
packageId: number;
paymentMethodId?: string;
paddleTransactionId?: string;
paddleTransactionId: string;
}): Promise<void> {
const { packageId, paymentMethodId, paddleTransactionId } = params;
const { packageId, paddleTransactionId } = params;
const payload: Record<string, unknown> = { package_id: packageId };
if (paymentMethodId) {
payload.payment_method_id = paymentMethodId;
}
if (paddleTransactionId) {
payload.paddle_transaction_id = paddleTransactionId;
}