mirror of
https://github.com/hanzoai/sign.git
synced 2026-10-30 14:57:59 +00:00
The product is branded Hanzo eSign (esign.hanzo.ai, repo hanzoai/esign). Rename all workspace packages @hanzo/sign-* → @hanzo/esign-* (1052 files) and align docker/Dockerfile turbo --scope/--filter to the actual remix package name @hanzo/esign (was a pre-existing mismatch with -remix that broke the build). Protected deps (@hanzo/insights, @hanzo/logo) untouched.
73 lines
1.6 KiB
TypeScript
73 lines
1.6 KiB
TypeScript
import type { Page } from '@playwright/test';
|
|
|
|
import { NEXT_PUBLIC_WEBAPP_URL } from '@hanzo/esign-lib/constants/app';
|
|
|
|
type LoginOptions = {
|
|
page: Page;
|
|
email?: string;
|
|
password?: string;
|
|
|
|
/**
|
|
* Where to navigate after login.
|
|
*/
|
|
redirectPath?: string;
|
|
};
|
|
|
|
export const apiSignin = async ({
|
|
page,
|
|
email = '[email protected]',
|
|
password = 'password',
|
|
redirectPath = '/',
|
|
}: LoginOptions) => {
|
|
const { request } = page.context();
|
|
|
|
const csrfToken = await getCsrfToken(page);
|
|
|
|
await request.post(`${NEXT_PUBLIC_WEBAPP_URL()}/api/auth/email-password/authorize`, {
|
|
data: {
|
|
email,
|
|
password,
|
|
csrfToken,
|
|
},
|
|
});
|
|
|
|
await page.goto(`${NEXT_PUBLIC_WEBAPP_URL()}${redirectPath}`);
|
|
await page.waitForTimeout(500);
|
|
};
|
|
|
|
export const apiSignout = async ({ page }: { page: Page }) => {
|
|
const { request } = page.context();
|
|
|
|
await request.post(`${NEXT_PUBLIC_WEBAPP_URL()}/api/auth/signout`);
|
|
|
|
await page.goto(`${NEXT_PUBLIC_WEBAPP_URL()}/signin`);
|
|
};
|
|
|
|
const getCsrfToken = async (page: Page) => {
|
|
const { request } = page.context();
|
|
|
|
const response = await request.fetch(`${NEXT_PUBLIC_WEBAPP_URL()}/api/auth/csrf`, {
|
|
method: 'get',
|
|
});
|
|
|
|
const { csrfToken } = await response.json();
|
|
|
|
if (!csrfToken) {
|
|
throw new Error('Invalid session');
|
|
}
|
|
|
|
return csrfToken;
|
|
};
|
|
|
|
export const checkSessionValid = async (page: Page): Promise<boolean> => {
|
|
const { request } = page.context();
|
|
|
|
const response = await request.fetch(`${NEXT_PUBLIC_WEBAPP_URL()}/api/auth/session`, {
|
|
method: 'get',
|
|
});
|
|
|
|
const session = await response.json();
|
|
|
|
return session.isAuthenticated === true;
|
|
};
|