App manifest referencia
A stripe-app.json manifest fájl a Stripe Appod központi konfigurációja. Ez írja le az alkalmazás azonosságát, jogosultságait, felületi nézeteit, biztonsági szabályait és a telepítés utáni viselkedését.
Teljes manifest példa
{ "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" }}Sémareferencia
Legfelső szintű mezők
| Mező | Típus | Kötelező | Leírás |
|---|---|---|---|
id | string | Igen | Egyedi alkalmazásazonosító fordított domain jelöléssel (slug formátumban) |
version | string | Igen | Szemantikus verziószám (például "1.2.0") |
name | string | Igen | A piactéren megjelenő név (legfeljebb 35 karakter) |
icon | string | Igen | Relatív útvonal az alkalmazás ikonfájljához (300x300 PNG vagy SVG) |
distribution_type | string | Igen | "public" a piactérhez vagy "private" belső használatra |
sandbox_install_compatible | boolean | Nem | Telepíthető-e az alkalmazás sandbox vagy teszt módban |
stripe_api_access_type | string | Nem | Az API-hozzáférés módja: "oauth" vagy "api_key" |
allowed_redirect_uris | string[] | Nem | Engedélyezett OAuth átirányítási URI-k a telepítési folyamathoz |
permissions | PermissionRequest[] | Igen | A jogosultsági kérések tömbje |
ui_extension | UIExtensionManifest | Nem | A felületi bővítmény beállításai |
post_install_action | PostInstallAction | Nem | A telepítés után végrehajtandó művelet |
constants | object | Nem | Kulcs-érték párok, amelyeket az alkalmazás futásidőben elér |
id
Az alkalmazásazonosító slug formátumú karakterlánc, jellemzően fordított domain jelöléssel:
"id": "com.tajo.brevo-integration"- Az összes Stripe App között globálisan egyedinek kell lennie
- Csak kisbetűket, számokat, kötőjeleket és pontokat használj
- Az alkalmazás létrehozása után nem módosítható
- Ez határozza meg az alkalmazás URL-jét a piactéren
version
Szemantikus verziózást követ:
"version": "1.2.0"- MAJOR: törő változások vagy jelentős új képességek
- MINOR: új funkciók, visszafelé kompatibilisen
- PATCH: hibajavítások és apróbb fejlesztések
- Minden feltöltésnél növelni kell
distribution_type
Azt szabályozza, ki telepítheti az alkalmazásodat:
| Érték | Leírás |
|---|---|
"public" | Elérhető a Stripe App Marketplace-en minden felhasználó számára |
"private" | Csak a saját Stripe fiókodból telepíthető |
stripe_api_access_type
Azt határozza meg, hogyan hitelesíti magát az alkalmazásod a Stripe API felé:
| Érték | Leírás |
|---|---|
"oauth" | OAuth 2.0 folyamattal hitelesít (nyilvános alkalmazásokhoz ajánlott) |
"api_key" | Korlátozott API-kulcsokat használ (privát alkalmazásokhoz való) |
PermissionRequest
Minden jogosultsági kérés egy konkrét Stripe API-jogosultságot igényel az alkalmazásod számára:
{ "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts"}| Mező | Típus | Kötelező | Leírás |
|---|---|---|---|
permission | string | Igen | A jogosultság azonosítója (lásd a jogosultsági referenciát) |
purpose | string | Igen | Emberi nyelvű magyarázat arról, miért kell ez a jogosultság |
Irányelvek a purpose mezőhöz:
- Írj világos, konkrét magyarázatot, amit a kereskedők is megértenek
- Azt írd le, mire használod a jogosultságot, ne csak azt, mit enged
- Fogalmazz tömören (egy mondat)
- Kerüld a szakzsargont
UIExtensionManifest
Az alkalmazás felületi komponenseit állítja be:
{ "ui_extension": { "views": [...], "content_security_policy": {...} }}| Mező | Típus | Kötelező | Leírás |
|---|---|---|---|
views | ViewManifest[] | Igen | A nézetdeklarációk tömbje |
content_security_policy | CSPRequest | Nem | Content Security Policy a külső erőforrásokhoz |
ViewManifest
Minden nézet egy React komponenst rendel a Stripe Dashboard egy viewportjához:
{ "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView"}| Mező | Típus | Kötelező | Leírás |
|---|---|---|---|
viewport | string | Igen | A Dashboard azon helye, ahol a nézet megjelenik (lásd a viewport referenciát) |
component | string | Igen | A megjelenítendő React komponens neve (egyeznie kell az exportált komponens nevével) |
Egyetlen alkalmazás több nézetet is deklarálhat különböző viewportokhoz:
"views": [ { "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView" }, { "viewport": "stripe.dashboard.payment.detail", "component": "PaymentDetailView" }, { "viewport": "stripe.dashboard.home.overview", "component": "OverviewView" }]CSPRequest
A Content Security Policy azt szabályozza, mely külső domainekhez csatlakozhat az alkalmazásod:
{ "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" }}| Mező | Típus | Kötelező | Leírás |
|---|---|---|---|
connect-src | string[] | Nem | Azok a domainek, amelyekhez az alkalmazás hálózati kérést indíthat |
image-src | string[] | Nem | Azok a domainek, ahonnan az alkalmazás képet tölthet be |
purpose | string | Igen | Magyarázat arról, miért van szükség ezekre a külső kapcsolatokra |
Caution
Csak azokat a domaineket sorold fel, amelyekhez az alkalmazásod valóban csatlakozik. A túl sok CSP-bejegyzés alaposabb átvizsgálást vonhat maga után.
PostInstallAction
Azt állítja be, mi történik közvetlenül azután, hogy a felhasználó telepítette az alkalmazásodat:
{ "post_install_action": { "type": "onboarding" }}| Mező | Típus | Kötelező | Leírás |
|---|---|---|---|
type | string | Igen | A művelet típusa (lásd alább) |
url | string | Feltételes | URL az external típusú műveletekhez |
Művelettípusok
| Típus | Viselkedés |
|---|---|
"onboarding" | Megnyitja az alkalmazás bevezető nézetét a Dashboardon |
"settings" | Megnyitja az alkalmazás beállítási nézetét a Dashboardon |
"external" | Külső URL-re irányítja a felhasználót (kötelező hozzá az url mező) |
Példák:
// 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" }}A részletes megvalósítási mintákért lásd a telepítés utáni műveletek útmutatóját.
Constants
Statikus kulcs-érték párokat definiálhatsz, amelyeket az alkalmazásod futásidőben elér:
{ "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300", "MAX_BATCH_SIZE": "100" }}- Minden értéknek karakterláncnak kell lennie
- A konstansok build időben ágyazódnak be az alkalmazásba
- Konstansokat olyan beállításokhoz használj, amelyek környezetenként eltérnek
- Soha ne tárolj titkokat vagy API-kulcsokat konstansként, erre a Secret Store API való
Így éred el a konstansokat az alkalmazás kódjában:
import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;Kibővített manifest fejlesztéshez
Helyi fejlesztés közben további mezők is elérhetők:
{ "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 }}A dev szakasz kimarad az éles buildekből és az alkalmazásfeltöltésekből. Csak helyi fejlesztést kényelmesebbé tevő beállításokhoz használd.
Validáció
Feltöltés előtt ellenőrizd a manifestedet:
# Validate manifest syntax and schemastripe apps validate
# Check for common issuesstripe apps checkGyakori validációs hibák:
| Hiba | Ok | Megoldás |
|---|---|---|
Invalid permission | Ismeretlen jogosultságazonosító | Nézd meg a jogosultsági referenciát |
Invalid viewport | Ismeretlen viewport azonosító | Nézd meg a viewport referenciát |
Missing purpose | Jogosultság purpose mező nélkül | Adj purpose karakterláncot minden jogosultsághoz |
Invalid version | Nem semver formátumú verziószám | Használd a MAJOR.MINOR.PATCH formátumot |
Icon not found | Az ikon útvonala nem oldható fel | Ellenőrizd, hogy az ikonfájl létezik-e a megadott útvonalon |