Reference manifestu aplikace
Soubor manifestu stripe-app.json je ústřední konfigurací Vaší Stripe App. Deklaruje identitu aplikace, oprávnění, pohledy uživatelského rozhraní, bezpečnostní zásady a chování po instalaci.
Úplný příklad manifestu
{ "id": "com.tajo.brevo-integration", "version": "1.2.0", "name": "Tajo for Brevo", "icon": "./assets/icon.png", "distribution_type": "public", "sandbox_install_compatible": true, "stripe_api_access_type": "oauth", "allowed_redirect_uris": [ "https://tajo.io/stripe/callback", "https://tajo.io/stripe/oauth/complete" ], "permissions": [ { "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts" }, { "permission": "customer_write", "purpose": "Update customer metadata with Brevo sync status" }, { "permission": "charge_read", "purpose": "Access payment history for Brevo event tracking" }, { "permission": "product_read", "purpose": "Sync product catalog to Brevo for personalized campaigns" }, { "permission": "event_read", "purpose": "Subscribe to real-time events for Brevo automation triggers" }, { "permission": "invoice_read", "purpose": "Track invoice lifecycle events in Brevo" } ], "ui_extension": { "views": [ { "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView" }, { "viewport": "stripe.dashboard.customer.list", "component": "CustomerListView" }, { "viewport": "stripe.dashboard.home.overview", "component": "OverviewView" }, { "viewport": "stripe.dashboard.drawer.default", "component": "DrawerView" }, { "viewport": "stripe.dashboard.settings", "component": "SettingsView" }, { "viewport": "stripe.dashboard.onboarding", "component": "OnboardingView" } ], "content_security_policy": { "connect-src": [ "https://api.tajo.io", "https://api.brevo.com" ], "image-src": [ "https://cdn.tajo.io", "https://assets.brevo.com" ], "purpose": "Connect to Tajo API for data sync and Brevo API for contact management" } }, "post_install_action": { "type": "onboarding" }, "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300" }}Reference schématu
Pole nejvyšší úrovně
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | Ano | Jedinečný identifikátor aplikace v obrácené doménové notaci (formát slug) |
version | string | Ano | Řetězec sémantické verze (například "1.2.0") |
name | string | Ano | Zobrazovaný název na marketplace (maximálně 35 znaků) |
icon | string | Ano | Relativní cesta k souboru ikony aplikace (300x300 PNG nebo SVG) |
distribution_type | string | Ano | "public" pro marketplace nebo "private" pro interní použití |
sandbox_install_compatible | boolean | Ne | Zda lze aplikaci nainstalovat v sandboxu a testovacím režimu |
stripe_api_access_type | string | Ne | Způsob přístupu k API: "oauth" nebo "api_key" |
allowed_redirect_uris | string[] | Ne | Povolené OAuth redirect URI pro instalační tok |
permissions | PermissionRequest[] | Ano | Pole požadavků na oprávnění |
ui_extension | UIExtensionManifest | Ne | Konfigurace rozšíření uživatelského rozhraní |
post_install_action | PostInstallAction | Ne | Akce provedená po instalaci aplikace |
constants | object | Ne | Dvojice klíč a hodnota dostupné v aplikaci za běhu |
id
Identifikátor aplikace je řetězec ve formátu slug, obvykle v obrácené doménové notaci:
"id": "com.tajo.brevo-integration"- Musí být globálně jedinečný napříč všemi Stripe Apps
- Používejte pouze malá písmena, číslice, spojovníky a tečky
- Po vytvoření aplikace jej již nelze změnit
- Určuje URL aplikace na marketplace
version
Řídí se sémantickým verzováním:
"version": "1.2.0"- MAJOR: nekompatibilní změny nebo významné nové funkce
- MINOR: nové funkce zpětně kompatibilní
- PATCH: opravy chyb a drobná vylepšení
- Při každém nahrání musí být navýšena
distribution_type
Určuje, kdo může Vaši aplikaci nainstalovat:
| Hodnota | Popis |
|---|---|
"public" | Dostupná všem uživatelům na Stripe App Marketplace |
"private" | Instalovatelná pouze Vaším vlastním účtem Stripe |
stripe_api_access_type
Určuje, jak se Vaše aplikace ověřuje vůči Stripe API:
| Hodnota | Popis |
|---|---|
"oauth" | Používá tok OAuth 2.0 pro ověření (doporučeno pro veřejné aplikace) |
"api_key" | Používá omezené API klíče (vhodné pro soukromé aplikace) |
PermissionRequest
Každý požadavek na oprávnění deklaruje konkrétní oprávnění Stripe API, které Vaše aplikace potřebuje:
{ "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts"}| Pole | Typ | Povinné | Popis |
|---|---|---|---|
permission | string | Ano | Identifikátor oprávnění (viz Reference oprávnění) |
purpose | string | Ano | Srozumitelné vysvětlení, proč je toto oprávnění potřeba |
Pravidla pro pole purpose:
- Pište jasná a konkrétní vysvětlení, kterým obchodníci porozumí
- Vysvětlete, k čemu se oprávnění používá, ne jen co uděluje
- Popisy pište stručně (jedna věta)
- Vyhněte se technickému žargonu
UIExtensionManifest
Konfiguruje komponenty uživatelského rozhraní Vaší aplikace:
{ "ui_extension": { "views": [...], "content_security_policy": {...} }}| Pole | Typ | Povinné | Popis |
|---|---|---|---|
views | ViewManifest[] | Ano | Pole deklarací pohledů |
content_security_policy | CSPRequest | Ne | Content Security Policy pro externí zdroje |
ViewManifest
Každý pohled mapuje React komponentu na viewport ve Stripe Dashboardu:
{ "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView"}| Pole | Typ | Povinné | Popis |
|---|---|---|---|
viewport | string | Ano | Místo v Dashboardu, kde se tento pohled vykreslí (viz Reference viewportů) |
component | string | Ano | Název React komponenty k vykreslení (musí odpovídat názvu exportované komponenty) |
Jedna aplikace může deklarovat více pohledů pro různé viewporty:
"views": [ { "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView" }, { "viewport": "stripe.dashboard.payment.detail", "component": "PaymentDetailView" }, { "viewport": "stripe.dashboard.home.overview", "component": "OverviewView" }]CSPRequest
Content Security Policy určuje, ke kterým externím doménám se Vaše aplikace může připojit:
{ "content_security_policy": { "connect-src": [ "https://api.tajo.io", "https://api.brevo.com" ], "image-src": [ "https://cdn.tajo.io" ], "purpose": "Connect to Tajo API for data sync and load images from CDN" }}| Pole | Typ | Povinné | Popis |
|---|---|---|---|
connect-src | string[] | Ne | Domény, na které může aplikace posílat síťové požadavky |
image-src | string[] | Ne | Domény, ze kterých může aplikace načítat obrázky |
purpose | string | Ano | Vysvětlení, proč jsou tato externí připojení potřeba |
Caution
Uvádějte pouze domény, ke kterým se Vaše aplikace skutečně potřebuje připojit. Nadbytečné položky v CSP mohou vyvolat přísnější kontrolu při schvalování.
PostInstallAction
Konfiguruje, co se stane bezprostředně poté, co si uživatel Vaši aplikaci nainstaluje:
{ "post_install_action": { "type": "onboarding" }}| Pole | Typ | Povinné | Popis |
|---|---|---|---|
type | string | Ano | Typ akce (viz níže) |
url | string | Podmíněně | URL pro akce typu external |
Typy akcí
| Typ | Chování |
|---|---|
"onboarding" | Otevře onboardingový pohled aplikace v Dashboardu |
"settings" | Otevře pohled s nastavením aplikace v Dashboardu |
"external" | Přesměruje uživatele na externí URL (vyžaduje pole url) |
Příklady:
// Open onboarding flow{ "post_install_action": { "type": "onboarding" }}
// Open settings page{ "post_install_action": { "type": "settings" }}
// Redirect to external setup{ "post_install_action": { "type": "external", "url": "https://app.tajo.io/stripe/setup" }}Podrobné implementační postupy najdete v průvodci akcemi po instalaci.
Konstanty
Definujte statické dvojice klíč a hodnota dostupné v aplikaci za běhu:
{ "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300", "MAX_BATCH_SIZE": "100" }}- Všechny hodnoty musí být řetězce
- Konstanty se do aplikace vkládají při sestavení
- Konstanty používejte pro konfiguraci, která se liší mezi prostředími
- Nikdy neukládejte do konstant tajné údaje ani API klíče, použijte místo toho Secret Store API
Přístup ke konstantám v kódu aplikace:
import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;Rozšířený manifest pro vývoj
Během lokálního vývoje jsou k dispozici další pole:
{ "id": "com.tajo.brevo-integration", "version": "0.1.0", "name": "Tajo for Brevo (Dev)", "icon": "./assets/icon-dev.png", "distribution_type": "private", "sandbox_install_compatible": true, "dev": { "hot_reload": true, "port": 4242 }}Sekce dev se při produkčních sestaveních a nahrávání aplikace odstraní. Používejte ji pouze pro pohodlí při lokálním vývoji.
Validace
Před nahráním svůj manifest zvalidujte:
# Validate manifest syntax and schemastripe apps validate
# Check for common issuesstripe apps checkČasté chyby při validaci:
| Chyba | Příčina | Náprava |
|---|---|---|
Invalid permission | Neznámý identifikátor oprávnění | Zkontrolujte Referenci oprávnění |
Invalid viewport | Neznámý identifikátor viewportu | Zkontrolujte Referenci viewportů |
Missing purpose | Oprávnění bez pole purpose | Doplňte ke každému oprávnění řetězec purpose |
Invalid version | Řetězec verze mimo semver | Použijte formát MAJOR.MINOR.PATCH |
Icon not found | Cesta k ikoně nelze rozřešit | Ověřte, že soubor ikony na zadané cestě existuje |