refactor(auth-js): enable isolated declarations (#1210)
parent
d4cc24f754
commit
0758fd0af1
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@hono/auth-js': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Add explicit return types
|
|
@ -134,7 +134,7 @@ export async function fetchData<T = any>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useOnline() {
|
export function useOnline(): boolean {
|
||||||
const [isOnline, setIsOnline] = useState(
|
const [isOnline, setIsOnline] = useState(
|
||||||
typeof navigator !== 'undefined' ? navigator.onLine : false
|
typeof navigator !== 'undefined' ? navigator.onLine : false
|
||||||
)
|
)
|
||||||
|
@ -157,11 +157,19 @@ export function useOnline() {
|
||||||
return isOnline
|
return isOnline
|
||||||
}
|
}
|
||||||
|
|
||||||
export function now() {
|
export function now(): number {
|
||||||
return Math.floor(Date.now() / 1000)
|
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 defaultUrl = 'http://localhost:3000/api/auth'
|
||||||
const parsedUrl = new URL(url ? (url.startsWith('http') ? url : `https://${url}`) : defaultUrl)
|
const parsedUrl = new URL(url ? (url.startsWith('http') ? url : `https://${url}`) : defaultUrl)
|
||||||
const path = parsedUrl.pathname === '/' ? '/api/auth' : parsedUrl.pathname.replace(/\/$/, '')
|
const path = parsedUrl.pathname === '/' ? '/api/auth' : parsedUrl.pathname.replace(/\/$/, '')
|
||||||
|
|
|
@ -31,12 +31,12 @@ export interface AuthConfig extends Omit<AuthConfigCore, 'raw'> {}
|
||||||
|
|
||||||
export type ConfigHandler = (c: Context) => AuthConfig
|
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
|
config.secret ??= env.AUTH_SECRET
|
||||||
coreSetEnvDefaults(env, config)
|
coreSetEnvDefaults(env, config)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function reqWithEnvUrl(req: Request, authUrl?: string) {
|
export function reqWithEnvUrl(req: Request, authUrl?: string): Request {
|
||||||
if (authUrl) {
|
if (authUrl) {
|
||||||
const reqUrlObj = new URL(req.url)
|
const reqUrlObj = new URL(req.url)
|
||||||
const authUrlObj = new URL(authUrl)
|
const authUrlObj = new URL(authUrl)
|
||||||
|
|
|
@ -65,9 +65,11 @@ class AuthConfigManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const authConfigManager = AuthConfigManager.getInstance()
|
export const authConfigManager: AuthConfigManager = AuthConfigManager.getInstance()
|
||||||
|
|
||||||
export const SessionContext = React.createContext<SessionContextValue | undefined>(undefined)
|
export const SessionContext: React.Context<SessionContextValue | undefined> = React.createContext<
|
||||||
|
SessionContextValue | undefined
|
||||||
|
>(undefined)
|
||||||
|
|
||||||
function useInitializeSession(hasInitialSession: boolean, initialSession: Session | null) {
|
function useInitializeSession(hasInitialSession: boolean, initialSession: Session | null) {
|
||||||
const authConfig = authConfigManager.getConfig()
|
const authConfig = authConfigManager.getConfig()
|
||||||
|
@ -148,7 +150,7 @@ function useRefetchInterval(
|
||||||
}, [refetchInterval, shouldRefetch])
|
}, [refetchInterval, shouldRefetch])
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getSession(params?: GetSessionParams) {
|
export async function getSession(params?: GetSessionParams): Promise<Session | null> {
|
||||||
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
||||||
const session = await fetchData<Session>(
|
const session = await fetchData<Session>(
|
||||||
'session',
|
'session',
|
||||||
|
@ -163,7 +165,7 @@ export async function getSession(params?: GetSessionParams) {
|
||||||
return session
|
return session
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getCsrfToken() {
|
export async function getCsrfToken(): Promise<string> {
|
||||||
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
||||||
const response = await fetchData<{ csrfToken: string }>(
|
const response = await fetchData<{ csrfToken: string }>(
|
||||||
'csrf',
|
'csrf',
|
||||||
|
@ -177,7 +179,7 @@ export async function getCsrfToken() {
|
||||||
return response?.csrfToken ?? ''
|
return response?.csrfToken ?? ''
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SessionProvider(props: SessionProviderProps) {
|
export function SessionProvider(props: SessionProviderProps): React.JSX.Element {
|
||||||
if (!SessionContext) {
|
if (!SessionContext) {
|
||||||
throw new Error('React Context is unavailable in Server Components')
|
throw new Error('React Context is unavailable in Server Components')
|
||||||
}
|
}
|
||||||
|
@ -274,7 +276,7 @@ export function useSession<R extends boolean>(
|
||||||
|
|
||||||
type ProvidersType = Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>
|
type ProvidersType = Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>
|
||||||
|
|
||||||
export async function getProviders() {
|
export async function getProviders(): Promise<ProvidersType | null> {
|
||||||
return fetchData<ProvidersType>('providers', authConfigManager.getConfig(), logger)
|
return fetchData<ProvidersType>('providers', authConfigManager.getConfig(), logger)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,10 +397,14 @@ interface PopupLoginOptions extends Partial<Omit<WindowProps, 'url'>> {
|
||||||
callbackUrl?: string
|
callbackUrl?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface LoginState extends AuthState {
|
||||||
|
popUpSignin: () => Promise<void>
|
||||||
|
}
|
||||||
|
|
||||||
export const useOauthPopupLogin = (
|
export const useOauthPopupLogin = (
|
||||||
provider: Parameters<typeof signIn>[0],
|
provider: Parameters<typeof signIn>[0],
|
||||||
options: PopupLoginOptions = {}
|
options: PopupLoginOptions = {}
|
||||||
) => {
|
): LoginState => {
|
||||||
const { width = 500, height = 500, title = 'Signin', onSuccess, callbackUrl = '/' } = options
|
const { width = 500, height = 500, title = 'Signin', onSuccess, callbackUrl = '/' } = options
|
||||||
|
|
||||||
const [externalWindow, setExternalWindow] = useState<Window | null>()
|
const [externalWindow, setExternalWindow] = useState<Window | null>()
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.base.json",
|
"extends": "../../tsconfig.base.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
|
"rootDir": "src",
|
||||||
"outDir": "dist",
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": false,
|
||||||
|
"isolatedDeclarations": true,
|
||||||
"jsx": "react"
|
"jsx": "react"
|
||||||
},
|
},
|
||||||
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
"references": []
|
"references": []
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue