-
Notifications
You must be signed in to change notification settings - Fork 5
Restrict apps to specific integration surfaces (#1298) - #2058
Draft
manzke wants to merge 1 commit into
Draft
Conversation
Add a `restrictToIntegrations` app config field so an admin can mark an app as visible only on specific surfaces (e.g. "outlook") instead of maintaining near-duplicate app definitions for web vs. Outlook. Absent or empty means visible everywhere, matching today's behavior. - GET /api/apps and GET /api/apps/:appId accept a `surface` query param (defaults to "web"); apps restricted to other surfaces are filtered from the list and 404 from the single-app fetch. - New "Visible On" checkbox group in the admin App editor. - The Outlook add-in now requests apps with surface=outlook. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B6zxUynZdtEebP15P54aQB
@github-actions
github-actions
Bot
added
documentation
Improvements or additions to documentation
backend
auth
api
frontend
admin
ui
labels
Jul 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #1298. Lets an admin declare which integration surfaces an app should be visible on (e.g.
outlook), instead of maintaining near-duplicate app configs for web vs. Outlook. Absent/empty means "visible everywhere" — no behavior change for any existing app.server/validators/appConfigSchema.js— new optionalrestrictToIntegrations: string[]field on the app config.isAppVisibleForSurface/filterAppsBySurfacehelpers inserver/utils/authorization.js.configCache.getAppsForUser(user, platformConfig, { surface })filters the app list by surface.GET /api/appsandGET /api/apps/:appId(server/routes/generalRoutes.js) accept a?surface=query param (defaults toweb); the single-app route hard-404s when the app is restricted away from the requesting surface, matching the "only accessible there" framing in the issue. Callers that don't pass asurface(e.g. the MCP permissions check) are unaffected — filtering is skipped entirely without one.fetchApps/fetchAppDetails(client/src/api/endpoints/apps.js) accept asurfaceoption. The Outlook add-in (OfficeChatPanel.jsx,OfficeApp.jsxviaAppListPanel.jsx) now requestssurface: 'outlook'.AppFormEditor.jsx), next to Category.docs/apps.md(new field + dedicated section) anddocs/outlook-add-in.md(relationship to the existing OAuth-clientallowedAppsallow-list — both must pass, composing as an intersection).docs/releases/5.5.0/features.md.Scope decisions (per the issue's own open questions)
z.array(z.string()), not a hard enum) withweb/outlookas the only surfaces the admin UI currently offers — matches what actually exists in this codebase today (no live Teams/browser-extension app list wiring found to hook up yet).?surface=query param, not OAuth-client inference — simpler and works for both OAuth and session-based access.allowedAppsallow-list as an intersection (both must permit).Test plan
npx eslint --fix/npx prettier --writeon all changed files — no new errors, only pre-existing warnings.safeParsewith no field,["outlook"], and an invalid non-array value).isAppVisibleForSurface/filterAppsBySurface(default surface, explicit surface,undefinedsurface skips filtering).restrictToIntegrations: ["outlook"]on the bundledchatapp and confirmedGET /api/appsexcludes it by default, includes it with?surface=outlook, andGET /api/apps/:appId404s / 200s accordingly. Reverted the test config afterward.🤖 Generated with Claude Code
https://claude.ai/code/session_01B6zxUynZdtEebP15P54aQB
Generated by Claude Code