Referenca manifesta aplikacije
Manifest datoteka stripe-app.json je centralna konfiguracija vaše Stripe App aplikacije. Ona deklariše identitet aplikacije, dozvole, UI prikaze, bezbednosne politike i ponašanje nakon instalacije.
Primer kompletnog manifesta
{ "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" }}Referenca sheme
Polja najvišeg nivoa
| Polje | Tip | Obavezno | Opis |
|---|---|---|---|
id | string | Da | Jedinstveni identifikator aplikacije u obrnutoj domenskoj notaciji (slug format) |
version | string | Da | Niska sa semantičkom verzijom (na primer "1.2.0") |
name | string | Da | Prikazano ime na marketplace platformi (najviše 35 znakova) |
icon | string | Da | Relativna putanja do datoteke sa ikonom aplikacije (300x300 PNG ili SVG) |
distribution_type | string | Da | "public" za marketplace ili "private" za internu upotrebu |
sandbox_install_compatible | boolean | Ne | Da li aplikacija može da se instalira u sandbox/test režimu |
stripe_api_access_type | string | Ne | Način pristupa API-ju: "oauth" ili "api_key" |
allowed_redirect_uris | string[] | Ne | Dozvoljeni OAuth redirect URI-jevi za tok instalacije |
permissions | PermissionRequest[] | Da | Niz zahteva za dozvole |
ui_extension | UIExtensionManifest | Ne | Konfiguracija UI ekstenzije |
post_install_action | PostInstallAction | Ne | Akcija koja se pokreće nakon instalacije aplikacije |
constants | object | Ne | Parovi ključ-vrednost dostupni u aplikaciji tokom izvršavanja |
id
Identifikator aplikacije je niska u slug formatu, obično u obrnutoj domenskoj notaciji:
"id": "com.tajo.brevo-integration"- Mora biti globalno jedinstven među svim Stripe Apps aplikacijama
- Koristite samo mala slova, brojeve, crtice i tačke
- Ne može se promeniti nakon što je aplikacija kreirana
- Određuje URL aplikacije na marketplace platformi
version
Prati semantičko verzionisanje:
"version": "1.2.0"- MAJOR: promene koje ruše kompatibilnost ili značajni novi dodaci
- MINOR: nove funkcije, uz zadržanu kompatibilnost unazad
- PATCH: ispravke grešaka i sitna poboljšanja
- Mora se povećati pri svakom otpremanju
distribution_type
Određuje ko može da instalira vašu aplikaciju:
| Vrednost | Opis |
|---|---|
"public" | Dostupna svim korisnicima na Stripe App Marketplace platformi |
"private" | Može je instalirati samo vaš sopstveni Stripe nalog |
stripe_api_access_type
Određuje kako se vaša aplikacija autentifikuje na Stripe API:
| Vrednost | Opis |
|---|---|
"oauth" | Koristi OAuth 2.0 tok za autentifikaciju (preporučeno za javne aplikacije) |
"api_key" | Koristi ograničene API ključeve (pogodno za privatne aplikacije) |
PermissionRequest
Svaki zahtev za dozvolu deklariše konkretnu dozvolu Stripe API-ja koja je vašoj aplikaciji potrebna:
{ "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts"}| Polje | Tip | Obavezno | Opis |
|---|---|---|---|
permission | string | Da | Identifikator dozvole (pogledajte Referencu dozvola) |
purpose | string | Da | Objašnjenje razumljivo ljudima zašto je ova dozvola potrebna |
Smernice za polje purpose:
- Pišite jasna i konkretna objašnjenja koja trgovci mogu da razumeju
- Objasnite čemu dozvola služi, a ne samo šta omogućava
- Neka opisi budu kratki (jedna rečenica)
- Izbegavajte tehnički žargon
UIExtensionManifest
Konfiguriše UI komponente vaše aplikacije:
{ "ui_extension": { "views": [...], "content_security_policy": {...} }}| Polje | Tip | Obavezno | Opis |
|---|---|---|---|
views | ViewManifest[] | Da | Niz deklaracija prikaza |
content_security_policy | CSPRequest | Ne | Content Security Policy za spoljne resurse |
ViewManifest
Svaki prikaz mapira React komponentu na viewport u Stripe komandnoj tabli:
{ "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView"}| Polje | Tip | Obavezno | Opis |
|---|---|---|---|
viewport | string | Da | Mesto na komandnoj tabli gde se ovaj prikaz iscrtava (pogledajte Referencu viewport-a) |
component | string | Da | Naziv React komponente koja se iscrtava (mora se poklapati sa nazivom izvezene komponente) |
Jedna aplikacija može da deklariše više prikaza za različite viewport-e:
"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 određuje sa kojim spoljnim domenima vaša aplikacija može da se povezuje:
{ "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" }}| Polje | Tip | Obavezno | Opis |
|---|---|---|---|
connect-src | string[] | Ne | Domeni kojima aplikacija može da šalje mrežne zahteve |
image-src | string[] | Ne | Domeni sa kojih aplikacija može da učitava slike |
purpose | string | Da | Objašnjenje zašto su ove spoljne veze potrebne |
Caution
Navedite samo domene sa kojima vaša aplikacija zaista treba da se povezuje. Preveliki broj CSP unosa može izazvati dodatnu strogost pri pregledu.
PostInstallAction
Konfiguriše šta se dešava odmah nakon što korisnik instalira vašu aplikaciju:
{ "post_install_action": { "type": "onboarding" }}| Polje | Tip | Obavezno | Opis |
|---|---|---|---|
type | string | Da | Tip akcije (pogledajte niže) |
url | string | Uslovno | URL za akcije tipa external |
Tipovi akcija
| Tip | Ponašanje |
|---|---|
"onboarding" | Otvara uvodni prikaz aplikacije na komandnoj tabli |
"settings" | Otvara prikaz podešavanja aplikacije na komandnoj tabli |
"external" | Preusmerava korisnika na spoljni URL (zahteva polje url) |
Primeri:
// 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" }}Pogledajte vodič za akcije nakon instalacije za detaljne obrasce implementacije.
Konstante
Definišite statične parove ključ-vrednost dostupne u aplikaciji tokom izvršavanja:
{ "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300", "MAX_BATCH_SIZE": "100" }}- Sve vrednosti moraju biti niske
- Konstante se ugrađuju u aplikaciju u vreme izgradnje
- Koristite konstante za konfiguraciju koja se razlikuje između okruženja
- Nikada ne čuvajte tajne podatke ili API ključeve kao konstante, umesto toga koristite Secret Store API
Pristupite konstantama u kodu svoje aplikacije:
import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;Prošireni manifest za razvoj
Tokom lokalnog razvoja dostupna su dodatna polja:
{ "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 }}Odeljak dev se uklanja tokom produkcijskih izgradnji i otpremanja aplikacije. Koristite ga isključivo za podešavanja koja olakšavaju lokalni razvoj.
Validacija
Proverite ispravnost svog manifesta pre otpremanja:
# Validate manifest syntax and schemastripe apps validate
# Check for common issuesstripe apps checkČeste greške pri validaciji:
| Greška | Uzrok | Rešenje |
|---|---|---|
Invalid permission | Nepoznat identifikator dozvole | Proverite Referencu dozvola |
Invalid viewport | Nepoznat identifikator viewport-a | Proverite Referencu viewport-a |
Missing purpose | Dozvola bez polja purpose | Dodajte nisku purpose svakoj dozvoli |
Invalid version | Niska verzije koja nije po semver standardu | Koristite format MAJOR.MINOR.PATCH |
Icon not found | Putanja do ikone se ne razrešava | Proverite da li datoteka sa ikonom postoji na navedenoj putanji |