feat(db): mesh data model — meshes, members, invites, audit log

- pgSchema "mesh" with 4 tables isolating the peer mesh domain
- Enums: visibility, transport, tier, role
- audit_log is metadata-only (E2E encryption enforced at broker/client)
- Cascade on mesh delete, soft-delete via archivedAt/revokedAt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-04-04 21:19:32 +01:00
commit d3163a5bff
1384 changed files with 314925 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
import { getTranslation } from "@turbostarter/i18n/server";
import { getMetadata } from "~/lib/metadata";
import { ForgotPasswordForm } from "~/modules/auth/form/password/forgot";
import { AuthHeader } from "~/modules/auth/layout/header";
export const generateMetadata = getMetadata({
title: "auth:account.password.forgot.title",
});
const ForgotPassword = async () => {
const { t } = await getTranslation({ ns: "auth" });
return (
<>
<AuthHeader
title={t("account.password.forgot.header.title")}
description={t("account.password.forgot.header.description")}
/>
<ForgotPasswordForm />
</>
);
};
export default ForgotPassword;

View File

@@ -0,0 +1,32 @@
import { getTranslation } from "@turbostarter/i18n/server";
import { getMetadata } from "~/lib/metadata";
import { UpdatePasswordForm } from "~/modules/auth/form/password/update";
import { AuthHeader } from "~/modules/auth/layout/header";
export const generateMetadata = getMetadata({
title: "auth:account.password.update.title",
});
interface UpdatePasswordPageProps {
readonly searchParams: Promise<{
readonly token?: string;
}>;
}
const UpdatePassword = async ({ searchParams }: UpdatePasswordPageProps) => {
const token = (await searchParams).token;
const { t } = await getTranslation({ ns: "auth" });
return (
<>
<AuthHeader
title={t("account.password.update.header.title")}
description={t("account.password.update.header.description")}
/>
<UpdatePasswordForm token={token} />
</>
);
};
export default UpdatePassword;