slr-angularx-social-login
Version:
Social login and authentication module for Angular 13. Supports authentication with Google, Facebook, Amazon, and VK. Can be extended to other providers also.
104 lines • 12.8 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 = { ...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() {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hem9uLWxvZ2luLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliL3NyYy9wcm92aWRlcnMvYW1hem9uLWxvZ2luLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUlyRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsaUJBQWlCO0lBR3hELFlBQ1UsUUFBZ0IsRUFDaEIsY0FBbUI7UUFDekIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsVUFBVSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtTQUM5QjtRQUNELFlBQVksRUFBRSxRQUFRLENBQUMsTUFBTTtLQUM5QjtRQUVELEtBQUssRUFBRSxDQUFDO1FBVEEsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FNbEI7SUFHSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLFFBQVEsRUFBRTtZQUNaLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsTUFBTSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtZQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJ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QU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJO2dCQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBRXRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxRQUFRLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sVUFBVTtRQUNoQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxRQUFRLENBQUMsQ0FBQztJQUN0RSxDQUFDOztBQXZIc0IsK0JBQVcsR0FBVyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlTG9naW5Qcm92aWRlciB9IGZyb20gJy4uL2VudGl0aWVzL2Jhc2UtbG9naW4tcHJvdmlkZXInO1xuaW1wb3J0IHsgU29jaWFsVXNlciB9IGZyb20gJy4uL2VudGl0aWVzL3NvY2lhbC11c2VyJztcblxuZGVjbGFyZSBsZXQgYW1hem9uOiBhbnksIHdpbmRvdzogYW55O1xuXG5leHBvcnQgY2xhc3MgQW1hem9uTG9naW5Qcm92aWRlciBleHRlbmRzIEJhc2VMb2dpblByb3ZpZGVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9WSURFUl9JRDogc3RyaW5nID0gJ0FNQVpPTic7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nLFxuICAgIHByaXZhdGUgaW5pdE9wdGlvbnM6IGFueSA9IHtcbiAgICAgIHNjb3BlOiAncHJvZmlsZScsXG4gICAgICBzY29wZV9kYXRhOiB7XG4gICAgICAgIHByb2ZpbGU6IHsgZXNzZW50aWFsOiBmYWxzZSB9LFxuICAgICAgfSxcbiAgICAgIHJlZGlyZWN0X3VyaTogbG9jYXRpb24ub3JpZ2luLFxuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGFtYXpvblJvb3QgPSBudWxsO1xuICAgIGlmIChkb2N1bWVudCkge1xuICAgICAgYW1hem9uUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgYW1hem9uUm9vdC5pZCA9ICdhbWF6b24tcm9vdCc7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFtYXpvblJvb3QpO1xuICAgIH1cblxuICAgIHdpbmRvdy5vbkFtYXpvbkxvZ2luUmVhZHkgPSAoKSA9PiB7XG4gICAgICBhbWF6b24uTG9naW4uc2V0Q2xpZW50SWQodGhpcy5jbGllbnRJZCk7XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvYWRTY3JpcHQoXG4gICAgICAgICAgJ2FtYXpvbi1sb2dpbi1zZGsnLFxuICAgICAgICAgICdodHRwczovL2Fzc2V0cy5sb2dpbndpdGhhbWF6b24uY29tL3Nkay9uYS9sb2dpbjEuanMnLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFtYXpvblJvb3RcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldExvZ2luU3RhdHVzKCk6IFByb21pc2U8U29jaWFsVXNlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgdG9rZW4gPSB0aGlzLnJldHJpZXZlVG9rZW4oKTtcblxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGFtYXpvbi5Mb2dpbi5yZXRyaWV2ZVByb2ZpbGUodG9rZW4sIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICBsZXQgdXNlcjogU29jaWFsVXNlciA9IG5ldyBTb2NpYWxVc2VyKCk7XG5cbiAgICAgICAgICAgIHVzZXIuaWQgPSByZXNwb25zZS5wcm9maWxlLkN1c3RvbWVySWQ7XG4gICAgICAgICAgICB1c2VyLm5hbWUgPSByZXNwb25zZS5wcm9maWxlLk5hbWU7XG4gICAgICAgICAgICB1c2VyLmVtYWlsID0gcmVzcG9uc2UucHJvZmlsZS5QcmltYXJ5RW1haWw7XG4gICAgICAgICAgICB1c2VyLnJlc3BvbnNlID0gcmVzcG9uc2UucHJvZmlsZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh1c2VyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KGBObyB1c2VyIGlzIGN1cnJlbnRseSBsb2dnZWQgaW4gd2l0aCAke0FtYXpvbkxvZ2luUHJvdmlkZXIuUFJPVklERVJfSUR9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzaWduSW4oc2lnbkluT3B0aW9ucz86IGFueSk6IFByb21pc2U8U29jaWFsVXNlcj4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLnRoaXMuaW5pdE9wdGlvbnMsIC4uLnNpZ25Jbk9wdGlvbnMgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgYW1hem9uLkxvZ2luLmF1dGhvcml6ZShvcHRpb25zLCAoYXV0aFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChhdXRoUmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoYXV0aFJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbWF6b24uTG9naW4ucmV0cmlldmVQcm9maWxlKFxuICAgICAgICAgICAgYXV0aFJlc3BvbnNlLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdXNlcjogU29jaWFsVXNlciA9IG5ldyBTb2NpYWxVc2VyKCk7XG5cbiAgICAgICAgICAgICAgdXNlci5pZCA9IHJlc3BvbnNlLnByb2ZpbGUuQ3VzdG9tZXJJZDtcbiAgICAgICAgICAgICAgdXNlci5uYW1lID0gcmVzcG9uc2UucHJvZmlsZS5OYW1lO1xuICAgICAgICAgICAgICB1c2VyLmVtYWlsID0gcmVzcG9uc2UucHJvZmlsZS5QcmltYXJ5RW1haWw7XG4gICAgICAgICAgICAgIHVzZXIuYXV0aFRva2VuID0gYXV0aFJlc3BvbnNlLmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgICAgdXNlci5yZXNwb25zZSA9IHJlc3BvbnNlLnByb2ZpbGU7XG5cbiAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0VG9rZW4oYXV0aFJlc3BvbnNlLmFjY2Vzc190b2tlbik7XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZSh1c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNpZ25PdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFtYXpvbi5Mb2dpbi5sb2dvdXQoKTtcblxuICAgICAgICB0aGlzLmNsZWFyVG9rZW4oKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7QW1hem9uTG9naW5Qcm92aWRlci5QUk9WSURFUl9JRH1fdG9rZW5gLCB0b2tlbik7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7QW1hem9uTG9naW5Qcm92aWRlci5QUk9WSURFUl9JRH1fdG9rZW5gKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJUb2tlbigpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHtBbWF6b25Mb2dpblByb3ZpZGVyLlBST1ZJREVSX0lEfV90b2tlbmApO1xuICB9XG59XG4iXX0=