@digilogiclabs/saas-factory-auth 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -112,14 +112,14 @@ var useAuth = () => {
112
112
  react.useEffect(() => {
113
113
  supabase.auth.getSession().then(({ data: { session } }) => {
114
114
  var _a;
115
- store.updateUser((_a = session == null ? void 0 : session.user) != null ? _a : null);
115
+ store.updateUser((_a = session == null ? undefined : session.user) != null ? _a : null);
116
116
  store.setLoading(false);
117
117
  });
118
118
  const {
119
119
  data: { subscription }
120
120
  } = supabase.auth.onAuthStateChange((_event, session) => {
121
121
  var _a;
122
- store.updateUser((_a = session == null ? void 0 : session.user) != null ? _a : null);
122
+ store.updateUser((_a = session == null ? undefined : session.user) != null ? _a : null);
123
123
  });
124
124
  return () => subscription.unsubscribe();
125
125
  }, []);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/supabase.ts","../src/store/authStore.ts","../src/hooks/useAuth.ts","../src/components/AuthProvider.tsx"],"names":["createClientComponentClient","create","useEffect","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["\nimport { createClientComponentClient } from '@supabase/auth-helpers-nextjs'\nimport type { Database } from './database.types'\n\nexport const createClient = () => {\n if (!process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) {\n throw new Error('Missing Supabase environment variables')\n }\n\n return createClientComponentClient<Database>()\n}\n\nexport const supabase = createClient()","import { create } from 'zustand'\nimport { AuthStore } from '../types'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuthStore = create<AuthStore>((set) => ({\n user: null,\n loading: true,\n error: null,\n\n signIn: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithPassword({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signUp: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signUp({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signOut: async () => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signOut()\n if (error) throw error\n set({ user: null })\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n resetPassword: async (email: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.resetPasswordForEmail(email)\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n signInWithOAuth: async (provider: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOAuth({\n provider: provider as any,\n options: {\n redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signInWithMagicLink: async (email: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOtp({\n email,\n options: {\n emailRedirectTo: redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n updateUser: (user) => set({ user }),\n setLoading: (loading) => set({ loading }),\n setError: (error) => set({ error }),\n}))\n\n// Example usage in a Next.js app:\n/*\nimport { AuthForm } from '@digilogiclabs/saas-factory-auth'\n\nexport default function LoginPage() {\n const router = useRouter()\n\n return (\n <AuthForm\n defaultMode=\"signIn\"\n onSuccess={() => router.push('/dashboard')}\n providers={['google', 'github']}\n redirectTo=\"https://your-app.com/auth/callback\"\n />\n )\n}\n*/","'use client'\n\nimport { useEffect } from 'react'\nimport { useAuthStore } from '../store/authStore'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuth = () => {\n const store = useAuthStore()\n\n useEffect(() => {\n // Check active session\n supabase.auth.getSession().then(({ data: { session } }) => {\n store.updateUser(session?.user ?? null)\n store.setLoading(false)\n })\n\n // Listen for auth changes\n const {\n data: { subscription },\n } = supabase.auth.onAuthStateChange((_event, session) => {\n store.updateUser(session?.user ?? null)\n })\n\n return () => subscription.unsubscribe()\n }, [])\n\n return store\n}","'use client'\n\nimport { createContext, useContext, ReactNode } from 'react'\nimport { useAuth } from '../hooks/useAuth'\nimport type { AuthStore } from '../types'\n\nconst AuthContext = createContext<AuthStore | null>(null)\n\nexport const AuthProvider = ({ children }: { children: ReactNode }) => {\n const auth = useAuth()\n\n return <AuthContext.Provider value={auth}>{children}</AuthContext.Provider>\n}\n\nexport const useAuthContext = () => {\n const context = useContext(AuthContext)\n if (!context) {\n throw new Error('useAuthContext must be used within an AuthProvider')\n }\n return context\n}"]}
1
+ {"version":3,"sources":["../src/utils/supabase.ts","../src/store/authStore.ts","../src/hooks/useAuth.ts","../src/components/AuthProvider.tsx"],"names":["createClientComponentClient","create","useEffect","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["\nimport { createClientComponentClient } from '@supabase/auth-helpers-nextjs'\nimport type { Database } from './database.types'\n\nexport const createClient = () => {\n if (!process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) {\n throw new Error('Missing Supabase environment variables')\n }\n\n return createClientComponentClient<Database>()\n}\n\nexport const supabase = createClient()","import { create } from 'zustand'\nimport { AuthStore } from '../types'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuthStore = create<AuthStore>((set) => ({\n user: null,\n loading: true,\n error: null,\n\n signIn: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithPassword({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signUp: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signUp({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signOut: async () => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signOut()\n if (error) throw error\n set({ user: null })\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n resetPassword: async (email: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.resetPasswordForEmail(email)\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n signInWithOAuth: async (provider: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOAuth({\n provider: provider as any,\n options: {\n redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signInWithMagicLink: async (email: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOtp({\n email,\n options: {\n emailRedirectTo: redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n updateUser: (user) => set({ user }),\n setLoading: (loading) => set({ loading }),\n setError: (error) => set({ error }),\n}))\n\n// Example usage in a Next.js app:\n/*\nimport { AuthForm } from '@digilogiclabs/saas-factory-auth'\n\nexport default function LoginPage() {\n const router = useRouter()\n\n return (\n <AuthForm\n defaultMode=\"signIn\"\n onSuccess={() => router.push('/dashboard')}\n providers={['google', 'github']}\n redirectTo=\"https://your-app.com/auth/callback\"\n />\n )\n}\n*/","'use client'\n\nimport { useEffect } from 'react'\nimport { useAuthStore } from '../store/authStore'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuth = () => {\n const store = useAuthStore()\n\n useEffect(() => {\n // Check active session\n supabase.auth.getSession().then(({ data: { session } }) => {\n store.updateUser(session?.user ?? null)\n store.setLoading(false)\n })\n\n // Listen for auth changes\n const {\n data: { subscription },\n } = supabase.auth.onAuthStateChange((_event, session) => {\n store.updateUser(session?.user ?? null)\n })\n\n return () => subscription.unsubscribe()\n }, [])\n\n return store\n}","'use client'\n\nimport { createContext, useContext, ReactNode } from 'react'\nimport { useAuth } from '../hooks/useAuth'\nimport type { AuthStore } from '../types'\n\nconst AuthContext = createContext<AuthStore | null>(null)\n\nexport const AuthProvider = ({ children }: { children: ReactNode }) => {\n const auth = useAuth()\n\n return <AuthContext.Provider value={auth}>{children}</AuthContext.Provider>\n}\n\nexport const useAuthContext = () => {\n const context = useContext(AuthContext)\n if (!context) {\n throw new Error('useAuthContext must be used within an AuthProvider')\n }\n return context\n}"]}
package/dist/index.mjs CHANGED
@@ -110,14 +110,14 @@ var useAuth = () => {
110
110
  useEffect(() => {
111
111
  supabase.auth.getSession().then(({ data: { session } }) => {
112
112
  var _a;
113
- store.updateUser((_a = session == null ? void 0 : session.user) != null ? _a : null);
113
+ store.updateUser((_a = session == null ? undefined : session.user) != null ? _a : null);
114
114
  store.setLoading(false);
115
115
  });
116
116
  const {
117
117
  data: { subscription }
118
118
  } = supabase.auth.onAuthStateChange((_event, session) => {
119
119
  var _a;
120
- store.updateUser((_a = session == null ? void 0 : session.user) != null ? _a : null);
120
+ store.updateUser((_a = session == null ? undefined : session.user) != null ? _a : null);
121
121
  });
122
122
  return () => subscription.unsubscribe();
123
123
  }, []);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/supabase.ts","../src/store/authStore.ts","../src/hooks/useAuth.ts","../src/components/AuthProvider.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["\nimport { createClientComponentClient } from '@supabase/auth-helpers-nextjs'\nimport type { Database } from './database.types'\n\nexport const createClient = () => {\n if (!process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) {\n throw new Error('Missing Supabase environment variables')\n }\n\n return createClientComponentClient<Database>()\n}\n\nexport const supabase = createClient()","import { create } from 'zustand'\nimport { AuthStore } from '../types'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuthStore = create<AuthStore>((set) => ({\n user: null,\n loading: true,\n error: null,\n\n signIn: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithPassword({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signUp: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signUp({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signOut: async () => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signOut()\n if (error) throw error\n set({ user: null })\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n resetPassword: async (email: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.resetPasswordForEmail(email)\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n signInWithOAuth: async (provider: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOAuth({\n provider: provider as any,\n options: {\n redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signInWithMagicLink: async (email: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOtp({\n email,\n options: {\n emailRedirectTo: redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n updateUser: (user) => set({ user }),\n setLoading: (loading) => set({ loading }),\n setError: (error) => set({ error }),\n}))\n\n// Example usage in a Next.js app:\n/*\nimport { AuthForm } from '@digilogiclabs/saas-factory-auth'\n\nexport default function LoginPage() {\n const router = useRouter()\n\n return (\n <AuthForm\n defaultMode=\"signIn\"\n onSuccess={() => router.push('/dashboard')}\n providers={['google', 'github']}\n redirectTo=\"https://your-app.com/auth/callback\"\n />\n )\n}\n*/","'use client'\n\nimport { useEffect } from 'react'\nimport { useAuthStore } from '../store/authStore'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuth = () => {\n const store = useAuthStore()\n\n useEffect(() => {\n // Check active session\n supabase.auth.getSession().then(({ data: { session } }) => {\n store.updateUser(session?.user ?? null)\n store.setLoading(false)\n })\n\n // Listen for auth changes\n const {\n data: { subscription },\n } = supabase.auth.onAuthStateChange((_event, session) => {\n store.updateUser(session?.user ?? null)\n })\n\n return () => subscription.unsubscribe()\n }, [])\n\n return store\n}","'use client'\n\nimport { createContext, useContext, ReactNode } from 'react'\nimport { useAuth } from '../hooks/useAuth'\nimport type { AuthStore } from '../types'\n\nconst AuthContext = createContext<AuthStore | null>(null)\n\nexport const AuthProvider = ({ children }: { children: ReactNode }) => {\n const auth = useAuth()\n\n return <AuthContext.Provider value={auth}>{children}</AuthContext.Provider>\n}\n\nexport const useAuthContext = () => {\n const context = useContext(AuthContext)\n if (!context) {\n throw new Error('useAuthContext must be used within an AuthProvider')\n }\n return context\n}"]}
1
+ {"version":3,"sources":["../src/utils/supabase.ts","../src/store/authStore.ts","../src/hooks/useAuth.ts","../src/components/AuthProvider.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["\nimport { createClientComponentClient } from '@supabase/auth-helpers-nextjs'\nimport type { Database } from './database.types'\n\nexport const createClient = () => {\n if (!process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) {\n throw new Error('Missing Supabase environment variables')\n }\n\n return createClientComponentClient<Database>()\n}\n\nexport const supabase = createClient()","import { create } from 'zustand'\nimport { AuthStore } from '../types'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuthStore = create<AuthStore>((set) => ({\n user: null,\n loading: true,\n error: null,\n\n signIn: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithPassword({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signUp: async (email: string, password: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signUp({\n email,\n password,\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signOut: async () => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signOut()\n if (error) throw error\n set({ user: null })\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n resetPassword: async (email: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.resetPasswordForEmail(email)\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n signInWithOAuth: async (provider: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOAuth({\n provider: provider as any,\n options: {\n redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n\n signInWithMagicLink: async (email: string, redirectTo?: string) => {\n try {\n set({ loading: true, error: null })\n const { error } = await supabase.auth.signInWithOtp({\n email,\n options: {\n emailRedirectTo: redirectTo\n }\n })\n if (error) throw error\n } catch (error) {\n set({ error: error as Error })\n } finally {\n set({ loading: false })\n }\n },\n updateUser: (user) => set({ user }),\n setLoading: (loading) => set({ loading }),\n setError: (error) => set({ error }),\n}))\n\n// Example usage in a Next.js app:\n/*\nimport { AuthForm } from '@digilogiclabs/saas-factory-auth'\n\nexport default function LoginPage() {\n const router = useRouter()\n\n return (\n <AuthForm\n defaultMode=\"signIn\"\n onSuccess={() => router.push('/dashboard')}\n providers={['google', 'github']}\n redirectTo=\"https://your-app.com/auth/callback\"\n />\n )\n}\n*/","'use client'\n\nimport { useEffect } from 'react'\nimport { useAuthStore } from '../store/authStore'\nimport { supabase } from '../utils/supabase'\n\nexport const useAuth = () => {\n const store = useAuthStore()\n\n useEffect(() => {\n // Check active session\n supabase.auth.getSession().then(({ data: { session } }) => {\n store.updateUser(session?.user ?? null)\n store.setLoading(false)\n })\n\n // Listen for auth changes\n const {\n data: { subscription },\n } = supabase.auth.onAuthStateChange((_event, session) => {\n store.updateUser(session?.user ?? null)\n })\n\n return () => subscription.unsubscribe()\n }, [])\n\n return store\n}","'use client'\n\nimport { createContext, useContext, ReactNode } from 'react'\nimport { useAuth } from '../hooks/useAuth'\nimport type { AuthStore } from '../types'\n\nconst AuthContext = createContext<AuthStore | null>(null)\n\nexport const AuthProvider = ({ children }: { children: ReactNode }) => {\n const auth = useAuth()\n\n return <AuthContext.Provider value={auth}>{children}</AuthContext.Provider>\n}\n\nexport const useAuthContext = () => {\n const context = useContext(AuthContext)\n if (!context) {\n throw new Error('useAuthContext must be used within an AuthProvider')\n }\n return context\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digilogiclabs/saas-factory-auth",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "private": false,
5
5
  "description": "Authentication package for Next.js applications using Supabase",
6
6
  "keywords": [
@@ -41,49 +41,53 @@
41
41
  ],
42
42
  "sideEffects": false,
43
43
  "scripts": {
44
- "build": "tsup --dts",
45
- "dev": "tsup --watch --dts",
46
- "clean": "rm -rf dist",
44
+ "build": "tsup",
45
+ "dev": "tsup --watch",
46
+ "clean": "rimraf dist",
47
47
  "type-check": "tsc --noEmit",
48
48
  "test": "jest --passWithNoTests",
49
49
  "test:watch": "jest --watch",
50
50
  "test:coverage": "jest --coverage",
51
51
  "lint": "eslint .",
52
52
  "format": "prettier --write .",
53
- "prepare": "husky install",
54
53
  "release": "npm run clean && npm run build && changeset publish",
55
54
  "version": "changeset version",
56
- "prepack": "npm run build"
55
+ "prepack": "npm run build",
56
+ "postinstall": "husky",
57
+ "prepare": "husky"
57
58
  },
58
59
  "dependencies": {
59
- "@supabase/auth-helpers-nextjs": "^0.8.7",
60
- "@supabase/supabase-js": "^2.39.3",
60
+ "@supabase/auth-helpers-nextjs": "^0.9.0",
61
+ "@supabase/supabase-js": "^2.39.0",
61
62
  "zustand": "^4.4.7"
62
63
  },
63
64
  "peerDependencies": {
64
- "next": ">=13",
65
+ "next": ">=14",
65
66
  "react": ">=18",
66
67
  "react-dom": ">=18"
67
68
  },
68
69
  "devDependencies": {
69
- "@changesets/cli": "^2.27.11",
70
- "@testing-library/jest-dom": "^6.6.3",
71
- "@testing-library/react": "^16.1.0",
72
- "@types/react": "^18.2.48",
73
- "@typescript-eslint/eslint-plugin": "^6.19.1",
74
- "@typescript-eslint/parser": "^6.19.1",
70
+ "@changesets/cli": "^2.27.1",
71
+ "@testing-library/jest-dom": "^6.1.5",
72
+ "@testing-library/react": "^14.1.2",
73
+ "@types/react": "^18.2.45",
74
+ "@typescript-eslint/eslint-plugin": "^6.14.0",
75
+ "@typescript-eslint/parser": "^6.14.0",
75
76
  "babel-jest": "^29.7.0",
76
77
  "eslint": "^8.56.0",
78
+ "eslint-plugin-react": "^7.37.3",
79
+ "eslint-plugin-react-hooks": "^5.1.0",
80
+ "husky": "^9.0.11",
77
81
  "identity-obj-proxy": "^3.0.0",
78
82
  "jest": "^29.7.0",
79
83
  "jest-environment-jsdom": "^29.7.0",
84
+ "lint-staged": "^15.2.0",
85
+ "prettier": "^3.1.1",
86
+ "rimraf": "^5.0.5",
80
87
  "tsup": "^8.0.1",
81
- "typescript": "^5.3.3",
82
- "husky": "^8.0.3",
83
- "lint-staged": "^15.0.2",
84
- "prettier": "^3.0.3"
88
+ "typescript": "^5.3.3"
85
89
  },
86
90
  "engines": {
87
91
  "node": ">=18.0.0"
88
92
  }
89
- }
93
+ }