@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
357 lines (356 loc) • 11.6 kB
TypeScript
import { Observable } from 'rxjs';
import { AjaxError, AjaxRequest } from 'rxjs/ajax';
import { RpcForwardResponse } from '../rpc/forward/rpc-forward-model';
import { Rpc } from '../rpc/rpc';
import { RpcRelationshipType } from '../rpc/rpc-base';
import { RpcServiceForwarder } from '../rpc/rpc-forwarder';
import { AuthorizationManager } from '../security/authorization-manager';
import { GatewayUrlBuilder } from './gateway-url-builder';
import { Http, HttpResponseRetryHandler } from './http';
/**
* Gateway Request options that we use to extend the AjaxRequest interface
*/
export interface GatewayRequestOptions {
/**
* Retry handler implementation for a request.
* These handlers are used to invoke specific functionality for non-200 status codes in the http response.
*/
retryHandlers?: HttpResponseRetryHandler[];
/**
* Determines the maximum number of times that any of the retry handlers will be tried.
* before giving up and surfacing the error to the original caller
*/
maxRetryCount?: number;
/**
* Observable handler to insert asynchronous logic before the actual http response is sent.
* For Example: Waiting for pending authentication to complete before adding an authentication header
*/
beforeCall?: (request: GatewayRequest) => Observable<void>;
}
/**
* Extension of AjaxRequest interface for calling the Gateway API
*/
export interface GatewayRequest extends AjaxRequest, GatewayRequestOptions {
}
/**
* Initialization object data for the Gateway's base class.
*/
export interface GatewayRPCForwardedProperties {
/**
* The gateway URL.
*/
gatewayName: string;
/**
* Indicate whether gatewayUrl option was specified. (default to be false)
*/
gatewayUrlSpecified: boolean;
/**
* The stative version. (default to be null)
*/
staticVersion: string;
}
/**
* The gateway information on current gateway URL.
*/
export interface GatewayInformation {
/**
* The name of gateway node.
*/
name: string;
/**
* Indicating if https is used.
*/
secure: boolean;
/**
* The port number of gateway.
*/
port: number;
}
/**
* Condition of gateway.
*/
export interface GatewayCondition {
/**
* the gateway is running as service mode (installed on server operating system).
*/
isServiceMode: boolean;
/**
* the gateway is elevated on the desktop mode.
*/
isGatewayProcessElevated: boolean;
/**
* the user account is a member of the gateway administrators.
*/
isGatewayAdmin: boolean;
}
/**
* The Gateway Connection class for creating requests and calling the Gateway's REST API
*/
export declare class GatewayConnection extends RpcServiceForwarder {
http: Http;
private authorizationManager;
private static rpcCommands;
/**
* The IPv4 address for localhost
*/
private readonly localhostIpV4;
/**
* The IPv6 address for localhost
*/
private readonly localhostIpV6;
/**
* The localhost name
*/
private readonly localhost;
/**
* Time interval to check for internalGatewayStatus refresh.
*/
private readonly lastUpdatedInternalGatewayStatusInterval;
/**
* internally maintained gateway URL.
*/
private internalGatewayUrl;
/**
* internally maintained static version.
*/
private internalStaticVersion;
/**
* gatewayUrl param is specified.
*/
private internalGatewayUrlSpecified;
/**
* Last time internal gateway status was updated in milliseconds
*/
private lastUpdatedInternalGatewayStatus;
/**
* Internally maintained gateway status.
*/
private internalGatewayStatus;
/**
* The replay subject for gateway url to settle.
*/
private gatewayUrlAwaiter;
/**
* The RPC observable elevate client.
*/
private elevateClient;
/**
* The RPC observable elevate server.
*/
private elevateServer;
/**
* The elevate callback observable.
*/
private elevateCallbackInternal;
/**
* The replay subject for navigation ready state.
*/
private navigationReady;
/**
* Sets the elevate callback observable.
*/
set elevateCallback(value: () => Observable<boolean>);
/**
* Indicates that the gateway is disabled and therefore should not be called.
*/
get disabled(): boolean;
/**
* Gets the gateway URL to connect to.
*/
get gatewayUrl(): string;
/**
* Gets the gateway URL specified state.
*/
get staticVersion(): string;
/**
* Gets the gateway URL specified state.
*/
get gatewayUrlSpecified(): boolean;
/**
* Gets the gateway URL observable while setting up.
*/
get gatewayUrlObservable(): Observable<string>;
/**
* Gets the navigation ready observable.
*/
get navigationReadyObservable(): Observable<boolean>;
/**
* Sets the navigation ready status.
*/
set navigationReadyStatus(ready: boolean);
/**
* Gets the gateway information.
*/
get gatewayInfo(): GatewayInformation;
/**
* Gets the gateway node name to make a CIM/PowerShell query to the gateway node.
*/
get gatewayName(): string;
/**
* Gets gateway status from cache or sets cache if it doesn't exist.
*/
private get gatewayStatus();
/**
* Initializes a new instance of the Gateway class.
*
* @param http the Http object.
* @param rpc the Rpc class.
* @patam authorizationManager the authorization manager class object.
*/
constructor(http: Http, rpc: Rpc, authorizationManager: AuthorizationManager);
/**
* Configure the gateway URL to connect to.
*/
configureGatewayEnvironment(url: string, urlSpecified: boolean, staticVersion: string): void;
/**
* Update the url with static version option.
* @param url the original URL including options.
* @returns updated url with "version=" option if staticVersion present.
*/
addStaticVersion(url: string): string;
/**
* Makes a POST call to the gateway
*
* @param relativeUrl the relative Url after "/api"
* @param body the body string JSON.stringfy'ed
* @param request the gateway request object.
*/
post(relativeUrl: string, body?: any, request?: GatewayRequest): Observable<any>;
/**
* Makes a GET call to the gateway
*
* @param relativeUrl the relative Url after "/api"
* @param request the gateway request object.
*/
get(relativeUrl: string, request?: GatewayRequest): Observable<any>;
/**
* Makes a PUT call to the gateway
*
* @param relativeUrl the relative Url after "/api"
* @param body the body string JSON.stringfy'ed
* @param request the gateway request object.
*/
put(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any>;
/**
* Makes a PATCH call to the gateway
*
* @param relativeUrl the relative Url after "/api"
* @param body the body string JSON.stringfy'ed
* @param request the gateway request object.
*/
patch(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any>;
/**
* Makes a DELETE call to the gateway
*
* @param relativeUrl the relative Url after "/api"
* @param body the body string JSON.stringfy'ed
* @param request the gateway request object.
*/
delete(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any>;
/**
* Makes a DELETE call to the gateway without waiting for the response.
*
* @param relativeUrl the relative Url after "/api"
* @param request the gateway request object.
*/
deleteQuick(relativeUrl: string, headers?: any): void;
/**
* Creates a GatewayRequest.
*
* @param method the http method to use
* @param relativeUrl the relative Url after "/api/"
* @param body the body string JSON.stringfy'ed
* @param request the gateway request object to extend.
*/
createRequest(method: string, relativeUrl: string, body?: any, request?: GatewayRequest): GatewayRequest;
/**
* Make a request.
*
* @param request the request to execute against the gateway.
* @return Observable<any> the query result observable.
*/
call(request: GatewayRequest): Observable<any>;
/**
* Gets default secure request options.
*
* @returns updated request object.
*/
get defaultHttpSecureOptions(): AjaxRequest;
/**
* Check if elevation is required from the error object.
*
* @param error the ajax error object.
*/
isElevationRequired(error: AjaxError): boolean;
/**
* Elevate the gateway if it's desktop mode running.
*/
elevate(): Observable<boolean>;
/**
* Creates and returns a new URL builder for the current connection.
*/
url(): GatewayUrlBuilder;
/**
* Clear the DNS cache.
*/
clearDnsCache(): Observable<void>;
/**
* Polling to check if the gateway is elevated.
*/
pollingGatewayElevated(): Observable<boolean>;
/**
* Perform gateway status query but cut off if it exceeds 2.5 seconds.
*/
getElevatedStatus(): Observable<{
error: boolean;
isGatewayProcessElevated: boolean;
completed: boolean;
id: string;
}>;
/**
* Gets gateway machine if found in list of given nodes
* @param nodes Node names or IPs to check
* @returns Node name of gateway if found, null otherwise
*/
getGateway(nodes: string[]): Observable<string>;
/**
* Check gateway condition.
*/
checkCondition(): Observable<GatewayCondition>;
/**
* Get gateway status.
*/
getStatus(): Observable<any>;
/**
* Get user access check.
*/
getAccessCheck(): Observable<any>;
/**
* Called on a child service instance when onForwardInit returns from the parent
* Initialize telemetry from within here so we can leverage gateway status for telemetry metadata.
* @param data The response from the forwardInit call
*/
protected onForwardInitResponse(data: RpcForwardResponse<GatewayRPCForwardedProperties>): void;
/**
* Called when a new instance of the service in another window is initialized and needs to synchronize with its parent
* @param from The RpcRelationshipType that this request is from
* @returns an observable for the all the values needed to initialize the service
*/
protected onForwardInit(): Observable<GatewayRPCForwardedProperties>;
/**
* Called when the forwarded services counterpart wants to get data from the parent
* @param from The RpcRelationshipType that this request is from
* @param name The name of the method to forward to
* @param args The arguments of the method
* @returns an observable for the result of the method call
*/
protected onForwardExecute(from: RpcRelationshipType, name: string): Observable<any>;
/**
* Called when the forwarded services counterpart sends a notify message
* @param from The RpcRelationshipType that this request is from
* @param name The name of the property to change
* @param value The new value of the property
* @returns an observable that completes when the property has been changed.
*/
protected onForwardNotify(from: RpcRelationshipType, name: string): Observable<void>;
}