mirror of
https://github.com/SrIzan10/next-auth.git
synced 2026-05-01 10:55:20 +00:00
* refactor(ts): export `AdapterAccount` from `next-auth/adapters` * chore: run linter, remove prisma warning * fix(ts): match TS with implementation closer * remove unused import * rename error * add missing dev dependency * fix type * fix type * fix more types and tests * remove unused `id` * skip upstash tests in CI * revert some changes * fix type * revert some change * revert some change * revert some change * revert some changes * update lock file * revert line change * revert some change * improve adapter & oauth typing * fix test, revert * apply review suggestion * Add test for new rejection logics * Update assert.test.ts * fix: Hubspot config * restore some ts-expect-error * fix: tests in mirko-orm * fix: remove redundant id: string * fix: use ts-expect-errors * fix: simplify provider type * fix: normalize user options * restore ts-expect-errors Co-authored-by: Thang Vu <hi@thvu.dev>
69 lines
1.7 KiB
TypeScript
69 lines
1.7 KiB
TypeScript
import { createHash } from "crypto"
|
|
import { NextAuthHandler } from "../src/core"
|
|
import type { LoggerInstance, NextAuthOptions } from "../src"
|
|
import type { Adapter } from "../src/adapters"
|
|
|
|
export const mockLogger: () => LoggerInstance = () => ({
|
|
error: jest.fn(() => {}),
|
|
warn: jest.fn(() => {}),
|
|
debug: jest.fn(() => {}),
|
|
})
|
|
|
|
interface HandlerOptions {
|
|
prod?: boolean
|
|
path?: string
|
|
params?: URLSearchParams | Record<string, string>
|
|
requestInit?: RequestInit
|
|
}
|
|
|
|
export async function handler(
|
|
options: NextAuthOptions,
|
|
{ prod, path, params, requestInit }: HandlerOptions
|
|
) {
|
|
// @ts-expect-error
|
|
if (prod) process.env.NODE_ENV = "production"
|
|
|
|
const url = new URL(
|
|
`http://localhost/api/auth/${path ?? "signin"}?${new URLSearchParams(
|
|
params ?? {}
|
|
)}`
|
|
)
|
|
const req = new Request(url, { headers: { host: "" }, ...requestInit })
|
|
const logger = mockLogger()
|
|
const response = await NextAuthHandler({
|
|
req,
|
|
options: { secret: "secret", ...options, logger },
|
|
})
|
|
// @ts-expect-error
|
|
if (prod) process.env.NODE_ENV = "test"
|
|
|
|
return {
|
|
res: {
|
|
...response,
|
|
html:
|
|
response.headers?.[0].value === "text/html" ? response.body : undefined,
|
|
},
|
|
log: logger,
|
|
}
|
|
}
|
|
|
|
export function createCSRF() {
|
|
const secret = "secret"
|
|
const value = "csrf"
|
|
const token = createHash("sha256").update(`${value}${secret}`).digest("hex")
|
|
|
|
return {
|
|
secret,
|
|
csrf: { value, token, cookie: `next-auth.csrf-token=${value}|${token}` },
|
|
}
|
|
}
|
|
|
|
export function mockAdapter(): Adapter {
|
|
const adapter: Adapter = {
|
|
createVerificationToken: jest.fn(() => {}),
|
|
useVerificationToken: jest.fn(() => {}),
|
|
getUserByEmail: jest.fn(() => {}),
|
|
}
|
|
return adapter
|
|
}
|