App Manifest حوالہ

stripe-app.json manifest فائل آپ کی Stripe App کے لیے مرکزی کنفیگریشن ہے۔ یہ آپ کی app کی شناخت، اجازتیں، UI views، سیکیورٹی پالیسیاں اور post-install رویہ بیان کرتی ہے۔

مکمل 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 حوالہ

اعلی سطحی Fields

فیلڈقسمضروریتفصیل
idstringہاںreverse domain notation میں منفرد app شناخت کنندہ (slug فارمیٹ)
versionstringہاںSemantic version string (مثلاً "1.2.0")
namestringہاںmarketplace پر دکھایا جانے والا نام (زیادہ سے زیادہ 35 حروف)
iconstringہاںapp icon فائل کا relative path (300x300 PNG یا SVG)
distribution_typestringہاںmarketplace کے لیے "public" یا اندرونی استعمال کے لیے "private"
sandbox_install_compatiblebooleanنہیںآیا app sandbox/test موڈ میں انسٹال ہو سکتی ہے
stripe_api_access_typestringنہیںAPI access طریقہ: "oauth" یا "api_key"
allowed_redirect_urisstring[]نہیںinstall فلو کے لیے اجازت یافتہ OAuth redirect URIs
permissionsPermissionRequest[]ہاںاجازت درخواستوں کی صف
ui_extensionUIExtensionManifestنہیںUI extension کنفیگریشن
post_install_actionPostInstallActionنہیںapp انسٹالیشن کے بعد اٹھایا جانے والا عمل
constantsobjectنہیںruntime پر app میں قابل رسائی key-value جوڑے

id

App شناخت کنندہ ایک slug-format string ہے، عموماً reverse domain notation میں:

"id": "com.tajo.brevo-integration"
  • تمام Stripe Apps میں عالمی سطح پر منفرد ہونا چاہیے
  • صرف چھوٹے حروف، اعداد، hyphens اور dots استعمال کریں
  • app بننے کے بعد تبدیل نہیں کیا جا سکتا
  • marketplace پر app کا URL طے کرتا ہے

version

Semantic versioning کی پیروی کرتا ہے:

"version": "1.2.0"
  • MAJOR: Breaking تبدیلیاں یا اہم feature اضافے
  • MINOR: نئی خصوصیات، backward compatible
  • PATCH: Bug fixes اور معمولی بہتری
  • ہر upload کے لیے بڑھانا ضروری ہے

distribution_type

کنٹرول کرتا ہے کون آپ کی app انسٹال کر سکتا ہے:

قدرتفصیل
"public"تمام صارفین کے لیے Stripe App Marketplace پر دستیاب
"private"صرف آپ کے اپنے Stripe اکاؤنٹ سے انسٹال قابل

stripe_api_access_type

تعین کرتا ہے کہ آپ کی app Stripe API سے کیسے توثیق کرتی ہے:

قدرتفصیل
"oauth"توثیق کے لیے OAuth 2.0 فلو استعمال کرتا ہے (عوامی apps کے لیے تجویز شدہ)
"api_key"restricted API keys استعمال کرتا ہے (نجی apps کے لیے موزوں)

PermissionRequest

ہر اجازت درخواست ایک مخصوص Stripe API اجازت بیان کرتی ہے جو app کو چاہیے:

{
"permission": "customer_read",
"purpose": "Read customer profiles to sync with Brevo contacts"
}
فیلڈقسمضروریتفصیل
permissionstringہاںاجازت شناخت کنندہ (اجازتوں کا حوالہ دیکھیں)
purposestringہاںانسانی پڑھنے کے قابل وضاحت کہ یہ اجازت کیوں ضروری ہے

مقصد کی ہدایات:

  • واضح، مخصوص وضاحتیں لکھیں جو merchants سمجھ سکیں
  • بتائیں اجازت کس لیے استعمال کی جاتی ہے، نہ صرف یہ کیا دیتی ہے
  • وضاحتیں جامع رکھیں (ایک جملہ)
  • تکنیکی جرگن سے بچیں

UIExtensionManifest

آپ کی app کے UI اجزاء کنفیگر کرتا ہے:

{
"ui_extension": {
"views": [...],
"content_security_policy": {...}
}
}
فیلڈقسمضروریتفصیل
viewsViewManifest[]ہاںview declarations کی صف
content_security_policyCSPRequestنہیںبیرونی وسائل کے لیے Content Security Policy

ViewManifest

ہر view ایک React component کو ایک Stripe Dashboard viewport سے ملاتا ہے:

{
"viewport": "stripe.dashboard.customer.detail",
"component": "CustomerDetailView"
}
فیلڈقسمضروریتفصیل
viewportstringہاںDashboard کا وہ مقام جہاں یہ view render ہوگا (Viewports حوالہ دیکھیں)
componentstringہاںrender کرنے کے لیے React component کا نام (exported component نام سے مطابقت ضروری)

ایک app مختلف viewports کے لیے متعدد views بیان کر سکتی ہے:

"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 کنٹرول کرتی ہے کہ آپ کی app کون سے بیرونی domains سے connect کر سکتی ہے:

{
"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"
}
}
فیلڈقسمضروریتفصیل
connect-srcstring[]نہیںوہ domains جن پر app network requests بھیج سکتی ہے
image-srcstring[]نہیںوہ domains جن سے app تصاویر load کر سکتی ہے
purposestringہاںوضاحت کہ ان بیرونی connections کی ضرورت کیوں ہے

Caution

صرف وہ domains شامل کریں جن سے آپ کی app کو واقعی connect کرنے کی ضرورت ہے۔ ضرورت سے زیادہ CSP entries اضافی جائزہ جانچ پڑتال کو متحرک کر سکتی ہیں۔

PostInstallAction

کنفیگر کرتا ہے کہ صارف کے app انسٹال کرنے کے فوری بعد کیا ہوتا ہے:

{
"post_install_action": {
"type": "onboarding"
}
}
فیلڈقسمضروریتفصیل
typestringہاںعمل کی قسم (نیچے دیکھیں)
urlstringمشروطexternal قسم کے اعمال کے لیے URL

عمل کی اقسام

قسمرویہ
"onboarding"Dashboard میں app کا onboarding view کھولتا ہے
"settings"Dashboard میں app کا settings view کھولتا ہے
"external"صارف کو بیرونی URL پر redirect کرتا ہے (url فیلڈ ضروری)

مثالیں:

// onboarding فلو کھولیں
{
"post_install_action": {
"type": "onboarding"
}
}
// settings صفحہ کھولیں
{
"post_install_action": {
"type": "settings"
}
}
// بیرونی سیٹ اپ پر redirect کریں
{
"post_install_action": {
"type": "external",
"url": "https://app.tajo.io/stripe/setup"
}
}

تفصیلی نفاذ patterns کے لیے Post-Install Actions گائیڈ دیکھیں۔

Constants

runtime پر app میں قابل رسائی static key-value جوڑے تعریف کریں:

{
"constants": {
"API_BASE_URL": "https://api.tajo.io/v1",
"SYNC_INTERVAL_SECONDS": "300",
"MAX_BATCH_SIZE": "100"
}
}
  • تمام اقدار strings ہونی چاہئیں
  • Constants build time پر app میں embedded ہوتے ہیں
  • ماحول کے درمیان مختلف ہونے والی کنفیگریشن کے لیے constants استعمال کریں
  • کبھی secrets یا API keys کو constants کے طور پر محفوظ نہ کریں, اس کے بجائے Secret Store API استعمال کریں

اپنے app code میں constants تک رسائی:

import { constants } from '@stripe/ui-extension-sdk/constants';
const apiUrl = constants.API_BASE_URL;

ترقی کے لیے توسیعی Manifest

لوکل ترقی کے دوران، اضافی fields دستیاب ہیں:

{
"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
}
}

dev حصہ production builds اور app uploads کے دوران ہٹا دیا جاتا ہے۔ صرف لوکل ترقی کی سہولت کی ترتیبات کے لیے استعمال کریں۔

تصدیق

اپلوڈ سے پہلے manifest کی تصدیق کریں:

Terminal window
# manifest syntax اور schema کی تصدیق کریں
stripe apps validate
# عام مسائل چیک کریں
stripe apps check

عام تصدیق errors:

Errorوجہحل
Invalid permissionنامعلوم اجازت شناخت کنندہاجازتوں کا حوالہ چیک کریں
Invalid viewportنامعلوم viewport شناخت کنندہViewports حوالہ چیک کریں
Missing purposepurpose فیلڈ کے بغیر اجازتہر اجازت میں purpose string شامل کریں
Invalid versionnon-semver version stringMAJOR.MINOR.PATCH فارمیٹ استعمال کریں
Icon not foundIcon path حل نہیں ہوتاتصدیق کریں کہ icon فائل مخصوص path پر موجود ہے

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

AI معاون

السلام علیکم! دستاویزات کے بارے میں کچھ بھی پوچھیں۔

Brevo کے ساتھ مفت شروع کریں