azure
Version:
Microsoft Azure Client Library for node
435 lines (404 loc) • 20.8 kB
TypeScript
import * as stream from 'stream';
import * as http from 'http';
export { IncomingMessage } from 'http';
/**
* REST request options
*
* @property {object.<string, string>} customHeaders - Any additional HTTP headers to be added to the request
* @proprerty {boolean} [jar] - If true, remember cookies for future use
*/
export interface RequestOptions {
customHeaders?: { [headerName: string]: string; };
}
export interface ClientRequestOptions extends RequestOptions {
jar?: boolean;
}
/**
* HttpOperationResponse wrapper that provides the raw request, raw response and the deserialized response body.
*
* @property {WebResource} request - The raw request object
* @property {http.IncomingMessage} response - The response from the http call
* @property {T} body - The deserialized response body of the expected type.
*/
export interface HttpOperationResponse<T> {
request: WebResource;
response: http.IncomingMessage;
body: T;
}
/**
* Service client options, used for all REST requests initiated by the service client.
*
* @property {Array} [filters] - Filters to be added to the request pipeline
* @property {ClientRequestOptions} requestOptions - Default ClientRequestOptions to use for requests
* @property {boolean} noRetryPolicy - If set to true, turn off default retry policy
*/
export interface ServiceClientOptions {
filters?: any[];
requestOptions?: ClientRequestOptions;
noRetryPolicy?: boolean;
}
export class ServiceClient {
/**
* Initializes a new instance of the ServiceClient class.
*
* @param {ServiceClientCredentials} [credentials] - BasicAuthenticationCredentials or
* TokenCredentials object used for authentication.
* @param {ServiceClientOptions} [options] The parameter options
*/
constructor(credentials?: ServiceClientCredentials, options?: ServiceClientOptions);
/**
* Attempts to find package.json for the given azure nodejs package.
* If found, returns the name and version of the package by reading the package.json
* If package.json is not found, returns a default value.
* @param {string} managementClientDir - pass the directory of the specific azure management client.
* @returns {object} packageJsonInfo - "name" and "version" of the desired package.
*/
getPackageJsonInfo(managementClientDir: string): { name: string, version: string };
/**
* Adds custom information to user agent header
* @param {any} additionalUserAgentInfo - information to be added to user agent header, as string.
*/
addUserAgentInfo(additionalUserAgentInfo: any): void;
sendRequest<TResult>(options: PathTemplateBasedRequestPrepareOptions | UrlBasedRequestPrepareOptions, callback: ServiceCallback<TResult>): void;
sendRequest<TResult>(options: PathTemplateBasedRequestPrepareOptions | UrlBasedRequestPrepareOptions): Promise<TResult>;
sendRequestWithHttpOperationResponse<TResult>(options: PathTemplateBasedRequestPrepareOptions | UrlBasedRequestPrepareOptions): Promise<HttpOperationResponse<TResult>>;
}
/**
* Service Error that is returned when an error occurrs in executing the REST request initiated by the service client.
*
* @property {number} [statusCode] - The response status code received from the server as a result of making the request.
* @property {WebResource} request - The raw/actual request sent to the server.
* @property {http.IncomingMessage} response - The raw/actual response from the server.
* @property {any} body - The response body.
*/
export interface ServiceError extends Error {
statusCode: number;
request: WebResource;
response: http.IncomingMessage;
body: any;
}
/**
* Service callback that is returned for REST requests initiated by the service client.
*
* @property {Error|ServiceError} err - The error occurred if any, while executing the request; otherwise null
* @property {TResult} result - The deserialized response body if an error did not occur.
* @property {WebResource} request - The raw/actual request sent to the server if an error did not occur.
* @property {http.IncomingMessage} response - The raw/actual response from the server if an error did not occur.
*/
export interface ServiceCallback<TResult> { (err: Error | ServiceError, result?: TResult, request?: WebResource, response?: http.IncomingMessage): void }
/**
* Creates a new 'ExponentialRetryPolicyFilter' instance.
*
* @constructor
* @param {number} retryCount The client retry count.
* @param {number} retryInterval The client retry interval, in milliseconds.
* @param {number} minRetryInterval The minimum retry interval, in milliseconds.
* @param {number} maxRetryInterval The maximum retry interval, in milliseconds.
*/
export class ExponentialRetryPolicyFilter {
constructor(retryCount: number, retryInterval: number, minRetryInterval: number, maxRetryInterval: number);
}
export enum MapperType {
Base64Url,
Boolean,
ByteArray,
Composite,
Date,
DateTime,
DateTimeRfc1123,
Dictionary,
Enum,
Number,
Object,
Sequence,
String,
Stream,
TimeSpan,
UnixTime
}
export interface BaseMapperType {
name: MapperType
}
export interface DictionaryType extends BaseMapperType {
type: {
name: MapperType;
value: Mapper;
}
}
export interface Mapper extends BaseMapperType {
readOnly?: boolean;
isConstant?: boolean;
required: boolean;
serializedName: string;
type: BaseMapperType;
}
export interface CompositeType extends Mapper {
type: {
name: MapperType;
className: string;
modelProperties?: { [propertyName: string]: Mapper };
}
}
export interface SequenceType extends Mapper {
type: {
name: MapperType;
element: Mapper;
}
}
export interface UrlParameterValue {
value: any,
skipUrlEncoding: boolean;
}
/**
* Defines the options that can be specified for preparing the Request (WebResource) that is given to the request pipeline.
*
* @property {string} method The HTTP request method. Valid values are 'GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'POST', 'PATCH'.
*
* @property {string} [url] The request url. It may or may not have query parameters in it.
* Either provide the 'url' or provide the 'pathTemplate' in the options object. Both the options are mutually exclusive.
*
* @property {object} [queryParameters] A dictionary of query parameters to be appended to the url, where
* the 'key' is the 'query-parameter-name' and the 'value' is the 'query-parameter-value'.
* The 'query-parameter-value' can be of type 'string' or it can be of type 'object'.
* The 'object' format should be used when you want to skip url encoding. While using the object format,
* the object must have a property named value which provides the 'query-parameter-value'.
* Example:
* - query-parameter-value in 'object' format: { 'query-parameter-name': { value: 'query-parameter-value', skipUrlEncoding: true } }
* - query-parameter-value in 'string' format: { 'query-parameter-name': 'query-parameter-value'}.
* Note: 'If url already has some query parameters, then the value provided in queryParameters will be appended to the url.
*
* @property {string} [pathTemplate] The path template of the request url. Either provide the 'url' or provide the 'pathTemplate'
* in the options object. Both the options are mutually exclusive.
* Example: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}'
*
* @property {string} [baseUrl] The base url of the request. Default value is: 'https://management.azure.com'. This is applicable only with
* pathTemplate. If you are providing url then it is expected that you provide the complete url.
*
* @property {object} [pathParameters] A dictionary of path parameters that need to be replaced with actual values in the pathTemplate.
* Here the key is the 'path-parameter-name' and the value is the 'path-parameter-value'.
* The 'path-parameter-value' can be of type 'string' or it can be of type 'object'.
* The 'object' format should be used when you want to skip url encoding. While using the object format,
* the object must have a property named value which provides the 'path-parameter-value'.
* Example:
* - path-parameter-value in 'object' format: { 'path-parameter-name': { value: 'path-parameter-value', skipUrlEncoding: true } }
* - path-parameter-value in 'string' format: { 'path-parameter-name': 'path-parameter-value' }.
*
* @param {object} [options.formData] A dictionary of key-value pairs for the formData object.
* If the expected 'Content-Type' to be set is 'application/x-www-form-urlencoded' then please set it in the options.headers object else the
* 'Content-Type' header will be set to 'multipart/form-data'.
*
* @property {object} [headers] A dictionary of request headers that need to be applied to the request.
* Here the key is the 'header-name' and the value is the 'header-value'. The header-value MUST be of type string.
* - ContentType must be provided with the key name as 'Content-Type'. Default value 'application/json; charset=utf-8'.
* - 'Transfer-Encoding' is set to 'chunked' by default if 'bodyIsStream' is set to true.
* - 'Content-Type' is set to 'application/octet-stream' by default if 'bodyIsStream' is set to true.
* - 'accept-language' by default is set to 'en-US'
* - 'x-ms-client-request-id' by default is set to a new Guid. To not generate a guid for the request, please set disableClientRequestId to true
*
* @property {boolean} [disableClientRequestId] When set to true, instructs the client to not set 'x-ms-client-request-id' header to a new Guid().
*
* @property {object|string|boolean|array|number|null|undefined} [body] - The request body. It can be of any type. This method will JSON.stringify() the request body.
*
* @property {object|string|boolean|array|number|null|undefined} [options.body] - The request body. It can be of any type. This method will JSON.stringify() the request body.
*
* @property {object} [options.serializationMapper] - Provides information on how to serialize the request body.
*
* @property {object} [options.deserializationMapper] - Provides information on how to deserialize the response body.
*
* @property {boolean} [disableJsonStringifyOnBody] - Indicates whether this method should JSON.stringify() the request body. Default value: false.
*
* @property {boolean} [bodyIsStream] - Indicates whether the request body is a stream (useful for file upload scenarios).
*/
export interface RequestPrepareOptions {
method: string;
queryParameters?: { [propertyName: string]: any | UrlParameterValue };
baseUrl?: string;
pathParameters?: { [propertyName: string]: any | UrlParameterValue };
formData?: { [propertyName: string]: any };
headers?: { [propertyName: string]: any };
disableClientRequestId?: boolean;
body?: any;
disableJsonStringifyOnBody?: boolean;
serializationMapper: Mapper;
deserializationMapper: Mapper;
bodyIsStream?: boolean;
}
export interface PathTemplateBasedRequestPrepareOptions extends RequestPrepareOptions {
pathTemplate: string;
}
export interface UrlBasedRequestPrepareOptions extends RequestPrepareOptions {
url: string;
}
export declare type HttpMethods = "GET" | "PUT" | "POST" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "TRACE";
/**
* This class provides an abstraction over a REST call by being library / implementation agnostic and wrapping the necessary
* properties to initiate a request.
*/
export class WebResource {
/**
* Access to raw request headers for requests. Useful when you need to set a header
* on every request (like in a credential object) where the prepare method does
* far too much work.
*/
public headers: { [key: string]: string; };
/**
* @property {string} url The request url
*/
public url: string;
/**
* @property {string} method The request method
*/
public method: HttpMethods;
/**
* @property {any} [body] The request body
*/
public body?: any;
/**
* @property {boolean} rawResponse Indicates whether the client should give back the response as-is. (Useful for streaming scenarios).
*/
public rawResponse?: boolean;
/**
* @property {any} [formData] Formdata parameters.
*/
public formData?: any;
/**
* @property {any} [query] Query parameters
*/
public query?: {
[key: string]: any;
};
/**
* Hook up the given input stream to a destination output stream if the WebResource method
* requires a request body and a body is not already set.
*
* @param {Stream} inputStream the stream to pipe from
* @param {Stream} outputStream the stream to pipe to
*
* @return destStream
*/
pipeInput(inputStream: stream.Readable, destStream: stream.Writable): stream.Writable;
/**
* Validates that the required properties such as method, url, headers['Content-Type'],
* headers['accept-language'] are defined. It will throw an error if one of the above
* mentioned properties are not defined.
*/
validateRequestProperties(): void;
/**
* Prepares the request.
*
* @param {object} options The request options that should be provided to send a request successfully
*
* @param {string} options.method The HTTP request method. Valid values are 'GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'POST', 'PATCH'.
*
* @param {string} [options.url] The request url. It may or may not have query parameters in it.
* Either provide the 'url' or provide the 'pathTemplate' in the options object. Both the options are mutually exclusive.
*
* @param {object} [options.queryParameters] A dictionary of query parameters to be appended to the url, where
* the 'key' is the 'query-parameter-name' and the 'value' is the 'query-parameter-value'.
* The 'query-parameter-value' can be of type 'string' or it can be of type 'object'.
* The 'object' format should be used when you want to skip url encoding. While using the object format,
* the object must have a property named value which provides the 'query-parameter-value'.
* Example:
* - query-parameter-value in 'object' format: { 'query-parameter-name': { value: 'query-parameter-value', skipUrlEncoding: true } }
* - query-parameter-value in 'string' format: { 'query-parameter-name': 'query-parameter-value'}.
* Note: 'If options.url already has some query parameters, then the value provided in options.queryParameters will be appended to the url.
*
* @param {string} [options.pathTemplate] The path template of the request url. Either provide the 'url' or provide the 'pathTemplate'
* in the options object. Both the options are mutually exclusive.
* Example: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}'
*
* @param {string} [options.baseUrl] The base url of the request. Default value is: 'https://management.azure.com'. This is applicable only with
* options.pathTemplate. If you are providing options.url then it is expected that you provide the complete url.
*
* @param {object} [options.pathParameters] A dictionary of path parameters that need to be replaced with actual values in the pathTemplate.
* Here the key is the 'path-parameter-name' and the value is the 'path-parameter-value'.
* The 'path-parameter-value' can be of type 'string' or it can be of type 'object'.
* The 'object' format should be used when you want to skip url encoding. While using the object format,
* the object must have a property named value which provides the 'path-parameter-value'.
* Example:
* - path-parameter-value in 'object' format: { 'path-parameter-name': { value: 'path-parameter-value', skipUrlEncoding: true } }
* - path-parameter-value in 'string' format: { 'path-parameter-name': 'path-parameter-value' }.
*
* @param {object} [options.headers] A dictionary of request headers that need to be applied to the request.
* Here the key is the 'header-name' and the value is the 'header-value'. The header-value MUST be of type string.
* - ContentType must be provided with the key name as 'Content-Type'. Default value 'application/json; charset=utf-8'.
* - 'Transfer-Encoding' is set to 'chunked' by default if 'options.bodyIsStream' is set to true.
* - 'Content-Type' is set to 'application/octet-stream' by default if 'options.bodyIsStream' is set to true.
* - 'accept-language' by default is set to 'en-US'
* - 'x-ms-client-request-id' by default is set to a new Guid. To not generate a guid for the request, please set options.disableClientRequestId to true
*
* @param {boolean} [options.disableClientRequestId] When set to true, instructs the client to not set 'x-ms-client-request-id' header to a new Guid().
*
* @param {object|string|boolean|array|number|null|undefined} [options.body] - The request body. It can be of any type. This method will JSON.stringify() the request body.
*
* @param {boolean} [options.disableJsonStringifyOnBody] - Indicates whether this method should JSON.stringify() the request body. Default value: false.
*
* @param {boolean} [options.bodyIsStream] - Indicates whether the request body is a stream (useful for file upload scenarios).
*
* @returns {object} WebResource Returns the prepared WebResource (HTTP Request) object that needs to be given to the request pipeline.
*/
prepare(options?: PathTemplateBasedRequestPrepareOptions | UrlBasedRequestPrepareOptions): WebResource;
}
/**
* Defines the ServiceClientCredentials. It is the base interface which enforces that the signRequest method needs to be implemented.
*
* @property {string} token The token.
* @property {string} [authorizationScheme] The authorization scheme. If not specified, the default of 'Bearer" is used.
*/
export interface ServiceClientCredentials {
/**
* Signs a request with the Authentication header.
*
* @param {WebResource} The WebResource to be signed.
* @param {function(error)} callback The callback function.
*/
signRequest(webResource: WebResource, callback: { (err: Error): void }): void;
}
/**
* Defines the TokenCredentials.
*
* @property {string} token The token.
* @property {string} [authorizationScheme] The authorization scheme. If not specified, the default of 'Bearer" is used.
*/
export class TokenCredentials implements ServiceClientCredentials {
constructor(token: string, authorizationScheme?: string);
signRequest(webResource: WebResource, callback: { (err: Error): void }): void;
}
/**
* Defines the BasicAuthenticationCredentials.
*
* @property {string} userName User name.
* @property {string} password Password.
* @property {string} [authorizationScheme] The authorization scheme. Default ('Basic')
*/
export class BasicAuthenticationCredentials implements ServiceClientCredentials {
constructor(userName: string, password: string, authorizationScheme?: string);
signRequest(webResource: WebResource, callback: { (err: Error): void }): void;
}
/**
* @interface ApiKeyCredentialOptions
* Describes the options to be provided while creating an instance of ApiKeyCredentials
*/
export interface ApiKeyCredentialOptions {
/**
* @property {object} [inHeader] A key value pair of the header parameters that need to be applied to the request.
*/
inHeader?: { [x: string]: any };
/**
* @property {object} [inQuery] A key value pair of the query parameters that need to be applied to the request.
*/
inQuery?: { [x: string]: any };
}
/**
* Creates a new ApiKeyCredentials instance.
*/
export class ApiKeyCredentials implements ServiceClientCredentials {
/**
* @constructor
* @param {object} options Specifies the options to be provided for auth. Either header or query needs to be provided.
* @param {object} [inHeader] A key value pair of the header parameters that need to be applied to the request.
* @param {object} [inQuery] A key value pair of the query parameters that need to be applied to the request.
*/
constructor(options?: ApiKeyCredentialOptions);
signRequest(webResource: WebResource, callback: { (err: Error): void }): void;
}