{"version":3,"file":"create-auth-store.cjs","names":[],"sources":["../../src/auth/create-auth-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\n\nexport interface AuthState<TUser> {\n    user: TUser | null;\n    token: string | null;\n    isAuthenticated: boolean;\n    setSession: (session: { user: TUser; token: string }) => void;\n    setUser: (user: TUser | null) => void;\n    setToken: (token: string | null) => void;\n    logout: () => void;\n}\n\nexport interface CreateAuthStoreOptions<TUser> {\n    /** Persist key used in storage (default: \"tempest-auth\"). */\n    name?: string;\n    /** Which storage to persist into (default: localStorage). */\n    storage?: \"local\" | \"session\";\n    /** Initial user (useful for SSR hydration). */\n    initialUser?: TUser | null;\n    /** Initial token. */\n    initialToken?: string | null;\n}\n\n/**\n * Build a typed Zustand auth store with `persist` middleware. Each app passes\n * its own `TUser` shape so the SDK does not own the user model.\n *\n * @example\n * const useAuthStore = createAuthStore<UserResponse>();\n * const { user, token, logout } = useAuthStore();\n */\nexport function createAuthStore<TUser>(options: CreateAuthStoreOptions<TUser> = {}) {\n    const name = options.name ?? \"tempest-auth\";\n    const storageImpl = options.storage === \"session\" ? () => sessionStorage : () => localStorage;\n\n    return create<AuthState<TUser>>()(\n        persist(\n            (set) => ({\n                user: options.initialUser ?? null,\n                token: options.initialToken ?? null,\n                isAuthenticated: !!options.initialToken,\n                setSession: ({ user, token }) => set({ user, token, isAuthenticated: true }),\n                setUser: (user) => set({ user }),\n                setToken: (token) => set({ token, isAuthenticated: !!token }),\n                logout: () => set({ user: null, token: null, isAuthenticated: false }),\n            }),\n            {\n                name,\n                storage: createJSONStorage(storageImpl),\n                partialize: (state) => ({ user: state.user, token: state.token }),\n                onRehydrateStorage: () => (state) => {\n                    if (state) state.isAuthenticated = !!state.token;\n                },\n            },\n        ),\n    );\n}\n"],"mappings":"yDAgCA,SAAgB,EAAuB,EAAyC,CAAC,EAAG,CAChF,IAAM,EAAO,EAAQ,MAAQ,eACvB,EAAc,EAAQ,UAAY,cAAkB,mBAAuB,aAEjF,OAAA,EAAO,EAAA,OAAA,CAAyB,CAAC,EAAA,EAC7B,EAAA,QAAA,CACK,IAAS,CACN,KAAM,EAAQ,aAAe,KAC7B,MAAO,EAAQ,cAAgB,KAC/B,gBAAiB,CAAC,CAAC,EAAQ,aAC3B,YAAa,CAAE,OAAM,WAAY,EAAI,CAAE,OAAM,QAAO,gBAAiB,EAAK,CAAC,EAC3E,QAAU,GAAS,EAAI,CAAE,MAAK,CAAC,EAC/B,SAAW,GAAU,EAAI,CAAE,QAAO,gBAAiB,CAAC,CAAC,CAAM,CAAC,EAC5D,WAAc,EAAI,CAAE,KAAM,KAAM,MAAO,KAAM,gBAAiB,EAAM,CAAC,CACzE,GACA,CACI,OACA,SAAA,EAAS,EAAA,kBAAA,CAAkB,CAAW,EACtC,WAAa,IAAW,CAAE,KAAM,EAAM,KAAM,MAAO,EAAM,KAAM,GAC/D,uBAA2B,GAAU,CAC7B,IAAO,EAAM,gBAAkB,CAAC,CAAC,EAAM,MAC/C,CACJ,CACJ,CACJ,CACJ"}