Source: bemap-services-v2/search/bemap-reverse-geocoder.js

/**
 * BeNomad BeMap JavaScript API - ReverseGeocoder (v1.5)
 *
 * Promise-based wrapper around `POST service/geocoding/1.0/reverse`. Turns a
 * coordinate into a structured `bemap.GeocodingResponse`.
 *
 * Wire shape mirrors the BeMap server contract (cross-checked against
 * `bemap-flutter-api/lib/service/reverse_geocoding/provider/rev_geo_server.dart`).
 *
 * @since 1.5.0
 * @public
 * @constructor
 * @extends {bemap.ServiceV2}
 * @param {bemap.Context} context BeMap-JS-API Context. Mandatory.
 * @param {Object} [options]
 */
bemap.ReverseGeocoder = function(context, options) {
    bemap.ServiceV2.call(this, context, options);
};
bemap.inherits(bemap.ReverseGeocoder, bemap.ServiceV2);

/**
 * Send a reverse-geocoding request.
 *
 * @public
 * @param {bemap.ReverseGeocodingRequest} request
 * @param {Object} [options]
 * @param {String} [options.geoserver]
 * @param {AbortSignal} [options.signal]
 * @return {Promise<bemap.GeocodingResponse>}
 */
bemap.ReverseGeocoder.prototype.revGeo = function(request, options) {
    if (!(request instanceof bemap.ReverseGeocodingRequest)) {
        return Promise.reject(new bemap.Error({
            code: bemap.Error.NETWORK,
            message: 'ReverseGeocoder.revGeo requires a bemap.ReverseGeocodingRequest'
        }));
    }
    var opts = options || {};
    var body = request.toJson();
    if (!body.geoserver) body.geoserver = opts.geoserver || this.ctx.getGeoserver();

    return this._post('service/geocoding/1.0/reverse', body, opts)
        .then(function(json) {
            return bemap.parseGeocodingResponseV2(json);
        });
};