Referanse for app-manifestet
Manifestfilen stripe-app.json er den sentrale konfigurasjonen for Stripe-appen din. Den angir appens identitet, tillatelser, UI-visninger, sikkerhetsregler og hva som skjer etter installasjon.
Fullstendig eksempel på manifest
{ "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" }}Skjemareferanse
Felter på toppnivå
| Felt | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
id | streng | Ja | Unik app-identifikator i omvendt domenenotasjon (slug-format) |
version | streng | Ja | Streng med semantisk versjon (for eksempel "1.2.0") |
name | streng | Ja | Visningsnavnet som vises i marketplace (maks 35 tegn) |
icon | streng | Ja | Relativ sti til appikonet (300x300 PNG eller SVG) |
distribution_type | streng | Ja | "public" for marketplace eller "private" for intern bruk |
sandbox_install_compatible | boolsk | Nei | Om appen kan installeres i sandkasse- eller testmodus |
stripe_api_access_type | streng | Nei | Metode for API-tilgang: "oauth" eller "api_key" |
allowed_redirect_uris | streng[] | Nei | Tillatte OAuth-omdirigerings-URI-er for installasjonsflyten |
permissions | PermissionRequest[] | Ja | Liste over forespurte tillatelser |
ui_extension | UIExtensionManifest | Nei | Konfigurasjon av UI-utvidelsen |
post_install_action | PostInstallAction | Nei | Handling som skal utføres etter at appen er installert |
constants | objekt | Nei | Nøkkel-verdi-par som er tilgjengelige i appen under kjøring |
id
App-identifikatoren er en streng i slug-format, vanligvis i omvendt domenenotasjon:
"id": "com.tajo.brevo-integration"- Må være globalt unik på tvers av alle Stripe Apps
- Bruk bare små bokstaver, tall, bindestreker og punktum
- Kan ikke endres etter at appen er opprettet
- Bestemmer appens URL i marketplace
version
Følger semantisk versjonering:
"version": "1.2.0"- MAJOR: Bruddendringer eller vesentlig ny funksjonalitet
- MINOR: Ny funksjonalitet som er bakoverkompatibel
- PATCH: Feilrettinger og mindre forbedringer
- Må økes for hver opplasting
distribution_type
Styrer hvem som kan installere appen din:
| Verdi | Beskrivelse |
|---|---|
"public" | Tilgjengelig for alle brukere i Stripe App Marketplace |
"private" | Kan bare installeres av din egen Stripe-konto |
stripe_api_access_type
Bestemmer hvordan appen din autentiserer seg mot Stripe API:
| Verdi | Beskrivelse |
|---|---|
"oauth" | Bruker OAuth 2.0-flyt til autentisering (anbefalt for offentlige apper) |
"api_key" | Bruker begrensede API-nøkler (passer for private apper) |
PermissionRequest
Hver tillatelsesforespørsel angir én bestemt Stripe API-tillatelse appen din trenger:
{ "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts"}| Felt | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
permission | streng | Ja | Identifikatoren for tillatelsen (se referansen over tillatelser) |
purpose | streng | Ja | Forklaring på vanlig språk av hvorfor tillatelsen trengs |
Retningslinjer for purpose:
- Skriv tydelige, konkrete forklaringer som forhandlere forstår
- Forklar hva tillatelsen brukes til, ikke bare hva den gir tilgang til
- Hold beskrivelsene korte, gjerne én setning
- Unngå teknisk sjargong
UIExtensionManifest
Konfigurerer UI-komponentene i appen din:
{ "ui_extension": { "views": [...], "content_security_policy": {...} }}| Felt | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
views | ViewManifest[] | Ja | Liste over visninger som erklæres |
content_security_policy | CSPRequest | Nei | Content Security Policy for eksterne ressurser |
ViewManifest
Hver visning knytter en React-komponent til et viewport i Stripe-dashboardet:
{ "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView"}| Felt | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
viewport | streng | Ja | Stedet i dashboardet der visningen vises (se referansen over viewporter) |
component | streng | Ja | Navnet på React-komponenten som skal vises (må stemme med navnet på den eksporterte komponenten) |
Én app kan erklære flere visninger for ulike viewporter:
"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 styrer hvilke eksterne domener appen din kan koble seg til:
{ "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" }}| Felt | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
connect-src | streng[] | Nei | Domener appen kan sende nettverksforespørsler til |
image-src | streng[] | Nei | Domener appen kan laste bilder fra |
purpose | streng | Ja | Forklaring på hvorfor disse eksterne tilkoblingene trengs |
Caution
Ta bare med domener appen din faktisk må koble seg til. Mange unødvendige CSP-oppføringer kan gi strengere gjennomgang.
PostInstallAction
Konfigurerer hva som skjer straks en bruker har installert appen din:
{ "post_install_action": { "type": "onboarding" }}| Felt | Type | Påkrevd | Beskrivelse |
|---|---|---|---|
type | streng | Ja | Typen handling (se under) |
url | streng | Betinget | URL for handlinger av typen external |
Handlingstyper
| Type | Oppførsel |
|---|---|
"onboarding" | Åpner appens oppstartsvisning i dashboardet |
"settings" | Åpner appens innstillingsvisning i dashboardet |
"external" | Sender brukeren videre til en ekstern URL (krever feltet url) |
Eksempler:
// 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" }}Se veiledningen om handlinger etter installasjon for detaljerte implementeringsmønstre.
Konstanter
Definer statiske nøkkel-verdi-par som er tilgjengelige under kjøring i appen din:
{ "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300", "MAX_BATCH_SIZE": "100" }}- Alle verdier må være strenger
- Konstantene bakes inn i appen når den bygges
- Bruk konstanter til konfigurasjon som varierer mellom miljøer
- Lagre aldri hemmeligheter eller API-nøkler som konstanter, bruk Secret Store API i stedet
Slik henter du konstanter i appkoden din:
import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;Utvidet manifest under utvikling
Under lokal utvikling er noen ekstra felter tilgjengelige:
{ "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 }}Seksjonen dev fjernes når appen bygges for produksjon og lastes opp. Bruk den bare til innstillinger som gjør lokal utvikling enklere.
Validering
Valider manifestet ditt før du laster det opp:
# Validate manifest syntax and schemastripe apps validate
# Check for common issuesstripe apps checkVanlige valideringsfeil:
| Feil | Årsak | Løsning |
|---|---|---|
Invalid permission | Ukjent identifikator for tillatelse | Sjekk referansen over tillatelser |
Invalid viewport | Ukjent identifikator for viewport | Sjekk referansen over viewporter |
Missing purpose | Tillatelse uten feltet purpose | Legg til en purpose-streng for hver tillatelse |
Invalid version | Versjonsstrengen følger ikke semver | Bruk formatet MAJOR.MINOR.PATCH |
Icon not found | Stien til ikonet kan ikke løses | Kontroller at ikonfilen finnes på den angitte stien |