@burdenoff/microfe-store 2026.525.2 → 2026.527.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/StoreAdminRoutes.js +10 -9
- package/dist/StoreAdminRoutes.js.map +1 -1
- package/dist/StoreRoutes.js +2 -1
- package/dist/StoreRoutes.js.map +1 -1
- package/dist/components/AccessDenied.js +23 -0
- package/dist/components/AccessDenied.js.map +1 -0
- package/dist/components/InstallAppModal.js +183 -129
- package/dist/components/InstallAppModal.js.map +1 -1
- package/dist/components/PermissionGuard.js +8 -0
- package/dist/components/PermissionGuard.js.map +1 -0
- package/dist/components/RouteGuards.js +7 -21
- package/dist/components/RouteGuards.js.map +1 -1
- package/dist/components/cart/CartDrawer.js +20 -14
- package/dist/components/cart/CartDrawer.js.map +1 -1
- package/dist/hooks/useStoreGraphQL.js +22 -20
- package/dist/hooks/useStoreGraphQL.js.map +1 -1
- package/dist/hooks/useStoreGraphQLWithContext.js.map +1 -1
- package/dist/hooks/useStorePermissions.js +4 -1
- package/dist/hooks/useStorePermissions.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/pages/AdminDashboardPage.js +182 -183
- package/dist/pages/AdminDashboardPage.js.map +1 -1
- package/dist/pages/AdminReviewModerationPage.js +7 -6
- package/dist/pages/AdminReviewModerationPage.js.map +1 -1
- package/dist/pages/AdminStoresPage.js +193 -185
- package/dist/pages/AdminStoresPage.js.map +1 -1
- package/dist/pages/AdminSubmissionsQueuePage.js +140 -142
- package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
- package/dist/pages/AppDetailPage.js +6 -3
- package/dist/pages/AppDetailPage.js.map +1 -1
- package/dist/pages/AppSettingsPage.js +6 -3
- package/dist/pages/AppSettingsPage.js.map +1 -1
- package/dist/pages/CartPage.js +23 -15
- package/dist/pages/CartPage.js.map +1 -1
- package/dist/pages/InstalledAppsPage.js +26 -15
- package/dist/pages/InstalledAppsPage.js.map +1 -1
- package/dist/pages/MarketplaceHomePage.js +275 -247
- package/dist/pages/MarketplaceHomePage.js.map +1 -1
- package/dist/pages/MyLicensesPage.js +10 -8
- package/dist/pages/MyLicensesPage.js.map +1 -1
- package/dist/pages/OrderConfirmationPage.js +72 -75
- package/dist/pages/OrderConfirmationPage.js.map +1 -1
- package/dist/pages/OrdersPage.js +22 -20
- package/dist/pages/OrdersPage.js.map +1 -1
- package/dist/pages/ProductCategoryPage.js +3 -1
- package/dist/pages/ProductCategoryPage.js.map +1 -1
- package/dist/pages/ProductDetailPage.js +458 -443
- package/dist/pages/ProductDetailPage.js.map +1 -1
- package/dist/pages/ProductReviewsPage.js +4 -3
- package/dist/pages/ProductReviewsPage.js.map +1 -1
- package/dist/pages/PublisherDashboardPage.js +13 -7
- package/dist/pages/PublisherDashboardPage.js.map +1 -1
- package/dist/pages/PublisherRevenuePage.js +7 -5
- package/dist/pages/PublisherRevenuePage.js.map +1 -1
- package/dist/pages/PublisherSubmissionsPage.js +12 -7
- package/dist/pages/PublisherSubmissionsPage.js.map +1 -1
- package/dist/pages/PublisherSubmitPage.js +6 -0
- package/dist/pages/PublisherSubmitPage.js.map +1 -1
- package/dist/pages/SearchResultsPage.js +6 -3
- package/dist/pages/SearchResultsPage.js.map +1 -1
- package/dist/pages/StoresPage.js +73 -74
- package/dist/pages/StoresPage.js.map +1 -1
- package/dist/providers/StoreProvider.js +25 -25
- package/dist/providers/StoreProvider.js.map +1 -1
- package/dist/utils/index.js +29 -19
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/StoreAdminRoot.d.ts +0 -22
- package/dist/StoreAdminRoutes.d.ts +0 -9
- package/dist/StoreRoot.d.ts +0 -31
- package/dist/StoreRoutes.d.ts +0 -12
- package/dist/components/InstallAppModal.d.ts +0 -26
- package/dist/components/RouteGuards.d.ts +0 -17
- package/dist/components/cart/CartDrawer.d.ts +0 -35
- package/dist/components/index.d.ts +0 -9
- package/dist/components/index.js +0 -3
- package/dist/components/marketplace/ProductCard.d.ts +0 -18
- package/dist/components/marketplace/ProductCard.js +0 -2
- package/dist/dev/main.d.ts +0 -1
- package/dist/generated/global-operations.d.ts +0 -2012
- package/dist/generated/global-types.d.ts +0 -23526
- package/dist/generated/wspace-operations.d.ts +0 -1
- package/dist/generated/wspace-types.d.ts +0 -57850
- package/dist/hooks/index.d.ts +0 -12
- package/dist/hooks/useBackendCart.d.ts +0 -73
- package/dist/hooks/useCart.d.ts +0 -62
- package/dist/hooks/useInstallations.d.ts +0 -43
- package/dist/hooks/useOrders.d.ts +0 -40
- package/dist/hooks/useProductSearch.d.ts +0 -22
- package/dist/hooks/useStoreGraphQL.d.ts +0 -475
- package/dist/hooks/useStoreGraphQLWithContext.d.ts +0 -48
- package/dist/hooks/useStorePermissions.d.ts +0 -63
- package/dist/index.d.ts +0 -44
- package/dist/pages/AdminDashboardPage.d.ts +0 -3
- package/dist/pages/AdminReviewModerationPage.d.ts +0 -3
- package/dist/pages/AdminStoresPage.d.ts +0 -3
- package/dist/pages/AdminSubmissionsQueuePage.d.ts +0 -3
- package/dist/pages/AppDetailPage.d.ts +0 -3
- package/dist/pages/AppSettingsPage.d.ts +0 -3
- package/dist/pages/CartPage.d.ts +0 -8
- package/dist/pages/InstalledAppsPage.d.ts +0 -8
- package/dist/pages/MarketplaceHomePage.d.ts +0 -3
- package/dist/pages/MyLicensesPage.d.ts +0 -3
- package/dist/pages/OrderConfirmationPage.d.ts +0 -3
- package/dist/pages/OrdersPage.d.ts +0 -8
- package/dist/pages/ProductCategoryPage.d.ts +0 -3
- package/dist/pages/ProductDetailPage.d.ts +0 -8
- package/dist/pages/ProductReviewsPage.d.ts +0 -3
- package/dist/pages/PublisherDashboardPage.d.ts +0 -3
- package/dist/pages/PublisherRevenuePage.d.ts +0 -3
- package/dist/pages/PublisherSubmissionsPage.d.ts +0 -3
- package/dist/pages/PublisherSubmitPage.d.ts +0 -3
- package/dist/pages/SearchResultsPage.d.ts +0 -3
- package/dist/pages/StoresPage.d.ts +0 -3
- package/dist/providers/StoreProvider.d.ts +0 -38
- package/dist/store/storeStore.d.ts +0 -69
- package/dist/translations/en.d.ts +0 -518
- package/dist/types/index.d.ts +0 -575
- package/dist/utils/index.d.ts +0 -67
- package/dist/utils/nativeBridge.d.ts +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorePermissions.js","names":[],"sources":["../../src/hooks/useStorePermissions.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useStore } from '../providers/StoreProvider';\n\n/**\n * Store permission constants matching RBAC resource:action format\n */\nexport const STORE_PERMISSIONS = {\n // Products\n PRODUCT_READ: 'store-product:read',\n PRODUCT_CREATE: 'store-product:create',\n PRODUCT_UPDATE: 'store-product:update',\n PRODUCT_DELETE: 'store-product:delete',\n PRODUCT_PUBLISH: 'store-product:publish',\n PRODUCT_ADMIN: 'store-product:admin',\n\n // Categories\n CATEGORY_CREATE: 'store-category:create',\n CATEGORY_UPDATE: 'store-category:update',\n CATEGORY_DELETE: 'store-category:delete',\n\n // Tags\n TAG_CREATE: 'store-tag:create',\n TAG_DELETE: 'store-tag:delete',\n\n // Reviews\n REVIEW_CREATE: 'store-review:create',\n REVIEW_UPDATE: 'store-review:update',\n REVIEW_DELETE: 'store-review:delete',\n REVIEW_ADMIN: 'store-review:admin',\n\n // Entitlements\n ENTITLEMENT_READ: 'store-entitlement:read',\n ENTITLEMENT_CREATE: 'store-entitlement:create',\n ENTITLEMENT_UPDATE: 'store-entitlement:update',\n ENTITLEMENT_DELETE: 'store-entitlement:delete',\n\n // Orders\n ORDER_READ: 'store-order:read',\n ORDER_CREATE: 'store-order:create',\n ORDER_UPDATE: 'store-order:update',\n ORDER_ADMIN: 'store-order:admin',\n ORDER_EXPORT: 'store-order:export',\n\n // Cart\n CART_READ: 'store-cart:read',\n CART_CREATE: 'store-cart:create',\n CART_UPDATE: 'store-cart:update',\n CART_CHECKOUT: 'store-cart:checkout',\n\n // Downloads\n DOWNLOAD_READ: 'store-download:read',\n DOWNLOAD_CREATE: 'store-download:create',\n\n // Installations\n INSTALLATION_READ: 'store-installation:read',\n INSTALLATION_CREATE: 'store-installation:create',\n INSTALLATION_UPDATE: 'store-installation:update',\n INSTALLATION_DELETE: 'store-installation:delete',\n\n // Earnings\n EARNINGS_READ: 'store-earnings:read',\n} as const;\n\nexport type StorePermission = (typeof STORE_PERMISSIONS)[keyof typeof STORE_PERMISSIONS];\n\nexport interface StorePermissions {\n canBrowse: boolean;\n canPurchase: boolean;\n canInstall: boolean;\n canManageLicenses: boolean;\n canPublish: boolean;\n canModerate: boolean;\n isPublisher: boolean;\n isPlatformAdmin: boolean;\n}\n\n/**\n * Hook for store permissions\n *\n * Integrates with the platform PermissionProvider from @burdenoff/fe-libs.\n * Falls back to role-based checks when permissions are still loading.\n */\nexport function useStorePermissions(): {\n permissions: StorePermissions;\n PERMISSIONS: typeof STORE_PERMISSIONS;\n hasPermission: (permission: StorePermission) => boolean;\n isLoading: boolean;\n} {\n const { user } = useStore();\n const platform = usePermissions();\n\n const permissions = useMemo<StorePermissions>(() => {\n // If platform permissions are loaded, use them\n if (!platform.isLoading && platform.permissions) {\n const isAdmin =\n platform.hasPermission(STORE_PERMISSIONS.PRODUCT_ADMIN) ||\n platform.hasRole('Owner') ||\n platform.hasRole('Admin');\n const isPublisher = platform.hasPermission(STORE_PERMISSIONS.PRODUCT_CREATE) || isAdmin;\n\n return {\n canBrowse: true,\n canPurchase: platform.hasPermission(STORE_PERMISSIONS.ORDER_CREATE),\n canInstall: platform.hasPermission(STORE_PERMISSIONS.INSTALLATION_CREATE),\n canManageLicenses: platform.hasPermission(STORE_PERMISSIONS.ENTITLEMENT_READ),\n canPublish: isPublisher,\n canModerate: platform.hasPermission(STORE_PERMISSIONS.REVIEW_ADMIN),\n isPublisher,\n isPlatformAdmin: isAdmin,\n };\n }\n\n // Fallback: role-based checks from user context while permissions load\n const normalizedRoles = new Set(\n (user?.roles ?? []).map((role) => role.toLowerCase()).filter((role) => role.length > 0)\n );\n\n if (user?.role) {\n normalizedRoles.add(user.role.toLowerCase());\n }\n\n const isAdmin =\n normalizedRoles.has('admin') ||\n normalizedRoles.has('platform_admin') ||\n normalizedRoles.has('super_admin');\n const isPublisher = normalizedRoles.has('publisher') || isAdmin;\n const hasAnyRole = normalizedRoles.size > 0;\n\n return {\n canBrowse: true,\n canPurchase: hasAnyRole,\n canInstall: hasAnyRole,\n canManageLicenses: hasAnyRole,\n canPublish: isPublisher,\n canModerate: isAdmin,\n isPublisher,\n isPlatformAdmin: isAdmin,\n };\n }, [platform, user?.role, user?.roles]);\n\n const hasPermission = useMemo(() => {\n const isAdminGatedPermission = (p: StorePermission): boolean =>\n p === STORE_PERMISSIONS.PRODUCT_ADMIN ||\n p === STORE_PERMISSIONS.REVIEW_ADMIN ||\n p === STORE_PERMISSIONS.ORDER_ADMIN ||\n p === STORE_PERMISSIONS.ORDER_EXPORT ||\n p === STORE_PERMISSIONS.CATEGORY_CREATE ||\n p === STORE_PERMISSIONS.CATEGORY_UPDATE ||\n p === STORE_PERMISSIONS.CATEGORY_DELETE ||\n p === STORE_PERMISSIONS.TAG_CREATE ||\n p === STORE_PERMISSIONS.TAG_DELETE;\n\n return (permission: StorePermission): boolean => {\n // Use platform permission check if loaded\n if (!platform.isLoading && platform.permissions) {\n // Direct permission check from RBAC\n if (platform.hasPermission(permission)) {\n return true;\n }\n // Admin-role fallback for admin-gated permissions:\n // users with Owner/Admin role (or PRODUCT_ADMIN) are treated as platform\n // admins and should be granted all admin-gated checks, even if they don't\n // have explicit RBAC grants for each admin permission. This keeps\n // isPlatformAdmin consistent with admin route guards.\n if (isAdminGatedPermission(permission) && permissions.isPlatformAdmin) {\n return true;\n }\n return false;\n }\n\n // Fallback: map permission to aggregate check\n if (permission === STORE_PERMISSIONS.PRODUCT_READ) return permissions.canBrowse;\n\n if (\n permission === STORE_PERMISSIONS.CART_READ ||\n permission === STORE_PERMISSIONS.CART_CREATE ||\n permission === STORE_PERMISSIONS.CART_UPDATE ||\n permission === STORE_PERMISSIONS.CART_CHECKOUT ||\n permission === STORE_PERMISSIONS.ORDER_CREATE ||\n permission === STORE_PERMISSIONS.ORDER_READ\n ) {\n return permissions.canPurchase;\n }\n\n if (\n permission === STORE_PERMISSIONS.INSTALLATION_READ ||\n permission === STORE_PERMISSIONS.INSTALLATION_CREATE ||\n permission === STORE_PERMISSIONS.INSTALLATION_UPDATE ||\n permission === STORE_PERMISSIONS.INSTALLATION_DELETE\n ) {\n return permissions.canInstall;\n }\n\n if (\n permission === STORE_PERMISSIONS.DOWNLOAD_READ ||\n permission === STORE_PERMISSIONS.DOWNLOAD_CREATE\n ) {\n return permissions.canPurchase;\n }\n\n if (permission === STORE_PERMISSIONS.ORDER_UPDATE) {\n return permissions.canPurchase;\n }\n\n if (\n permission === STORE_PERMISSIONS.ENTITLEMENT_READ ||\n permission === STORE_PERMISSIONS.ENTITLEMENT_CREATE ||\n permission === STORE_PERMISSIONS.ENTITLEMENT_UPDATE ||\n permission === STORE_PERMISSIONS.ENTITLEMENT_DELETE\n ) {\n return permissions.canManageLicenses;\n }\n\n if (\n permission === STORE_PERMISSIONS.PRODUCT_CREATE ||\n permission === STORE_PERMISSIONS.PRODUCT_UPDATE ||\n permission === STORE_PERMISSIONS.PRODUCT_DELETE ||\n permission === STORE_PERMISSIONS.PRODUCT_PUBLISH ||\n permission === STORE_PERMISSIONS.EARNINGS_READ\n ) {\n return permissions.canPublish;\n }\n\n if (\n permission === STORE_PERMISSIONS.PRODUCT_ADMIN ||\n permission === STORE_PERMISSIONS.REVIEW_ADMIN ||\n permission === STORE_PERMISSIONS.ORDER_ADMIN ||\n permission === STORE_PERMISSIONS.ORDER_EXPORT ||\n permission === STORE_PERMISSIONS.CATEGORY_CREATE ||\n permission === STORE_PERMISSIONS.CATEGORY_UPDATE ||\n permission === STORE_PERMISSIONS.CATEGORY_DELETE ||\n permission === STORE_PERMISSIONS.TAG_CREATE ||\n permission === STORE_PERMISSIONS.TAG_DELETE\n ) {\n return permissions.isPlatformAdmin;\n }\n\n if (\n permission === STORE_PERMISSIONS.REVIEW_CREATE ||\n permission === STORE_PERMISSIONS.REVIEW_UPDATE ||\n permission === STORE_PERMISSIONS.REVIEW_DELETE\n ) {\n return permissions.canPurchase;\n }\n\n return false;\n };\n }, [platform, permissions]);\n\n return {\n permissions,\n PERMISSIONS: STORE_PERMISSIONS,\n hasPermission,\n isLoading: platform.isLoading,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useStorePermissions.js","names":[],"sources":["../../src/hooks/useStorePermissions.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useStore } from '../providers/StoreProvider';\n\n/**\n * Store permission constants matching RBAC resource:action format\n */\nexport const STORE_PERMISSIONS = {\n // Products\n PRODUCT_READ: 'store-product:read',\n PRODUCT_CREATE: 'store-product:create',\n PRODUCT_UPDATE: 'store-product:update',\n PRODUCT_DELETE: 'store-product:delete',\n PRODUCT_PUBLISH: 'store-product:publish',\n PRODUCT_ADMIN: 'store-product:admin',\n\n // Categories\n CATEGORY_CREATE: 'store-category:create',\n CATEGORY_UPDATE: 'store-category:update',\n CATEGORY_DELETE: 'store-category:delete',\n\n // Tags\n TAG_CREATE: 'store-tag:create',\n TAG_DELETE: 'store-tag:delete',\n\n // Reviews\n REVIEW_CREATE: 'store-review:create',\n REVIEW_UPDATE: 'store-review:update',\n REVIEW_DELETE: 'store-review:delete',\n REVIEW_ADMIN: 'store-review:admin',\n\n // Entitlements\n ENTITLEMENT_READ: 'store-entitlement:read',\n ENTITLEMENT_CREATE: 'store-entitlement:create',\n ENTITLEMENT_UPDATE: 'store-entitlement:update',\n ENTITLEMENT_DELETE: 'store-entitlement:delete',\n\n // Orders\n ORDER_READ: 'store-order:read',\n ORDER_CREATE: 'store-order:create',\n ORDER_UPDATE: 'store-order:update',\n ORDER_ADMIN: 'store-order:admin',\n ORDER_EXPORT: 'store-order:export',\n\n // Cart\n CART_READ: 'store-cart:read',\n CART_CREATE: 'store-cart:create',\n CART_UPDATE: 'store-cart:update',\n CART_CHECKOUT: 'store-cart:checkout',\n\n // Downloads\n DOWNLOAD_READ: 'store-download:read',\n DOWNLOAD_CREATE: 'store-download:create',\n\n // Installations\n INSTALLATION_READ: 'store-installation:read',\n INSTALLATION_CREATE: 'store-installation:create',\n INSTALLATION_UPDATE: 'store-installation:update',\n INSTALLATION_DELETE: 'store-installation:delete',\n\n // Earnings\n EARNINGS_READ: 'store-earnings:read',\n} as const;\n\nexport type StorePermission = (typeof STORE_PERMISSIONS)[keyof typeof STORE_PERMISSIONS];\n\nexport interface StorePermissions {\n canBrowse: boolean;\n canPurchase: boolean;\n canInstall: boolean;\n canManageLicenses: boolean;\n canPublish: boolean;\n canModerate: boolean;\n isPublisher: boolean;\n isPlatformAdmin: boolean;\n}\n\n/**\n * Hook for store permissions\n *\n * Integrates with the platform PermissionProvider from @burdenoff/fe-libs.\n * Falls back to role-based checks when permissions are still loading.\n */\nexport function useStorePermissions(): {\n permissions: StorePermissions;\n PERMISSIONS: typeof STORE_PERMISSIONS;\n hasPermission: (permission: StorePermission) => boolean;\n isLoading: boolean;\n} {\n const { user } = useStore();\n const platform = usePermissions();\n\n const permissions = useMemo<StorePermissions>(() => {\n // If platform permissions are loaded, use them\n if (!platform.isLoading && platform.permissions) {\n const isAdmin =\n platform.hasPermission(STORE_PERMISSIONS.PRODUCT_ADMIN) ||\n platform.hasRole('Owner') ||\n platform.hasRole('Admin');\n const isPublisher = platform.hasPermission(STORE_PERMISSIONS.PRODUCT_CREATE) || isAdmin;\n\n return {\n canBrowse: true,\n canPurchase: platform.hasPermission(STORE_PERMISSIONS.ORDER_CREATE),\n canInstall: platform.hasPermission(STORE_PERMISSIONS.INSTALLATION_CREATE),\n canManageLicenses: platform.hasPermission(STORE_PERMISSIONS.ENTITLEMENT_READ),\n canPublish: isPublisher,\n canModerate: platform.hasPermission(STORE_PERMISSIONS.REVIEW_ADMIN),\n isPublisher,\n isPlatformAdmin: isAdmin,\n };\n }\n\n // Fallback: role-based checks from user context while permissions load\n const normalizedRoles = new Set(\n (user?.roles ?? []).flatMap((role) => {\n const normalized = role.toLowerCase();\n return normalized.length > 0 ? [normalized] : [];\n })\n );\n\n if (user?.role) {\n normalizedRoles.add(user.role.toLowerCase());\n }\n\n const isAdmin =\n normalizedRoles.has('admin') ||\n normalizedRoles.has('platform_admin') ||\n normalizedRoles.has('super_admin');\n const isPublisher = normalizedRoles.has('publisher') || isAdmin;\n const hasAnyRole = normalizedRoles.size > 0;\n\n return {\n canBrowse: true,\n canPurchase: hasAnyRole,\n canInstall: hasAnyRole,\n canManageLicenses: hasAnyRole,\n canPublish: isPublisher,\n canModerate: isAdmin,\n isPublisher,\n isPlatformAdmin: isAdmin,\n };\n }, [platform, user?.role, user?.roles]);\n\n const hasPermission = useMemo(() => {\n const isAdminGatedPermission = (p: StorePermission): boolean =>\n p === STORE_PERMISSIONS.PRODUCT_ADMIN ||\n p === STORE_PERMISSIONS.REVIEW_ADMIN ||\n p === STORE_PERMISSIONS.ORDER_ADMIN ||\n p === STORE_PERMISSIONS.ORDER_EXPORT ||\n p === STORE_PERMISSIONS.CATEGORY_CREATE ||\n p === STORE_PERMISSIONS.CATEGORY_UPDATE ||\n p === STORE_PERMISSIONS.CATEGORY_DELETE ||\n p === STORE_PERMISSIONS.TAG_CREATE ||\n p === STORE_PERMISSIONS.TAG_DELETE;\n\n return (permission: StorePermission): boolean => {\n // Use platform permission check if loaded\n if (!platform.isLoading && platform.permissions) {\n // Direct permission check from RBAC\n if (platform.hasPermission(permission)) {\n return true;\n }\n // Admin-role fallback for admin-gated permissions:\n // users with Owner/Admin role (or PRODUCT_ADMIN) are treated as platform\n // admins and should be granted all admin-gated checks, even if they don't\n // have explicit RBAC grants for each admin permission. This keeps\n // isPlatformAdmin consistent with admin route guards.\n if (isAdminGatedPermission(permission) && permissions.isPlatformAdmin) {\n return true;\n }\n return false;\n }\n\n // Fallback: map permission to aggregate check\n if (permission === STORE_PERMISSIONS.PRODUCT_READ) return permissions.canBrowse;\n\n if (\n permission === STORE_PERMISSIONS.CART_READ ||\n permission === STORE_PERMISSIONS.CART_CREATE ||\n permission === STORE_PERMISSIONS.CART_UPDATE ||\n permission === STORE_PERMISSIONS.CART_CHECKOUT ||\n permission === STORE_PERMISSIONS.ORDER_CREATE ||\n permission === STORE_PERMISSIONS.ORDER_READ\n ) {\n return permissions.canPurchase;\n }\n\n if (\n permission === STORE_PERMISSIONS.INSTALLATION_READ ||\n permission === STORE_PERMISSIONS.INSTALLATION_CREATE ||\n permission === STORE_PERMISSIONS.INSTALLATION_UPDATE ||\n permission === STORE_PERMISSIONS.INSTALLATION_DELETE\n ) {\n return permissions.canInstall;\n }\n\n if (\n permission === STORE_PERMISSIONS.DOWNLOAD_READ ||\n permission === STORE_PERMISSIONS.DOWNLOAD_CREATE\n ) {\n return permissions.canPurchase;\n }\n\n if (permission === STORE_PERMISSIONS.ORDER_UPDATE) {\n return permissions.canPurchase;\n }\n\n if (\n permission === STORE_PERMISSIONS.ENTITLEMENT_READ ||\n permission === STORE_PERMISSIONS.ENTITLEMENT_CREATE ||\n permission === STORE_PERMISSIONS.ENTITLEMENT_UPDATE ||\n permission === STORE_PERMISSIONS.ENTITLEMENT_DELETE\n ) {\n return permissions.canManageLicenses;\n }\n\n if (\n permission === STORE_PERMISSIONS.PRODUCT_CREATE ||\n permission === STORE_PERMISSIONS.PRODUCT_UPDATE ||\n permission === STORE_PERMISSIONS.PRODUCT_DELETE ||\n permission === STORE_PERMISSIONS.PRODUCT_PUBLISH ||\n permission === STORE_PERMISSIONS.EARNINGS_READ\n ) {\n return permissions.canPublish;\n }\n\n if (\n permission === STORE_PERMISSIONS.PRODUCT_ADMIN ||\n permission === STORE_PERMISSIONS.REVIEW_ADMIN ||\n permission === STORE_PERMISSIONS.ORDER_ADMIN ||\n permission === STORE_PERMISSIONS.ORDER_EXPORT ||\n permission === STORE_PERMISSIONS.CATEGORY_CREATE ||\n permission === STORE_PERMISSIONS.CATEGORY_UPDATE ||\n permission === STORE_PERMISSIONS.CATEGORY_DELETE ||\n permission === STORE_PERMISSIONS.TAG_CREATE ||\n permission === STORE_PERMISSIONS.TAG_DELETE\n ) {\n return permissions.isPlatformAdmin;\n }\n\n if (\n permission === STORE_PERMISSIONS.REVIEW_CREATE ||\n permission === STORE_PERMISSIONS.REVIEW_UPDATE ||\n permission === STORE_PERMISSIONS.REVIEW_DELETE\n ) {\n return permissions.canPurchase;\n }\n\n return false;\n };\n }, [platform, permissions]);\n\n return {\n permissions,\n PERMISSIONS: STORE_PERMISSIONS,\n hasPermission,\n isLoading: platform.isLoading,\n };\n}\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { useCart as pt } from "./hooks/useCart.js";
|
|
|
7
7
|
import { StoreRoot as mt } from "./StoreRoot.js";
|
|
8
8
|
import { StoreAdminRoot as ht } from "./StoreAdminRoot.js";
|
|
9
9
|
import { useProductSearch as gt } from "./hooks/useProductSearch.js";
|
|
10
|
-
import { calculateCartTotals as _t, debounce as vt, formatFileSize as yt, formatNumber as bt, formatPrice as xt,
|
|
11
|
-
import { useBrowseStore as
|
|
12
|
-
import { enTranslations as
|
|
13
|
-
export { i as AddToCartDocument, a as BrowseStoreDocument, o as CategoriesDocument, s as CheckEntitlementDocument, c as CheckoutDocument, l as ClearCartDocument, u as CreateProductForPublisherDocument, d as CreateReviewDocument, f as CreateStoreOrderDocument, p as DeleteReviewDocument, m as DeveloperEarningsDocument, h as FeaturedProductsDocument, g as FilterOptionsDocument, _ as GetCartDocument, v as GetMyOrdersDocument, y as GetMyStoreInstallationsDocument, b as GetProductDocument, x as GetProductsDocument, S as GetStoreAppInstallationDocument, C as HomeGroupedProductsDocument, w as InstallationStatusUpdatedDocument, T as LicenseStatusUpdatedDocument, E as MarkReviewHelpfulDocument, D as MyEntitlementsDocument, O as MyPublishedProductsDocument, k as OrderStatusUpdatedDocument, A as ProductReviewsDocument, j as RecordAppUninstallationDocument, M as RemoveFromCartDocument, t as STORE_PERMISSIONS, N as SearchSuggestionsDocument, ht as StoreAdminRoot, P as StoreProductDetailsDocument, mt as StoreRoot, F as SubmissionStatusUpdatedDocument, I as TrendingSearchesDocument, L as UpdateCartItemDocument, R as UpdateReviewDocument, z as UserReviewForProductDocument, B as WorkspaceStoreOrdersDocument, _t as calculateCartTotals, vt as debounce, yt as formatFileSize, bt as formatNumber, xt as formatPrice, St as
|
|
10
|
+
import { calculateCartTotals as _t, debounce as vt, formatFileSize as yt, formatNumber as bt, formatPrice as xt, formatPriceForModel as St, generateCartItemId as Ct, getDaysUntilExpiry as wt, getItemTypeName as Tt, getPricingModelName as Et, getRatingStars as Dt, getStatusColor as Ot, isLicenseExpiringSoon as kt, maskLicenseKey as At, truncate as jt, validateLicenseKey as Mt } from "./utils/index.js";
|
|
11
|
+
import { useBrowseStore as Nt, useBrowseStoreWithContext as Pt, useCategories as Ft, useCheckEntitlement as It, useCreateReview as Lt, useDeleteReview as Rt, useDeveloperEarnings as zt, useFeaturedProducts as Bt, useFilterOptions as Vt, useHomeGroupedProducts as Ht, useLazyBrowseStore as Ut, useLazySearchSuggestions as Wt, useLazyStoreProductDetails as Gt, useMarkReviewHelpful as Kt, useMyEntitlements as qt, useMyPublishedProducts as Jt, useProductReviews as Yt, useSearchSuggestions as Xt, useStoreProductDetails as Zt, useTrendingSearches as Qt, useUpdateReview as $t, useUserReviewForProduct as en, useWorkspaceStoreOrders as tn } from "./hooks/useStoreGraphQL.js";
|
|
12
|
+
import { enTranslations as nn } from "./translations/en.js";
|
|
13
|
+
export { i as AddToCartDocument, a as BrowseStoreDocument, o as CategoriesDocument, s as CheckEntitlementDocument, c as CheckoutDocument, l as ClearCartDocument, u as CreateProductForPublisherDocument, d as CreateReviewDocument, f as CreateStoreOrderDocument, p as DeleteReviewDocument, m as DeveloperEarningsDocument, h as FeaturedProductsDocument, g as FilterOptionsDocument, _ as GetCartDocument, v as GetMyOrdersDocument, y as GetMyStoreInstallationsDocument, b as GetProductDocument, x as GetProductsDocument, S as GetStoreAppInstallationDocument, C as HomeGroupedProductsDocument, w as InstallationStatusUpdatedDocument, T as LicenseStatusUpdatedDocument, E as MarkReviewHelpfulDocument, D as MyEntitlementsDocument, O as MyPublishedProductsDocument, k as OrderStatusUpdatedDocument, A as ProductReviewsDocument, j as RecordAppUninstallationDocument, M as RemoveFromCartDocument, t as STORE_PERMISSIONS, N as SearchSuggestionsDocument, ht as StoreAdminRoot, P as StoreProductDetailsDocument, mt as StoreRoot, F as SubmissionStatusUpdatedDocument, I as TrendingSearchesDocument, L as UpdateCartItemDocument, R as UpdateReviewDocument, z as UserReviewForProductDocument, B as WorkspaceStoreOrdersDocument, _t as calculateCartTotals, vt as debounce, yt as formatFileSize, bt as formatNumber, xt as formatPrice, St as formatPriceForModel, Ct as generateCartItemId, wt as getDaysUntilExpiry, Tt as getItemTypeName, Et as getPricingModelName, Dt as getRatingStars, Ot as getStatusColor, kt as isLicenseExpiringSoon, At as maskLicenseKey, nn as storeTranslations, jt as truncate, V as useAddToCartMutation, ft as useBackendCart, Nt as useBrowseStore, H as useBrowseStoreLazyQuery, U as useBrowseStoreQuery, W as useBrowseStoreSuspenseQuery, Pt as useBrowseStoreWithContext, pt as useCart, Ft as useCategories, G as useCategoriesLazyQuery, K as useCategoriesQuery, q as useCategoriesSuspenseQuery, It as useCheckEntitlement, J as useCheckEntitlementLazyQuery, Y as useCheckEntitlementQuery, X as useCheckEntitlementSuspenseQuery, Z as useCheckoutMutation, Q as useClearCartMutation, $ as useCreateProductForPublisherMutation, Lt as useCreateReview, ee as useCreateReviewMutation, te as useCreateStoreOrderMutation, Rt as useDeleteReview, ne as useDeleteReviewMutation, zt as useDeveloperEarnings, re as useDeveloperEarningsLazyQuery, ie as useDeveloperEarningsQuery, ae as useDeveloperEarningsSuspenseQuery, Bt as useFeaturedProducts, oe as useFeaturedProductsLazyQuery, se as useFeaturedProductsQuery, ce as useFeaturedProductsSuspenseQuery, Vt as useFilterOptions, le as useFilterOptionsLazyQuery, ue as useFilterOptionsQuery, de as useFilterOptionsSuspenseQuery, fe as useGetCartLazyQuery, pe as useGetCartQuery, me as useGetCartSuspenseQuery, he as useGetMyOrdersLazyQuery, ge as useGetMyOrdersQuery, _e as useGetMyOrdersSuspenseQuery, ve as useGetMyStoreInstallationsLazyQuery, ye as useGetMyStoreInstallationsQuery, be as useGetMyStoreInstallationsSuspenseQuery, xe as useGetProductLazyQuery, Se as useGetProductQuery, Ce as useGetProductSuspenseQuery, we as useGetProductsLazyQuery, Te as useGetProductsQuery, Ee as useGetProductsSuspenseQuery, De as useGetStoreAppInstallationLazyQuery, Oe as useGetStoreAppInstallationQuery, ke as useGetStoreAppInstallationSuspenseQuery, Ht as useHomeGroupedProducts, Ae as useHomeGroupedProductsLazyQuery, je as useHomeGroupedProductsQuery, Me as useHomeGroupedProductsSuspenseQuery, Ne as useInstallationStatusUpdatedSubscription, Ut as useLazyBrowseStore, Wt as useLazySearchSuggestions, Gt as useLazyStoreProductDetails, Pe as useLicenseStatusUpdatedSubscription, Kt as useMarkReviewHelpful, Fe as useMarkReviewHelpfulMutation, qt as useMyEntitlements, Ie as useMyEntitlementsLazyQuery, Le as useMyEntitlementsQuery, Re as useMyEntitlementsSuspenseQuery, Jt as useMyPublishedProducts, ze as useMyPublishedProductsLazyQuery, Be as useMyPublishedProductsQuery, Ve as useMyPublishedProductsSuspenseQuery, He as useOrderStatusUpdatedSubscription, Yt as useProductReviews, Ue as useProductReviewsLazyQuery, We as useProductReviewsQuery, Ge as useProductReviewsSuspenseQuery, gt as useProductSearch, Ke as useRecordAppUninstallationMutation, qe as useRemoveFromCartMutation, Xt as useSearchSuggestions, Je as useSearchSuggestionsLazyQuery, Ye as useSearchSuggestionsQuery, Xe as useSearchSuggestionsSuspenseQuery, e as useStore, n as useStorePermissions, Zt as useStoreProductDetails, Ze as useStoreProductDetailsLazyQuery, Qe as useStoreProductDetailsQuery, $e as useStoreProductDetailsSuspenseQuery, r as useStoreStore, et as useSubmissionStatusUpdatedSubscription, Qt as useTrendingSearches, tt as useTrendingSearchesLazyQuery, nt as useTrendingSearchesQuery, rt as useTrendingSearchesSuspenseQuery, it as useUpdateCartItemMutation, $t as useUpdateReview, at as useUpdateReviewMutation, en as useUserReviewForProduct, ot as useUserReviewForProductLazyQuery, st as useUserReviewForProductQuery, ct as useUserReviewForProductSuspenseQuery, tn as useWorkspaceStoreOrders, lt as useWorkspaceStoreOrdersLazyQuery, ut as useWorkspaceStoreOrdersQuery, dt as useWorkspaceStoreOrdersSuspenseQuery, Mt as validateLicenseKey };
|