@ng-supabase/core
Version:
ng-supabase is a component library and helper utilities for integrating Supabase in your angular application.
89 lines • 13.6 kB
JavaScript
// 3rd party.
import { BehaviorSubject } from 'rxjs';
import { trimEnd } from './format/trim-end.function';
import { toSocialItem, } from './sign-in/social-sign-in';
export const DEFAULT_ROUTES = {
main: '/',
signIn: '/sign-in',
register: '/register',
registerOrSignIn: '/auth',
setPassword: '/set-password',
resetPassword: '/reset-password',
postSignOut: '/sign-in',
};
class SetPasswordConfig {
constructor(init) {
this.title = '';
this.requireConfirm = true;
this.showMessageOnSave = true;
Object.assign(this, init);
}
}
class ProfileConfig {
constructor(init) {
this.table = '';
this.userIdField = 'user_id';
this.firstNameField = 'first_name';
this.lastNameField = 'last_name';
this.avatarField = 'avatar';
Object.assign(this, init);
}
}
class RegisterConfig {
constructor(init) {
this.title = '';
this.metadata = [];
Object.assign(this, init);
this.metadata = this.metadata || [];
}
}
export class SignInConfig {
constructor(init) {
this.title = '';
this.magicLinks = true;
this.socials = [];
this.rememberMe = true;
this.socialIconsRoot = 'https://supabase.com/dashboard/img/icons/';
this.socialSignInItems = [];
this.rememberMeStorageKey = 'supabase.auth.info';
this.otpEnabled = true;
this.otpLength = 6;
Object.assign(this, init);
this.setSocialSignInItems();
}
setSocialSignInItems() {
for (const social of this.socials) {
const item = toSocialItem(social);
if (this.socialIconsRoot) {
const root = trimEnd(this.socialIconsRoot, '/');
item.icon = `${root}/${item.value}-icon.svg`;
}
this.socialSignInItems.push(item);
}
}
}
export class SupabaseConfig {
constructor(init) {
this.mainRoute = '/';
this.routes = DEFAULT_ROUTES;
this.redirectParamName = 'redirect';
Object.assign(this.routes, init.routes);
const options = init;
const url = SupabaseConfig.toApiUrl(options.apiUrl || options.project);
this.logging = init.logging;
this.setPassword = new SetPasswordConfig(init.setPassword);
this.signIn = new SignInConfig(init.signIn);
this.register = new RegisterConfig(init.register);
this.profile = new ProfileConfig(init.profile);
this.api = new BehaviorSubject({
url: url,
key: init.apiKey,
});
}
static toApiUrl(urlOrProjectId) {
return urlOrProjectId.startsWith('http')
? urlOrProjectId
: `https://${urlOrProjectId}.supabase.co`;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYWJhc2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc3VwYWJhc2UtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLGFBQWE7QUFDYixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRCxPQUFPLEVBRUwsWUFBWSxHQUViLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFvQjtJQUM3QyxJQUFJLEVBQUUsR0FBRztJQUNULE1BQU0sRUFBRSxVQUFVO0lBQ2xCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLGdCQUFnQixFQUFFLE9BQU87SUFDekIsV0FBVyxFQUFFLGVBQWU7SUFDNUIsYUFBYSxFQUFFLGlCQUFpQjtJQUNoQyxXQUFXLEVBQUUsVUFBVTtDQUN4QixDQUFDO0FBb0ZGLE1BQU0saUJBQWlCO0lBS3JCLFlBQVksSUFBcUM7UUFKakQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUd2QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGFBQWE7SUFPakIsWUFBWSxJQUFpQztRQU43QyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsZ0JBQVcsR0FBRyxTQUFTLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxZQUFZLENBQUM7UUFDOUIsa0JBQWEsR0FBRyxXQUFXLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxRQUFRLENBQUM7UUFHckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBRUQsTUFBTSxj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LENBQUM7SUFDOUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhci5cbmltcG9ydCB7IFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG4vLyAzcmQgcGFydHkuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLy8gTG9jYWwuXG5pbXBvcnQgeyBMb2dDb25maWcgfSBmcm9tICcuL2xvZ2dpbmcvbG9nLWNvbmZpZyc7XG5pbXBvcnQgeyB0cmltRW5kIH0gZnJvbSAnLi9mb3JtYXQvdHJpbS1lbmQuZnVuY3Rpb24nO1xuaW1wb3J0IHtcbiAgU29jaWFsU2lnbkluLFxuICB0b1NvY2lhbEl0ZW0sXG4gIFNvY2lhbFNpZ25Jbkl0ZW0sXG59IGZyb20gJy4vc2lnbi1pbi9zb2NpYWwtc2lnbi1pbic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JPVVRFUzogQ29tcG9uZW50Um91dGVzID0ge1xuICBtYWluOiAnLycsXG4gIHNpZ25JbjogJy9zaWduLWluJyxcbiAgcmVnaXN0ZXI6ICcvcmVnaXN0ZXInLFxuICByZWdpc3Rlck9yU2lnbkluOiAnL2F1dGgnLFxuICBzZXRQYXNzd29yZDogJy9zZXQtcGFzc3dvcmQnLFxuICByZXNldFBhc3N3b3JkOiAnL3Jlc2V0LXBhc3N3b3JkJyxcbiAgcG9zdFNpZ25PdXQ6ICcvc2lnbi1pbicsXG59O1xuXG5pbnRlcmZhY2UgQmFzZVN1cGFiYXNlQ29uZmlnUHJvcGVydGllcyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBtYWluUm91dGU/OiBzdHJpbmc7XG4gIHNpZ25Jbj86IFNpZ25JbkNvbmZpZ1Byb3BlcnRpZXM7XG4gIGxvZ2dpbmc/OiBMb2dDb25maWc7XG4gIHJlZ2lzdGVyPzogUmVnaXN0ZXJQcm9wZXJ0aWVzO1xuICBzZXRQYXNzd29yZD86IFNldFBhc3N3b3JkUHJvcGVydGllcztcbiAgcm91dGVzPzogUGFydGlhbDxDb21wb25lbnRSb3V0ZXM+O1xuICBwcm9maWxlPzogUHJvZmlsZVByb3BlcnRpZXM7XG59XG5cbmludGVyZmFjZSBTdXBhYmFzZUNvbmZpZ1Byb3BlcnRpZXNCeVVybCBleHRlbmRzIEJhc2VTdXBhYmFzZUNvbmZpZ1Byb3BlcnRpZXMge1xuICBhcGlVcmw6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN1cGFiYXNlQ29uZmlnUHJvcGVydGllc0J5UHJvamVjdFxuICBleHRlbmRzIEJhc2VTdXBhYmFzZUNvbmZpZ1Byb3BlcnRpZXMge1xuICBwcm9qZWN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN1cGFiYXNlQ29uZmlnUHJvcGVydGllcyA9XG4gIHwgU3VwYWJhc2VDb25maWdQcm9wZXJ0aWVzQnlVcmxcbiAgfCBTdXBhYmFzZUNvbmZpZ1Byb3BlcnRpZXNCeVByb2plY3Q7XG5cbmludGVyZmFjZSBDb21wb25lbnRSb3V0ZXMge1xuICBtYWluOiBzdHJpbmc7XG4gIHNpZ25Jbjogc3RyaW5nO1xuICByZWdpc3Rlcjogc3RyaW5nO1xuICByZWdpc3Rlck9yU2lnbkluOiBzdHJpbmc7XG4gIHNldFBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlc2V0UGFzc3dvcmQ6IHN0cmluZztcbiAgdXNlclByb2ZpbGU/OiBzdHJpbmc7XG4gIHBvc3RTaWduT3V0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbk1ldGFkYXRhIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgdHlwZT86ICd0ZXh0JyB8ICdudW1iZXInO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdGVyUHJvcGVydGllcyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFVzZXJSZWdpc3RyYXRpb25NZXRhZGF0YVtdO1xufVxuXG5pbnRlcmZhY2UgUHJvZmlsZVByb3BlcnRpZXMge1xuICB0YWJsZT86IHN0cmluZztcbiAgYXZhdGFyRmllbGQ/OiBzdHJpbmc7XG4gIGZpcnN0TmFtZUZpZWxkPzogc3RyaW5nO1xuICBsYXN0TmFtZUZpZWxkPzogc3RyaW5nO1xufVxuXG50eXBlIFNvY2lhbFNpZ25JbkZuID0gKHNvY2lhbDogU29jaWFsU2lnbkluKSA9PiBib29sZWFuIHwgdm9pZDtcblxuaW50ZXJmYWNlIFNpZ25JbkNvbmZpZ1Byb3BlcnRpZXMge1xuICB0aXRsZT86IHN0cmluZztcbiAgbWFnaWNMaW5rcz86IGJvb2xlYW47XG4gIHJlbWVtYmVyTWU/OiBib29sZWFuO1xuICBzb2NpYWxzPzogU29jaWFsU2lnbkluW107XG4gIHNvY2lhbEljb25zUm9vdD86IHN0cmluZztcbiAgcmVtZW1iZXJNZVN0b3JhZ2VLZXk/OiBzdHJpbmc7XG4gIG90cEVuYWJsZWQ/OiBib29sZWFuO1xuICBvdHBMZW5ndGg/OiBudW1iZXI7XG4gIHJlZGlyZWN0VG8/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IFVybFRyZWUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBvblNvY2lhbFNpZ25Jbj86IFNvY2lhbFNpZ25JbkZuO1xufVxuXG5pbnRlcmZhY2UgQXBpSW5mbyB7XG4gIHVybDogc3RyaW5nO1xuICBrZXk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNldFBhc3N3b3JkUHJvcGVydGllcyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICByZXF1aXJlQ29uZmlybT86IGJvb2xlYW47XG4gIHNob3dNZXNzYWdlT25TYXZlPzogYm9vbGVhbjtcbiAgcmVkaXJlY3RUbz86IHN0cmluZyB8IHN0cmluZ1tdIHwgVXJsVHJlZSB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG5cbmNsYXNzIFNldFBhc3N3b3JkQ29uZmlnIGltcGxlbWVudHMgU2V0UGFzc3dvcmRQcm9wZXJ0aWVzIHtcbiAgdGl0bGUgPSAnJztcbiAgcmVxdWlyZUNvbmZpcm0gPSB0cnVlO1xuICBzaG93TWVzc2FnZU9uU2F2ZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoaW5pdD86IFBhcnRpYWw8U2V0UGFzc3dvcmRQcm9wZXJ0aWVzPikge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gIH1cbn1cblxuY2xhc3MgUHJvZmlsZUNvbmZpZyBpbXBsZW1lbnRzIFByb2ZpbGVQcm9wZXJ0aWVzIHtcbiAgdGFibGUgPSAnJztcbiAgdXNlcklkRmllbGQgPSAndXNlcl9pZCc7XG4gIGZpcnN0TmFtZUZpZWxkID0gJ2ZpcnN0X25hbWUnO1xuICBsYXN0TmFtZUZpZWxkID0gJ2xhc3RfbmFtZSc7XG4gIGF2YXRhckZpZWxkID0gJ2F2YXRhcic7XG5cbiAgY29uc3RydWN0b3IoaW5pdD86IFBhcnRpYWw8UHJvZmlsZVByb3BlcnRpZXM+KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcbiAgfVxufVxuXG5jbGFzcyBSZWdpc3RlckNvbmZpZyBpbXBsZW1lbnRzIFJlZ2lzdGVyQ29uZmlnIHtcbiAgdGl0bGUgPSAnJztcbiAgbWV0YWRhdGE6IFVzZXJSZWdpc3RyYXRpb25NZXRhZGF0YVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoaW5pdD86IFBhcnRpYWw8UmVnaXN0ZXJQcm9wZXJ0aWVzPikge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgdGhpcy5tZXRhZGF0YSA9IHRoaXMubWV0YWRhdGEgfHwgW107XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNpZ25JbkNvbmZpZyBpbXBsZW1lbnRzIFNpZ25JbkNvbmZpZ1Byb3BlcnRpZXMge1xuICB0aXRsZSA9ICcnO1xuICBtYWdpY0xpbmtzID0gdHJ1ZTtcbiAgc29jaWFsczogU29jaWFsU2lnbkluW10gPSBbXTtcbiAgcmVtZW1iZXJNZSA9IHRydWU7XG4gIHNvY2lhbEljb25zUm9vdCA9ICdodHRwczovL3N1cGFiYXNlLmNvbS9kYXNoYm9hcmQvaW1nL2ljb25zLyc7XG4gIHNvY2lhbFNpZ25Jbkl0ZW1zOiBTb2NpYWxTaWduSW5JdGVtW10gPSBbXTtcbiAgcmVkaXJlY3RUbz86IHN0cmluZyB8IHN0cmluZ1tdIHwgVXJsVHJlZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJlbWVtYmVyTWVTdG9yYWdlS2V5ID0gJ3N1cGFiYXNlLmF1dGguaW5mbyc7XG4gIG90cEVuYWJsZWQgPSB0cnVlO1xuICBvdHBMZW5ndGggPSA2O1xuICBvblNvY2lhbFNpZ25Jbj86IFNvY2lhbFNpZ25JbkZuO1xuXG4gIGNvbnN0cnVjdG9yKGluaXQ/OiBQYXJ0aWFsPFNpZ25JbkNvbmZpZz4pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xuICAgIHRoaXMuc2V0U29jaWFsU2lnbkluSXRlbXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U29jaWFsU2lnbkluSXRlbXMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzb2NpYWwgb2YgdGhpcy5zb2NpYWxzKSB7XG4gICAgICBjb25zdCBpdGVtID0gdG9Tb2NpYWxJdGVtKHNvY2lhbCk7XG4gICAgICBpZiAodGhpcy5zb2NpYWxJY29uc1Jvb3QpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRyaW1FbmQodGhpcy5zb2NpYWxJY29uc1Jvb3QsICcvJyk7XG4gICAgICAgIGl0ZW0uaWNvbiA9IGAke3Jvb3R9LyR7aXRlbS52YWx1ZX0taWNvbi5zdmdgO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNvY2lhbFNpZ25Jbkl0ZW1zLnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXBhYmFzZUNvbmZpZyB7XG4gIHNpZ25JbjogU2lnbkluQ29uZmlnO1xuICBhcGk6IEJlaGF2aW9yU3ViamVjdDx7IHVybDogc3RyaW5nOyBrZXk6IHN0cmluZyB9PjtcbiAgbG9nZ2luZz86IExvZ0NvbmZpZztcbiAgbWFpblJvdXRlID0gJy8nO1xuICBzZXRQYXNzd29yZDogU2V0UGFzc3dvcmRDb25maWc7XG4gIHJlZ2lzdGVyOiBSZWdpc3RlckNvbmZpZztcbiAgcm91dGVzOiBDb21wb25lbnRSb3V0ZXMgPSBERUZBVUxUX1JPVVRFUztcbiAgcmVkaXJlY3RQYXJhbU5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSAncmVkaXJlY3QnO1xuICBwcm9maWxlOiBQcm9maWxlQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGluaXQ6IFN1cGFiYXNlQ29uZmlnUHJvcGVydGllcykge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5yb3V0ZXMsIGluaXQucm91dGVzKTtcbiAgICBjb25zdCBvcHRpb25zID0gaW5pdCBhcyBTdXBhYmFzZUNvbmZpZ1Byb3BlcnRpZXNCeVVybCAmXG4gICAgICBTdXBhYmFzZUNvbmZpZ1Byb3BlcnRpZXNCeVByb2plY3Q7XG5cbiAgICBjb25zdCB1cmwgPSBTdXBhYmFzZUNvbmZpZy50b0FwaVVybChvcHRpb25zLmFwaVVybCB8fCBvcHRpb25zLnByb2plY3QpO1xuICAgIHRoaXMubG9nZ2luZyA9IGluaXQubG9nZ2luZztcbiAgICB0aGlzLnNldFBhc3N3b3JkID0gbmV3IFNldFBhc3N3b3JkQ29uZmlnKGluaXQuc2V0UGFzc3dvcmQpO1xuICAgIHRoaXMuc2lnbkluID0gbmV3IFNpZ25JbkNvbmZpZyhpbml0LnNpZ25Jbik7XG4gICAgdGhpcy5yZWdpc3RlciA9IG5ldyBSZWdpc3RlckNvbmZpZyhpbml0LnJlZ2lzdGVyKTtcbiAgICB0aGlzLnByb2ZpbGUgPSBuZXcgUHJvZmlsZUNvbmZpZyhpbml0LnByb2ZpbGUpO1xuICAgIHRoaXMuYXBpID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcGlJbmZvPih7XG4gICAgICB1cmw6IHVybCxcbiAgICAgIGtleTogaW5pdC5hcGlLZXksXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgdG9BcGlVcmwodXJsT3JQcm9qZWN0SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybE9yUHJvamVjdElkLnN0YXJ0c1dpdGgoJ2h0dHAnKVxuICAgICAgPyB1cmxPclByb2plY3RJZFxuICAgICAgOiBgaHR0cHM6Ly8ke3VybE9yUHJvamVjdElkfS5zdXBhYmFzZS5jb2A7XG4gIH1cbn1cbiJdfQ==