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.46 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@supabase/supabase-js");function r(e){return{success:!0,data:e}}function a(e){return{success:!1,error:e}}class t{constructor(r){this.supabase=e.createClient(r.url,r.anonKey)}async signUp(e,t,s){try{const{data:n,error:i}=await this.supabase.auth.signUp({email:e,password:t,options:{data:s||{}}});if(i)return a(new Error(i.message));if(!n.user)return a(new Error("User creation failed"));const u=this.mapSupabaseUserToUser(n.user);return r({user:u,needsVerification:!n.user.email_confirmed_at})}catch(n){return a(n instanceof Error?n:new Error("Sign up failed"))}}async signIn(e,t){try{const{data:s,error:n}=await this.supabase.auth.signInWithPassword({email:e,password:t});if(n)return a(new Error(n.message));if(!s.user||!s.session)return a(new Error("Sign in failed"));const i=this.mapSupabaseUserToUser(s.user);return r({user:i,session:this.mapSupabaseSessionToAuthSession(s.session,i)})}catch(s){return a(s instanceof Error?s:new Error("Sign in failed"))}}async signOut(){try{const{error:e}=await this.supabase.auth.signOut();return e?a(new Error(e.message)):r(void 0)}catch(e){return a(e instanceof Error?e:new Error("Sign out failed"))}}async getCurrentUser(){try{const{data:{user:e},error:t}=await this.supabase.auth.getUser();if(t)return a(new Error(t.message));if(!e)return r(null);return r(this.mapSupabaseUserToUser(e))}catch(e){return a(e instanceof Error?e:new Error("Failed to get current user"))}}async getCurrentSession(){try{const{data:{session:e},error:t}=await this.supabase.auth.getSession();if(t)return a(new Error(t.message));if(!e)return r(null);const s=this.mapSupabaseUserToUser(e.user);return r(this.mapSupabaseSessionToAuthSession(e,s))}catch(e){return a(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 a(new Error("No authenticated user found"));const{error:t}=await this.supabase.auth.resend({type:"signup",email:e.email});return t?a(new Error(t.message)):r(void 0)}catch(e){return a(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 s{constructor(e){this.supabase=e}async updateProfile(e){try{const{data:{user:t},error:s}=await this.supabase.auth.getUser();if(s)return a(new Error(s.message));if(!t)return a(new Error("No authenticated user found"));const{data:n,error:i}=await this.supabase.auth.updateUser({data:{...t.user_metadata,...e}});if(i)return a(new Error(i.message));if(!n.user)return a(new Error("Profile update failed"));return r(this.mapSupabaseUserToUser(n.user))}catch(t){return a(t instanceof Error?t:new Error("Profile update failed"))}}async getCurrentUser(){try{const{data:{user:e},error:t}=await this.supabase.auth.getUser();if(t)return a(new Error(t.message));if(!e)return r(null);return r(this.mapSupabaseUserToUser(e))}catch(e){return a(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 n{constructor(e){this.supabase=e}async create(e,t){try{const{data:s,error:n}=await this.supabase.from(e).insert(t).select().single();return n?a(new Error(n.message)):r(s)}catch(s){return a(s instanceof Error?s:new Error("Create operation failed"))}}async read(e,t){try{const{data:s,error:n}=await this.supabase.from(e).select("*").eq("id",t).single();return n?"PGRST116"===n.code?r(null):a(new Error(n.message)):r(s)}catch(s){return a(s instanceof Error?s:new Error("Read operation failed"))}}async update(e,t,s){try{const{data:n,error:i}=await this.supabase.from(e).update(s).eq("id",t).select().single();return i?a(new Error(i.message)):r(n)}catch(n){return a(n instanceof Error?n:new Error("Update operation failed"))}}async delete(e,t){try{const{error:s}=await this.supabase.from(e).delete().eq("id",t);return s?a(new Error(s.message)):r(void 0)}catch(s){return a(s instanceof Error?s:new Error("Delete operation failed"))}}async list(e,t){try{let s=this.supabase.from(e).select("*");t&&Object.entries(t).forEach((([e,r])=>{s=s.eq(e,r)}));const{data:n,error:i}=await s;return i?a(new Error(i.message)):r(n||[])}catch(s){return a(s instanceof Error?s:new Error("List operation failed"))}}}exports.AuthService=t,exports.CrudService=n,exports.ServiceManager=class{constructor(r){this.supabase=e.createClient(r.supabase.url,r.supabase.anonKey),this.authService=new t(r.supabase),this.userService=new s(this.supabase),this.crudService=new n(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)}},exports.UserService=s,exports.createFailure=a,exports.createSuccess=r,exports.isFailure=function(e){return!1===e.success},exports.isSuccess=function(e){return!0===e.success},exports.version="1.0.0"; //# sourceMappingURL=index.cjs.map