UNPKG

@daveyplate/better-auth-ui

Version:

Plug & play shadcn/ui components for better-auth

211 lines (196 loc) 5.67 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/lib/triplit/use-triplit-hooks.ts var _react = require('react'); // src/lib/triplit/use-list-accounts.ts // src/lib/triplit/model-names.ts var getModelName = ({ namespace, modelNames, usePlural = false }) => { return (modelNames == null ? void 0 : modelNames[namespace]) || `${namespace}${usePlural ? "s" : ""}`; }; // src/lib/triplit/use-conditional-query.ts var _react3 = require('@triplit/react'); function useConditionalQuery(client, query, options) { const stringifiedQuery = !(options == null ? void 0 : options.disabled) && query && JSON.stringify(query); const localOnly = !!(options == null ? void 0 : options.localOnly); const [remoteFulfilled, setRemoteFulfilled] = _react.useState.call(void 0, false); const defaultValue = { results: void 0, fetching: true, fetchingLocal: false, fetchingRemote: false, error: void 0 }; const [subscribe, snapshot] = _react.useMemo.call(void 0, () => stringifiedQuery ? _react3.createStateSubscription.call(void 0, client, query, { ...options, onRemoteFulfilled: () => setRemoteFulfilled(true) }) : [() => () => { }, () => defaultValue], [stringifiedQuery, localOnly] ); const getServerSnapshot = _react.useCallback.call(void 0, () => snapshot(), [snapshot]); const { fetching, ...rest } = _react.useSyncExternalStore.call(void 0, subscribe, snapshot, getServerSnapshot ); return { fetching: fetching && !remoteFulfilled, ...rest }; } function useConditionalQueryOne(client, query, options) { const { fetching, fetchingLocal, fetchingRemote, results, error } = useConditionalQuery( client, query ? { ...query, limit: 1 } : query, options ); const result = _react.useMemo.call(void 0, () => { return _nullishCoalesce((results == null ? void 0 : results[0]), () => ( null)); }, [results]); return { fetching, fetchingLocal, fetchingRemote, result, error }; } // src/lib/triplit/use-triplit-token.ts function useTriplitToken(triplit) { const connectionStatus = _react3.useConnectionStatus.call(void 0, triplit); const payload = _react.useMemo.call(void 0, () => triplit.token ? decodeJWT(triplit.token) : void 0, [connectionStatus] ); return { token: payload && triplit.token, payload }; } function decodeJWT(token) { try { const base64Url = token.split(".")[1]; const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); const jsonPayload = decodeURIComponent( atob(base64).split("").map((char) => { return `%${`00${char.charCodeAt(0).toString(16)}`.slice(-2)}`; }).join("") ); return JSON.parse(jsonPayload); } catch (error) { console.error("Failed to decode JWT:", error); return null; } } // src/lib/triplit/use-list-accounts.ts function useListAccounts({ triplit, modelNames, usePlural, isPending }) { const modelName = getModelName({ namespace: "account", modelNames, usePlural }); const { payload } = useTriplitToken(triplit); const { results, error, fetching } = useConditionalQuery( triplit, (payload == null ? void 0 : payload.sub) && triplit.query(modelName) ); const accounts = _react.useMemo.call(void 0, () => { return results == null ? void 0 : results.map((account) => ({ accountId: account.accountId, provider: account.providerId })); }, [results]); return { data: accounts, isPending: isPending || fetching, error }; } // src/lib/triplit/use-list-sessions.ts function useListSessions({ triplit, modelNames, usePlural, isPending }) { const modelName = getModelName({ namespace: "session", modelNames, usePlural }); const { payload } = useTriplitToken(triplit); const { results: sessions, error, fetching } = useConditionalQuery(triplit, (payload == null ? void 0 : payload.sub) && triplit.query(modelName)); return { data: sessions, isPending: isPending || fetching, error }; } // src/lib/triplit/use-session.ts function useSession({ triplit, sessionData, isPending, refetch, usePlural, modelNames }) { const modelName = getModelName({ namespace: "user", modelNames, usePlural }); const { payload } = useTriplitToken(triplit); const { result: user, error } = useConditionalQueryOne( triplit, (payload == null ? void 0 : payload.sub) && triplit.query(modelName) ); return { data: sessionData ? { session: sessionData.session, user: (sessionData == null ? void 0 : sessionData.user.id) === (user == null ? void 0 : user.id) ? user : sessionData.user } : null, error, isPending, refetch: refetch || (() => { }) }; } // src/lib/triplit/use-triplit-hooks.ts function useTriplitHooks({ triplit, usePlural = true, modelNames, sessionData, isPending }) { const hooks = _react.useMemo.call(void 0, () => { return { useSession: () => useSession({ triplit, modelNames, usePlural, sessionData, isPending }), useListAccounts: () => useListAccounts({ triplit, modelNames, usePlural, sessionData, isPending }), useListSessions: () => useListSessions({ triplit, modelNames, usePlural, sessionData, isPending }) }; }, [triplit, modelNames, usePlural, sessionData, isPending]); return { hooks }; } exports.useTriplitHooks = useTriplitHooks;