add embedded checkout

This commit is contained in:
JCEEE
2026-08-20 07:35:31 +01:00
parent c6e987a852
commit 397543c880
45 changed files with 5731 additions and 334 deletions
@@ -0,0 +1,191 @@
# Workflow — end-to-end build order
## MANDATORY — Full development loop (quick reference)
Follow this exact sequence for every new app. Do NOT skip or reorder steps.
```
1. stripe plugin install apps && stripe plugin install generate ← one-time CLI setup
2. stripe generate app <name> && cd <name> ← scaffold (NOT `stripe apps create`)
3. pnpm install ← install deps
4. [modify scaffolded files + create missing ones] ← implement (only add what scaffold doesn't provide)
5. pnpm build ← compile UI (skip for backend-only apps)
6. pnpm test ← run tests
7. stripe apps start ← local preview in Dashboard
8. stripe apps upload ← publish version (REQUIRED before Secret Store or fetchStripeSignature work)
9. Install in test mode from Dashboard → Apps ← test the installed app
10. Dashboard → Apps → Submit for review ← marketplace publishing (optional)
```
**BLOCKED:** Do NOT use `stripe apps create` — it does not scaffold correctly. Always use `stripe generate app`.
**MANDATORY:** Do NOT create files manually when `stripe generate app` provides them. The scaffold creates a V2 workspace: `stripe-app.yaml`, `package.json`, `pnpm-workspace.yaml`, and `ui/src/views/App.tsx` with the correct structure. Only create files that the scaffold doesn’t provide (e.g., `server.js` for your backend). Modify scaffolded files as needed — don’t rewrite them from scratch.
## End-to-end build order (detailed)
Follow this sequence exactly. Deviating from it is the #1 source of confusion when building Stripe Apps.
### Step 1 — Prerequisites (one-time setup)
Install the Stripe CLI, then install the required plugins:
```bash
# Install the apps plugin (creates and manages apps)
stripe plugin install apps
# Install the generate plugin (scaffolds new apps)
stripe plugin install generate
```
**Plain-language:** “These are tools that let the Stripe CLI create and manage apps. You only need to do this once.”
Verify your CLI version is 1.25.0 or newer:
```bash
stripe version
```
### Step 2 — Create the app
```bash
stripe generate app <your-app-name>
cd <your-app-name>
```
This creates a new V2 workspace with the correct directory structure, `stripe-app.yaml` manifest, and example UI extension.
**What gets created:**
```
<your-app-name>/
├── stripe-app.yaml # V2 app manifest (YAML) — name, permissions, viewports
├── package.json # workspace root
├── pnpm-workspace.yaml # declares workspace packages
├── ui/
│ ├── package.json
│ └── src/
│ └── views/
│ └── App.tsx # main UI component
├── extensions/ # script extensions (one subdir per extension)
└── README.md
```
### Step 3 — Install dependencies
```bash
pnpm install
```
### Step 4 — Build and test (UI apps)
For apps with a UI extension, compile TypeScript and run tests:
```bash
pnpm build
pnpm test
```
Backend-only apps without TypeScript can skip this step.
### Step 5 — Develop locally
```bash
stripe apps start
```
**Plain-language:** “This opens your app live in your Stripe Dashboard while you build it. Changes you save show up immediately — you don’t need to upload anything yet.”
**What this does:**
- Opens a browser to your Stripe Dashboard with your app running live
- Watches for file changes and hot-reloads
- Works against your live or test Stripe account
**Notes:**
- `stripe apps start` requires browser access; Safari is not supported — use Chrome or Firefox
- This does **not** persist — your app is only visible while the command is running
- The app is not installed on your account yet; it’s only previewed locally
### Step 6 — Upload a version (when ready to share or test permissions and secrets)
```bash
stripe apps upload
```
**What this does:**
- Creates a new version of your app in the Stripe Dashboard
- Generates the signing secret needed for `fetchStripeSignature` and the Secret Store API
- Makes the version available to install
**After uploading:**
1. Go to [Dashboard → Apps](https://dashboard.stripe.com/apps)
2. Find your app
3. Click **Install in test mode** to install it on your account
**When you need to upload before `stripe apps start`:**
- Using the Secret Store API
- Using `fetchStripeSignature` to authenticate the UI to a backend
- Testing permissions that require the app to be installed
### Step 7 — Install in live mode (when ready to use with real data)
1. Go to the [Dashboard → Apps page](https://dashboard.stripe.com/apps)
2. Select your app
3. Choose “Private to your account”
4. Select the version to install
5. Click Install
**Plain-language:** “Test mode uses fake data so you can try things safely. Live mode uses real customer data. Always test in test mode first.”
### Step 8 — Ship a new version
1. Bump `version` in `stripe-app.yaml` (use semantic versioning: `1.0.0`, `1.0.1`, `2.0.0`)
2. Upload:
```bash
stripe apps upload
```
3. Go to Dashboard → Apps → your app → version history → install the new version
**Important:** Versions must be uploaded in order. If you upload `2.0.0` before `1.0.0`, `2.0.0` won’t be available for release.
### Step 9 — Publish to the marketplace (optional)
To submit your app for marketplace review:
1. Go to [Dashboard → Apps](https://dashboard.stripe.com/apps)
2. Select your app
3. Click **Submit for review**
**Requirements:**
- Verified email address on your Stripe account
- Business details filled in
- App passes [review requirements](https://docs.stripe.com/stripe-apps/review-requirements.md)
## Key gotchas
**`stripe apps start` vs `stripe apps upload`**
| | `stripe apps start` | `stripe apps upload` |
| --- | --- | --- |
| Purpose | Local development | Publish a version |
| Persistence | Not persistent — only while command runs | Persists in Stripe Dashboard |
| Secret Store | Not available | Available after upload |
| `fetchStripeSignature` | Only works after at least one upload | Works after upload |
**After updating permissions:**
- Users must re-authorize the app
- The “Review Permissions” button only appears on the **Apps workload page** — not on the app itself
- The app returns an invalid-request error for undeclared permissions until the user re-authorizes
- Always warn users about this step when you change permissions
**Sandboxes for app development:**
- Use sandboxes for safe testing — they provide isolated environments where you can test without affecting live data
- Each sandbox has its own app installation and signing secrets
- Useful for testing destructive operations or onboarding flows