Source: src/base64/base64.service.js

/**
 * @class
 * Create osmBase64 angular service instance.
 * This can be used as osmAPI adapter.
 */
class Base64Adapter{
    /**
     * the constructor
     * @param {Object} $base64 service provided by angular-base64 module
     * @param {Object} $http angular $http service
     * @param {Object} osmx2js angular-osm service
     * to transform response from xml to object
     */
    constructor($base64, $http, osmx2js) {
        this.$base64 = $base64;
        this.storage = {};
        this.$http = $http;
        this.url = 'http://api.openstreetmap.org/api';
        this.osmx2js = osmx2js;
    }
    /**
     * the main method used to do the call to the API
     * @param {Object} options
     * @returns {Promise} $http response
     */
    xhr(options) {
        var self = this;
        options.url = this.url + options.path;
        options.headers = {
            Authorization: this.getAuthorization()
        };
        return this.$http(options).then(function (data) {
            var d = data.data;
            if (!d) {
                return;
            }
            if (d.substr) {
                if (d.substr(0, 5) === '<?xml') {
                    return self.osmx2js.xml2js(d);
                }
            }
            return d;
        });
    }
    /**
     * if you don't use oauth, you can save
     * credentials here using base64 localstorage (completly unsecure)
     * @param {string} username your username
     * @param {string} password the user password.
     * WARNING base64 is unsafe and the credentials are stored in the localstorage
     * @returns {string} crendentials
    */
    setCredentials(username, password) {
        this.storage.username = username;
        var credentials = this.$base64.encode(username + ':' + password);
        this.storage.credentials = credentials;
        return credentials;
    }
    /**
     * if you don't use oauth, you can manage
     * credentials here using base64 headers
     * @returns {string} crendentials from the last set
    */
    getCredentials() {
        return this.storage.credentials;
    }
    /**
     * compute authorization header from credentials
     * @returns {string} HTTP Header 'Basic CREDENTIAL AS BASE64'
    */
    getAuthorization() {
        return 'Basic ' + this.storage.credentials;
    }
    /**
     * remove credentials from the localstorage
     * @returns {string} HTTP Header 'Basic CREDENTIAL AS BASE64'
    */
    clearCredentials() {
        if (this.storage.removeItem) {
            this.storage.removeItem('credentials')
        } else {
            delete this.storage.credentials;
        }
    }
}

Base64Adapter.$inject = ['$base64', '$http', 'osmx2js'];

export default Base64Adapter;