sp-admin¶
The @pnp/sp-admin
library enables you to call the static SharePoint admin API's:
_api/Microsoft.Online.SharePoint.TenantManagement.Office365Tenant
_api/Microsoft.Online.SharePoint.TenantAdministration.SiteProperties
_api/Microsoft.Online.SharePoint.TenantAdministration.Tenant
These APIs typically require an elevated level of permissions and should not be relied upon in general user facing solutions. Before using this library please understand the impact of what you are doing as you are updating settings at the tenant level for all users.
Warning
These APIs are officially not documented which means there is no SLA provided by Microsoft. Furthermore, they can be updated without notification.
Use¶
To use the library you first install the package:
npm install @pnp/sp-admin --save
Then import the package into your solution, it will attach a node to the sp fluent interface using selective imports.
import "@pnp/sp-admin";
Basic Example¶
In this example we get all of the web templates' information.
import { spfi } from "@pnp/sp";
import "@pnp/sp-admin";
const sp = spfi(...);
// note the "admin" node now available
const templates = await sp.admin.tenant.getSPOTenantAllWebTemplates();
tenant¶
The tenant
node represents calls to the _api/Microsoft.Online.SharePoint.TenantAdministration.Tenant
api.
When calling the
tenant
endpoint you must target the -admin site as shown here. If you do not you will get only errors.
import { spfi } from "@pnp/sp";
import "@pnp/sp-admin";
const sp = spfi("https://{tenant}-admin.sharepoint.com");
// The MSAL scope will be: "https://{tenant}-admin.sharepoint.com/.default"
// default props
const defaultProps = await sp.admin.tenant();
// all props
const allProps = await sp.admin.tenant.select("*")();
// select specific props
const selectedProps = await sp.admin.tenant.select("AllowEditing", "DefaultContentCenterSite")();
// call method
const templates = await sp.admin.tenant.getSPOTenantAllWebTemplates();
office365Tenant¶
The office365Tenant
node represents calls to the _api/Microsoft.Online.SharePoint.TenantManagement.Office365Tenant
end point and is accessible from any site url.
import { spfi } from "@pnp/sp";
import "@pnp/sp-admin";
const sp = spfi(...);
// default props
const defaultProps = await sp.admin.office365Tenant();
// all props
const allProps = await sp.admin.office365Tenant.select("*")();
// selected props
const selectedProps = await sp.admin.office365Tenant.select("AllowEditing", "DefaultContentCenterSite")();
// call method
const externalUsers = await sp.admin.office365Tenant.getExternalUsers();
siteProperties¶
The siteProperties
node is primarily for accessing detailed properties about a site and tenant.
import { spfi } from "@pnp/sp";
import "@pnp/sp-admin";
const sp = spfi(...);
// default props
const defaultProps = await sp.admin.siteProperties();
// all props
const allProps = await sp.admin.siteProperties.select("*")();
// selected props
const selectedProps = await sp.admin.siteProperties.select("LockState")();
// call method
await sp.admin.siteProperties.clearSharingLockDown("https://tenant.sharepoint.com/sites/site1");
For more information on the methods available and how to use them, please review the code comments in the source.
call¶
All those nodes support a call
method to easily allow calling methods not explictly added to the library. If there is a method you use often that would be a good candidate to add, please open an issue or submit a PR. The call method is meant to help unblock folks before methods are added.
This sample shows using call to invoke the "AddTenantCdnOrigin" method of office365Tenant. While we already support for this method, it helps to show the relationship between call
and an existing method.
import { spfi } from "@pnp/sp";
import { SPOTenantCdnType } from '@pnp/sp-admin';
const sp = spfi(...);
// call AddTenantCdnOrigin
await sp.admin.office365Tenant.call<void>("AddTenantCdnOrigin", {
"cdnType": SPOTenantCdnType.Public,
"originUrl": "*/clientsideassets"
});
const spTenant = spfi("https://{tenant}-admin.sharepoint.com");
// call GetSiteSubscriptionId which takes no args
const id = await spTenant.admin.tenant.call<string>("GetSiteSubscriptionId");