UNPKG

supabase-service-manager

Version:

TypeScript library for user authentication, profile management, and basic CRUD operations using Supabase, designed for vanilla JavaScript consumption

3 lines (2 loc) 6.68 kB
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@supabase/supabase-js")):"function"==typeof define&&define.amd?define(["exports","@supabase/supabase-js"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).SupabaseServiceManager={},e.Supabase)}(this,(function(e,r){"use strict";function a(e){return{success:!0,data:e}}function t(e){return{success:!1,error:e}}class s{constructor(e){this.supabase=r.createClient(e.url,e.anonKey)}async signUp(e,r,s){try{const{data:n,error:i}=await this.supabase.auth.signUp({email:e,password:r,options:{data:s||{}}});if(i)return t(new Error(i.message));if(!n.user)return t(new Error("User creation failed"));const u=this.mapSupabaseUserToUser(n.user);return a({user:u,needsVerification:!n.user.email_confirmed_at})}catch(n){return t(n instanceof Error?n:new Error("Sign up failed"))}}async signIn(e,r){try{const{data:s,error:n}=await this.supabase.auth.signInWithPassword({email:e,password:r});if(n)return t(new Error(n.message));if(!s.user||!s.session)return t(new Error("Sign in failed"));const i=this.mapSupabaseUserToUser(s.user);return a({user:i,session:this.mapSupabaseSessionToAuthSession(s.session,i)})}catch(s){return t(s instanceof Error?s:new Error("Sign in failed"))}}async signOut(){try{const{error:e}=await this.supabase.auth.signOut();return e?t(new Error(e.message)):a(void 0)}catch(e){return t(e instanceof Error?e:new Error("Sign out failed"))}}async getCurrentUser(){try{const{data:{user:e},error:r}=await this.supabase.auth.getUser();if(r)return t(new Error(r.message));if(!e)return a(null);return a(this.mapSupabaseUserToUser(e))}catch(e){return t(e instanceof Error?e:new Error("Failed to get current user"))}}async getCurrentSession(){try{const{data:{session:e},error:r}=await this.supabase.auth.getSession();if(r)return t(new Error(r.message));if(!e)return a(null);const s=this.mapSupabaseUserToUser(e.user);return a(this.mapSupabaseSessionToAuthSession(e,s))}catch(e){return t(e instanceof Error?e:new Error("Failed to get current session"))}}async resendVerificationEmail(){try{const{data:{user:e}}=await this.supabase.auth.getUser();if(!e)return t(new Error("No authenticated user found"));const{error:r}=await this.supabase.auth.resend({type:"signup",email:e.email});return r?t(new Error(r.message)):a(void 0)}catch(e){return t(e instanceof Error?e:new Error("Failed to resend verification email"))}}mapSupabaseUserToUser(e){var r,a,t,s,n,i;return{id:e.id,email:e.email,firstName:(null==(r=e.user_metadata)?void 0:r.firstName)||(null==(a=e.user_metadata)?void 0:a.first_name),lastName:(null==(t=e.user_metadata)?void 0:t.lastName)||(null==(s=e.user_metadata)?void 0:s.last_name),avatar:(null==(n=e.user_metadata)?void 0:n.avatar)||(null==(i=e.user_metadata)?void 0:i.avatar_url),emailVerified:!!e.email_confirmed_at,createdAt:e.created_at,updatedAt:e.updated_at}}mapSupabaseSessionToAuthSession(e,r){return{user:r,accessToken:e.access_token,refreshToken:e.refresh_token,expiresAt:e.expires_at}}}class n{constructor(e){this.supabase=e}async updateProfile(e){try{const{data:{user:r},error:s}=await this.supabase.auth.getUser();if(s)return t(new Error(s.message));if(!r)return t(new Error("No authenticated user found"));const{data:n,error:i}=await this.supabase.auth.updateUser({data:{...r.user_metadata,...e}});if(i)return t(new Error(i.message));if(!n.user)return t(new Error("Profile update failed"));return a(this.mapSupabaseUserToUser(n.user))}catch(r){return t(r instanceof Error?r:new Error("Profile update failed"))}}async getCurrentUser(){try{const{data:{user:e},error:r}=await this.supabase.auth.getUser();if(r)return t(new Error(r.message));if(!e)return a(null);return a(this.mapSupabaseUserToUser(e))}catch(e){return t(e instanceof Error?e:new Error("Failed to get current user"))}}mapSupabaseUserToUser(e){var r,a,t,s,n,i;return{id:e.id,email:e.email,firstName:(null==(r=e.user_metadata)?void 0:r.firstName)||(null==(a=e.user_metadata)?void 0:a.first_name),lastName:(null==(t=e.user_metadata)?void 0:t.lastName)||(null==(s=e.user_metadata)?void 0:s.last_name),avatar:(null==(n=e.user_metadata)?void 0:n.avatar)||(null==(i=e.user_metadata)?void 0:i.avatar_url),emailVerified:!!e.email_confirmed_at,createdAt:e.created_at,updatedAt:e.updated_at}}}class i{constructor(e){this.supabase=e}async create(e,r){try{const{data:s,error:n}=await this.supabase.from(e).insert(r).select().single();return n?t(new Error(n.message)):a(s)}catch(s){return t(s instanceof Error?s:new Error("Create operation failed"))}}async read(e,r){try{const{data:s,error:n}=await this.supabase.from(e).select("*").eq("id",r).single();return n?"PGRST116"===n.code?a(null):t(new Error(n.message)):a(s)}catch(s){return t(s instanceof Error?s:new Error("Read operation failed"))}}async update(e,r,s){try{const{data:n,error:i}=await this.supabase.from(e).update(s).eq("id",r).select().single();return i?t(new Error(i.message)):a(n)}catch(n){return t(n instanceof Error?n:new Error("Update operation failed"))}}async delete(e,r){try{const{error:s}=await this.supabase.from(e).delete().eq("id",r);return s?t(new Error(s.message)):a(void 0)}catch(s){return t(s instanceof Error?s:new Error("Delete operation failed"))}}async list(e,r){try{let s=this.supabase.from(e).select("*");r&&Object.entries(r).forEach((([e,r])=>{s=s.eq(e,r)}));const{data:n,error:i}=await s;return i?t(new Error(i.message)):a(n||[])}catch(s){return t(s instanceof Error?s:new Error("List operation failed"))}}}e.AuthService=s,e.CrudService=i,e.ServiceManager=class{constructor(e){this.supabase=r.createClient(e.supabase.url,e.supabase.anonKey),this.authService=new s(e.supabase),this.userService=new n(this.supabase),this.crudService=new i(this.supabase)}async signUp(e,r,a){return this.authService.signUp(e,r,a)}async signIn(e,r){return this.authService.signIn(e,r)}async signOut(){return this.authService.signOut()}async resendVerificationEmail(){return this.authService.resendVerificationEmail()}async updateProfile(e){return this.userService.updateProfile(e)}async getCurrentUser(){return this.userService.getCurrentUser()}async getCurrentSession(){return this.authService.getCurrentSession()}async create(e,r){return this.crudService.create(e,r)}async read(e,r){return this.crudService.read(e,r)}async update(e,r,a){return this.crudService.update(e,r,a)}async delete(e,r){return this.crudService.delete(e,r)}async list(e,r){return this.crudService.list(e,r)}},e.UserService=n,e.createFailure=t,e.createSuccess=a,e.isFailure=function(e){return!1===e.success},e.isSuccess=function(e){return!0===e.success},e.version="1.0.0",Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})})); //# sourceMappingURL=index.umd.js.map