vscode-viva icon indicating copy to clipboard operation
vscode-viva copied to clipboard

πŸ’‘ [Feature]: Ability to export all app catalogs, tenant-wide extensions and installed SPFx to a report

Open reshmee011 opened this issue 4 months ago β€’ 5 comments

🎯 Aim of the feature

Image

Ability to export data can be useful to identify site level app catalog and SPFx solutions installed for various reasons: auditing, inventory, security,

πŸ“· Images (if possible) with expected result

No response

πŸ€” Additional remarks or comments

No response

reshmee011 avatar Sep 04 '25 15:09 reshmee011

@reshmee011 thank you for opening up the issue. This is an awesome πŸ‘. Before we open it up let's clarify:

  • what properties you would like to have a s part of the export? App name, app catalog url? Something more? Maybe app size?
  • what export formats you would like to have? JSON? CSV? Text? MD?

Adam-it avatar Sep 04 '25 15:09 Adam-it

Hello, been a while I did not look at SPFx solutions, I have a blog post on the properties https://reshmeeauckloo.com/posts/powershell-get-spfx-details-tenant-sitecollection-appcatalog/ It does not have to be as extensive as this but may be some useful properties to start with: Title: The name of the SPFx solution or app.

LinkFilename: The filename of the app package (.sppkg file).

SkipFeatureDeployment: Indicates whether the app skips feature deployment, meaning it doesn’t require activation on individual sites.

ContainsTeamsManifest: Indicates whether the app contains a Microsoft Teams manifest, making it available in Teams.

ContainsVivaManifest: Indicates whether the app contains a Microsoft Viva manifest, allowing integration with Viva.

SupportsTeamsTabs: Shows if the app supports being used as a Teams tab.

WebApiPermissionScopesNote: Lists any API permissions granted to the app, often important for security and compliance reviews.

ContainsTenantWideExtension: Indicates if the app contains a tenant-wide extension, which can affect all sites across the tenant.

IsolatedDomain: Shows whether the app runs in an isolated domain for enhanced security, often used in sandboxed solutions.

PackageDefaultSkipFeatureDeployment: Indicates the default setting of the app package regarding feature deployment skipping.

IsClientSideSolutionCurrentVersionDeployed: Confirms if the currently deployed version of the client-side solution is up-to-date.

ExternalContentDomains: Lists any external content domains the app might interact with, important for understanding potential external dependencies.

IsClientSideSolutionDeployed: Indicates whether the client-side solution is actively deployed in the environment.

IsClientSideSolution: Confirms whether the app is a client-side solution, typically referring to SPFx solutions.

AppPackageErrorMessage: Contains any error messages related to the app package, useful for troubleshooting deployment issues.

IsValidAppPackage: Indicates if the app package is valid and free from errors.

SharePointAppCategory: Specifies the category assigned to the app within SharePoint, often used for organizing and searching for apps.

AppDescription: A description of the app, providing a summary of its functionality and purpose.

AppShortDescription: A shorter version of the app’s description, typically used in user interfaces where space is limited.

I prefer CSV format but can be the other formats as well.

reshmee011 avatar Sep 04 '25 16:09 reshmee011

thanks @reshmee011 for the example. For now I checked that SPFx Toolkit retrieves the following data about each app example:

[
  {
    "AadAppId": "48535560-3cc0-442e-a1b4-94c084b3ff59",
    "AadPermissions": "Microsoft Graph, Directory.ReadWrite.All",
    "AppCatalogVersion": "1.6.0.0",
    "CanUpgrade": false,
    "CDNLocation": "SharePoint Online",
    "ContainsTenantWideExtension": false,
    "CurrentVersionDeployed": true,
    "Deployed": true,
    "ErrorMessage": "No errors.",
    "ID": "b05196d4-65a3-4ee3-bf92-4acfb7a05cd7",
    "InstalledVersion": "",
    "IsClientSideSolution": true,
    "IsEnabled": true,
    "IsPackageDefaultSkipFeatureDeployment": true,
    "IsValidAppPackage": true,
    "ProductId": "1e5954e2-fc1c-4501-8678-27a6bd013422",
    "ShortDescription": "spfx description",
    "SkipDeploymentFeature": false,
    "StoreAssetId": "",
    "SupportsTeamsTabs": true,
    "ThumbnailUrl": "",
    "Title": "spfx-client-side-solution"
  }
]

Some are covered but we do not have everything you mentioned. Most probably to retrieve them SPFx Toolkit do some additional call(s) to SP to retrieve them, but I am not sure and this is something which we should investigate/research in order to clarify

As for the output modes I suggest we start with CSV and JSON

lets research and confirm the above before we proceed

Adam-it avatar Sep 05 '25 07:09 Adam-it

Awesome, it's a great starting point and happy to start with CSV and JSON as well unless there are genuine requests from end users for more properties and different formats :)

reshmee011 avatar Sep 05 '25 07:09 reshmee011

Ok let's open it up. For now lets try to develop reports which allow to export what SPFx Toolkit already retrieves https://github.com/pnp/vscode-viva/issues/573#issuecomment-3257391333 Since under the hood, we are using CLI for Microsoft 365 commands to get this output, let's try to leverage it by passing CSV and JSON output modes and saving it to a file.

Adam-it avatar Oct 17 '25 20:10 Adam-it