Reference for app-manifestet
Manifestfilen stripe-app.json er den centrale konfiguration af din Stripe App. Den beskriver appens identitet, rettigheder, UI-visninger, sikkerhedspolitikker og adfærd efter installation.
Fuldt eksempel på et 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" }}Schema-reference
Felter på øverste niveau
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
id | string | Ja | Unikt app-id skrevet i omvendt domænenotation (slug-format) |
version | string | Ja | Semantisk versionsnummer (f.eks. "1.2.0") |
name | string | Ja | Det navn, der vises på marketplace (maks. 35 tegn) |
icon | string | Ja | Relativ sti til appens ikonfil (300x300 PNG eller SVG) |
distribution_type | string | Ja | "public" til marketplace eller "private" til intern brug |
sandbox_install_compatible | boolean | Nej | Om appen kan installeres i sandbox- eller testtilstand |
stripe_api_access_type | string | Nej | Metode til API-adgang: "oauth" eller "api_key" |
allowed_redirect_uris | string[] | Nej | Tilladte OAuth-redirect-URI’er i installationsflowet |
permissions | PermissionRequest[] | Ja | Liste over anmodninger om rettigheder |
ui_extension | UIExtensionManifest | Nej | Konfiguration af UI-udvidelsen |
post_install_action | PostInstallAction | Nej | Handling, der udføres efter installationen af appen |
constants | object | Nej | Nøgle-værdi-par, som appen kan tilgå ved kørsel |
id
Appens id er en streng i slug-format, typisk skrevet i omvendt domænenotation:
"id": "com.tajo.brevo-integration"- Skal være globalt unikt på tværs af alle Stripe Apps
- Brug kun små bogstaver, tal, bindestreger og punktummer
- Kan ikke ændres, når appen først er oprettet
- Bestemmer appens URL på marketplace
version
Følger semantisk versionering:
"version": "1.2.0"- MAJOR: Brydende ændringer eller væsentlige nye funktioner
- MINOR: Nye funktioner, bagudkompatible
- PATCH: Fejlrettelser og mindre forbedringer
- Skal tælles op ved hver upload
distribution_type
Bestemmer, hvem der kan installere din app:
| Værdi | Beskrivelse |
|---|---|
"public" | Tilgængelig for alle brugere på Stripe App Marketplace |
"private" | Kan kun installeres af din egen Stripe-konto |
stripe_api_access_type
Bestemmer, hvordan din app autentificerer sig mod Stripe API:
| Værdi | Beskrivelse |
|---|---|
"oauth" | Bruger OAuth 2.0-flowet til autentificering (anbefales til offentlige apps) |
"api_key" | Bruger begrænsede API-nøgler (velegnet til private apps) |
PermissionRequest
Hver anmodning om rettigheder angiver en bestemt Stripe API-rettighed, som din app har brug for:
{ "permission": "customer_read", "purpose": "Read customer profiles to sync with Brevo contacts"}| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
permission | string | Ja | Rettighedens id (se referencen over rettigheder) |
purpose | string | Ja | En forklaring i almindeligt sprog på, hvorfor rettigheden er nødvendig |
Retningslinjer for purpose:
- Skriv klare og konkrete forklaringer, som forhandlere kan forstå
- Forklar, hvad rettigheden bruges til, ikke bare hvad den giver adgang til
- Hold beskrivelsen kort (én sætning)
- Undgå teknisk jargon
UIExtensionManifest
Konfigurerer appens UI-komponenter:
{ "ui_extension": { "views": [...], "content_security_policy": {...} }}| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
views | ViewManifest[] | Ja | Liste over visninger, appen erklærer |
content_security_policy | CSPRequest | Nej | Content Security Policy for eksterne ressourcer |
ViewManifest
Hver visning knytter en React-komponent til et viewport i Stripe Dashboard:
{ "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView"}| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
viewport | string | Ja | Det sted i Dashboard, hvor visningen vises (se referencen over viewports) |
component | string | Ja | Navnet på den React-komponent, der skal renderes (skal matche navnet på den eksporterede komponent) |
En enkelt app kan erklære flere visninger til forskellige viewports:
"views": [ { "viewport": "stripe.dashboard.customer.detail", "component": "CustomerDetailView" }, { "viewport": "stripe.dashboard.payment.detail", "component": "PaymentDetailView" }, { "viewport": "stripe.dashboard.home.overview", "component": "OverviewView" }]CSPRequest
Din Content Security Policy bestemmer, hvilke eksterne domæner din app må forbinde 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åkrævet | Beskrivelse |
|---|---|---|---|
connect-src | string[] | Nej | De domæner, appen må sende netværksforespørgsler til |
image-src | string[] | Nej | De domæner, appen må hente billeder fra |
purpose | string | Ja | Forklaring på, hvorfor de eksterne forbindelser er nødvendige |
Caution
Medtag kun de domæner, din app reelt har brug for at forbinde til. For mange CSP-poster kan udløse en grundigere gennemgang.
PostInstallAction
Bestemmer, hvad der sker umiddelbart efter, at en bruger har installeret din app:
{ "post_install_action": { "type": "onboarding" }}| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
type | string | Ja | Handlingens type (se nedenfor) |
url | string | Betinget | URL til handlinger af typen external |
Handlingstyper
| Type | Adfærd |
|---|---|
"onboarding" | Åbner appens onboarding-visning i Dashboard |
"settings" | Åbner appens indstillingsvisning i Dashboard |
"external" | Sender brugeren videre til en ekstern URL (kræver 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 guiden til handlinger efter installation for detaljerede implementeringsmønstre.
Konstanter
Definér statiske nøgle-værdi-par, som din app kan tilgå ved kørsel:
{ "constants": { "API_BASE_URL": "https://api.tajo.io/v1", "SYNC_INTERVAL_SECONDS": "300", "MAX_BATCH_SIZE": "100" }}- Alle værdier skal være strenge
- Konstanter bliver bygget ind i appen på build-tidspunktet
- Brug konstanter til konfiguration, der er forskellig fra miljø til miljø
- Gem aldrig hemmeligheder eller API-nøgler som konstanter, brug Secret Store API i stedet
Tilgå konstanter i din app-kode:
import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;Udvidet manifest til udvikling
Under lokal udvikling har du adgang til nogle ekstra felter:
{ "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 }}Afsnittet dev fjernes ved produktionsbuilds og upload af appen. Brug det udelukkende til indstillinger, der gør lokal udvikling nemmere.
Validering
Validér dit manifest, før du uploader:
# Validate manifest syntax and schemastripe apps validate
# Check for common issuesstripe apps checkAlmindelige valideringsfejl:
| Fejl | Årsag | Løsning |
|---|---|---|
Invalid permission | Ukendt id for rettigheden | Tjek referencen over rettigheder |
Invalid viewport | Ukendt id for viewport | Tjek referencen over viewports |
Missing purpose | Rettighed uden feltet purpose | Tilføj en purpose-tekst til hver rettighed |
Invalid version | Versionsnummeret følger ikke semver | Brug formatet MAJOR.MINOR.PATCH |
Icon not found | Stien til ikonet kan ikke findes | Kontrollér, at ikonfilen ligger på den angivne sti |