This commit is contained in:
ct
2025-07-03 01:23:15 +08:00
parent db892fc4f5
commit 2f9f34ebc7
3 changed files with 142 additions and 184 deletions

View File

@@ -12,179 +12,136 @@ post {
body:json { body:json {
{ {
"id": "evt_1Rg71IEEXQJo9EEOmxJtfwVm", "id": "evt_1RgRPrEEXQJo9EEOWggvNEHe",
"object": "event", "object": "event",
"api_version": "2025-05-28.basil", "api_version": "2025-05-28.basil",
"created": 1751387215, "created": 1751465619,
"data": { "data": {
"object": { "object": {
"id": "in_1Rg71FEEXQJo9EEOmxbGjtdH", "id": "cs_test_a1RMSyzQu5Mk2cZYoAYLOCV9hfoc5z9RuYdE4jLY2htoizGr1AJZeAcnDh",
"object": "invoice", "object": "checkout.session",
"account_country": "MY", "adaptive_pricing": {
"account_name": "MEMEAIGEN sandbox", "enabled": true
"account_tax_ids": null, },
"amount_due": 400, "after_expiration": null,
"amount_overpaid": 0, "allow_promotion_codes": null,
"amount_paid": 400, "amount_subtotal": 400,
"amount_remaining": 0, "amount_total": 400,
"amount_shipping": 0,
"application": null,
"attempt_count": 1,
"attempted": true,
"auto_advance": false,
"automatic_tax": { "automatic_tax": {
"disabled_reason": null,
"enabled": false, "enabled": false,
"liability": null, "liability": null,
"provider": null, "provider": null,
"status": null "status": null
}, },
"automatically_finalizes_at": null, "billing_address_collection": null,
"billing_reason": "subscription_create", "cancel_url": "https://memeaigen.test/subscribe/cancelled?session_id={CHECKOUT_SESSION_ID}",
"collection_method": "charge_automatically", "client_reference_id": null,
"created": 1751387213, "client_secret": null,
"collected_information": {
"shipping_details": null
},
"consent": null,
"consent_collection": null,
"created": 1751465613,
"currency": "usd", "currency": "usd",
"custom_fields": null, "currency_conversion": null,
"custom_fields": [],
"custom_text": {
"after_submit": null,
"shipping_address": null,
"submit": null,
"terms_of_service_acceptance": null
},
"customer": "cus_SbGYl34MpG4nv5", "customer": "cus_SbGYl34MpG4nv5",
"customer_address": null, "customer_creation": null,
"customer_email": "memeaigen.com@gmail.com", "customer_details": {
"customer_name": null, "address": {
"customer_phone": null, "city": null,
"customer_shipping": null, "country": "MY",
"customer_tax_exempt": "none", "line1": null,
"customer_tax_ids": [], "line2": null,
"default_payment_method": null, "postal_code": null,
"default_source": null, "state": null
"default_tax_rates": [], },
"email": "memeaigen.com@gmail.com",
"name": "TEST NAME",
"phone": null,
"tax_exempt": "none",
"tax_ids": []
},
"customer_email": null,
"discounts": [],
"expires_at": 1751552013,
"invoice": null,
"invoice_creation": {
"enabled": false,
"invoice_data": {
"account_tax_ids": null,
"custom_fields": null,
"description": null, "description": null,
"discounts": [],
"due_date": null,
"effective_at": 1751387213,
"ending_balance": 0,
"footer": null, "footer": null,
"from_invoice": null, "issuer": null,
"hosted_invoice_url": "https://invoice.stripe.com/i/acct_1RfMzuEEXQJo9EEO/test_YWNjdF8xUmZNenVFRVhRSm85RUVPLF9TYkplU0VDWWdKSG53bDVZT2VuNjNGZFFaaFJsbFFkLDE0MTkyODAxNg0200EQHRg6hn?s=ap",
"invoice_pdf": "https://pay.stripe.com/invoice/acct_1RfMzuEEXQJo9EEO/test_YWNjdF8xUmZNenVFRVhRSm85RUVPLF9TYkplU0VDWWdKSG53bDVZT2VuNjNGZFFaaFJsbFFkLDE0MTkyODAxNg0200EQHRg6hn/pdf?s=ap",
"issuer": {
"type": "self"
},
"last_finalization_error": null,
"latest_revision": null,
"lines": {
"object": "list",
"data": [
{
"id": "il_1Rg71FEEXQJo9EEOhVjRevMb",
"object": "line_item",
"amount": 400,
"currency": "usd",
"description": "1 × Personal Creator (at $4.00 / month)",
"discount_amounts": [],
"discountable": true,
"discounts": [],
"invoice": "in_1Rg71FEEXQJo9EEOmxbGjtdH",
"livemode": false,
"metadata": {
"is_on_session_checkout": "true"
},
"parent": {
"invoice_item_details": null,
"subscription_item_details": {
"invoice_item": null,
"proration": false,
"proration_details": {
"credited_items": null
},
"subscription": "sub_1Rg71FEEXQJo9EEO18sXSEho",
"subscription_item": "si_SbJesuW5WgGoZ7"
},
"type": "subscription_item_details"
},
"period": {
"end": 1754065613,
"start": 1751387213
},
"pretax_credit_amounts": [],
"pricing": {
"price_details": {
"price": "price_1RfN2VEEXQJo9EEOzjPI2HGt",
"product": "prod_SaY8TGjiPi5hWu"
},
"type": "price_details",
"unit_amount_decimal": "400"
},
"quantity": 1,
"taxes": []
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/invoices/in_1Rg71FEEXQJo9EEOmxbGjtdH/lines"
},
"livemode": false,
"metadata": {}, "metadata": {},
"next_payment_attempt": null, "rendering_options": null
"number": "IN7OJLTH-0001", }
"on_behalf_of": null,
"parent": {
"quote_details": null,
"subscription_details": {
"metadata": {
"is_on_session_checkout": "true"
}, },
"subscription": "sub_1Rg71FEEXQJo9EEO18sXSEho" "livemode": false,
"locale": null,
"metadata": {},
"mode": "payment",
"payment_intent": "pi_3RgRPqEEXQJo9EEO1a43uB5g",
"payment_link": null,
"payment_method_collection": "if_required",
"payment_method_configuration_details": {
"id": "pmc_1RfN0QEEXQJo9EEOzYHrN3LV",
"parent": null
}, },
"type": "subscription_details"
},
"payment_settings": {
"default_mandate": null,
"payment_method_options": { "payment_method_options": {
"acss_debit": null,
"bancontact": null,
"card": { "card": {
"request_three_d_secure": "automatic" "request_three_d_secure": "automatic"
}
}, },
"customer_balance": null, "payment_method_types": [
"konbini": null, "card",
"sepa_debit": null, "link"
"us_bank_account": null ],
"payment_status": "paid",
"permissions": null,
"phone_number_collection": {
"enabled": false
}, },
"payment_method_types": null "recovered_from": null,
"saved_payment_method_options": {
"allow_redisplay_filters": [
"always"
],
"payment_method_remove": "disabled",
"payment_method_save": null
}, },
"period_end": 1751387213, "setup_intent": null,
"period_start": 1751387213, "shipping_address_collection": null,
"post_payment_credit_notes_amount": 0,
"pre_payment_credit_notes_amount": 0,
"receipt_number": null,
"rendering": null,
"shipping_cost": null, "shipping_cost": null,
"shipping_details": null, "shipping_options": [],
"starting_balance": 0, "status": "complete",
"statement_descriptor": null, "submit_type": null,
"status": "paid", "subscription": null,
"status_transitions": { "success_url": "https://memeaigen.test/subscribe/success?session_id={CHECKOUT_SESSION_ID}",
"finalized_at": 1751387213, "total_details": {
"marked_uncollectible_at": null, "amount_discount": 0,
"paid_at": 1751387215, "amount_shipping": 0,
"voided_at": null "amount_tax": 0
}, },
"subtotal": 400, "ui_mode": "hosted",
"subtotal_excluding_tax": 400, "url": null,
"test_clock": null, "wallet_options": null
"total": 400,
"total_discount_amounts": [],
"total_excluding_tax": 400,
"total_pretax_credit_amounts": [],
"total_taxes": [],
"webhooks_delivered_at": null
} }
}, },
"livemode": false, "livemode": false,
"pending_webhooks": 2, "pending_webhooks": 2,
"request": { "request": {
"id": null, "id": null,
"idempotency_key": "e50baede-20b6-4a06-a2c4-15f43ca47dd4" "idempotency_key": null
}, },
"type": "invoice.paid" "type": "checkout.session.completed"
} }
} }

View File

@@ -12,7 +12,7 @@ const VideoDownloadModal = ({ isOpen, onClose, ffmpegCommand, handleDownloadButt
<Dialog open={isOpen} onOpenChange={onClose}> <Dialog open={isOpen} onOpenChange={onClose}>
<DialogContent> <DialogContent>
<DialogHeader> <DialogHeader>
<DialogTitle>Download Video</DialogTitle> <DialogTitle>Export Video</DialogTitle>
{exportStatus || {exportStatus ||
(exportProgress > 0 && ( (exportProgress > 0 && (
<DialogDescription> <DialogDescription>
@@ -39,7 +39,7 @@ const VideoDownloadModal = ({ isOpen, onClose, ffmpegCommand, handleDownloadButt
{showDebug && <Textarea value={ffmpegCommand} readOnly className="mb-4" />} {showDebug && <Textarea value={ffmpegCommand} readOnly className="mb-4" />}
<Button onClick={handleDownloadButton}>{isExporting ? <Spinner className="text-secondary h-4 w-4" /> : 'Download'}</Button> <Button onClick={handleDownloadButton}>{isExporting ? <Spinner className="text-secondary h-4 w-4" /> : 'Export Video'}</Button>
{/* Add your content here */} {/* Add your content here */}
</DialogContent> </DialogContent>

View File

@@ -165,22 +165,7 @@ const UpgradeSheet = () => {
<> <>
{auth.user && plan.tier != 'free' ? ( {auth.user && plan.tier != 'free' ? (
<div className="mx-auto space-y-6 rounded-lg border p-4 text-center sm:p-7"> <div className="mx-auto space-y-6 rounded-lg border p-4 text-center sm:p-7">
<SparklesText className="text-xl font-bold sm:text-2xl">You're now in the {plan?.name} plan!</SparklesText> <SparklesText className="text-xl font-bold sm:text-xl">You're now in the {plan?.name} plan!</SparklesText>
<Button
variant="outline"
onClick={() => {
handleRedirectBillingPortal();
}}
disabled={isRedirectingToBilling}
>
{isRedirectingToBilling ? <Spinner className="text-muted-foreground h-4 w-4" /> : 'Manage Subscription'}
</Button>
<div className="text-muted-foreground block rounded border p-3 text-center text-xs">
<ShieldIcon className="mr-1 mb-1 inline h-4 w-4" />
All our payments are securely processed by Stripe.
</div>
</div> </div>
) : ( ) : (
<div id="plan-purchase" className="mx-auto space-y-6 rounded-lg border p-4 text-center sm:p-7"> <div id="plan-purchase" className="mx-auto space-y-6 rounded-lg border p-4 text-center sm:p-7">
@@ -210,11 +195,6 @@ const UpgradeSheet = () => {
)} )}
</Button> </Button>
<div className="text-muted-foreground text-xs">* Launch pricing limited to first 1000 users</div> <div className="text-muted-foreground text-xs">* Launch pricing limited to first 1000 users</div>
<div className="text-muted-foreground block rounded border p-3 text-center text-xs">
<ShieldIcon className="mr-1 mb-1 inline h-4 w-4" />
All our payments are securely processed by Stripe.
</div>
</div> </div>
</div> </div>
)} )}
@@ -269,6 +249,26 @@ const UpgradeSheet = () => {
</div> </div>
</div> </div>
<div className="flex flex-col justify-center space-y-2 rounded border p-3">
<div className="mx-auto">
<Button
variant="outline"
onClick={() => {
handleRedirectBillingPortal();
}}
disabled={isRedirectingToBilling}
>
{isRedirectingToBilling ? <Spinner className="text-muted-foreground h-4 w-4" /> : 'Manage Billing'}
</Button>
</div>
<div className="text-muted-foreground text-center text-xs">
<ShieldIcon className="mr-1 mb-1 inline h-4 w-4" />
All our billing & payments are securely processed by Stripe.
</div>
</div>
{!(auth.user && plan.tier != 'free') && (
<div id="faq" className="space-y-4 rounded-lg border p-4 sm:p-7"> <div id="faq" className="space-y-4 rounded-lg border p-4 sm:p-7">
<div className="text-center text-xl font-extrabold sm:text-2xl">Frequently Asked Questions</div> <div className="text-center text-xl font-extrabold sm:text-2xl">Frequently Asked Questions</div>
<Accordion type="single" collapsible className="w-full" defaultValue="item-1"> <Accordion type="single" collapsible className="w-full" defaultValue="item-1">
@@ -282,6 +282,7 @@ const UpgradeSheet = () => {
))} ))}
</Accordion> </Accordion>
</div> </div>
)}
</div> </div>
<SheetFooter> <SheetFooter>