@sap-cloud-sdk/connectivity
Version:
SAP Cloud SDK for JavaScript connectivity
232 lines (231 loc) • 9.61 kB
TypeScript
import type { CachingOptions } from '../cache';
import type { ProxyConfiguration } from '../connectivity-service-types';
import type { IsolationStrategy } from './destination-cache';
/**
* A resolved destination containing information needed to execute requests, such as the system URL.
*
* You can create a destination as a local object when supplying all necessary information, or it could be retrieved from the destination service on SAP Business Technology Platform (via {@link DestinationFetchOptions}).
* When creating a local object representing a destination, you need to supply at least the {@link url} and, if required by the target system, valid credentials with {@link username} and {@link password}.
*/
export interface Destination {
/**
* Name of the destination retrieved from SAP Business Technology Platform.
*/
name?: string | null;
/**
* Base URL for calls to this destination.
* The URL has to define the protocol, like `http://` or `https://`, and a host.
* The path for requests against this destination will be appended to the path defined in the URL as a new path segment.
*/
url?: string;
/**
* Type of authentication to use.
*
* Defaults to `NoAuthentication`, unless {@link username} and {@link password} are provided, in which case the default is `BasicAuthentication`.
*/
authentication?: AuthenticationType;
/**
* Proxy type to specify whether the target resides on-premise (not used).
*/
proxyType?: DestinationProxyType;
/**
* Client to target in an SAP system, will be added as HTTP header `sap-client` if set.
*/
sapClient?: string | undefined | null;
/**
* Username to use for basic authentication, optional if other means of authentication shall be used.
*/
username?: string | null;
/**
* Password to use for basic authentication, optional if other means of authentication shall be used.
*/
password?: string | null;
/**
* Authentication tokens returned from destination service on SAP Business Technology Platform.
*/
authTokens?: DestinationAuthToken[] | null;
/**
* Flag indicating whether all certificates should be accepted when communicating with the destination. Should not be "true" in production.
*/
isTrustingAllCertificates?: boolean;
/**
* ProxyConfiguration for on-premise connectivity and http(s) web proxies. Is present if proxyType of the destination equals "OnPremise" or environment variables [http_proxy] or [https_proxy] are set See {@link ProxyConfiguration}.
*/
proxyConfiguration?: ProxyConfiguration;
/**
* Client Id used to retrieve access token for "OAuth2ClientCredentials", "OAuth2UserTokenExchange" and "OAuth2JWTBearer" authentication.
*/
clientId?: string;
/**
* Client Secret used to retrieve access token for "OAuth2ClientCredentials", "OAuth2UserTokenExchange" and "OAuth2JWTBearer" authentication.
*/
clientSecret?: string;
/**
* URL to retrieve access token for "OAuth2ClientCredentials", "OAuth2UserTokenExchange" and "OAuth2JWTBearer" authentication.
*/
tokenServiceUrl?: string;
/**
* User for basic authentication to OAuth server (if required).
*/
tokenServiceUser?: string;
/**
* Password for tokenServiceUser (if required).
*/
tokenServicePassword?: string;
/**
* The type of the destination, defaults to 'HTTP'. The SAP Cloud SDK only understands destinations of type 'HTTP' and 'MAIL'.
*/
type?: 'HTTP' | 'LDAP' | 'MAIL' | 'RFC';
/**
* Further properties of the destination as defined in destination service on SAP Business Technology Platform, possibly empty.
*/
originalProperties?: {
[key: string]: any;
};
/**
* Flag indicating whether the destination is for test purpose. Should be "undefined" or "false" for non-mocked destinations.
*/
isTestDestination?: boolean;
/**
* Location ID of the Cloud Connector to be used for connection to an On-Premise system. Optional. Corresponds to property "CloudConnectorLocationId" in the additional properties of a destination.
*/
cloudConnectorLocationId?: string;
/**
* Array of certificates used for authentication type ClientCertificateAuthentication.
*/
certificates?: DestinationCertificate[];
/**
* Trusted certificate for https requests used by the destination. Only relevant for self-signed certificates where trust needs to be enabled in the client.
*/
trustStoreCertificate?: DestinationCertificate;
/**
* Name of the key store/certificate to be used for ClientCertificateAuthentication.
*/
keyStoreName?: string;
/**
* Password of the key store/certificate to be used for ClientCertificateAuthentication.
*/
keyStorePassword?: string;
/**
* System user to be used for OAuth2SAMLBearerAssertion authentication type.
*/
systemUser?: string;
/**
* Additional headers to be used for calls against the destination, originally defined by `URL.headers.<header-name>`.
* The keys of this object denote the names of the headers and the values their values.
*/
headers?: Record<string, any>;
/**
* Additional query parameters to be used for calls against the destination, originally defined by `URL.queries.<query-parameter-name>`.
* The keys of this object denote the names of the query parameters and the values their values.
*/
queryParameters?: Record<string, any>;
/**
* If set to true the auth token provided to the request execution is forwarded to the destination target.
*/
forwardAuthToken?: boolean;
/**
* Base64-encoded JSON web key set, containing the signing keys which are used to validate the JWT provided in the X-User-Token header.
* This field is used to authenticate the destination using a JWT without JKU.
*/
jwks?: string;
/**
* URI of the JSON web key set, containing the signing keys which are used to validate the JWT provided in the X-User-Token header.
* This field is used to authenticate the destination using a JWT without JKU.
*/
jwksUri?: string;
/**
* Destination has automatic mTLS handling on CloudFoundry.
*
* If this option is set to true, the CloudFoundry [instance identity](https://docs.cloudfoundry.org/devguide/deploy-apps/instance-identity.html)
* will be automatically used for TLS secured HTTP requests.
*/
mtls?: boolean;
}
/**
* Represents authentication token returned from destination service.
*/
export interface DestinationAuthToken {
/**
* Type of the token, e.g., Bearer.
*/
type: string;
/**
* Value of the token.
*/
value: string;
/**
* The number of seconds until the access token expires.
*/
expiresIn?: string;
/**
* Potential error of token retrieval in the destination service.
*/
error: string | null;
/**
* An object containing ready-to-use key-value pairs like `Authorization` : `Bearer U29tZVRva2VuVmFsdWU=`.
*/
http_header: {
key: string;
value: string;
};
}
/**
* Represents the proxy type on a destination.
*/
export type DestinationProxyType = 'OnPremise' | 'Internet' | 'PrivateLink' | null;
/**
* Represents a certificate attached to a destination.
*/
export interface DestinationCertificate {
/**
* Name of the certificate file.
*/
name: string;
/**
* Content of the certificate as base64 encoded binary.
*/
content: string;
/**
* Type of the certificate.
*/
type: string;
}
/**
* Options to use while fetching destinations. Encompasses both {@link CachingOptions} and isolation strategy.
*/
export type DestinationRetrievalOptions = CachingOptions & {
/**
* The isolation strategy used for caching destinations. For the available options, see {@link IsolationStrategy}.
* By default, 'tenant-user' is set.
*/
isolationStrategy?: IsolationStrategy;
/**
* The call to `destination/{name}` sometimes also performs a token exchange. Such calls can be flaky due to an unstable token exchange endpoint.
* This parameter enables 3 retries on the destination by name calls.
* By default, the retry is disabled.
*/
retry?: boolean;
};
/**
* Destination for HTTP request where the URL is mandatory.
*/
export type HttpDestination = Destination & {
url: string;
};
/**
* Assertion that the Destination is a HttpDestination.
* This method comes in handy when you retrieved a destination from the destination service and need to check if it is a HttpDestination.
* @param destination - Destination or HttpDestination.
*/
export declare function assertHttpDestination(destination: Destination | HttpDestination): asserts destination is HttpDestination;
/**
* Type guard to find if object is a Destination.
* @param destination - Destination to be checked.
* @returns Boolean.
*/
export declare function isHttpDestination(destination: HttpDestination | Destination | null): destination is HttpDestination;
/**
* Represents the authentication type of a destination.
*/
export type AuthenticationType = 'PrincipalPropagation' | 'NoAuthentication' | 'BasicAuthentication' | 'SAMLAssertion' | 'OAuth2SAMLBearerAssertion' | 'OAuth2ClientCredentials' | 'OAuth2UserTokenExchange' | 'ClientCertificateAuthentication' | 'OAuth2JWTBearer' | 'OAuth2Password' | 'OAuth2RefreshToken';