Referenca manifesta aplikacije
Datoteka manifesta stripe-app.json središnja je konfiguracija vaše Stripe aplikacije. U njoj se deklariraju identitet aplikacije, dopuštenja, prikazi sučelja, sigurnosna pravila i ponašanje nakon instalacije.
Potpun primjer 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še razine
| Polje | Vrsta | Obavezno | Opis |
|---|---|---|---|
id | string | Da | Jedinstveni identifikator aplikacije u obrnutoj domenskoj notaciji (slug format) |
version | string | Da | Niz semantičke verzije (npr. "1.2.0") |
name | string | Da | Prikazano ime na tržnici aplikacija (najviše 35 znakova) |
icon | string | Da | Relativna putanja do datoteke ikone aplikacije (300x300 PNG ili SVG) |
distribution_type | string | Da | "public" za tržnicu aplikacija ili "private" za internu upotrebu |
sandbox_install_compatible | boolean | Ne | Može li se aplikacija instalirati u sandbox ili testnom načinu rada |
stripe_api_access_type | string | Ne | Način pristupa API-ju: "oauth" ili "api_key" |
allowed_redirect_uris | string[] | Ne | Dopušteni OAuth URI-ji preusmjeravanja za tijek instalacije |
permissions | PermissionRequest[] | Da | Niz zahtjeva za dopuštenja |
ui_extension | UIExtensionManifest | Ne | Konfiguracija proširenja sučelja |
post_install_action | PostInstallAction | Ne | Radnja koja se izvodi nakon instalacije aplikacije |
constants | object | Ne | Parovi ključ-vrijednost dostupni u aplikaciji tijekom izvođenja |
id
Identifikator aplikacije niz je u slug formatu, obično u obrnutoj domenskoj notaciji:
"id": "com.tajo.brevo-integration"- Mora biti globalno jedinstven među svim Stripe aplikacijama
- Koristite isključivo mala slova, brojke, crtice i točke
- Ne može se promijeniti nakon što je aplikacija stvorena
- Određuje URL aplikacije na tržnici aplikacija
version
Slijedi semantičko verzioniranje:
"version": "1.2.0"- MAJOR: promjene koje ruše kompatibilnost ili veći novi dijelovi funkcionalnosti
- MINOR: nove značajke, unatrag kompatibilne
- PATCH: ispravci pogrešaka i manja poboljšanja
- Mora se povećati za svako slanje
distribution_type
Određuje tko može instalirati vašu aplikaciju:
| Vrijednost | Opis |
|---|---|
"public" | Dostupna svim korisnicima na Stripe App Marketplaceu |
"private" | Može je instalirati samo vaš vlastiti Stripe račun |
stripe_api_access_type
Određuje kako se vaša aplikacija autentificira prema Stripe API-ju:
| Vrijednost | Opis |
|---|---|
"oauth" | Koristi OAuth 2.0 tijek za autentifikaciju (preporučeno za javne aplikacije) |
"api_key" | Koristi ograničene API ključeve (prikladno za privatne aplikacije) |
PermissionRequest
Svaki zahtjev za dopuštenje deklarira određeno dopuštenje Stripe API-ja koje vaša aplikacija treba:
{ "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts"}| Polje | Vrsta | Obavezno | Opis |
|---|---|---|---|
permission | string | Da | Identifikator dopuštenja (pogledajte Referencu dopuštenja) |
purpose | string | Da | Ljudima razumljivo objašnjenje zašto je to dopuštenje potrebno |
Smjernice za polje purpose:
- Pišite jasna i konkretna objašnjenja koja trgovci mogu razumjeti
- Objasnite čemu dopuštenje služi, a ne samo što omogućuje
- Neka opisi budu sažeti (jedna rečenica)
- Izbjegavajte tehnički žargon
UIExtensionManifest
Konfigurira komponente sučelja vaše aplikacije:
{ "ui_extension": { "views": [...], "content_security_policy": {...} }}| Polje | Vrsta | Obavezno | Opis |
|---|---|---|---|
views | ViewManifest[] | Da | Niz deklaracija prikaza |
content_security_policy | CSPRequest | Ne | Pravilo Content Security Policy za vanjske resurse |
ViewManifest
Svaki prikaz povezuje React komponentu s viewportom u Stripe Dashboardu:
{ "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView"}| Polje | Vrsta | Obavezno | Opis |
|---|---|---|---|
viewport | string | Da | Mjesto u Dashboardu na kojem se prikaz iscrtava (pogledajte Referencu viewporta) |
component | string | Da | Naziv React komponente koja se iscrtava (mora odgovarati nazivu izvezene komponente) |
Jedna aplikacija može deklarirati više prikaza za različite viewporte:
"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 s kojim se vanjskim domenama vaša aplikacija smije povezivati:
{ "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 | Vrsta | Obavezno | Opis |
|---|---|---|---|
connect-src | string[] | Ne | Domene kojima aplikacija smije slati mrežne zahtjeve |
image-src | string[] | Ne | Domene s kojih aplikacija smije učitavati slike |
purpose | string | Da | Objašnjenje zašto su te vanjske veze potrebne |
Caution
Navedite samo domene s kojima se vaša aplikacija doista treba povezivati. Prevelik broj CSP unosa može izazvati dodatnu pomnost pri pregledu.
PostInstallAction
Određuje što se događa odmah nakon što korisnik instalira vašu aplikaciju:
{ "post_install_action": { "type": "onboarding" }}| Polje | Vrsta | Obavezno | Opis |
|---|---|---|---|
type | string | Da | Vrsta radnje (pogledajte u nastavku) |
url | string | Uvjetno | URL za radnje vrste external |
Vrste radnji
| Vrsta | Ponašanje |
|---|---|
"onboarding" | Otvara prikaz za uvođenje u rad unutar Dashboarda |
"settings" | Otvara prikaz postavki aplikacije u Dashboardu |
"external" | Preusmjerava korisnika na vanjski URL (traži polje url) |
Primjeri:
// 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" }}Za detaljne obrasce implementacije pogledajte vodič o radnjama nakon instalacije.
Konstante
Definirajte statične parove ključ-vrijednost dostupne u aplikaciji tijekom izvođenja:
{ "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300", "MAX_BATCH_SIZE": "100" }}- Sve vrijednosti moraju biti nizovi znakova
- Konstante se ugrađuju u aplikaciju u trenutku izgradnje
- Konstante koristite za konfiguraciju koja se razlikuje među okruženjima
- Nikada ne pohranjujte tajne ni API ključeve kao konstante, umjesto toga upotrijebite Secret Store API
Pristup konstantama u kodu aplikacije:
import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;Prošireni manifest za razvoj
Tijekom 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 }}Odjeljak dev uklanja se u produkcijskim izgradnjama i pri slanju aplikacije. Koristite ga isključivo za postavke koje olakšavaju lokalni razvoj.
Provjera valjanosti
Provjerite valjanost svojeg manifesta prije slanja:
# Validate manifest syntax and schemastripe apps validate
# Check for common issuesstripe apps checkUobičajene pogreške pri provjeri valjanosti:
| Pogreška | Uzrok | Rješenje |
|---|---|---|
Invalid permission | Nepoznat identifikator dopuštenja | Provjerite Referencu dopuštenja |
Invalid viewport | Nepoznat identifikator viewporta | Provjerite Referencu viewporta |
Missing purpose | Dopuštenje bez polja purpose | Dodajte niz purpose svakom dopuštenju |
Invalid version | Verzija koja nije u semver formatu | Koristite oblik MAJOR.MINOR.PATCH |
Icon not found | Putanja do ikone ne razrješava se | Provjerite postoji li datoteka ikone na navedenoj putanji |