angularx-social-login
Version:
Social login and authentication module for Angular 9+. Supports authentication with Google, Facebook, Amazon, and VK. Can be extended to other providers also.
104 lines • 13.3 kB
JavaScript
import { BaseLoginProvider } from '../entities/base-login-provider';
import { SocialUser } from '../entities/social-user';
export class AmazonLoginProvider extends BaseLoginProvider {
constructor(clientId, initOptions = {
scope: 'profile',
scope_data: {
profile: { essential: false },
},
redirect_uri: location.origin,
}) {
super();
this.clientId = clientId;
this.initOptions = initOptions;
}
initialize() {
let amazonRoot = null;
if (document) {
amazonRoot = document.createElement('div');
amazonRoot.id = 'amazon-root';
document.body.appendChild(amazonRoot);
}
window.onAmazonLoginReady = () => {
amazon.Login.setClientId(this.clientId);
};
return new Promise((resolve, reject) => {
try {
this.loadScript('amazon-login-sdk', 'https://assets.loginwithamazon.com/sdk/na/login1.js', () => {
resolve();
}, amazonRoot);
}
catch (err) {
reject(err);
}
});
}
getLoginStatus() {
return new Promise((resolve, reject) => {
let token = this.retrieveToken();
if (token) {
amazon.Login.retrieveProfile(token, (response) => {
if (response.success) {
let user = new SocialUser();
user.id = response.profile.CustomerId;
user.name = response.profile.Name;
user.email = response.profile.PrimaryEmail;
user.response = response.profile;
resolve(user);
}
else {
reject(response.error);
}
});
}
else {
reject(`No user is currently logged in with ${AmazonLoginProvider.PROVIDER_ID}`);
}
});
}
signIn(signInOptions) {
const options = Object.assign(Object.assign({}, this.initOptions), signInOptions);
return new Promise((resolve, reject) => {
amazon.Login.authorize(options, (authResponse) => {
if (authResponse.error) {
reject(authResponse.error);
}
else {
amazon.Login.retrieveProfile(authResponse.access_token, (response) => {
let user = new SocialUser();
user.id = response.profile.CustomerId;
user.name = response.profile.Name;
user.email = response.profile.PrimaryEmail;
user.authToken = authResponse.access_token;
user.response = response.profile;
this.persistToken(authResponse.access_token);
resolve(user);
});
}
});
});
}
signOut(revoke) {
return new Promise((resolve, reject) => {
try {
amazon.Login.logout();
this.clearToken();
resolve();
}
catch (err) {
reject(err.message);
}
});
}
persistToken(token) {
localStorage.setItem(`${AmazonLoginProvider.PROVIDER_ID}_token`, token);
}
retrieveToken() {
return localStorage.getItem(`${AmazonLoginProvider.PROVIDER_ID}_token`);
}
clearToken() {
localStorage.removeItem(`${AmazonLoginProvider.PROVIDER_ID}_token`);
}
}
AmazonLoginProvider.PROVIDER_ID = 'AMAZON';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hem9uLWxvZ2luLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL0pBRFVUVEEvZGV2L3dlYi9hbmd1bGFyeC1zb2NpYWwtbG9naW4vcHJvamVjdHMvbGliL3NyYy8iLCJzb3VyY2VzIjpbInByb3ZpZGVycy9hbWF6b24tbG9naW4tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXJELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFHeEQsWUFDVSxRQUFnQixFQUNoQixjQUFtQjtRQUN6QixLQUFLLEVBQUUsU0FBUztRQUNoQixVQUFVLEVBQUU7WUFDVixPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1NBQzlCO1FBQ0QsWUFBWSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0tBQzlCO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFUQSxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQU1sQjtJQUdILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksUUFBUSxFQUFFO1lBQ1osVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsVUFBVSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkM7UUFFRCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUM7UUFFRixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMs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UUFDdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJO2dCQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBRXRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxRQUFRLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sVUFBVTtRQUNoQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxRQUFRLENBQUMsQ0FBQztJQUN0RSxDQUFDOztBQXZIc0IsK0JBQVcsR0FBVyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlTG9naW5Qcm92aWRlciB9IGZyb20gJy4uL2VudGl0aWVzL2Jhc2UtbG9naW4tcHJvdmlkZXInO1xyXG5pbXBvcnQgeyBTb2NpYWxVc2VyIH0gZnJvbSAnLi4vZW50aXRpZXMvc29jaWFsLXVzZXInO1xyXG5cclxuZGVjbGFyZSBsZXQgYW1hem9uOiBhbnksIHdpbmRvdzogYW55O1xyXG5cclxuZXhwb3J0IGNsYXNzIEFtYXpvbkxvZ2luUHJvdmlkZXIgZXh0ZW5kcyBCYXNlTG9naW5Qcm92aWRlciB7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9WSURFUl9JRDogc3RyaW5nID0gJ0FNQVpPTic7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBpbml0T3B0aW9uczogYW55ID0ge1xyXG4gICAgICBzY29wZTogJ3Byb2ZpbGUnLFxyXG4gICAgICBzY29wZV9kYXRhOiB7XHJcbiAgICAgICAgcHJvZmlsZTogeyBlc3NlbnRpYWw6IGZhbHNlIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlZGlyZWN0X3VyaTogbG9jYXRpb24ub3JpZ2luLFxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgYW1hem9uUm9vdCA9IG51bGw7XHJcbiAgICBpZiAoZG9jdW1lbnQpIHtcclxuICAgICAgYW1hem9uUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBhbWF6b25Sb290LmlkID0gJ2FtYXpvbi1yb290JztcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhbWF6b25Sb290KTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cub25BbWF6b25Mb2dpblJlYWR5ID0gKCkgPT4ge1xyXG4gICAgICBhbWF6b24uTG9naW4uc2V0Q2xpZW50SWQodGhpcy5jbGllbnRJZCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5sb2FkU2NyaXB0KFxyXG4gICAgICAgICAgJ2FtYXpvbi1sb2dpbi1zZGsnLFxyXG4gICAgICAgICAgJ2h0dHBzOi8vYXNzZXRzLmxvZ2lud2l0aGFtYXpvbi5jb20vc2RrL25hL2xvZ2luMS5qcycsXHJcbiAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBhbWF6b25Sb290XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9naW5TdGF0dXMoKTogUHJvbWlzZTxTb2NpYWxVc2VyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBsZXQgdG9rZW4gPSB0aGlzLnJldHJpZXZlVG9rZW4oKTtcclxuXHJcbiAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGFtYXpvbi5Mb2dpbi5yZXRyaWV2ZVByb2ZpbGUodG9rZW4sIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbGV0IHVzZXI6IFNvY2lhbFVzZXIgPSBuZXcgU29jaWFsVXNlcigpO1xyXG5cclxuICAgICAgICAgICAgdXNlci5pZCA9IHJlc3BvbnNlLnByb2ZpbGUuQ3VzdG9tZXJJZDtcclxuICAgICAgICAgICAgdXNlci5uYW1lID0gcmVzcG9uc2UucHJvZmlsZS5OYW1lO1xyXG4gICAgICAgICAgICB1c2VyLmVtYWlsID0gcmVzcG9uc2UucHJvZmlsZS5QcmltYXJ5RW1haWw7XHJcbiAgICAgICAgICAgIHVzZXIucmVzcG9uc2UgPSByZXNwb25zZS5wcm9maWxlO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZSh1c2VyKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KGBObyB1c2VyIGlzIGN1cnJlbnRseSBsb2dnZWQgaW4gd2l0aCAke0FtYXpvbkxvZ2luUHJvdmlkZXIuUFJPVklERVJfSUR9YCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2lnbkluKHNpZ25Jbk9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPFNvY2lhbFVzZXI+IHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLnRoaXMuaW5pdE9wdGlvbnMsIC4uLnNpZ25Jbk9wdGlvbnMgfTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGFtYXpvbi5Mb2dpbi5hdXRob3JpemUob3B0aW9ucywgKGF1dGhSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChhdXRoUmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgIHJlamVjdChhdXRoUmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhbWF6b24uTG9naW4ucmV0cmlldmVQcm9maWxlKFxyXG4gICAgICAgICAgICBhdXRoUmVzcG9uc2UuYWNjZXNzX3Rva2VuLFxyXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgdXNlcjogU29jaWFsVXNlciA9IG5ldyBTb2NpYWxVc2VyKCk7XHJcblxyXG4gICAgICAgICAgICAgIHVzZXIuaWQgPSByZXNwb25zZS5wcm9maWxlLkN1c3RvbWVySWQ7XHJcbiAgICAgICAgICAgICAgdXNlci5uYW1lID0gcmVzcG9uc2UucHJvZmlsZS5OYW1lO1xyXG4gICAgICAgICAgICAgIHVzZXIuZW1haWwgPSByZXNwb25zZS5wcm9maWxlLlByaW1hcnlFbWFpbDtcclxuICAgICAgICAgICAgICB1c2VyLmF1dGhUb2tlbiA9IGF1dGhSZXNwb25zZS5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgICAgdXNlci5yZXNwb25zZSA9IHJlc3BvbnNlLnByb2ZpbGU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc2lzdFRva2VuKGF1dGhSZXNwb25zZS5hY2Nlc3NfdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgICByZXNvbHZlKHVzZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNpZ25PdXQocmV2b2tlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGFtYXpvbi5Mb2dpbi5sb2dvdXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRva2VuKCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICByZWplY3QoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGVyc2lzdFRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke0FtYXpvbkxvZ2luUHJvdmlkZXIuUFJPVklERVJfSUR9X3Rva2VuYCwgdG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXRyaWV2ZVRva2VuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7QW1hem9uTG9naW5Qcm92aWRlci5QUk9WSURFUl9JRH1fdG9rZW5gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUb2tlbigpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke0FtYXpvbkxvZ2luUHJvdmlkZXIuUFJPVklERVJfSUR9X3Rva2VuYCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==