/** * Interactive API v1 * Interactive API v1 is a REST API for simple access to geo data. * * OpenAPI spec version: 1.0.0 * * * NOTE: This class is auto generated by the swagger code generator program. * https://github.com/swagger-api/swagger-codegen.git */ import { RequestBuilder } from "./RequestBuilder"; export interface ApiHealthStatus { /** * Health status of API. */ status?: string; } export interface ApiVersion { /** * Version of API. */ apiVersion?: string; } /** * True if the value is only an estimation; false otherwise. */ export type Estimated = boolean; export type SearchParams = Array<{ key: string; operator: "=" | "!=" | ">=" | "<=" | "<" | ">" | "@>"; value: string | number | ".null"; }>; export type GetFeaturesBySpatialBody = Feature | FeatureCollection | Geometry | LineString | MultiLineString | MultiPoint | MultiPolygon | Point | Polygon; export interface Feature extends GeoJSON { /** * The unique identifier of the feature. */ id?: string; geometry?: Geometry; properties?: { [key: string]: any; }; } export interface FeatureCollection extends GeoJSON { /** * Features included in the collection. */ features: Array; } export interface FeatureCollectionIterable extends FeatureCollection { /** * The handle of the next batch. */ handle?: string; /** * The token of the next batch. */ nextPageToken?: string; } export interface FeatureCollectionModification extends FeatureCollection { /** * List of inserted feature IDs. */ inserted?: Array; /** * List of updated features IDs. */ updated?: Array; /** * List of deleted features IDs. */ deleted?: Array; } /** * The base type for all possible GeoJSON objects. */ export interface GeoJSON { type: string; /** * Describes the coordinate range of the GeoJSON object. */ bbox?: Array; } /** * A Geometry object represents points, curves, and surfaces in coordinate layer. */ export interface Geometry extends GeoJSON { } export interface LineString extends Geometry { coordinates?: Array>; } export interface ModelError { title?: string; status?: number; code?: string; cause?: string; action?: string; correlationId?: string; } export interface MultiLineString extends Geometry { coordinates?: Array>>; } export interface MultiPoint extends Geometry { coordinates?: Array>; } export interface MultiPolygon extends Geometry { coordinates?: Array>>>; } export interface Point extends Geometry { coordinates?: Array; } export interface Polygon extends Geometry { coordinates?: Array>>; } export interface Statistics { count?: StatisticsCount; byteSize?: StatisticsCount; bbox?: StatisticsBbox; geometryTypes?: StatisticsGeometryTypes; properties?: StatisticsProperties; tags?: StatisticsTags; searchable?: string; } export interface StatisticsBbox { value?: Array; estimated?: Estimated; } export interface StatisticsCount { value?: number; estimated?: Estimated; } export interface StatisticsGeometryTypes { value?: Array; estimated?: Estimated; } export interface StatisticsProperties { value?: Array; estimated?: Estimated; } export interface StatisticsPropertiesValue { key?: string; count?: number; searchable?: boolean; } export interface StatisticsTags { value?: Array; estimated?: Estimated; } export interface StatisticsTagsValue { key?: string; count?: number; } /** * Retrieves API Specification version information. */ export declare function getApiVersion(builder: RequestBuilder): Promise; /** * Tests basic health of the service. */ export declare function getHealth(builder: RequestBuilder): Promise; /** * Retrieves the feature with the provided identifier. * * @summary Get a feature by ID. * * @param layerId The unique identified for the Layer ID. * * @param featureId The unique identifier of a feature in the layer. * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param force2D If set to `true` the features in the response will have only X's and Y's as coordinates. */ export declare function getFeature(builder: RequestBuilder, params: { layerId: string; featureId: string; selection?: string | Array; force2D?: boolean; }): Promise; /** * Returns all of the features found for the provided list of ids. * The response is always a FeatureCollection, even if there are no features with the provided ids. * * @summary Get features by ID. * * @param layerId The unique identified for the Layer ID. * * @param id A comma separated list of unique feature identifiers. * These are the acceptable formats for this field: * ``` * id=value1,value2 * ``` * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param force2D If set to `true` the features in the response will have only X's and Y's as coordinates. */ export declare function getFeatures(builder: RequestBuilder, params: { layerId: string; id: string | string[]; selection?: string | Array; force2D?: boolean; }): Promise; /** * Return the features which are inside a bounding box stipulated by bbox parameter. * * @summary Get features by bounding box. * * @param layerId The unique identified for the Layer ID. * * @param bbox Both west, south, east and north coordinates separated by comma. * Example: `bbox=13.082,52.416,13.628,52.626` - Bounding box of Berlin. * * @param clip If set to true the features' geometries are clipped to the geometry of the * tile or bounding box. Default is false. * * @param limit The maximum number of features in the response. Default is 30000. Hard limit is 100000. * * @param params Additional feature filters which compares the feature's property's value with the one specified * in the query, resulting in a subset of features. * The usage of multiple property names represents an AND operation. * The usage of a comma (,) separating the properties values, represents an OR operation. * Properties initiated with 'f.' are used to access values which are added by default in the stored feature. * The possible values are: 'f.id', 'f.createdAt' and 'f.updatedAt'. * Properties initiated with 'p.' are used to access values in the stored feature which are under the 'properties' property. * Use it as a shorthand accessor for 'properties' values. * The format should follow the specification below * ``` * ?p.property_name_1=property_value_1&f.special_property_name_1=special_property_value_1 * ``` * * For example, the above query, the Features will be filtered by 'property' AND 'special property' equals to their * respective values. * * While in the following example ```?p.property_name_1=value_1,value_2``` * The resulting Features list will contain all elements having `value_1` OR `value_2`. * * Additionally to the operators used in the examples above, the query can be written, with the same semantic, * by using the long operators: `"=gte=", "=lte=", "=gt=", "=lt=" and "=cs="`. * * The below queries yield the same result: * ``` * ?p.property_name_1>=10 * ?p.property_name_1=gte=10 * ``` * * The available operators are: * "=" - equals * "!=" - not equals * ">=" or "=gte=" - greater than or equals * "<=" or "=lte=" - less than or equals * ">" or "=gt=" - greater than * "<" or "=lt=" - less than * "@>" or "=cs=" - contains * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param skipCache If set to true the response is not returned from cache. Default is false. * * @param clustering The clustering algorithm to apply to the data within the result. * Providing this query parameter the data will be returned in a clustered way. * This means the data won't necessarily be returned in its original shape or with its original properties. * Depending on the chosen clustering algorithm there could be different mandatory and/or optional parameters * to specify the behavior of the algorithm. * Possible values are: * * `hexbin` - The hexbin algorithm divides the world in hexagonal "bins" on a specified resolution. * Each hexagon has an address being described by the H3 addressing scheme. * For more information on that topic see: https://eng.uber.com/h3/. * * `quadbin` - The quadbin algorithm takes the geometry input from the request (e.g. quadkey / bbox..) * and count the features in it. * This clustering mode works also for very large layers and can be used for getting an overview * where data is present in a given layer. Furthermore, a property filter on one property is applicable. * * @param clusteringParams Some parameters for the chosen clustering algorithm. * Depending on the chosen clustering algorithm there could be different mandatory and/or optional parameters to specify * the behavior of the algorithm. * * Clustering-Parameter reference. * NOTE: The actual query parameters in the URL are looking like: `?clustering.aParameterName=aValue`. * * Clustering-type: "hexbin": * There are several parameters needed by the H3 based hexbin algorithm. * For more information on that topic see: https://eng.uber.com/h3/. * * ======================================================================================================= * | Parameter | Type | Mandatory | Meaning | * ======================================================================================================== * | absoluteResolution | Number | NO | The H3 hexagon resolution | * -------------------------------------------------------------------------------------------------------- * | resolution | Number | NO | deprecated, renamed to absoluteResolution | * -------------------------------------------------------------------------------------------------------- * | relativeResolution | Number | NO | integer value [0-4] to be added to current used | * | | | | resolution | * -------------------------------------------------------------------------------------------------------- * | property | String | NO | A property of the original features for which to | * | | | | calculate statistics | * -------------------------------------------------------------------------------------------------------- * | pointmode | Boolean | NO | retuns the centroid of hexagons as geojson feature | * -------------------------------------------------------------------------------------------------------- * * * @param force2D If set to `true` the features in the response will have only X's and Y's as coordinates. */ export declare function getFeaturesByBBox(builder: RequestBuilder, params: { layerId: string; bbox?: Array; clip?: boolean; limit?: number; params?: SearchParams; selection?: string | Array; skipCache?: boolean; clustering?: string; clusteringParams?: { [key: string]: string | number; }; force2D?: boolean; }): Promise; /** * List the features which are inside the specified radius. The origin radius point is calculated * based either on latitude & longitude or by specifying a feature's geometry. * * @summary Get features with radius search. * * @param layerId The unique identified for the Layer ID. * * @param lat The latitude in WGS'84 decimal degree (-90 to +90) of the center Point. * * @param lng The longitude in WGS'84 decimal degree (-180 to +180) of the center Point. * * @param refCatalogHrn The catalog HRN where the layer containing the referenced feature is stored. * Always to use in combination with refFeatureId. * * @param refLayerId As alternative for defining center coordinates, * it is possible to reference a geometry in a layer. * Therefore it is needed to provide the layer id where the referenced feature is stored. * Always to use in combination with refFeatureId. * * @param refFeatureId The unique identifier of a feature in the referenced layer. * The geometry of that feature gets used for the spatial query. * Always to use in combination with refCatalogHrn and refLayerId. * * @param radius Radius in meter which defines the diameter of the search request. * * @param limit The maximum number of features in the response. Default is 30000. Hard limit is 100000. * * @param params Additional feature filters which compares the feature's property's value with the one specified * in the query, resulting in a subset of features. * The usage of multiple property names represents an AND operation. * The usage of a comma (,) separating the properties values, represents an OR operation. * Properties initiated with 'f.' are used to access values which are added by default in the stored feature. * The possible values are: 'f.id', 'f.createdAt' and 'f.updatedAt'. * Properties initiated with 'p.' are used to access values in the stored feature which are under the 'properties' property. * Use it as a shorthand accessor for 'properties' values. * The format should follow the specification below * ``` * ?p.property_name_1=property_value_1&f.special_property_name_1=special_property_value_1 * ``` * * For example, the above query, the Features will be filtered by 'property' AND 'special property' equals to their * respective values. * * While in the following example ```?p.property_name_1=value_1,value_2``` * The resulting Features list will contain all elements having `value_1` OR `value_2`. * * Additionally to the operators used in the examples above, the query can be written, with the same semantic, * by using the long operators: `"=gte=", "=lte=", "=gt=", "=lt=" and "=cs="`. * * The below queries yield the same result: * ``` * ?p.property_name_1>=10 * ?p.property_name_1=gte=10 * ``` * * The available operators are: * "=" - equals * "!=" - not equals * ">=" or "=gte=" - greater than or equals * "<=" or "=lte=" - less than or equals * ">" or "=gt=" - greater than * "<" or "=lt=" - less than * "@>" or "=cs=" - contains * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param skipCache If set to true the response is not returned from cache. Default is false. * * @param force2D If set to `true` the features in the response will have only X's and Y's as coordinates. */ export declare function getFeaturesBySpatial(builder: RequestBuilder, params: { layerId: string; lat?: number; lng?: number; refCatalogHrn?: string; refLayerId?: string; refFeatureId?: string; radius?: number; limit?: number; params?: SearchParams; selection?: string | Array; skipCache?: boolean; force2D?: boolean; }): Promise; /** * List the features which are inside the specified radius. The origin point is calculated based * on the geometry provided as payload. * * @summary Get features which intersects the provided geometry. * * @param layerId The unique identified for the Layer ID. * * @param body A geometry request. * * @param radius Radius in meter which defines the diameter of the search request. * * @param limit The maximum number of features in the response. * Default is 30000. Hard limit is 100000. * * @param params Additional feature filters which compares the feature's property's value with the one specified * in the query, resulting in a subset of features. * The usage of multiple property names represents an AND operation. * The usage of a comma (,) separating the properties values, represents an OR operation. * Properties initiated with 'f.' are used to access values which are added by default in the stored feature. * The possible values are: 'f.id', 'f.createdAt' and 'f.updatedAt'. * Properties initiated with 'p.' are used to access values in the stored feature which are under the 'properties' property. * Use it as a shorthand accessor for 'properties' values. * The format should follow the specification below * ``` * ?p.property_name_1=property_value_1&f.special_property_name_1=special_property_value_1 * ``` * * For example, the above query, the Features will be filtered by 'property' AND 'special property' equals to their * respective values. * * While in the following example ```?p.property_name_1=value_1,value_2``` * The resulting Features list will contain all elements having `value_1` OR `value_2`. * * Additionally to the operators used in the examples above, the query can be written, with the same semantic, * by using the long operators: `"=gte=", "=lte=", "=gt=", "=lt=" and "=cs="`. * * The below queries yield the same result: * ``` * ?p.property_name_1>=10 * ?p.property_name_1=gte=10 * ``` * * The available operators are: * "=" - equals * "!=" - not equals * ">=" or "=gte=" - greater than or equals * "<=" or "=lte=" - less than or equals * ">" or "=gt=" - greater than * "<" or "=lt=" - less than * "@>" or "=cs=" - contains * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param skipCache If set to true the response is not returned from cache. Default is false. * * @param force2D If set to `true` the features in the response will have only X's and Y's as coordinates. */ export declare function getFeaturesBySpatialPost(builder: RequestBuilder, params: { layerId: string; body?: GetFeaturesBySpatialBody; radius?: number; limit?: number; params?: SearchParams; selection?: string | Array; skipCache?: boolean; force2D?: boolean; }): Promise; /** * Get features in tile * * @param layerId The unique identified for the Layer ID. * * @param tileType The type of tile identifier. * Default: "quadkey". * Enum: "quadkey" "web" "tms" "here". * "quadkey" - Virtual Earth, * "web" - Web Mercator, * "tms" - OSGEO Tile Map Service, * "here" - Here Tile Schema. * * @param tileId The tile identifier can be provided as quadkey (1), * Web Mercator level,x,y coordinates (1_1_0) or OSGEO Tile Map Service level,x,y (1_1_0). * * @param clip If set to true the features' geometries are clipped to the geometry of the tile or bounding box. * Default is false. * * @param params Additional feature filters which compares the feature's property's value with the one specified * in the query, resulting in a subset of features. * The usage of multiple property names represents an AND operation. * The usage of a comma (,) separating the properties values, represents an OR operation. * Properties initiated with 'f.' are used to access values which are added by default in the stored feature. * The possible values are: 'f.id', 'f.createdAt' and 'f.updatedAt'. * Properties initiated with 'p.' are used to access values in the stored feature which are under the 'properties' property. * Use it as a shorthand accessor for 'properties' values. * The format should follow the specification below * ``` * ?p.property_name_1=property_value_1&f.special_property_name_1=special_property_value_1 * ``` * * For example, the above query, the Features will be filtered by 'property' AND 'special property' equals to their * respective values. * * While in the following example ```?p.property_name_1=value_1,value_2``` * The resulting Features list will contain all elements having `value_1` OR `value_2`. * * Additionally to the operators used in the examples above, the query can be written, with the same semantic, * by using the long operators: `"=gte=", "=lte=", "=gt=", "=lt=" and "=cs="`. * * The below queries yield the same result: * ``` * ?p.property_name_1>=10 * ?p.property_name_1=gte=10 * ``` * * The available operators are: * "=" - equals * "!=" - not equals * ">=" or "=gte=" - greater than or equals * "<=" or "=lte=" - less than or equals * ">" or "=gt=" - greater than * "<" or "=lt=" - less than * "@>" or "=cs=" - contains * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param skipCache If set to true the response is not returned from cache. Default is false. * * @param clustering The clustering algorithm to apply to the data within the result. * Providing this query parameter the data will be returned in a clustered way. * This means the data won't necessarily be returned in its original shape or with its original properties. * Depending on the chosen clustering algorithm there could be different mandatory and/or optional parameters * to specify the behavior of the algorithm. * Possible values are: * * `hexbin` - The hexbin algorithm divides the world in hexagonal "bins" on a specified resolution. * Each hexagon has an address being described by the H3 addressing scheme. * For more information on that topic see: https://eng.uber.com/h3/. * * `quadbin` - The quadbin algorithm takes the geometry input from the request (e.g. quadkey / bbox..) * and count the features in it. * This clustering mode works also for very large layers and can be used for getting an overview * where data is present in a given layer. Furthermore, a property filter on one property is applicable. * * @param clusteringParams Some parameters for the chosen clustering algorithm. * Depending on the chosen clustering algorithm there could be different mandatory and/or optional parameters to specify * the behavior of the algorithm. * * Clustering-Parameter reference. * NOTE: The actual query parameters in the URL are looking like: `?clustering.aParameterName=aValue`. * * Clustering-type: "hexbin": * There are several parameters needed by the H3 based hexbin algorithm. * For more information on that topic see: https://eng.uber.com/h3/. * * ======================================================================================================= * | Parameter | Type | Mandatory | Meaning | * ======================================================================================================== * | absoluteResolution | Number | NO | The H3 hexagon resolution | * -------------------------------------------------------------------------------------------------------- * | resolution | Number | NO | deprecated, renamed to absoluteResolution | * -------------------------------------------------------------------------------------------------------- * | relativeResolution | Number | NO | integer value [0-4] to be added to current used | * | | | | resolution | * -------------------------------------------------------------------------------------------------------- * | property | String | NO | A property of the original features for which to | * | | | | calculate statistics | * -------------------------------------------------------------------------------------------------------- * | pointmode | Boolean | NO | retuns the centroid of hexagons as geojson feature | * -------------------------------------------------------------------------------------------------------- * * @param margin Margin in pixels on the respective projected level around the tile. Default is 0. * * @param limit The maximum number of features in the response. Default is 30000. Hard limit is 100000. * * @param force2D If set to `true` the features in the response will have only X's and Y's as coordinates. */ export declare function getFeaturesByTile(builder: RequestBuilder, params: { layerId: string; tileType: string; tileId: string; clip?: boolean; params?: SearchParams; selection?: string | Array; skipCache?: boolean; clustering?: string; clusteringParams?: { [key: string]: string | number; }; margin?: number; limit?: number; force2D?: boolean; }): Promise; /** * Returns statistical information about this layer. * * @summary Get statistics. * * @param layerId The unique identified for the Layer ID. * * @param skipCache If set to true the response is not returned from cache. * Default is false. */ export declare function getStatistics(builder: RequestBuilder, params: { layerId: string; skipCache?: boolean; }): Promise; /** * Iterates all of the features in the layer. The features in the response are ordered so * that no feature is returned twice. If there are more features, which could be loaded, * the response FeatureCollection will contain the root attribute nextPageToken. * The value of this attribute can be passed as a query parameter for the following request * in order to continue the iteration from the marked position. * * @summary Iterate features in the layer. * * @param layerId The unique identified for the Layer ID. * * @param limit The maximum number of features in the response. Default is 30000. Hard limit is 100000. * * @param pageToken The page token where the iteration will continue. * * @param part Requests disjunct parts of iteration results (used with sort). * List of two integers "part,total". part=1,4 read as first part out of 4, ... until part=4,4 . * Example: ?part=7,9 * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param sort Specifies the sort order by a list of properties. * Ascending assumed if no sort direction (:asc, :desc) is specified. * Example: sort = ["p.name:asc", "p.color:desc"] => ?sort=p.name:asc,p.color:desc. * * @param skipCache If set to true the response is not returned from cache. Default is false. * * @param force2D If set to true the features in the response will have only X's and Y's as coordinates. */ export declare function iterateFeatures(builder: RequestBuilder, params: { layerId: string; limit?: number; pageToken?: string; part?: Array; selection?: string | Array; sort?: string | Array; skipCache?: boolean; force2D?: boolean; }): Promise; /** * Searches for features in the layer. The results are unordered and the request does not allow to continue * the search, which is the main difference when compared to the iterate request. * * @summary Search for features. * * @param layerId The unique identified for the Layer ID. * * @param limit The maximum number of features in the response. Default is 30000. Hard limit is 100000. * * @param params Additional feature filters which compares the feature's property's value with the one specified * in the query, resulting in a subset of features. * The usage of multiple property names represents an AND operation. * The usage of a comma (,) separating the properties values, represents an OR operation. * Properties initiated with 'f.' are used to access values which are added by default in the stored feature. * The possible values are: 'f.id', 'f.createdAt' and 'f.updatedAt'. * Properties initiated with 'p.' are used to access values in the stored feature which are under the 'properties' property. * Use it as a shorthand accessor for 'properties' values. * The format should follow the specification below * ``` * ?p.property_name_1=property_value_1&f.special_property_name_1=special_property_value_1 * ``` * * For example, the above query, the Features will be filtered by 'property' AND 'special property' equals to their * respective values. * * While in the following example ```?p.property_name_1=value_1,value_2``` * The resulting Features list will contain all elements having `value_1` OR `value_2`. * * Additionally to the operators used in the examples above, the query can be written, with the same semantic, * by using the long operators: `"=gte=", "=lte=", "=gt=", "=lt=" and "=cs="`. * * The below queries yield the same result: * ``` * ?p.property_name_1>=10 * ?p.property_name_1=gte=10 * ``` * * The available operators are: * "=" - equals * "!=" - not equals * ">=" or "=gte=" - greater than or equals * "<=" or "=lte=" - less than or equals * ">" or "=gt=" - greater than * "<" or "=lt=" - less than * "@>" or "=cs=" - contains * * @param selection A list of properties to be returned in the features result list. * Multiple attributes can be specified by using comma(,). * Example: `?selection=p.name,p.capacity,p.color`. * * @param skipCache If set to true the response is not returned from cache. Default is false. * * @param force2D If set to true the features in the response will have only X's and Y's as coordinates. */ export declare function searchFeatures(builder: RequestBuilder, params: { layerId: string; limit?: number; params?: SearchParams; selection?: string | Array; skipCache?: boolean; force2D?: boolean; }): Promise; /** * Deletes an existing feature. * * @summary Deletes a feature. * * @param layerId The unique identified for the Layer ID. * * @param featureId The unique identifier of a feature in the layer. */ export declare function deleteFeature(builder: RequestBuilder, params: { layerId: string; featureId: string; }): Promise; /** * The wildcard sign(*) could be used to delete all features in the layer. * * @summary Delete multiple features from the layer. * * @param layerId The unique identified for the Layer ID. * * @param id A comma separated list of unique feature identifiers. * These are the acceptable formats for this field: * ``` * id=value1,value2 * id=value1,id=value2 * ``` */ export declare function deleteFeatures(builder: RequestBuilder, params: { layerId: string; id?: Array; }): Promise; /** * Patches an existing feature. * * @summary Patch a feature. * * @param body A feature request. * * @param layerId The unique identified for the Layer ID. * * @param featureId The unique identifier of a feature in the layer. */ export declare function patchFeature(builder: RequestBuilder, params: { body: Feature; layerId: string; featureId: string; }): Promise; /** * Create or patch features. * * @summary Modify features. * * @param body A FeatureCollection object or a FeatureModificationList object. * * @param layerId The unique identified for the Layer ID. */ export declare function postFeatures(builder: RequestBuilder, params: { body: FeatureCollection; layerId: string; }): Promise; /** * Creates or replaces a feature in the layer. * * @summary Create or replace a feature. * * @param body A feature request. * * @param layerId The unique identified for the Layer ID. * * @param featureId The unique identifier of a feature in the layer. */ export declare function putFeature(builder: RequestBuilder, params: { body: Feature; layerId: string; featureId: string; }): Promise; /** * Create or replace the provided features. * * @summary Create or replace multiple features. * * @param body A feature collection request. * * @param layerId The unique identified for the Layer ID. */ export declare function putFeatures(builder: RequestBuilder, params: { body: FeatureCollection; layerId: string; }): Promise;