- Intro
- Class Api
- Functional Api
- Advanced
- Access Control
- Permissions
- OperationStack
- Metrics
- Queries & Filters
- Catalogs & Collections
- Composing Workflows
- Developers
- Legacy
Sending Authentication to Hub.js Functions
Although Hub.js is built on ArcGIS Rest Js much of what Hub.js does involves complex manipulation of items and groups, and orchestration of dozens of API calls.
While the underlying REST Js functions typically require an IRequestOptions or IAuthenticationManager, in order to avoid re-fetching significant amounts of information about the current user and their organization, the Hub.js library functions typically require IHubRequestOptions.
IHubRequestOptions extends IRequestOptions with three important properties:
isPortal
a flag indicating if the code is running against ArcGIS Enterprise or ArcGIS OnlinehubApiUrl
the url to the hub api.portalSelf
(optional) the entire object returned from/portals/self
, including thecurrentUser
node
This information is generally available in any application that does any form of authentication against the ArcGIS Online or Enterprise APIs, and greatly reduces the amount of repetitive network requests that are required.
Authenticating and Creating IHubRequestOptions
Note In the future Hub.js will expose a function to streamline construction of IHubRequestOptions
First we need to create a UserSession
object. Typically web applications will do this via oAuth using related methods in ArcGIS Rest Js or Identity Manager in the ArcGIS API for Javascript.
To keep things simple we'll just use a username and password
import { UserSession } from "@esri/arcgis-rest-auth";
import { getSelf } from "@esri/arcgis-rest-portal";
import { getHubApiUrlFromPortal } from "@esri/hub-common";
import { removeSite } from "@esri/hub-sites";
const session = new UserSession({ username: "jsmith", password: "12345678" });
// now use the session to get the portal/self
const portalSelf = await getSelf({ authentication: session });
// now construct hubRequestOptions
const hubRO = {
isPortal: portalSelf.isPortal,
hubApiUrl: getHubApiUrlFromPortal(portalSelf),
portalSelf: portalSelf,
authentication: session,
};
// now we can make hub.js calls
const result = await removeSite("3ef", hubRO);