diff --git a/.changeset/six-radios-attack.md b/.changeset/six-radios-attack.md new file mode 100644 index 00000000..e0a6f913 --- /dev/null +++ b/.changeset/six-radios-attack.md @@ -0,0 +1,5 @@ +--- +'@hono/auth-js': patch +--- + +Add explicit return types diff --git a/packages/auth-js/src/client.ts b/packages/auth-js/src/client.ts index 6ece911d..6551ab1f 100644 --- a/packages/auth-js/src/client.ts +++ b/packages/auth-js/src/client.ts @@ -134,7 +134,7 @@ export async function fetchData( } } -export function useOnline() { +export function useOnline(): boolean { const [isOnline, setIsOnline] = useState( typeof navigator !== 'undefined' ? navigator.onLine : false ) @@ -157,11 +157,19 @@ export function useOnline() { return isOnline } -export function now() { +export function now(): number { return Math.floor(Date.now() / 1000) } -export function parseUrl(url?: string) { +interface ParsedUrl { + origin: string + host: string + path: string + base: string + toString: () => string +} + +export function parseUrl(url?: string): ParsedUrl { const defaultUrl = 'http://localhost:3000/api/auth' const parsedUrl = new URL(url ? (url.startsWith('http') ? url : `https://${url}`) : defaultUrl) const path = parsedUrl.pathname === '/' ? '/api/auth' : parsedUrl.pathname.replace(/\/$/, '') diff --git a/packages/auth-js/src/index.ts b/packages/auth-js/src/index.ts index 0944203c..97d2e182 100644 --- a/packages/auth-js/src/index.ts +++ b/packages/auth-js/src/index.ts @@ -31,12 +31,12 @@ export interface AuthConfig extends Omit {} export type ConfigHandler = (c: Context) => AuthConfig -export function setEnvDefaults(env: AuthEnv, config: AuthConfig) { +export function setEnvDefaults(env: AuthEnv, config: AuthConfig): void { config.secret ??= env.AUTH_SECRET coreSetEnvDefaults(env, config) } -export function reqWithEnvUrl(req: Request, authUrl?: string) { +export function reqWithEnvUrl(req: Request, authUrl?: string): Request { if (authUrl) { const reqUrlObj = new URL(req.url) const authUrlObj = new URL(authUrl) diff --git a/packages/auth-js/src/react.tsx b/packages/auth-js/src/react.tsx index 4484e4b0..62e79f7b 100644 --- a/packages/auth-js/src/react.tsx +++ b/packages/auth-js/src/react.tsx @@ -65,9 +65,11 @@ class AuthConfigManager { } } -export const authConfigManager = AuthConfigManager.getInstance() +export const authConfigManager: AuthConfigManager = AuthConfigManager.getInstance() -export const SessionContext = React.createContext(undefined) +export const SessionContext: React.Context = React.createContext< + SessionContextValue | undefined +>(undefined) function useInitializeSession(hasInitialSession: boolean, initialSession: Session | null) { const authConfig = authConfigManager.getConfig() @@ -148,7 +150,7 @@ function useRefetchInterval( }, [refetchInterval, shouldRefetch]) } -export async function getSession(params?: GetSessionParams) { +export async function getSession(params?: GetSessionParams): Promise { const { baseUrl, basePath, credentials } = authConfigManager.getConfig() const session = await fetchData( 'session', @@ -163,7 +165,7 @@ export async function getSession(params?: GetSessionParams) { return session } -export async function getCsrfToken() { +export async function getCsrfToken(): Promise { const { baseUrl, basePath, credentials } = authConfigManager.getConfig() const response = await fetchData<{ csrfToken: string }>( 'csrf', @@ -177,7 +179,7 @@ export async function getCsrfToken() { return response?.csrfToken ?? '' } -export function SessionProvider(props: SessionProviderProps) { +export function SessionProvider(props: SessionProviderProps): React.JSX.Element { if (!SessionContext) { throw new Error('React Context is unavailable in Server Components') } @@ -274,7 +276,7 @@ export function useSession( type ProvidersType = Record, ClientSafeProvider> -export async function getProviders() { +export async function getProviders(): Promise { return fetchData('providers', authConfigManager.getConfig(), logger) } @@ -395,10 +397,14 @@ interface PopupLoginOptions extends Partial> { callbackUrl?: string } +interface LoginState extends AuthState { + popUpSignin: () => Promise +} + export const useOauthPopupLogin = ( provider: Parameters[0], options: PopupLoginOptions = {} -) => { +): LoginState => { const { width = 500, height = 500, title = 'Signin', onSuccess, callbackUrl = '/' } = options const [externalWindow, setExternalWindow] = useState() diff --git a/packages/auth-js/tsconfig.build.json b/packages/auth-js/tsconfig.build.json index 44b204b9..402da835 100644 --- a/packages/auth-js/tsconfig.build.json +++ b/packages/auth-js/tsconfig.build.json @@ -1,9 +1,14 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { + "rootDir": "src", "outDir": "dist", + "tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo", + "emitDeclarationOnly": false, + "isolatedDeclarations": true, "jsx": "react" }, "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["**/*.test.ts"], "references": [] }