@burdenoff/microfe-store 2026.1014.1 → 2026.1028.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ExternalListingBadge.d.ts +15 -0
- package/dist/components/ExternalListingBadge.js +19 -0
- package/dist/components/ExternalListingBadge.js.map +1 -0
- package/dist/generated/global-operations.d.ts +14 -0
- package/dist/generated/global-operations.js +14 -0
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.d.ts +377 -2
- package/dist/generated/global-types.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +20345 -404
- package/dist/hooks/useStoreGraphQL.d.ts +4 -0
- package/dist/hooks/useStoreGraphQL.js.map +1 -1
- package/dist/pages/MarketplaceHomePage.js +134 -127
- package/dist/pages/MarketplaceHomePage.js.map +1 -1
- package/dist/pages/ProductDetailPage.js +628 -601
- package/dist/pages/ProductDetailPage.js.map +1 -1
- package/dist/translations/en.d.ts +6 -0
- package/dist/translations/en.js +6 -0
- package/dist/translations/en.js.map +1 -1
- package/dist/utils/externalListing.d.ts +35 -0
- package/dist/utils/externalListing.js +34 -0
- package/dist/utils/externalListing.js.map +1 -0
- package/package.json +1 -1
|
@@ -321,6 +321,7 @@ export declare const enTranslations: {
|
|
|
321
321
|
};
|
|
322
322
|
pages: {
|
|
323
323
|
marketplace: {
|
|
324
|
+
soldOnProduct: string;
|
|
324
325
|
appTitle: string;
|
|
325
326
|
title: string;
|
|
326
327
|
subtitle: string;
|
|
@@ -418,6 +419,11 @@ export declare const enTranslations: {
|
|
|
418
419
|
installNow: string;
|
|
419
420
|
};
|
|
420
421
|
productDetail: {
|
|
422
|
+
viewOnProduct: string;
|
|
423
|
+
soldOnProductNotice: string;
|
|
424
|
+
soldElsewhereUnavailable: string;
|
|
425
|
+
nextStepSoldElsewhereLabel: string;
|
|
426
|
+
nextStepSoldElsewhereDescription: string;
|
|
421
427
|
overview: string;
|
|
422
428
|
reviews: string;
|
|
423
429
|
versions: string;
|
package/dist/translations/en.js
CHANGED
|
@@ -313,6 +313,7 @@ var e = {
|
|
|
313
313
|
},
|
|
314
314
|
pages: {
|
|
315
315
|
marketplace: {
|
|
316
|
+
soldOnProduct: "On {{product}}",
|
|
316
317
|
appTitle: "App",
|
|
317
318
|
title: "Marketplace",
|
|
318
319
|
subtitle: "Discover apps, workflows, and integrations for your workspace",
|
|
@@ -410,6 +411,11 @@ var e = {
|
|
|
410
411
|
installNow: "Install Now"
|
|
411
412
|
},
|
|
412
413
|
productDetail: {
|
|
414
|
+
viewOnProduct: "View on {{product}}",
|
|
415
|
+
soldOnProductNotice: "Sold by {{product}}. Checkout, delivery and returns are handled there.",
|
|
416
|
+
soldElsewhereUnavailable: "This item is sold outside the store and is not available right now.",
|
|
417
|
+
nextStepSoldElsewhereLabel: "Sold outside the store",
|
|
418
|
+
nextStepSoldElsewhereDescription: "This item is bought in the product that sells it, not through the store cart.",
|
|
413
419
|
overview: "Overview",
|
|
414
420
|
reviews: "Reviews",
|
|
415
421
|
versions: "Versions",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","names":[],"sources":["../../src/translations/en.ts"],"sourcesContent":["/**\n * Bundled English translations for microfe-store\n *\n * These serve as fallback translations when the i18n API is unavailable.\n * The i18n service should be the source of truth, but these ensure\n * the app remains usable even when translations can't be fetched.\n */\n\nexport const enTranslations = {\n // Store module\n store: {\n errors: {\n notFound: 'Store item not found',\n notFoundWithId: \"Store item with ID '{{id}}' not found\",\n productNotFound: 'Product not found',\n productNotFoundWithId: \"Product with ID '{{id}}' not found\",\n slugAlreadyExists: \"A product with slug '{{slug}}' already exists\",\n publisherNotFound: 'Publisher not found',\n publisherNotFoundWithId: \"Publisher with ID '{{id}}' not found\",\n categoryNotFound: 'Category not found',\n categoryNotFoundWithId: \"Category with ID '{{id}}' not found\",\n categoryAlreadyExists: \"Category '{{name}}' already exists\",\n versionNotFound: 'Version not found',\n versionNotFoundWithId: \"Version with ID '{{id}}' not found\",\n versionAlreadyExists: \"Version '{{version}}' already exists for this product\",\n reviewNotFound: 'Review not found',\n reviewNotFoundWithId: \"Review with ID '{{id}}' not found\",\n reviewAlreadyExists: 'You have already reviewed this product',\n entitlementNotFound: 'Entitlement not found',\n entitlementNotFoundWithId: \"Entitlement with ID '{{id}}' not found\",\n entitlementAlreadyExists: 'Entitlement already exists for this product',\n submissionNotFound: 'Submission not found',\n submissionNotFoundWithId: \"Submission with ID '{{id}}' not found\",\n submissionAlreadyPending: 'A submission is already pending for this product',\n orderNotFound: 'Order not found',\n orderNotFoundWithId: \"Order with ID '{{id}}' not found\",\n tagNotFound: 'Tag not found',\n tagNotFoundWithId: \"Tag with ID '{{id}}' not found\",\n tagAlreadyExists: \"Tag '{{name}}' already exists\",\n unauthorized: 'You are not authorized to perform this action',\n invalidInput: 'Invalid input provided',\n invalidStatus: 'Invalid status transition',\n cannotDeletePublished: 'Cannot delete a published product',\n cannotDeleteWithOrders: 'Cannot delete product with {{count}} orders',\n cannotDeleteWithEntitlements: 'Cannot delete product with active entitlements',\n productNotPublished: 'Product is not published',\n productAlreadyPublished: 'Product is already published',\n insufficientFunds: 'Insufficient funds to purchase this product',\n alreadyPurchased: 'You have already purchased this product',\n downloadFailed: 'Failed to download product',\n },\n success: {\n productCreated: \"Product '{{name}}' created successfully\",\n productUpdated: \"Product '{{name}}' updated successfully\",\n productDeleted: 'Product deleted successfully',\n productPublished: \"Product '{{name}}' published successfully\",\n productUnlisted: \"Product '{{name}}' unlisted successfully\",\n productDeprecated: \"Product '{{name}}' marked as deprecated\",\n versionCreated: \"Version '{{version}}' created successfully\",\n versionDeleted: 'Version deleted successfully',\n reviewCreated: 'Review submitted successfully',\n reviewUpdated: 'Review updated successfully',\n reviewDeleted: 'Review deleted successfully',\n reviewApproved: 'Review approved successfully',\n reviewRejected: 'Review rejected successfully',\n entitlementCreated: 'Entitlement created successfully',\n entitlementSuspended: 'Entitlement suspended',\n entitlementReactivated: 'Entitlement reactivated',\n entitlementDeleted: 'Entitlement deleted successfully',\n categoryCreated: \"Category '{{name}}' created successfully\",\n categoryUpdated: \"Category '{{name}}' updated successfully\",\n categoryDeleted: 'Category deleted successfully',\n submissionCreated: 'Submission created successfully',\n submissionApproved: 'Submission approved successfully',\n submissionRejected: 'Submission rejected',\n purchaseCompleted: 'Purchase completed successfully',\n downloadStarted: 'Download started',\n },\n validation: {\n nameRequired: 'Product name is required',\n nameTooShort: 'Product name must be at least {{min}} characters',\n nameTooLong: 'Product name cannot exceed {{max}} characters',\n slugRequired: 'Product slug is required',\n slugInvalid: 'Product slug contains invalid characters',\n descriptionTooLong: 'Description cannot exceed {{max}} characters',\n priceRequired: 'Price is required',\n priceInvalid: 'Price must be a positive number',\n currencyRequired: 'Currency is required',\n currencyInvalid: 'Invalid currency code',\n typeRequired: 'Product type is required',\n typeInvalid: 'Invalid product type',\n ratingRequired: 'Rating is required',\n ratingInvalid: 'Rating must be between 1 and 5',\n versionRequired: 'Version is required',\n versionInvalid: 'Invalid version format',\n },\n labels: {\n product: 'Product',\n products: 'Products',\n storeItem: 'Store Item',\n storeItems: 'Store Items',\n publisher: 'Publisher',\n publishers: 'Publishers',\n category: 'Category',\n categories: 'Categories',\n version: 'Version',\n versions: 'Versions',\n review: 'Review',\n reviews: 'Reviews',\n entitlement: 'Entitlement',\n entitlements: 'Entitlements',\n submission: 'Submission',\n submissions: 'Submissions',\n order: 'Order',\n orders: 'Orders',\n tag: 'Tag',\n tags: 'Tags',\n download: 'Download',\n downloads: 'Downloads',\n },\n status: {\n draft: 'Draft',\n pendingReview: 'Pending Review',\n published: 'Published',\n unlisted: 'Unlisted',\n deprecated: 'Deprecated',\n rejected: 'Rejected',\n archived: 'Archived',\n active: 'Active',\n suspended: 'Suspended',\n expired: 'Expired',\n pending: 'Pending',\n approved: 'Approved',\n processed: 'Processed',\n failed: 'Failed',\n refunded: 'Refunded',\n },\n productTypes: {\n app: 'Application',\n template: 'Template',\n integration: 'Integration',\n extension: 'Extension',\n theme: 'Theme',\n workflow: 'Workflow',\n node: 'Node',\n plugin: 'Plugin',\n component: 'Component',\n },\n pricingModels: {\n free: 'Free',\n paidOnetime: 'One-time Purchase',\n subscription: 'Subscription',\n },\n items: {\n zero: 'No items',\n one: '{{count}} item',\n other: '{{count}} items',\n },\n operations: {\n creating: 'Creating product...',\n updating: 'Updating product...',\n deleting: 'Deleting product...',\n publishing: 'Publishing product...',\n purchasing: 'Processing purchase...',\n downloading: 'Starting download...',\n loading: 'Loading store items...',\n },\n footer: {\n ready: 'Store Ready',\n },\n },\n\n // Publisher module\n publisher: {\n errors: {\n notFound: 'Publisher not found',\n notFoundWithId: \"Publisher with ID '{{id}}' not found\",\n alreadyExists: 'Publisher already exists for this user',\n notVerified: 'Publisher is not verified',\n unauthorized: 'You are not authorized to access this publisher',\n },\n success: {\n created: 'Publisher profile created successfully',\n updated: 'Publisher profile updated successfully',\n verified: 'Publisher verified successfully',\n },\n validation: {\n nameRequired: 'Publisher name is required',\n emailRequired: 'Publisher email is required',\n emailInvalid: 'Invalid email format',\n },\n },\n\n // Review module\n review: {\n errors: {\n notFound: 'Review not found',\n alreadyReviewed: 'You have already reviewed this product',\n cannotReviewOwn: 'You cannot review your own product',\n mustPurchase: 'You must purchase the product to review it',\n },\n validation: {\n ratingRequired: 'Rating is required',\n ratingRange: 'Rating must be between 1 and 5',\n },\n },\n\n // Order module\n order: {\n errors: {\n notFound: 'Order not found',\n alreadyProcessed: 'Order has already been processed',\n paymentFailed: 'Payment processing failed',\n refundFailed: 'Refund processing failed',\n },\n success: {\n created: 'Order created successfully',\n processed: 'Order processed successfully',\n refunded: 'Order refunded successfully',\n },\n },\n\n // Cart module\n cart: {\n title: 'Shopping Cart',\n empty: 'Your cart is empty',\n emptyHint: 'Start shopping to add items to your cart',\n checkout: 'Proceed to Checkout',\n continueShopping: 'Continue Shopping',\n removeItem: 'Remove {{name}} from cart',\n removeItemTitle: 'Remove item',\n clearCart: 'Clear cart',\n subtotal: 'Subtotal',\n total: 'Total',\n tax: 'Tax',\n each: '{{price}} each',\n closeCart: 'Close cart',\n quantity: 'Quantity: {{quantity}}',\n decreaseQuantity: 'Decrease quantity of {{name}}',\n increaseQuantity: 'Increase quantity of {{name}}',\n itemAdded: 'Item added to cart',\n itemRemoved: 'Item removed from cart',\n cartCleared: 'Cart cleared',\n mergeSuccess: 'Guest cart merged successfully',\n },\n\n // Install app modal\n installApp: {\n title: 'Install App',\n reviewPermissions: 'Review Permissions',\n selectWorkspace: 'Select the workspace where you want to install this app:',\n failedToLoadWorkspaces: 'Failed to load workspaces',\n noWorkspaces: 'No workspaces available',\n version: 'Version',\n latest: 'Latest',\n latestWithVersion: 'Latest ({{version}})',\n versionWithStatus: '{{version}} ({{status}})',\n installingInto: 'Installing into',\n permissionsRequested: 'Permissions requested',\n consentDescription:\n 'By clicking {{button}}, you grant {{appName}} access to the following in the selected workspace:',\n acceptAndInstall: 'Accept & Install',\n permissionReadWrite: 'Read and write data within this workspace on your behalf',\n permissionWebhooks: 'Receive webhook events for workspace activity',\n permissionAuthorized: 'Act as an authorized integration within this workspace',\n revokeHint: 'You can revoke access at any time from your Installed Apps settings.',\n installing: 'Installing…',\n installApp: 'Install App',\n },\n\n // Navigation\n nav: {\n marketplace: 'Marketplace',\n cart: 'Cart',\n orders: 'My Orders',\n sourcingRequests: 'Sourcing requests',\n sourcingOpportunities: 'Sourcing opportunities',\n sourcingOffers: 'My sourcing offers',\n installed: 'Installed Apps',\n licenses: 'Licenses',\n publisher: 'Publisher Portal',\n publisherDashboard: 'Dashboard',\n submitProduct: 'Submit Product',\n submissions: 'Submissions',\n revenue: 'Revenue',\n admin: 'Store Admin',\n reviewModeration: 'Review Moderation',\n },\n\n // Common / shared\n common: {\n accessDenied: 'Access Denied',\n accessDeniedDescription: 'You do not have permission to access this section.',\n moduleLoadError: 'Something went wrong loading this module. Please refresh the page.',\n error: 'Something went wrong',\n retry: 'Retry',\n save: 'Save',\n cancel: 'Cancel',\n delete: 'Delete',\n edit: 'Edit',\n create: 'Create',\n search: 'Search',\n filter: 'Filter',\n sort: 'Sort',\n noResults: 'No results found',\n viewAll: 'View All',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n tryAgain: 'Try Again',\n unknownPublisher: 'Unknown Publisher',\n unknown: 'Unknown',\n goBack: 'Go back',\n refresh: 'Refresh',\n close: 'Close',\n submit: 'Submit',\n confirm: 'Confirm',\n browse: 'Browse',\n continue: 'Continue',\n loading: 'Loading…',\n loadMore: 'Load more',\n product: 'Product',\n item: 'item',\n unknownProduct: 'Unknown product',\n notProvided: 'Not provided',\n notApplicable: 'N/A',\n markdownEditor: {\n write: 'Write',\n preview: 'Preview',\n formatting: 'Markdown formatting',\n bold: 'Bold',\n italic: 'Italic',\n link: 'Link',\n inlineCode: 'Inline code',\n bulletList: 'Bullet list',\n nothingToPreview: 'Nothing to preview.',\n },\n },\n\n // Page-level UI strings\n pages: {\n marketplace: {\n appTitle: 'App',\n title: 'Marketplace',\n subtitle: 'Discover apps, workflows, and integrations for your workspace',\n cart: 'Cart',\n search: {\n label: 'Search marketplace products',\n placeholder: 'Search apps, workflows, integrations...',\n clear: 'Clear search',\n searching: 'Searching...',\n resultCount: '{{count}} result{{plural}} for \"{{query}}\"',\n },\n filters: 'Filters',\n sortLabel: 'Sort',\n quickFilterFree: 'Free',\n quickFilterRating: '4+ Stars',\n quickFilterFeatured: 'Featured',\n clearAll: 'Clear all',\n filterPricing: 'Pricing',\n filterPrice: 'Price',\n filterMinRating: 'Min Rating',\n filterRating: 'Rating',\n filterCategory: 'Category',\n filterNature: 'Nature',\n filterLicense: 'License',\n activeFilters: 'Active filters:',\n activeFilterType: 'Type:',\n activeFilterPrice: 'Price:',\n activeFilterRating: 'Rating:',\n activeFilterCategory: 'Category:',\n activeFilterNature: 'Nature:',\n activeFilterLicense: 'License:',\n activeFilterFeatured: 'Featured Only',\n pricingAll: 'All Prices',\n pricingFree: 'Free',\n pricingPaid: 'Paid (One-time)',\n pricingSubscription: 'Subscription',\n ratingAny: 'Any Rating',\n rating3: '3+ Stars',\n rating3_5: '3.5+ Stars',\n rating4: '4+ Stars',\n rating4_5: '4.5+ Stars',\n natureAll: 'All Types',\n natureDigital: 'Digital',\n naturePhysical: 'Physical',\n sortRelevance: 'Relevance',\n sortRating: 'Highest Rated',\n sortDownloads: 'Most Downloads',\n sortNewest: 'Newest First',\n sortPriceLow: 'Price: Low to High',\n sortPriceHigh: 'Price: High to Low',\n sortNameAsc: 'Name A-Z',\n typeAll: 'All Apps',\n allCategories: 'All Categories',\n allLicenses: 'All Licenses',\n featured: 'Featured',\n featuredApp: 'Featured App',\n viewAll: 'View all',\n viewDetails: 'View Details',\n viewProduct: 'View {{name}}',\n free: 'Free',\n installed: 'Installed',\n downloads: '{{count}} downloads',\n downloadsCount: '{{count}} downloads',\n pagePurpose:\n 'The marketplace is where you discover and install apps, agents, workflows, nodes and widgets that extend your workspaces. Browse featured and trending picks, filter by type or category, search for something specific, then open any product to view pricing and reviews before adding it to your cart.',\n errorTitle: 'Failed to load marketplace',\n errorDescription: 'An error occurred while fetching products',\n browseByType: 'Browse by Type',\n searchResults: 'Search Results',\n filteredResults: 'Filtered Results',\n appsFound: '{{count}} app{{plural}} found',\n noFilterMatch: 'No apps match your filters',\n noFilterMatchDescription:\n 'Try adjusting your filter criteria or clearing filters to see more results.',\n clearAllFilters: 'Clear All Filters',\n mostDownloaded: 'Most Downloaded',\n mostDownloadedSubtitle: 'Top picks by our community',\n newReleases: 'New Releases',\n newReleasesSubtitle: 'Recently published apps',\n freeApps: 'Free Apps',\n freeAppsSubtitle: 'No cost, full functionality',\n allApps: 'All Apps',\n allAppsSubtitle: '{{count}} apps available',\n deprecatedApps: \"Deprecated Apps You've Installed\",\n deprecatedAppsSubtitle: 'These apps are no longer supported — hover the badge for details',\n deprecated: 'No Longer Supported',\n deprecatedHint:\n 'This node is no longer supported. We encourage you to migrate to newer alternatives.',\n noAppsTitle: 'No apps available yet',\n noAppsDescription:\n 'The marketplace is empty. Check back soon for new apps, workflows, and integrations.',\n filterByCategory: 'Filter by category',\n featuredApps: 'Featured Apps',\n popularApps: 'Popular Apps',\n recentlyUpdated: 'Recently Updated',\n noResults: 'No products found',\n noResultsDescription: 'Try adjusting your search or filter to find what you are looking for.',\n clearSearch: 'Clear search',\n installNow: 'Install Now',\n },\n productDetail: {\n overview: 'Overview',\n reviews: 'Reviews',\n versions: 'Versions',\n installApp: 'Install App',\n install: 'Install',\n installing: 'Installing...',\n installed: 'Installed',\n installedVersion: 'Installed v{{version}}',\n addToCart: 'Add to Cart',\n inCart: 'In Cart',\n alreadyInCart: 'Already in Cart',\n buyNow: 'Buy {{price}}',\n processing: 'Processing…',\n viewInstallation: 'View Installation',\n publisher: 'Publisher',\n category: 'Category',\n version: 'Version',\n updated: 'Updated',\n rating: 'Rating',\n reviews_count: '{{count}} reviews',\n downloadsCount: '{{count}}+ downloads',\n downloadsLabel: 'Downloads',\n typeLabel: 'Type',\n noReviews: 'No reviews yet',\n beFirstToReview: 'Be the first to review this product.',\n beFirstToReviewShort: 'No reviews yet. Be the first to review!',\n writeReview: 'Write a Review',\n submitReview: 'Submit Review',\n updateReview: 'Update Review',\n deleteReview: 'Delete Review',\n yourRating: 'Your Rating',\n yourRatingLabel: 'Your rating',\n yourReview: 'Your Review (optional)',\n reviewTitleLabel: 'Title',\n reviewTitlePlaceholder: 'Summarize your experience',\n reviewBodyLabel: 'Review',\n reviewBodyPlaceholder: 'What worked well? What should improve?',\n reviewPlaceholder: 'Share your experience with this product...',\n savingReview: 'Saving...',\n removingReview: 'Removing...',\n installToReview: 'Install this app to leave a review.',\n ratingRequired: 'Choose a rating from 1 to 5 stars.',\n reviewSaveError: 'We could not save your review. Please try again.',\n reviewUpdated: 'Your review was updated.',\n reviewSubmitted: 'Your review was submitted.',\n deleteReviewTitle: 'Delete review',\n deleteReviewMessage: 'Are you sure you want to remove your review?',\n reviewDeleteError: 'We could not remove your review. Please try again.',\n reviewRemoved: 'Your review was removed.',\n verifiedBuyer: 'Verified Buyer',\n markHelpful: 'Mark this review as helpful',\n helpful: 'Helpful ({{count}})',\n updatingHelpful: 'Updating…',\n showLess: 'Show less',\n showMore: 'Show more',\n showAllReviews: 'Show all {{count}} reviews',\n notFoundTitle: 'Product not found',\n notFoundDetail: 'The product you are looking for does not exist or has been removed.',\n backToMarketplace: 'Back to Marketplace',\n errorTitle: 'Failed to load product',\n errorDescription: 'An error occurred while loading the product details.',\n aboutThisApp: 'About this app',\n noDescription: 'No description available.',\n noDesc: 'No description available',\n ratingsAndReviews: 'Ratings & Reviews',\n requiredPermissions: 'Required Permissions',\n integrations: 'Integrations',\n additionalInformation: 'Additional Information',\n versionLabel: 'Version',\n publishedLabel: 'Published',\n updatedLabel: 'Updated',\n licenseLabel: 'License',\n minPlatformVersionLabel: 'Min Platform Version',\n appSupport: 'App support',\n documentation: 'Documentation',\n sourceRepository: 'Source repository',\n contactPublisher: 'Contact publisher',\n visitWebsite: 'Visit website',\n similarApps: 'Similar apps',\n previewTitle: 'Preview',\n noPreview: 'No preview available',\n noPreviewHint: 'Upload screenshots in the Store Listing tab to show a preview here',\n subscriptionPrice: '{{price}}/mo',\n outOfStock: 'Out of stock',\n inStock: '{{count}} in stock',\n quantity: 'Qty',\n decreaseQuantity: 'Decrease quantity',\n increaseQuantity: 'Increase quantity',\n updateToVersion: 'Update to v{{version}}',\n installToWorkspace: 'Install to Workspace',\n addToCartError: 'Failed to add this product to cart. Please try again.',\n createOrderError: 'Failed to create order. Please try again.',\n checkoutError: 'Failed to start checkout',\n pickupAvailable: 'Available for pickup — no shipping required',\n shipsToAddress: 'Ships to your delivery address',\n sellerReturnsPolicy: 'Returns and refunds are handled by {{seller}} per their store policy.',\n theSeller: 'the seller',\n availableForWorkspace: 'This app is available for your workspace',\n purchaseFinalNotice:\n 'All purchases are final. Digital app orders cannot be cancelled or refunded once completed.',\n licenseStatus: 'License: {{status}}',\n licenseExpires: ' (Expires: {{date}})',\n pagePurpose:\n 'Everything you need to decide whether to install {{name}}: what it does, screenshots, pricing, the permissions and integrations it needs, and real customer reviews. When you are ready, install it (free apps) or buy it, then add it to a workspace — and leave a review once you have used it.',\n nextStepInstallLabel: 'Install this app',\n nextStepInstallDescription: 'It’s free — add it to a workspace in a couple of clicks.',\n nextStepBuyLabel: 'Buy or add to cart',\n nextStepOwnedDescription: 'You already own this — install it where you need it.',\n nextStepBuyDescription: 'Purchase now, or add it to your cart to check out later.',\n nextStepPermissionsLabel: 'Review what it can access',\n nextStepPermissionsDescription: 'Check the permissions this app requires before installing.',\n nextStepReviewsLabel: 'Read the reviews',\n nextStepReviewsDescription: 'See what other customers think before committing.',\n cancelReviewEditing: 'Cancel review editing',\n editYourReview: 'Edit your review',\n cancelReview: 'Cancel review',\n },\n cart: {\n title: 'Shopping Cart',\n items: '{{count}} items',\n item: '{{count}} item',\n emptyTitle: 'Your cart is empty',\n emptyDescription:\n 'Looks like you have not added any apps or products to your cart yet. Start exploring the marketplace to find something you will love!',\n browseMarketplace: 'Browse Marketplace',\n cartItems: 'Cart Items ({{count}})',\n clearCart: 'Clear Cart',\n singleLicense: 'Single license',\n qty: 'Qty:',\n each: '{{price}} each',\n digital: 'Digital',\n physical: 'Physical',\n subscription: 'Subscription',\n orderSummary: 'Order Summary',\n subtotal: 'Subtotal',\n estimatedTaxes: 'Estimated taxes',\n calculatedAtCheckout: 'Calculated at checkout',\n totalPlusTaxes: 'Total (+ taxes)',\n proceedToCheckout: 'Proceed to Checkout',\n processing: 'Processing...',\n secureCheckout: 'Secure checkout powered by Stripe',\n weAccept: 'We accept:',\n continueShopping: 'Continue Shopping',\n failedToCreate: 'Failed to create order. Please try again.',\n checkoutError: 'An error occurred during checkout',\n },\n orders: {\n title: 'My Orders',\n subtitle: 'Track and manage your purchases',\n emptyTitle: 'No orders yet',\n emptyDescription: 'Your orders will appear here once you make a purchase.',\n shopNow: 'Shop Now',\n orderNumber: 'Order #{{number}}',\n orderDate: 'Ordered on {{date}}',\n items_count: '{{count}} item(s)',\n viewDetails: 'View Details',\n installApp: 'Install App',\n installed: 'Installed',\n failedToLoad: 'Failed to load orders',\n filterAll: 'All',\n reorder: 'Reorder',\n loading: 'Loading your orders…',\n browseMarketplace: 'Browse Marketplace',\n tabCompleted: 'Completed',\n tabPending: 'Pending',\n noCompletedTitle: 'No completed orders yet',\n noPendingTitle: 'No pending orders',\n colOrder: 'Order',\n colDate: 'Date',\n colItems: 'Items',\n colTotal: 'Total',\n colStatus: 'Status',\n colProduct: 'Product',\n colQty: 'Qty',\n colPrice: 'Price',\n colAction: 'Action',\n item: 'item',\n items: 'items',\n orderTracking: 'Order tracking',\n statusPending: 'Pending',\n statusCompleted: 'Completed',\n statusProcessing: 'Processing',\n statusFailed: 'Failed',\n statusRefunded: 'Refunded',\n statusCancelled: 'Cancelled',\n estimatedDelivery: 'Est. delivery {{date}}',\n trackingNumber: 'Tracking #: {{number}}',\n trackPackage: 'Track package',\n stepProcessing: 'Processing',\n stepShipped: 'Shipped',\n stepOutForDelivery: 'Out for delivery',\n stepDelivered: 'Delivered',\n qtyTimesPrice: '{{qty}} × {{price}}',\n subtotal: 'Subtotal:',\n tax: 'Tax:',\n total: 'Total:',\n },\n orderConfirmation: {\n title: 'Order placed successfully',\n totalAt: 'Total: {{total}}',\n orderId: 'Order ID',\n loading: 'Loading your order…',\n shipping: 'Shipping',\n status: 'Status: {{status}}',\n estimatedDelivery: 'Estimated delivery: {{date}}',\n trackPackage: 'Track package',\n licenses: 'Your licenses ({{count}})',\n expires: 'Expires: {{date}}',\n copyLicenseKey: 'Copy license key',\n copied: 'Copied to clipboard',\n installToWorkspace: 'Install to workspace',\n subtitle: \"Thank you for your purchase. We'll send a confirmation to your email.\",\n orderNumber: 'Order Number',\n orderDate: 'Order Date',\n paymentStatus: 'Payment Status',\n orderStatus: 'Order Status',\n orderItems: 'Order Items',\n orderSummary: 'Order Summary',\n subtotal: 'Subtotal',\n tax: 'Tax',\n total: 'Total',\n whatsNext: \"What's next?\",\n nextInstall: 'Install what you bought',\n nextTrack: 'Track your order',\n nextReceipt: 'Keep this receipt',\n nextDiscover: 'Discover more',\n nextStep1: \"You'll receive a confirmation email with your order details.\",\n nextStep2: 'Your digital products will be available for installation immediately.',\n nextStep3: 'Physical products will be shipped within 3-5 business days.',\n viewOrders: 'View My Orders',\n continueShopping: 'Continue Shopping',\n installNow: 'Install Now',\n },\n installed: {\n title: 'Installed Apps',\n subtitle: 'Manage your installed applications',\n emptyTitle: 'No installed apps',\n emptyDescription: 'Install apps from the marketplace to manage them here.',\n browseMarketplace: 'Browse Marketplace',\n failedToLoad: 'Failed to load installations',\n filterAll: 'All',\n viewDetails: 'View Details',\n uninstall: 'Uninstall',\n settings: 'Settings',\n statusAll: 'All',\n installNew: 'Install New App',\n statusActive: 'Active',\n statusInactive: 'Inactive',\n statusPending: 'Pending',\n statusInstalling: 'Installing',\n statusFailed: 'Failed',\n statusUninstalled: 'Uninstalled',\n uninstallError: 'Could not uninstall. Try again.',\n searchPlaceholder: 'Search by name, workspace…',\n noMatchTitle: 'No apps match this filter',\n noMatchDescription: 'Try a different status filter, or browse the marketplace.',\n emptyTitleAlt: 'No apps installed',\n emptyDescriptionAlt: 'Browse the marketplace to install your first app.',\n noSearchResults: 'No results match your search.',\n colApp: 'App',\n colWorkspace: 'Workspace',\n colStatus: 'Status',\n colVersion: 'Version',\n colInstalled: 'Installed',\n colActions: 'Actions',\n delisted: 'Delisted',\n details: 'Details',\n configure: 'Configure',\n product: 'Product',\n uninstallTitle: 'Uninstall app',\n uninstallPrompt: 'Remove {{app}} from {{workspace}}?',\n },\n appDetail: {\n title: 'App Details',\n version: 'Version',\n status: 'Status',\n installedAt: 'Installed At',\n uninstall: 'Uninstall',\n uninstalling: 'Uninstalling...',\n settings: 'Settings',\n openSettings: 'Open Settings',\n failedToLoad: 'Failed to load app details',\n notFound: 'App Not Found',\n notFoundDescription: 'The installation you are looking for could not be found.',\n loading: 'Loading installation…',\n backToInstalled: 'Back to installed apps',\n integrationConfigTitle: \"Configuration is managed on the third-party's side\",\n installationId: 'Installation ID: {{id}}',\n manageConfig: 'Manage configuration',\n openProductPage: 'Open the product page',\n installedAtLabel: 'Installed at',\n updatedAt: 'Updated at',\n workspaceId: 'Workspace ID',\n organizationId: 'Organization ID',\n installedBy: 'Installed by',\n runtimeMetadata: 'Runtime metadata',\n metadata: 'metadata',\n },\n appSettings: {\n title: 'App Settings',\n saveSettings: 'Save Settings',\n saving: 'Saving...',\n settingsSaved: 'Settings saved successfully',\n failedToSave: 'Failed to save settings',\n noSettings: 'No configurable settings',\n noSettingsDescription: 'This app does not have any configurable settings.',\n loading: 'Loading settings…',\n notFound: 'Installation not found',\n backToInstalled: 'Back to installed apps',\n configDetails: 'configuration details',\n manifest: 'Manifest',\n metadataContext: 'Metadata & Context',\n },\n licenses: {\n title: 'My Licenses',\n subtitle: 'Review and manage your product entitlements',\n emptyTitle: 'No licenses yet',\n emptyDescription: 'Purchase apps from the marketplace to see your licenses here.',\n browseMarketplace: 'Browse Marketplace',\n failedToLoad: 'Failed to load licenses',\n productId: 'Product {{id}}',\n entitlementId: 'Entitlement ID: {{id}}',\n licenseKey: 'License key: {{key}}',\n expiresOn: 'Expires on {{date}}',\n loading: 'Loading licenses',\n product: 'Product {{id}}',\n },\n publisherDashboard: {\n title: 'Publisher Dashboard',\n subtitle: 'Manage your products and track performance',\n totalProducts: 'Total Products',\n totalRevenue: 'Total Revenue',\n totalInstalls: 'Total Installs',\n pendingReviews: 'Pending Reviews',\n recentSubmissions: 'Recent Submissions',\n quickActions: 'Quick Actions',\n submitNewProduct: 'Submit New Product',\n viewSubmissions: 'View Submissions',\n viewRevenue: 'View Revenue',\n noProducts: 'No products yet',\n notRegistered: 'Not a publisher yet',\n registerNow: 'Register as Publisher',\n failedToLoad: 'Failed to load dashboard',\n },\n publisherSubmit: {\n title: 'Submit Product',\n productIdLabel: 'Product ID',\n productIdPlaceholder: 'Enter product ID to submit for review',\n notesLabel: 'Notes (optional)',\n notesPlaceholder: 'Add any notes for the reviewer...',\n submitButton: 'Submit for Review',\n submitting: 'Submitting...',\n successTitle: 'Submission Successful',\n successDescription: 'Your product has been submitted for review.',\n viewSubmissions: 'View Submissions',\n submitAnother: 'Submit Another',\n },\n publisherSubmissions: {\n title: 'My Submissions',\n subtitle: 'Track the status of your product submissions',\n emptyTitle: 'No submissions yet',\n emptyDescription: 'Submit a product for review to see it here.',\n submitProduct: 'Submit a Product',\n failedToLoad: 'Failed to load submissions',\n submittedOn: 'Submitted on {{date}}',\n reviewedOn: 'Reviewed on {{date}}',\n reviewNotes: 'Review notes: {{notes}}',\n },\n publisherRevenue: {\n title: 'Revenue',\n subtitle: 'Track your earnings and payouts',\n totalEarnings: 'Total Earnings',\n pendingPayout: 'Pending Payout',\n lastPayout: 'Last Payout',\n revenueHistory: 'Revenue History',\n noRevenue: 'No revenue data yet',\n noRevenueDescription:\n 'Revenue data will appear here once your products start generating sales.',\n period: 'Period',\n amount: 'Amount',\n status: 'Status',\n },\n productReviews: {\n title: 'Product Reviews',\n subtitle: 'Manage reviews for your products',\n failedToLoad: 'Failed to load reviews',\n noReviews: 'No reviews yet',\n noReviewsDescription:\n 'Reviews will appear here once customers start reviewing your products.',\n rating: 'Rating',\n reviewer: 'Reviewer',\n date: 'Date',\n approve: 'Approve',\n reject: 'Reject',\n },\n search: {\n title: 'Search Results',\n resultsFor: 'Results for \"{{query}}\"',\n noResults: 'No results found',\n noResultsDescription: 'Try different keywords or browse the marketplace.',\n browseMarketplace: 'Browse Marketplace',\n resultCount: '{{count}} results',\n placeholder: 'Search apps, workflows, integrations...',\n searching: 'Searching…',\n emptyTitle: 'Search the marketplace',\n noResultsTitle: 'No matching products found',\n },\n stores: {\n title: 'Stores',\n subtitle: 'Browse available stores',\n emptyTitle: 'No stores found',\n emptyDescription: 'No stores are currently available.',\n failedToLoad: 'Failed to load stores',\n },\n category: {\n title: '{{name}}',\n noProducts: 'No products in this category',\n noProductsDescription: 'Check back later for new products in this category.',\n browseAll: 'Browse All Products',\n thisCategory: 'this category',\n },\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"en.js","names":[],"sources":["../../src/translations/en.ts"],"sourcesContent":["/**\n * Bundled English translations for microfe-store\n *\n * These serve as fallback translations when the i18n API is unavailable.\n * The i18n service should be the source of truth, but these ensure\n * the app remains usable even when translations can't be fetched.\n */\n\nexport const enTranslations = {\n // Store module\n store: {\n errors: {\n notFound: 'Store item not found',\n notFoundWithId: \"Store item with ID '{{id}}' not found\",\n productNotFound: 'Product not found',\n productNotFoundWithId: \"Product with ID '{{id}}' not found\",\n slugAlreadyExists: \"A product with slug '{{slug}}' already exists\",\n publisherNotFound: 'Publisher not found',\n publisherNotFoundWithId: \"Publisher with ID '{{id}}' not found\",\n categoryNotFound: 'Category not found',\n categoryNotFoundWithId: \"Category with ID '{{id}}' not found\",\n categoryAlreadyExists: \"Category '{{name}}' already exists\",\n versionNotFound: 'Version not found',\n versionNotFoundWithId: \"Version with ID '{{id}}' not found\",\n versionAlreadyExists: \"Version '{{version}}' already exists for this product\",\n reviewNotFound: 'Review not found',\n reviewNotFoundWithId: \"Review with ID '{{id}}' not found\",\n reviewAlreadyExists: 'You have already reviewed this product',\n entitlementNotFound: 'Entitlement not found',\n entitlementNotFoundWithId: \"Entitlement with ID '{{id}}' not found\",\n entitlementAlreadyExists: 'Entitlement already exists for this product',\n submissionNotFound: 'Submission not found',\n submissionNotFoundWithId: \"Submission with ID '{{id}}' not found\",\n submissionAlreadyPending: 'A submission is already pending for this product',\n orderNotFound: 'Order not found',\n orderNotFoundWithId: \"Order with ID '{{id}}' not found\",\n tagNotFound: 'Tag not found',\n tagNotFoundWithId: \"Tag with ID '{{id}}' not found\",\n tagAlreadyExists: \"Tag '{{name}}' already exists\",\n unauthorized: 'You are not authorized to perform this action',\n invalidInput: 'Invalid input provided',\n invalidStatus: 'Invalid status transition',\n cannotDeletePublished: 'Cannot delete a published product',\n cannotDeleteWithOrders: 'Cannot delete product with {{count}} orders',\n cannotDeleteWithEntitlements: 'Cannot delete product with active entitlements',\n productNotPublished: 'Product is not published',\n productAlreadyPublished: 'Product is already published',\n insufficientFunds: 'Insufficient funds to purchase this product',\n alreadyPurchased: 'You have already purchased this product',\n downloadFailed: 'Failed to download product',\n },\n success: {\n productCreated: \"Product '{{name}}' created successfully\",\n productUpdated: \"Product '{{name}}' updated successfully\",\n productDeleted: 'Product deleted successfully',\n productPublished: \"Product '{{name}}' published successfully\",\n productUnlisted: \"Product '{{name}}' unlisted successfully\",\n productDeprecated: \"Product '{{name}}' marked as deprecated\",\n versionCreated: \"Version '{{version}}' created successfully\",\n versionDeleted: 'Version deleted successfully',\n reviewCreated: 'Review submitted successfully',\n reviewUpdated: 'Review updated successfully',\n reviewDeleted: 'Review deleted successfully',\n reviewApproved: 'Review approved successfully',\n reviewRejected: 'Review rejected successfully',\n entitlementCreated: 'Entitlement created successfully',\n entitlementSuspended: 'Entitlement suspended',\n entitlementReactivated: 'Entitlement reactivated',\n entitlementDeleted: 'Entitlement deleted successfully',\n categoryCreated: \"Category '{{name}}' created successfully\",\n categoryUpdated: \"Category '{{name}}' updated successfully\",\n categoryDeleted: 'Category deleted successfully',\n submissionCreated: 'Submission created successfully',\n submissionApproved: 'Submission approved successfully',\n submissionRejected: 'Submission rejected',\n purchaseCompleted: 'Purchase completed successfully',\n downloadStarted: 'Download started',\n },\n validation: {\n nameRequired: 'Product name is required',\n nameTooShort: 'Product name must be at least {{min}} characters',\n nameTooLong: 'Product name cannot exceed {{max}} characters',\n slugRequired: 'Product slug is required',\n slugInvalid: 'Product slug contains invalid characters',\n descriptionTooLong: 'Description cannot exceed {{max}} characters',\n priceRequired: 'Price is required',\n priceInvalid: 'Price must be a positive number',\n currencyRequired: 'Currency is required',\n currencyInvalid: 'Invalid currency code',\n typeRequired: 'Product type is required',\n typeInvalid: 'Invalid product type',\n ratingRequired: 'Rating is required',\n ratingInvalid: 'Rating must be between 1 and 5',\n versionRequired: 'Version is required',\n versionInvalid: 'Invalid version format',\n },\n labels: {\n product: 'Product',\n products: 'Products',\n storeItem: 'Store Item',\n storeItems: 'Store Items',\n publisher: 'Publisher',\n publishers: 'Publishers',\n category: 'Category',\n categories: 'Categories',\n version: 'Version',\n versions: 'Versions',\n review: 'Review',\n reviews: 'Reviews',\n entitlement: 'Entitlement',\n entitlements: 'Entitlements',\n submission: 'Submission',\n submissions: 'Submissions',\n order: 'Order',\n orders: 'Orders',\n tag: 'Tag',\n tags: 'Tags',\n download: 'Download',\n downloads: 'Downloads',\n },\n status: {\n draft: 'Draft',\n pendingReview: 'Pending Review',\n published: 'Published',\n unlisted: 'Unlisted',\n deprecated: 'Deprecated',\n rejected: 'Rejected',\n archived: 'Archived',\n active: 'Active',\n suspended: 'Suspended',\n expired: 'Expired',\n pending: 'Pending',\n approved: 'Approved',\n processed: 'Processed',\n failed: 'Failed',\n refunded: 'Refunded',\n },\n productTypes: {\n app: 'Application',\n template: 'Template',\n integration: 'Integration',\n extension: 'Extension',\n theme: 'Theme',\n workflow: 'Workflow',\n node: 'Node',\n plugin: 'Plugin',\n component: 'Component',\n },\n pricingModels: {\n free: 'Free',\n paidOnetime: 'One-time Purchase',\n subscription: 'Subscription',\n },\n items: {\n zero: 'No items',\n one: '{{count}} item',\n other: '{{count}} items',\n },\n operations: {\n creating: 'Creating product...',\n updating: 'Updating product...',\n deleting: 'Deleting product...',\n publishing: 'Publishing product...',\n purchasing: 'Processing purchase...',\n downloading: 'Starting download...',\n loading: 'Loading store items...',\n },\n footer: {\n ready: 'Store Ready',\n },\n },\n\n // Publisher module\n publisher: {\n errors: {\n notFound: 'Publisher not found',\n notFoundWithId: \"Publisher with ID '{{id}}' not found\",\n alreadyExists: 'Publisher already exists for this user',\n notVerified: 'Publisher is not verified',\n unauthorized: 'You are not authorized to access this publisher',\n },\n success: {\n created: 'Publisher profile created successfully',\n updated: 'Publisher profile updated successfully',\n verified: 'Publisher verified successfully',\n },\n validation: {\n nameRequired: 'Publisher name is required',\n emailRequired: 'Publisher email is required',\n emailInvalid: 'Invalid email format',\n },\n },\n\n // Review module\n review: {\n errors: {\n notFound: 'Review not found',\n alreadyReviewed: 'You have already reviewed this product',\n cannotReviewOwn: 'You cannot review your own product',\n mustPurchase: 'You must purchase the product to review it',\n },\n validation: {\n ratingRequired: 'Rating is required',\n ratingRange: 'Rating must be between 1 and 5',\n },\n },\n\n // Order module\n order: {\n errors: {\n notFound: 'Order not found',\n alreadyProcessed: 'Order has already been processed',\n paymentFailed: 'Payment processing failed',\n refundFailed: 'Refund processing failed',\n },\n success: {\n created: 'Order created successfully',\n processed: 'Order processed successfully',\n refunded: 'Order refunded successfully',\n },\n },\n\n // Cart module\n cart: {\n title: 'Shopping Cart',\n empty: 'Your cart is empty',\n emptyHint: 'Start shopping to add items to your cart',\n checkout: 'Proceed to Checkout',\n continueShopping: 'Continue Shopping',\n removeItem: 'Remove {{name}} from cart',\n removeItemTitle: 'Remove item',\n clearCart: 'Clear cart',\n subtotal: 'Subtotal',\n total: 'Total',\n tax: 'Tax',\n each: '{{price}} each',\n closeCart: 'Close cart',\n quantity: 'Quantity: {{quantity}}',\n decreaseQuantity: 'Decrease quantity of {{name}}',\n increaseQuantity: 'Increase quantity of {{name}}',\n itemAdded: 'Item added to cart',\n itemRemoved: 'Item removed from cart',\n cartCleared: 'Cart cleared',\n mergeSuccess: 'Guest cart merged successfully',\n },\n\n // Install app modal\n installApp: {\n title: 'Install App',\n reviewPermissions: 'Review Permissions',\n selectWorkspace: 'Select the workspace where you want to install this app:',\n failedToLoadWorkspaces: 'Failed to load workspaces',\n noWorkspaces: 'No workspaces available',\n version: 'Version',\n latest: 'Latest',\n latestWithVersion: 'Latest ({{version}})',\n versionWithStatus: '{{version}} ({{status}})',\n installingInto: 'Installing into',\n permissionsRequested: 'Permissions requested',\n consentDescription:\n 'By clicking {{button}}, you grant {{appName}} access to the following in the selected workspace:',\n acceptAndInstall: 'Accept & Install',\n permissionReadWrite: 'Read and write data within this workspace on your behalf',\n permissionWebhooks: 'Receive webhook events for workspace activity',\n permissionAuthorized: 'Act as an authorized integration within this workspace',\n revokeHint: 'You can revoke access at any time from your Installed Apps settings.',\n installing: 'Installing…',\n installApp: 'Install App',\n },\n\n // Navigation\n nav: {\n marketplace: 'Marketplace',\n cart: 'Cart',\n orders: 'My Orders',\n sourcingRequests: 'Sourcing requests',\n sourcingOpportunities: 'Sourcing opportunities',\n sourcingOffers: 'My sourcing offers',\n installed: 'Installed Apps',\n licenses: 'Licenses',\n publisher: 'Publisher Portal',\n publisherDashboard: 'Dashboard',\n submitProduct: 'Submit Product',\n submissions: 'Submissions',\n revenue: 'Revenue',\n admin: 'Store Admin',\n reviewModeration: 'Review Moderation',\n },\n\n // Common / shared\n common: {\n accessDenied: 'Access Denied',\n accessDeniedDescription: 'You do not have permission to access this section.',\n moduleLoadError: 'Something went wrong loading this module. Please refresh the page.',\n error: 'Something went wrong',\n retry: 'Retry',\n save: 'Save',\n cancel: 'Cancel',\n delete: 'Delete',\n edit: 'Edit',\n create: 'Create',\n search: 'Search',\n filter: 'Filter',\n sort: 'Sort',\n noResults: 'No results found',\n viewAll: 'View All',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n tryAgain: 'Try Again',\n unknownPublisher: 'Unknown Publisher',\n unknown: 'Unknown',\n goBack: 'Go back',\n refresh: 'Refresh',\n close: 'Close',\n submit: 'Submit',\n confirm: 'Confirm',\n browse: 'Browse',\n continue: 'Continue',\n loading: 'Loading…',\n loadMore: 'Load more',\n product: 'Product',\n item: 'item',\n unknownProduct: 'Unknown product',\n notProvided: 'Not provided',\n notApplicable: 'N/A',\n markdownEditor: {\n write: 'Write',\n preview: 'Preview',\n formatting: 'Markdown formatting',\n bold: 'Bold',\n italic: 'Italic',\n link: 'Link',\n inlineCode: 'Inline code',\n bulletList: 'Bullet list',\n nothingToPreview: 'Nothing to preview.',\n },\n },\n\n // Page-level UI strings\n pages: {\n marketplace: {\n soldOnProduct: 'On {{product}}',\n appTitle: 'App',\n title: 'Marketplace',\n subtitle: 'Discover apps, workflows, and integrations for your workspace',\n cart: 'Cart',\n search: {\n label: 'Search marketplace products',\n placeholder: 'Search apps, workflows, integrations...',\n clear: 'Clear search',\n searching: 'Searching...',\n resultCount: '{{count}} result{{plural}} for \"{{query}}\"',\n },\n filters: 'Filters',\n sortLabel: 'Sort',\n quickFilterFree: 'Free',\n quickFilterRating: '4+ Stars',\n quickFilterFeatured: 'Featured',\n clearAll: 'Clear all',\n filterPricing: 'Pricing',\n filterPrice: 'Price',\n filterMinRating: 'Min Rating',\n filterRating: 'Rating',\n filterCategory: 'Category',\n filterNature: 'Nature',\n filterLicense: 'License',\n activeFilters: 'Active filters:',\n activeFilterType: 'Type:',\n activeFilterPrice: 'Price:',\n activeFilterRating: 'Rating:',\n activeFilterCategory: 'Category:',\n activeFilterNature: 'Nature:',\n activeFilterLicense: 'License:',\n activeFilterFeatured: 'Featured Only',\n pricingAll: 'All Prices',\n pricingFree: 'Free',\n pricingPaid: 'Paid (One-time)',\n pricingSubscription: 'Subscription',\n ratingAny: 'Any Rating',\n rating3: '3+ Stars',\n rating3_5: '3.5+ Stars',\n rating4: '4+ Stars',\n rating4_5: '4.5+ Stars',\n natureAll: 'All Types',\n natureDigital: 'Digital',\n naturePhysical: 'Physical',\n sortRelevance: 'Relevance',\n sortRating: 'Highest Rated',\n sortDownloads: 'Most Downloads',\n sortNewest: 'Newest First',\n sortPriceLow: 'Price: Low to High',\n sortPriceHigh: 'Price: High to Low',\n sortNameAsc: 'Name A-Z',\n typeAll: 'All Apps',\n allCategories: 'All Categories',\n allLicenses: 'All Licenses',\n featured: 'Featured',\n featuredApp: 'Featured App',\n viewAll: 'View all',\n viewDetails: 'View Details',\n viewProduct: 'View {{name}}',\n free: 'Free',\n installed: 'Installed',\n downloads: '{{count}} downloads',\n downloadsCount: '{{count}} downloads',\n pagePurpose:\n 'The marketplace is where you discover and install apps, agents, workflows, nodes and widgets that extend your workspaces. Browse featured and trending picks, filter by type or category, search for something specific, then open any product to view pricing and reviews before adding it to your cart.',\n errorTitle: 'Failed to load marketplace',\n errorDescription: 'An error occurred while fetching products',\n browseByType: 'Browse by Type',\n searchResults: 'Search Results',\n filteredResults: 'Filtered Results',\n appsFound: '{{count}} app{{plural}} found',\n noFilterMatch: 'No apps match your filters',\n noFilterMatchDescription:\n 'Try adjusting your filter criteria or clearing filters to see more results.',\n clearAllFilters: 'Clear All Filters',\n mostDownloaded: 'Most Downloaded',\n mostDownloadedSubtitle: 'Top picks by our community',\n newReleases: 'New Releases',\n newReleasesSubtitle: 'Recently published apps',\n freeApps: 'Free Apps',\n freeAppsSubtitle: 'No cost, full functionality',\n allApps: 'All Apps',\n allAppsSubtitle: '{{count}} apps available',\n deprecatedApps: \"Deprecated Apps You've Installed\",\n deprecatedAppsSubtitle: 'These apps are no longer supported — hover the badge for details',\n deprecated: 'No Longer Supported',\n deprecatedHint:\n 'This node is no longer supported. We encourage you to migrate to newer alternatives.',\n noAppsTitle: 'No apps available yet',\n noAppsDescription:\n 'The marketplace is empty. Check back soon for new apps, workflows, and integrations.',\n filterByCategory: 'Filter by category',\n featuredApps: 'Featured Apps',\n popularApps: 'Popular Apps',\n recentlyUpdated: 'Recently Updated',\n noResults: 'No products found',\n noResultsDescription: 'Try adjusting your search or filter to find what you are looking for.',\n clearSearch: 'Clear search',\n installNow: 'Install Now',\n },\n productDetail: {\n viewOnProduct: 'View on {{product}}',\n soldOnProductNotice: 'Sold by {{product}}. Checkout, delivery and returns are handled there.',\n soldElsewhereUnavailable:\n 'This item is sold outside the store and is not available right now.',\n nextStepSoldElsewhereLabel: 'Sold outside the store',\n nextStepSoldElsewhereDescription:\n 'This item is bought in the product that sells it, not through the store cart.',\n overview: 'Overview',\n reviews: 'Reviews',\n versions: 'Versions',\n installApp: 'Install App',\n install: 'Install',\n installing: 'Installing...',\n installed: 'Installed',\n installedVersion: 'Installed v{{version}}',\n addToCart: 'Add to Cart',\n inCart: 'In Cart',\n alreadyInCart: 'Already in Cart',\n buyNow: 'Buy {{price}}',\n processing: 'Processing…',\n viewInstallation: 'View Installation',\n publisher: 'Publisher',\n category: 'Category',\n version: 'Version',\n updated: 'Updated',\n rating: 'Rating',\n reviews_count: '{{count}} reviews',\n downloadsCount: '{{count}}+ downloads',\n downloadsLabel: 'Downloads',\n typeLabel: 'Type',\n noReviews: 'No reviews yet',\n beFirstToReview: 'Be the first to review this product.',\n beFirstToReviewShort: 'No reviews yet. Be the first to review!',\n writeReview: 'Write a Review',\n submitReview: 'Submit Review',\n updateReview: 'Update Review',\n deleteReview: 'Delete Review',\n yourRating: 'Your Rating',\n yourRatingLabel: 'Your rating',\n yourReview: 'Your Review (optional)',\n reviewTitleLabel: 'Title',\n reviewTitlePlaceholder: 'Summarize your experience',\n reviewBodyLabel: 'Review',\n reviewBodyPlaceholder: 'What worked well? What should improve?',\n reviewPlaceholder: 'Share your experience with this product...',\n savingReview: 'Saving...',\n removingReview: 'Removing...',\n installToReview: 'Install this app to leave a review.',\n ratingRequired: 'Choose a rating from 1 to 5 stars.',\n reviewSaveError: 'We could not save your review. Please try again.',\n reviewUpdated: 'Your review was updated.',\n reviewSubmitted: 'Your review was submitted.',\n deleteReviewTitle: 'Delete review',\n deleteReviewMessage: 'Are you sure you want to remove your review?',\n reviewDeleteError: 'We could not remove your review. Please try again.',\n reviewRemoved: 'Your review was removed.',\n verifiedBuyer: 'Verified Buyer',\n markHelpful: 'Mark this review as helpful',\n helpful: 'Helpful ({{count}})',\n updatingHelpful: 'Updating…',\n showLess: 'Show less',\n showMore: 'Show more',\n showAllReviews: 'Show all {{count}} reviews',\n notFoundTitle: 'Product not found',\n notFoundDetail: 'The product you are looking for does not exist or has been removed.',\n backToMarketplace: 'Back to Marketplace',\n errorTitle: 'Failed to load product',\n errorDescription: 'An error occurred while loading the product details.',\n aboutThisApp: 'About this app',\n noDescription: 'No description available.',\n noDesc: 'No description available',\n ratingsAndReviews: 'Ratings & Reviews',\n requiredPermissions: 'Required Permissions',\n integrations: 'Integrations',\n additionalInformation: 'Additional Information',\n versionLabel: 'Version',\n publishedLabel: 'Published',\n updatedLabel: 'Updated',\n licenseLabel: 'License',\n minPlatformVersionLabel: 'Min Platform Version',\n appSupport: 'App support',\n documentation: 'Documentation',\n sourceRepository: 'Source repository',\n contactPublisher: 'Contact publisher',\n visitWebsite: 'Visit website',\n similarApps: 'Similar apps',\n previewTitle: 'Preview',\n noPreview: 'No preview available',\n noPreviewHint: 'Upload screenshots in the Store Listing tab to show a preview here',\n subscriptionPrice: '{{price}}/mo',\n outOfStock: 'Out of stock',\n inStock: '{{count}} in stock',\n quantity: 'Qty',\n decreaseQuantity: 'Decrease quantity',\n increaseQuantity: 'Increase quantity',\n updateToVersion: 'Update to v{{version}}',\n installToWorkspace: 'Install to Workspace',\n addToCartError: 'Failed to add this product to cart. Please try again.',\n createOrderError: 'Failed to create order. Please try again.',\n checkoutError: 'Failed to start checkout',\n pickupAvailable: 'Available for pickup — no shipping required',\n shipsToAddress: 'Ships to your delivery address',\n sellerReturnsPolicy: 'Returns and refunds are handled by {{seller}} per their store policy.',\n theSeller: 'the seller',\n availableForWorkspace: 'This app is available for your workspace',\n purchaseFinalNotice:\n 'All purchases are final. Digital app orders cannot be cancelled or refunded once completed.',\n licenseStatus: 'License: {{status}}',\n licenseExpires: ' (Expires: {{date}})',\n pagePurpose:\n 'Everything you need to decide whether to install {{name}}: what it does, screenshots, pricing, the permissions and integrations it needs, and real customer reviews. When you are ready, install it (free apps) or buy it, then add it to a workspace — and leave a review once you have used it.',\n nextStepInstallLabel: 'Install this app',\n nextStepInstallDescription: 'It’s free — add it to a workspace in a couple of clicks.',\n nextStepBuyLabel: 'Buy or add to cart',\n nextStepOwnedDescription: 'You already own this — install it where you need it.',\n nextStepBuyDescription: 'Purchase now, or add it to your cart to check out later.',\n nextStepPermissionsLabel: 'Review what it can access',\n nextStepPermissionsDescription: 'Check the permissions this app requires before installing.',\n nextStepReviewsLabel: 'Read the reviews',\n nextStepReviewsDescription: 'See what other customers think before committing.',\n cancelReviewEditing: 'Cancel review editing',\n editYourReview: 'Edit your review',\n cancelReview: 'Cancel review',\n },\n cart: {\n title: 'Shopping Cart',\n items: '{{count}} items',\n item: '{{count}} item',\n emptyTitle: 'Your cart is empty',\n emptyDescription:\n 'Looks like you have not added any apps or products to your cart yet. Start exploring the marketplace to find something you will love!',\n browseMarketplace: 'Browse Marketplace',\n cartItems: 'Cart Items ({{count}})',\n clearCart: 'Clear Cart',\n singleLicense: 'Single license',\n qty: 'Qty:',\n each: '{{price}} each',\n digital: 'Digital',\n physical: 'Physical',\n subscription: 'Subscription',\n orderSummary: 'Order Summary',\n subtotal: 'Subtotal',\n estimatedTaxes: 'Estimated taxes',\n calculatedAtCheckout: 'Calculated at checkout',\n totalPlusTaxes: 'Total (+ taxes)',\n proceedToCheckout: 'Proceed to Checkout',\n processing: 'Processing...',\n secureCheckout: 'Secure checkout powered by Stripe',\n weAccept: 'We accept:',\n continueShopping: 'Continue Shopping',\n failedToCreate: 'Failed to create order. Please try again.',\n checkoutError: 'An error occurred during checkout',\n },\n orders: {\n title: 'My Orders',\n subtitle: 'Track and manage your purchases',\n emptyTitle: 'No orders yet',\n emptyDescription: 'Your orders will appear here once you make a purchase.',\n shopNow: 'Shop Now',\n orderNumber: 'Order #{{number}}',\n orderDate: 'Ordered on {{date}}',\n items_count: '{{count}} item(s)',\n viewDetails: 'View Details',\n installApp: 'Install App',\n installed: 'Installed',\n failedToLoad: 'Failed to load orders',\n filterAll: 'All',\n reorder: 'Reorder',\n loading: 'Loading your orders…',\n browseMarketplace: 'Browse Marketplace',\n tabCompleted: 'Completed',\n tabPending: 'Pending',\n noCompletedTitle: 'No completed orders yet',\n noPendingTitle: 'No pending orders',\n colOrder: 'Order',\n colDate: 'Date',\n colItems: 'Items',\n colTotal: 'Total',\n colStatus: 'Status',\n colProduct: 'Product',\n colQty: 'Qty',\n colPrice: 'Price',\n colAction: 'Action',\n item: 'item',\n items: 'items',\n orderTracking: 'Order tracking',\n statusPending: 'Pending',\n statusCompleted: 'Completed',\n statusProcessing: 'Processing',\n statusFailed: 'Failed',\n statusRefunded: 'Refunded',\n statusCancelled: 'Cancelled',\n estimatedDelivery: 'Est. delivery {{date}}',\n trackingNumber: 'Tracking #: {{number}}',\n trackPackage: 'Track package',\n stepProcessing: 'Processing',\n stepShipped: 'Shipped',\n stepOutForDelivery: 'Out for delivery',\n stepDelivered: 'Delivered',\n qtyTimesPrice: '{{qty}} × {{price}}',\n subtotal: 'Subtotal:',\n tax: 'Tax:',\n total: 'Total:',\n },\n orderConfirmation: {\n title: 'Order placed successfully',\n totalAt: 'Total: {{total}}',\n orderId: 'Order ID',\n loading: 'Loading your order…',\n shipping: 'Shipping',\n status: 'Status: {{status}}',\n estimatedDelivery: 'Estimated delivery: {{date}}',\n trackPackage: 'Track package',\n licenses: 'Your licenses ({{count}})',\n expires: 'Expires: {{date}}',\n copyLicenseKey: 'Copy license key',\n copied: 'Copied to clipboard',\n installToWorkspace: 'Install to workspace',\n subtitle: \"Thank you for your purchase. We'll send a confirmation to your email.\",\n orderNumber: 'Order Number',\n orderDate: 'Order Date',\n paymentStatus: 'Payment Status',\n orderStatus: 'Order Status',\n orderItems: 'Order Items',\n orderSummary: 'Order Summary',\n subtotal: 'Subtotal',\n tax: 'Tax',\n total: 'Total',\n whatsNext: \"What's next?\",\n nextInstall: 'Install what you bought',\n nextTrack: 'Track your order',\n nextReceipt: 'Keep this receipt',\n nextDiscover: 'Discover more',\n nextStep1: \"You'll receive a confirmation email with your order details.\",\n nextStep2: 'Your digital products will be available for installation immediately.',\n nextStep3: 'Physical products will be shipped within 3-5 business days.',\n viewOrders: 'View My Orders',\n continueShopping: 'Continue Shopping',\n installNow: 'Install Now',\n },\n installed: {\n title: 'Installed Apps',\n subtitle: 'Manage your installed applications',\n emptyTitle: 'No installed apps',\n emptyDescription: 'Install apps from the marketplace to manage them here.',\n browseMarketplace: 'Browse Marketplace',\n failedToLoad: 'Failed to load installations',\n filterAll: 'All',\n viewDetails: 'View Details',\n uninstall: 'Uninstall',\n settings: 'Settings',\n statusAll: 'All',\n installNew: 'Install New App',\n statusActive: 'Active',\n statusInactive: 'Inactive',\n statusPending: 'Pending',\n statusInstalling: 'Installing',\n statusFailed: 'Failed',\n statusUninstalled: 'Uninstalled',\n uninstallError: 'Could not uninstall. Try again.',\n searchPlaceholder: 'Search by name, workspace…',\n noMatchTitle: 'No apps match this filter',\n noMatchDescription: 'Try a different status filter, or browse the marketplace.',\n emptyTitleAlt: 'No apps installed',\n emptyDescriptionAlt: 'Browse the marketplace to install your first app.',\n noSearchResults: 'No results match your search.',\n colApp: 'App',\n colWorkspace: 'Workspace',\n colStatus: 'Status',\n colVersion: 'Version',\n colInstalled: 'Installed',\n colActions: 'Actions',\n delisted: 'Delisted',\n details: 'Details',\n configure: 'Configure',\n product: 'Product',\n uninstallTitle: 'Uninstall app',\n uninstallPrompt: 'Remove {{app}} from {{workspace}}?',\n },\n appDetail: {\n title: 'App Details',\n version: 'Version',\n status: 'Status',\n installedAt: 'Installed At',\n uninstall: 'Uninstall',\n uninstalling: 'Uninstalling...',\n settings: 'Settings',\n openSettings: 'Open Settings',\n failedToLoad: 'Failed to load app details',\n notFound: 'App Not Found',\n notFoundDescription: 'The installation you are looking for could not be found.',\n loading: 'Loading installation…',\n backToInstalled: 'Back to installed apps',\n integrationConfigTitle: \"Configuration is managed on the third-party's side\",\n installationId: 'Installation ID: {{id}}',\n manageConfig: 'Manage configuration',\n openProductPage: 'Open the product page',\n installedAtLabel: 'Installed at',\n updatedAt: 'Updated at',\n workspaceId: 'Workspace ID',\n organizationId: 'Organization ID',\n installedBy: 'Installed by',\n runtimeMetadata: 'Runtime metadata',\n metadata: 'metadata',\n },\n appSettings: {\n title: 'App Settings',\n saveSettings: 'Save Settings',\n saving: 'Saving...',\n settingsSaved: 'Settings saved successfully',\n failedToSave: 'Failed to save settings',\n noSettings: 'No configurable settings',\n noSettingsDescription: 'This app does not have any configurable settings.',\n loading: 'Loading settings…',\n notFound: 'Installation not found',\n backToInstalled: 'Back to installed apps',\n configDetails: 'configuration details',\n manifest: 'Manifest',\n metadataContext: 'Metadata & Context',\n },\n licenses: {\n title: 'My Licenses',\n subtitle: 'Review and manage your product entitlements',\n emptyTitle: 'No licenses yet',\n emptyDescription: 'Purchase apps from the marketplace to see your licenses here.',\n browseMarketplace: 'Browse Marketplace',\n failedToLoad: 'Failed to load licenses',\n productId: 'Product {{id}}',\n entitlementId: 'Entitlement ID: {{id}}',\n licenseKey: 'License key: {{key}}',\n expiresOn: 'Expires on {{date}}',\n loading: 'Loading licenses',\n product: 'Product {{id}}',\n },\n publisherDashboard: {\n title: 'Publisher Dashboard',\n subtitle: 'Manage your products and track performance',\n totalProducts: 'Total Products',\n totalRevenue: 'Total Revenue',\n totalInstalls: 'Total Installs',\n pendingReviews: 'Pending Reviews',\n recentSubmissions: 'Recent Submissions',\n quickActions: 'Quick Actions',\n submitNewProduct: 'Submit New Product',\n viewSubmissions: 'View Submissions',\n viewRevenue: 'View Revenue',\n noProducts: 'No products yet',\n notRegistered: 'Not a publisher yet',\n registerNow: 'Register as Publisher',\n failedToLoad: 'Failed to load dashboard',\n },\n publisherSubmit: {\n title: 'Submit Product',\n productIdLabel: 'Product ID',\n productIdPlaceholder: 'Enter product ID to submit for review',\n notesLabel: 'Notes (optional)',\n notesPlaceholder: 'Add any notes for the reviewer...',\n submitButton: 'Submit for Review',\n submitting: 'Submitting...',\n successTitle: 'Submission Successful',\n successDescription: 'Your product has been submitted for review.',\n viewSubmissions: 'View Submissions',\n submitAnother: 'Submit Another',\n },\n publisherSubmissions: {\n title: 'My Submissions',\n subtitle: 'Track the status of your product submissions',\n emptyTitle: 'No submissions yet',\n emptyDescription: 'Submit a product for review to see it here.',\n submitProduct: 'Submit a Product',\n failedToLoad: 'Failed to load submissions',\n submittedOn: 'Submitted on {{date}}',\n reviewedOn: 'Reviewed on {{date}}',\n reviewNotes: 'Review notes: {{notes}}',\n },\n publisherRevenue: {\n title: 'Revenue',\n subtitle: 'Track your earnings and payouts',\n totalEarnings: 'Total Earnings',\n pendingPayout: 'Pending Payout',\n lastPayout: 'Last Payout',\n revenueHistory: 'Revenue History',\n noRevenue: 'No revenue data yet',\n noRevenueDescription:\n 'Revenue data will appear here once your products start generating sales.',\n period: 'Period',\n amount: 'Amount',\n status: 'Status',\n },\n productReviews: {\n title: 'Product Reviews',\n subtitle: 'Manage reviews for your products',\n failedToLoad: 'Failed to load reviews',\n noReviews: 'No reviews yet',\n noReviewsDescription:\n 'Reviews will appear here once customers start reviewing your products.',\n rating: 'Rating',\n reviewer: 'Reviewer',\n date: 'Date',\n approve: 'Approve',\n reject: 'Reject',\n },\n search: {\n title: 'Search Results',\n resultsFor: 'Results for \"{{query}}\"',\n noResults: 'No results found',\n noResultsDescription: 'Try different keywords or browse the marketplace.',\n browseMarketplace: 'Browse Marketplace',\n resultCount: '{{count}} results',\n placeholder: 'Search apps, workflows, integrations...',\n searching: 'Searching…',\n emptyTitle: 'Search the marketplace',\n noResultsTitle: 'No matching products found',\n },\n stores: {\n title: 'Stores',\n subtitle: 'Browse available stores',\n emptyTitle: 'No stores found',\n emptyDescription: 'No stores are currently available.',\n failedToLoad: 'Failed to load stores',\n },\n category: {\n title: '{{name}}',\n noProducts: 'No products in this category',\n noProductsDescription: 'Check back later for new products in this category.',\n browseAll: 'Browse All Products',\n thisCategory: 'this category',\n },\n },\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Externally sold store listings (BOFF-3430 / BOFF-9666).
|
|
3
|
+
*
|
|
4
|
+
* Some catalogue entries mirror an item that another Burdenoff product sells
|
|
5
|
+
* through its own checkout (for example a CoolAndLovely piece). The store lists
|
|
6
|
+
* them for discovery only: `externalService` names the owning backend and
|
|
7
|
+
* `externalUrl` points at the item in that product's app. The store's cart,
|
|
8
|
+
* order and purchase flows refuse these listings (`PRODUCT_SOLD_EXTERNALLY`),
|
|
9
|
+
* so the UI must send buyers to `externalUrl` instead of offering "Buy" or
|
|
10
|
+
* "Add to cart".
|
|
11
|
+
*/
|
|
12
|
+
export interface ExternalListingFields {
|
|
13
|
+
externalService?: string | null;
|
|
14
|
+
externalUrl?: string | null;
|
|
15
|
+
publisher?: {
|
|
16
|
+
name?: string | null;
|
|
17
|
+
} | null;
|
|
18
|
+
}
|
|
19
|
+
export interface ExternalListing {
|
|
20
|
+
/** Display name of the product that sells the item, e.g. "CoolAndLovely". */
|
|
21
|
+
productName: string;
|
|
22
|
+
/** Validated absolute http(s) link to the item in the owning product. */
|
|
23
|
+
url: string;
|
|
24
|
+
}
|
|
25
|
+
/** `wspace-coolandlovely-svc` → `coolandlovely`. */
|
|
26
|
+
export declare function productSlugFromService(service: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Returns where an externally sold listing can be viewed and bought, or null
|
|
29
|
+
* for products the store sells itself. A listing that names an owning service
|
|
30
|
+
* but carries no usable link is still external (it can never be bought here);
|
|
31
|
+
* callers check `isSoldExternally` for that case.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getExternalListing(product: ExternalListingFields): ExternalListing | null;
|
|
34
|
+
/** True when the store must not offer its own cart or checkout for this listing. */
|
|
35
|
+
export declare function isSoldExternally(product: ExternalListingFields): boolean;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/utils/externalListing.ts
|
|
2
|
+
var e = { coolandlovely: "CoolAndLovely" };
|
|
3
|
+
function t(e) {
|
|
4
|
+
return e.trim().toLowerCase().replace(/^(wspace|global)-/, "").replace(/-svc$/, "");
|
|
5
|
+
}
|
|
6
|
+
function n(e) {
|
|
7
|
+
return e.split(/[-_]/).filter(Boolean).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
|
|
8
|
+
}
|
|
9
|
+
function r(e) {
|
|
10
|
+
if (!e) return null;
|
|
11
|
+
try {
|
|
12
|
+
let t = new URL(e);
|
|
13
|
+
return t.protocol !== "https:" && t.protocol !== "http:" || t.username || t.password ? null : t.toString();
|
|
14
|
+
} catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function i(i) {
|
|
19
|
+
if (!i.externalService) return null;
|
|
20
|
+
let a = r(i.externalUrl);
|
|
21
|
+
if (!a) return null;
|
|
22
|
+
let o = t(i.externalService);
|
|
23
|
+
return {
|
|
24
|
+
productName: (e[o] ?? i.publisher?.name?.trim() ?? n(o)) || n(o),
|
|
25
|
+
url: a
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function a(e) {
|
|
29
|
+
return !!e.externalService;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { i as getExternalListing, a as isSoldExternally };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=externalListing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalListing.js","names":[],"sources":["../../src/utils/externalListing.ts"],"sourcesContent":["/**\n * Externally sold store listings (BOFF-3430 / BOFF-9666).\n *\n * Some catalogue entries mirror an item that another Burdenoff product sells\n * through its own checkout (for example a CoolAndLovely piece). The store lists\n * them for discovery only: `externalService` names the owning backend and\n * `externalUrl` points at the item in that product's app. The store's cart,\n * order and purchase flows refuse these listings (`PRODUCT_SOLD_EXTERNALLY`),\n * so the UI must send buyers to `externalUrl` instead of offering \"Buy\" or\n * \"Add to cart\".\n */\n\nexport interface ExternalListingFields {\n externalService?: string | null;\n externalUrl?: string | null;\n publisher?: { name?: string | null } | null;\n}\n\nexport interface ExternalListing {\n /** Display name of the product that sells the item, e.g. \"CoolAndLovely\". */\n productName: string;\n /** Validated absolute http(s) link to the item in the owning product. */\n url: string;\n}\n\n/**\n * Display names for product backends that publish external listings, keyed by\n * the product slug (the service identity without its boundary prefix and\n * `-svc` suffix). Product names are brand names and are not translated.\n */\nconst PRODUCT_DISPLAY_NAMES: Readonly<Record<string, string>> = {\n coolandlovely: 'CoolAndLovely',\n};\n\n/** `wspace-coolandlovely-svc` → `coolandlovely`. */\nexport function productSlugFromService(service: string): string {\n return service\n .trim()\n .toLowerCase()\n .replace(/^(wspace|global)-/, '')\n .replace(/-svc$/, '');\n}\n\nfunction titleCase(slug: string): string {\n return slug\n .split(/[-_]/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n}\n\n/** Accept only absolute http(s) links so a listing can never inject a script URL. */\nfunction safeExternalUrl(raw: string | null | undefined): string | null {\n if (!raw) return null;\n try {\n const url = new URL(raw);\n if (url.protocol !== 'https:' && url.protocol !== 'http:') return null;\n if (url.username || url.password) return null;\n return url.toString();\n } catch {\n return null;\n }\n}\n\n/**\n * Returns where an externally sold listing can be viewed and bought, or null\n * for products the store sells itself. A listing that names an owning service\n * but carries no usable link is still external (it can never be bought here);\n * callers check `isSoldExternally` for that case.\n */\nexport function getExternalListing(product: ExternalListingFields): ExternalListing | null {\n if (!product.externalService) return null;\n const url = safeExternalUrl(product.externalUrl);\n if (!url) return null;\n const slug = productSlugFromService(product.externalService);\n const productName =\n PRODUCT_DISPLAY_NAMES[slug] ?? product.publisher?.name?.trim() ?? titleCase(slug);\n return { productName: productName || titleCase(slug), url };\n}\n\n/** True when the store must not offer its own cart or checkout for this listing. */\nexport function isSoldExternally(product: ExternalListingFields): boolean {\n return Boolean(product.externalService);\n}\n"],"mappings":";AA8BA,IAAM,IAA0D,EAC9D,eAAe,iBAChB;AAGD,SAAgB,EAAuB,GAAyB;AAC9D,QAAO,EACJ,MAAM,CACN,aAAa,CACb,QAAQ,qBAAqB,GAAG,CAChC,QAAQ,SAAS,GAAG;;AAGzB,SAAS,EAAU,GAAsB;AACvC,QAAO,EACJ,MAAM,OAAO,CACb,OAAO,QAAQ,CACf,KAAK,MAAS,EAAK,OAAO,EAAE,CAAC,aAAa,GAAG,EAAK,MAAM,EAAE,CAAC,CAC3D,KAAK,IAAI;;AAId,SAAS,EAAgB,GAA+C;AACtE,KAAI,CAAC,EAAK,QAAO;AACjB,KAAI;EACF,IAAM,IAAM,IAAI,IAAI,EAAI;AAGxB,SAFI,EAAI,aAAa,YAAY,EAAI,aAAa,WAC9C,EAAI,YAAY,EAAI,WAAiB,OAClC,EAAI,UAAU;SACf;AACN,SAAO;;;AAUX,SAAgB,EAAmB,GAAwD;AACzF,KAAI,CAAC,EAAQ,gBAAiB,QAAO;CACrC,IAAM,IAAM,EAAgB,EAAQ,YAAY;AAChD,KAAI,CAAC,EAAK,QAAO;CACjB,IAAM,IAAO,EAAuB,EAAQ,gBAAgB;AAG5D,QAAO;EAAE,cADP,EAAsB,MAAS,EAAQ,WAAW,MAAM,MAAM,IAAI,EAAU,EAAK,KAC9C,EAAU,EAAK;EAAE;EAAK;;AAI7D,SAAgB,EAAiB,GAAyC;AACxE,QAAO,EAAQ,EAAQ"}
|