UNPKG

@blockprotocol/external-api

Version:

Implementation of the Block Protocol external API service specification for blocks and embedding applications

171 lines (170 loc) 6.67 kB
import { MessageCallback } from "@blockprotocol/core"; import { AutofillOptions, AutofillRetrieveResponse, AutofillSuggestion, AutofillSuggestionResponse, FetchOptions, GeocodeOptions, GeocodeResponse, LngLatBoundsLike, LngLatLike, PermanentOptions, SessionTokenOptions } from "./mapbox-types"; export type BlockExternalApiMessageCallbacks = {}; export type EmbedderExternalApiMessages = {}; /** * @todo: add definition for external API errors * @see TODO */ /** Mapbox Geocoding API */ export type MapboxForwardGeocodingData = { searchText: string; optionsArg?: Partial<FetchOptions & GeocodeOptions & PermanentOptions>; }; export type MapboxForwardGeocodingResponseData = GeocodeResponse; export type MapboxReverseGeocodingData = { lngLat: string | LngLatLike; optionsArg?: Partial<FetchOptions & GeocodeOptions & PermanentOptions>; }; export type MapboxReverseGeocodingResponseData = GeocodeResponse; /** Mapbox Directions API */ type RetrieveDirectionsBaseArgs = { coordinates: [number, number][]; alternatives?: boolean; annotations?: "distance" | "duration" | "speed" | "congestion" | "congestion_numeric" | "maxspeed" | "closure" | "state_of_charge"; avoid_maneuver_radius?: number; bearings?: number; layers?: number; continue_straight?: boolean; exclude?: "motorway" | "toll" | "ferry" | "unpaved" | "cash_only_tolls" | string; geometries?: string; include?: "hov2" | "hov3" | "hot"; overview?: string; radiuses?: number | string; approaches?: string; steps?: boolean; banner_instructions?: boolean; language?: string; roundabout_exits?: boolean; voice_instructions?: boolean; voice_units?: string; waypoints?: number[]; waypoints_per_route?: boolean; waypoint_names?: string[]; waypoint_targets?: number[]; }; type RetrieveWalkingDirectionsArgs = { profile: "mapbox/walking"; walking_speed?: number; walkway_bias?: number; } & RetrieveDirectionsBaseArgs; type RetrieveDrivingTrafficDirectionsArgs = { profile: "mapbox/driving-traffic"; alley_bias?: number; arrive_by?: string; depart_at?: string; use_current_time?: boolean; max_height?: number; max_width?: number; max_weight?: number; } & RetrieveDirectionsBaseArgs; type RetrieveDrivingDirectionsArgs = { profile: "mapbox/driving"; depart_at?: string; use_current_time?: boolean; snapping_include_closures?: boolean; snapping_include_static_closures?: boolean; max_height?: number; max_width?: number; max_weight?: number; } & RetrieveDirectionsBaseArgs; type RetrieveCyclingDirectionsArgs = { profile: "mapbox/cycling"; } & RetrieveDirectionsBaseArgs; export type MapboxRetrieveDirectionsData = RetrieveWalkingDirectionsArgs | RetrieveDrivingTrafficDirectionsArgs | RetrieveDrivingDirectionsArgs | RetrieveCyclingDirectionsArgs; export type MapboxRetrieveDirectionsResponseData = { code: string; /** @todo: type this properly */ routes: any[]; }; /** Mapbox Isochrone API */ export type MapboxRetrieveIsochronesData = { profile: "mapbox/driving" | "mapbox/walking" | "mapbox/cycling"; coordinates: [number, number][]; contours_minutes: number; contours_meters: number; contours_colors?: string; polygons?: boolean; denoise?: number; generalize?: number; }; export type MapboxRetrieveIsochronesResponseData = { /** @todo: type this properly */ features: any[]; }; /** Mapbox Autofill API */ export type MapboxSuggestAddressData = { searchText: string; optionsArg: SessionTokenOptions & Partial<FetchOptions & AutofillOptions>; }; export type MapboxSuggestAddressResponseData = AutofillSuggestionResponse; export type MapboxRetrieveAddressData = { suggestion: AutofillSuggestion; optionsArg: SessionTokenOptions & Partial<FetchOptions>; }; export type MapboxRetrieveAddressResponseData = AutofillRetrieveResponse; export type MapboxCanRetrieveAddressData = { suggestion: AutofillSuggestion; }; export type MapboxCanRetrieveAddressResponseData = { canRetrieveAddress: boolean; }; /** Mapbox Static Maps API */ export type MapboxRetrieveStaticMapData = { username: string; style_id: string; overlay: string; lon: number; lat: number; zoom: number; bbox: LngLatBoundsLike; auto: string; width: number; height: number; bearing?: number; pitch?: number; "@2x"?: string; attribution?: boolean; logo?: boolean; before_layer?: string; addlayer?: { id: string; type: "fill" | "line" | "symbol" | "circle" | "heatmap" | "fill-extrusion" | "raster" | "hillshade" | "background" | "sky"; fill?: string; line?: string; symbol?: string; circle?: string; heatmap?: string; "fill-extrusion"?: string; raster?: string; hillshade?: string; background?: string; sky?: string; }; setfilter?: string[]; layer_id?: string; padding?: string; }; /** * @todo: figure out if this is the best way of handling a "buffer array" */ export type MapboxRetrieveStaticMapResponseData = string; export type EmbedderExternalApiMessageCallbacks = { /** Mapbox Geocoding API */ mapboxForwardGeocoding: MessageCallback<MapboxForwardGeocodingData, null, MapboxForwardGeocodingResponseData, null>; mapboxReverseGeocoding: MessageCallback<MapboxReverseGeocodingData, null, MapboxReverseGeocodingResponseData, null>; /** Mapbox Directions API */ mapboxRetrieveDirections: MessageCallback<MapboxRetrieveDirectionsData, null, MapboxRetrieveDirectionsResponseData, null>; /** Mapbox Isochrone API */ mapboxRetrieveIsochrones: MessageCallback<MapboxRetrieveIsochronesData, null, MapboxRetrieveIsochronesResponseData, null>; /** Mapbox Autofill API */ mapboxSuggestAddress: MessageCallback<MapboxSuggestAddressData, null, MapboxSuggestAddressResponseData, null>; mapboxRetrieveAddress: MessageCallback<MapboxRetrieveAddressData, null, MapboxRetrieveAddressResponseData, null>; mapboxCanRetrieveAddress: MessageCallback<MapboxCanRetrieveAddressData, null, MapboxCanRetrieveAddressResponseData, null>; /** Mapbox Static Map API */ mapboxRetrieveStaticMap: MessageCallback<MapboxRetrieveStaticMapData, null, MapboxRetrieveStaticMapResponseData, null>; }; export type BlockExternalApiMessages<Key extends keyof EmbedderExternalApiMessageCallbacks = keyof EmbedderExternalApiMessageCallbacks> = { [key in Key]: ({ data, errors, }: Parameters<EmbedderExternalApiMessageCallbacks[key]>[0]) => ReturnType<EmbedderExternalApiMessageCallbacks[key]>; }; export {};