fixes #2151, apply secure cookie session only if using SSL (https)

This commit is contained in:
Amruth Pillai
2025-01-14 09:45:57 +01:00
parent 21af624096
commit a32def2086
122 changed files with 721 additions and 669 deletions

View File

@ -78,6 +78,7 @@
"@typescript-eslint/no-misused-promises": "off", "@typescript-eslint/no-misused-promises": "off",
"@typescript-eslint/no-unsafe-assignment": "off", "@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-member-access": "off", "@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/restrict-template-expressions": "off", "@typescript-eslint/restrict-template-expressions": "off",
"@typescript-eslint/no-redundant-type-constituents": "off", "@typescript-eslint/no-redundant-type-constituents": "off",
"@typescript-eslint/consistent-type-definitions": ["error", "type"], "@typescript-eslint/consistent-type-definitions": ["error", "type"],

View File

@ -1,8 +1,10 @@
import { SectionKey } from "@reactive-resume/schema"; import type { SectionKey } from "@reactive-resume/schema";
import { pageSizeMap, Template } from "@reactive-resume/utils"; import type { Template } from "@reactive-resume/utils";
import { pageSizeMap } from "@reactive-resume/utils";
import { AnimatePresence, motion } from "framer-motion"; import { AnimatePresence, motion } from "framer-motion";
import { useEffect, useMemo, useRef, useState } from "react"; import { useEffect, useMemo, useRef, useState } from "react";
import { ReactZoomPanPinchRef, TransformComponent, TransformWrapper } from "react-zoom-pan-pinch"; import type { ReactZoomPanPinchRef } from "react-zoom-pan-pinch";
import { TransformComponent, TransformWrapper } from "react-zoom-pan-pinch";
import { MM_TO_PX, Page } from "../components/page"; import { MM_TO_PX, Page } from "../components/page";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";

View File

@ -1,5 +1,5 @@
import { SectionKey } from "@reactive-resume/schema"; import type { SectionKey } from "@reactive-resume/schema";
import { Template } from "@reactive-resume/utils"; import type { Template } from "@reactive-resume/utils";
import { useMemo } from "react"; import { useMemo } from "react";
import { Page } from "../components/page"; import { Page } from "../components/page";

View File

@ -1,4 +1,4 @@
import { ResumeData } from "@reactive-resume/schema"; import type { ResumeData } from "@reactive-resume/schema";
import { create } from "zustand"; import { create } from "zustand";
export type ArtboardStore = { export type ArtboardStore = {

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl, linearTransform } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl, linearTransform } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import React, { Fragment } from "react"; import React, { Fragment } from "react";
@ -24,7 +22,7 @@ import React, { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, hexToRgb, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, hexToRgb, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, hexToRgb, isEmptyString, isUrl, linearTransform } from "@reactive-resume/utils"; import { cn, hexToRgb, isEmptyString, isUrl, linearTransform } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,4 +1,4 @@
import { Template } from "@reactive-resume/utils"; import type { Template } from "@reactive-resume/utils";
import { Azurill } from "./azurill"; import { Azurill } from "./azurill";
import { Bronzor } from "./bronzor"; import { Bronzor } from "./bronzor";

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Project, Project,
@ -14,8 +12,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import React, { Fragment } from "react"; import React, { Fragment } from "react";
@ -23,7 +21,7 @@ import React, { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Project, Project,
@ -14,8 +12,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, hexToRgb, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, hexToRgb, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import React, { Fragment } from "react"; import React, { Fragment } from "react";
@ -23,7 +21,7 @@ import React, { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Project, Project,
@ -14,8 +12,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import React, { Fragment } from "react"; import React, { Fragment } from "react";
@ -23,7 +21,7 @@ import React, { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,10 +1,8 @@
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,
CustomSectionGroup, CustomSectionGroup,
Education,
Experience,
Interest, Interest,
Language, Language,
Profile, Profile,
@ -15,8 +13,8 @@ import {
SectionWithItem, SectionWithItem,
Skill, Skill,
URL, URL,
Volunteer,
} from "@reactive-resume/schema"; } from "@reactive-resume/schema";
import { Education, Experience, Volunteer } from "@reactive-resume/schema";
import { cn, isEmptyString, isUrl } from "@reactive-resume/utils"; import { cn, isEmptyString, isUrl } from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { Fragment } from "react"; import { Fragment } from "react";
@ -24,7 +22,7 @@ import { Fragment } from "react";
import { BrandIcon } from "../components/brand-icon"; import { BrandIcon } from "../components/brand-icon";
import { Picture } from "../components/picture"; import { Picture } from "../components/picture";
import { useArtboardStore } from "../store/artboard"; import { useArtboardStore } from "../store/artboard";
import { TemplateProps } from "../types/template"; import type { TemplateProps } from "../types/template";
const Header = () => { const Header = () => {
const basics = useArtboardStore((state) => state.resume.basics); const basics = useArtboardStore((state) => state.resume.basics);

View File

@ -1,4 +1,4 @@
import { SectionKey } from "@reactive-resume/schema"; import type { SectionKey } from "@reactive-resume/schema";
export type TemplateProps = { export type TemplateProps = {
columns: SectionKey[][]; columns: SectionKey[][];

View File

@ -1,7 +1,8 @@
import { CloudSun, Moon, Sun } from "@phosphor-icons/react"; import { CloudSun, Moon, Sun } from "@phosphor-icons/react";
import { useTheme } from "@reactive-resume/hooks"; import { useTheme } from "@reactive-resume/hooks";
import { Button } from "@reactive-resume/ui"; import { Button } from "@reactive-resume/ui";
import { motion, Variants } from "framer-motion"; import type { Variants } from "framer-motion";
import { motion } from "framer-motion";
import { useMemo } from "react"; import { useMemo } from "react";
type Props = { type Props = {

View File

@ -1,4 +1,4 @@
import { ReactParallaxTiltProps } from "react-parallax-tilt"; import type { ReactParallaxTiltProps } from "react-parallax-tilt";
export const defaultTiltProps: ReactParallaxTiltProps = { export const defaultTiltProps: ReactParallaxTiltProps = {
scale: 1.05, scale: 1.05,

View File

@ -1,4 +1,4 @@
import { QueryKey } from "@tanstack/react-query"; import type { QueryKey } from "@tanstack/react-query";
export const USER_KEY: QueryKey = ["user"]; export const USER_KEY: QueryKey = ["user"];
export const AUTH_PROVIDERS_KEY: QueryKey = ["auth", "providers"]; export const AUTH_PROVIDERS_KEY: QueryKey = ["auth", "providers"];

View File

@ -1,5 +1,5 @@
import { createId } from "@paralleldrive/cuid2"; import { createId } from "@paralleldrive/cuid2";
import { ToastActionElement, ToastProps } from "@reactive-resume/ui"; import type { ToastActionElement, ToastProps } from "@reactive-resume/ui";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
const TOAST_LIMIT = 1; const TOAST_LIMIT = 1;

View File

@ -1,5 +1,6 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { deepSearchAndParseDates, ErrorMessage } from "@reactive-resume/utils"; import type { ErrorMessage } from "@reactive-resume/utils";
import { deepSearchAndParseDates } from "@reactive-resume/utils";
import _axios from "axios"; import _axios from "axios";
import createAuthRefreshInterceptor from "axios-auth-refresh"; import createAuthRefreshInterceptor from "axios-auth-refresh";
import { redirect } from "react-router"; import { redirect } from "react-router";

View File

@ -17,7 +17,7 @@ import { useRef } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { useNavigate } from "react-router"; import { useNavigate } from "react-router";
import { z } from "zod"; import type { z } from "zod";
import { useBackupOtp } from "@/client/services/auth"; import { useBackupOtp } from "@/client/services/auth";

View File

@ -18,7 +18,7 @@ import { useState } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { useNavigate } from "react-router"; import { useNavigate } from "react-router";
import { z } from "zod"; import type { z } from "zod";
import { useForgotPassword } from "@/client/services/auth"; import { useForgotPassword } from "@/client/services/auth";

View File

@ -21,7 +21,7 @@ import { useRef } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { Link } from "react-router"; import { Link } from "react-router";
import { z } from "zod"; import type { z } from "zod";
import { useLogin } from "@/client/services/auth"; import { useLogin } from "@/client/services/auth";
import { useFeatureFlags } from "@/client/services/feature"; import { useFeatureFlags } from "@/client/services/feature";

View File

@ -21,7 +21,7 @@ import { useRef } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { Link, useNavigate } from "react-router"; import { Link, useNavigate } from "react-router";
import { z } from "zod"; import type { z } from "zod";
import { useRegister } from "@/client/services/auth"; import { useRegister } from "@/client/services/auth";
import { useFeatureFlags } from "@/client/services/feature"; import { useFeatureFlags } from "@/client/services/feature";

View File

@ -17,7 +17,7 @@ import { useEffect, useRef } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { useNavigate, useSearchParams } from "react-router"; import { useNavigate, useSearchParams } from "react-router";
import { z } from "zod"; import type { z } from "zod";
import { useResetPassword } from "@/client/services/auth"; import { useResetPassword } from "@/client/services/auth";

View File

@ -17,7 +17,7 @@ import { useRef } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { Link, useNavigate } from "react-router"; import { Link, useNavigate } from "react-router";
import { z } from "zod"; import type { z } from "zod";
import { useVerifyOtp } from "@/client/services/auth"; import { useVerifyOtp } from "@/client/services/auth";

View File

@ -1,8 +1,9 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { useCallback, useEffect } from "react"; import { useCallback, useEffect } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { LoaderFunction, redirect } from "react-router"; import type { LoaderFunction } from "react-router";
import { redirect } from "react-router";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";
import { findResumeById } from "@/client/services/resume"; import { findResumeById } from "@/client/services/resume";

View File

@ -11,7 +11,7 @@ import {
RichInput, RichInput,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -11,7 +11,7 @@ import {
RichInput, RichInput,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -1,7 +1,8 @@
import { zodResolver } from "@hookform/resolvers/zod"; import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { X } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react";
import { CustomSection, customSectionSchema, defaultCustomSection } from "@reactive-resume/schema"; import type { CustomSection } from "@reactive-resume/schema";
import { customSectionSchema, defaultCustomSection } from "@reactive-resume/schema";
import { import {
Badge, Badge,
BadgeInput, BadgeInput,
@ -17,7 +18,7 @@ import {
import { AnimatePresence, motion } from "framer-motion"; import { AnimatePresence, motion } from "framer-motion";
import { useState } from "react"; import { useState } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";
import { useDialog } from "@/client/stores/dialog"; import { useDialog } from "@/client/stores/dialog";

View File

@ -11,7 +11,7 @@ import {
RichInput, RichInput,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -11,7 +11,7 @@ import {
RichInput, RichInput,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -16,7 +16,7 @@ import {
import { AnimatePresence, motion } from "framer-motion"; import { AnimatePresence, motion } from "framer-motion";
import { useState } from "react"; import { useState } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { SectionDialog } from "../sections/shared/section-dialog"; import { SectionDialog } from "../sections/shared/section-dialog";

View File

@ -11,7 +11,7 @@ import {
Slider, Slider,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { SectionDialog } from "../sections/shared/section-dialog"; import { SectionDialog } from "../sections/shared/section-dialog";

View File

@ -12,7 +12,7 @@ import {
Input, Input,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { BrandIcon } from "@/client/components/brand-icon"; import { BrandIcon } from "@/client/components/brand-icon";

View File

@ -17,7 +17,7 @@ import {
import { AnimatePresence, motion } from "framer-motion"; import { AnimatePresence, motion } from "framer-motion";
import { useState } from "react"; import { useState } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -11,7 +11,7 @@ import {
RichInput, RichInput,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -11,7 +11,7 @@ import {
RichInput, RichInput,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -17,7 +17,7 @@ import {
import { AnimatePresence, motion } from "framer-motion"; import { AnimatePresence, motion } from "framer-motion";
import { useState } from "react"; import { useState } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { SectionDialog } from "../sections/shared/section-dialog"; import { SectionDialog } from "../sections/shared/section-dialog";

View File

@ -11,7 +11,7 @@ import {
RichInput, RichInput,
} from "@reactive-resume/ui"; } from "@reactive-resume/ui";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { z } from "zod"; import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions"; import { AiActions } from "@/client/components/ai-actions";

View File

@ -1,6 +1,6 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { Plus, PlusCircle } from "@phosphor-icons/react"; import { Plus, PlusCircle } from "@phosphor-icons/react";
import { import type {
Award, Award,
Certification, Certification,
CustomSection, CustomSection,

View File

@ -1,7 +1,7 @@
import { t, Trans } from "@lingui/macro"; import { t, Trans } from "@lingui/macro";
import { createId } from "@paralleldrive/cuid2"; import { createId } from "@paralleldrive/cuid2";
import { DotsSixVertical, Envelope, Plus, X } from "@phosphor-icons/react"; import { DotsSixVertical, Envelope, Plus, X } from "@phosphor-icons/react";
import { CustomField as ICustomField } from "@reactive-resume/schema"; import type { CustomField as ICustomField } from "@reactive-resume/schema";
import { import {
Button, Button,
Input, Input,

View File

@ -1,13 +1,6 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { import type { AspectRatio } from "@reactive-resume/ui";
AspectRatio, import { Checkbox, Input, Label, ToggleGroup, ToggleGroupItem, Tooltip } from "@reactive-resume/ui";
Checkbox,
Input,
Label,
ToggleGroup,
ToggleGroupItem,
Tooltip,
} from "@reactive-resume/ui";
import { useMemo } from "react"; import { useMemo } from "react";
import { useResumeStore } from "@/client/stores/resume"; import { useResumeStore } from "@/client/stores/resume";

View File

@ -1,7 +1,7 @@
import type { DragEndEvent } from "@dnd-kit/core";
import { import {
closestCenter, closestCenter,
DndContext, DndContext,
DragEndEvent,
KeyboardSensor, KeyboardSensor,
PointerSensor, PointerSensor,
useSensor, useSensor,
@ -16,7 +16,7 @@ import {
} from "@dnd-kit/sortable"; } from "@dnd-kit/sortable";
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { Plus } from "@phosphor-icons/react"; import { Plus } from "@phosphor-icons/react";
import { SectionItem, SectionKey, SectionWithItem } from "@reactive-resume/schema"; import type { SectionItem, SectionKey, SectionWithItem } from "@reactive-resume/schema";
import { Button } from "@reactive-resume/ui"; import { Button } from "@reactive-resume/ui";
import { cn } from "@reactive-resume/utils"; import { cn } from "@reactive-resume/utils";
import { AnimatePresence, motion } from "framer-motion"; import { AnimatePresence, motion } from "framer-motion";

View File

@ -2,7 +2,7 @@ import { t } from "@lingui/macro";
import { createId } from "@paralleldrive/cuid2"; import { createId } from "@paralleldrive/cuid2";
import { CopySimple, PencilSimple, Plus } from "@phosphor-icons/react"; import { CopySimple, PencilSimple, Plus } from "@phosphor-icons/react";
import { VisuallyHidden } from "@radix-ui/react-visually-hidden"; import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
import { SectionItem, SectionWithItem } from "@reactive-resume/schema"; import type { SectionItem, SectionWithItem } from "@reactive-resume/schema";
import { import {
AlertDialog, AlertDialog,
AlertDialogAction, AlertDialogAction,
@ -25,9 +25,10 @@ import {
import { produce } from "immer"; import { produce } from "immer";
import get from "lodash.get"; import get from "lodash.get";
import { useEffect } from "react"; import { useEffect } from "react";
import { UseFormReturn } from "react-hook-form"; import type { UseFormReturn } from "react-hook-form";
import { DialogName, useDialog } from "@/client/stores/dialog"; import type { DialogName } from "@/client/stores/dialog";
import { useDialog } from "@/client/stores/dialog";
import { useResumeStore } from "@/client/stores/resume"; import { useResumeStore } from "@/client/stores/resume";
type Props<T extends SectionItem> = { type Props<T extends SectionItem> = {

View File

@ -1,3 +1,4 @@
import type { IconProps } from "@phosphor-icons/react";
import { import {
Article, Article,
Books, Books,
@ -7,7 +8,6 @@ import {
GameController, GameController,
GraduationCap, GraduationCap,
HandHeart, HandHeart,
IconProps,
Medal, Medal,
PuzzlePiece, PuzzlePiece,
ShareNetwork, ShareNetwork,
@ -15,8 +15,10 @@ import {
User, User,
Users, Users,
} from "@phosphor-icons/react"; } from "@phosphor-icons/react";
import { defaultSection, SectionKey, SectionWithItem } from "@reactive-resume/schema"; import type { SectionKey, SectionWithItem } from "@reactive-resume/schema";
import { Button, ButtonProps, Tooltip } from "@reactive-resume/ui"; import { defaultSection } from "@reactive-resume/schema";
import type { ButtonProps } from "@reactive-resume/ui";
import { Button, Tooltip } from "@reactive-resume/ui";
import get from "lodash.get"; import get from "lodash.get";
import { useResumeStore } from "@/client/stores/resume"; import { useResumeStore } from "@/client/stores/resume";

View File

@ -10,7 +10,8 @@ import {
Plus, Plus,
TrashSimple, TrashSimple,
} from "@phosphor-icons/react"; } from "@phosphor-icons/react";
import { defaultSections, SectionKey, SectionWithItem } from "@reactive-resume/schema"; import type { SectionKey, SectionWithItem } from "@reactive-resume/schema";
import { defaultSections } from "@reactive-resume/schema";
import { import {
Button, Button,
DropdownMenu, DropdownMenu,

View File

@ -1,6 +1,7 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { Tag } from "@phosphor-icons/react"; import { Tag } from "@phosphor-icons/react";
import { URL, urlSchema } from "@reactive-resume/schema"; import type { URL } from "@reactive-resume/schema";
import { urlSchema } from "@reactive-resume/schema";
import { import {
Button, Button,
Input, Input,

View File

@ -1,10 +1,8 @@
import type { DragEndEvent, DragOverEvent, DragStartEvent } from "@dnd-kit/core";
import { import {
closestCenter, closestCenter,
DndContext, DndContext,
DragEndEvent,
DragOverEvent,
DragOverlay, DragOverlay,
DragStartEvent,
KeyboardSensor, KeyboardSensor,
PointerSensor, PointerSensor,
useDroppable, useDroppable,
@ -22,13 +20,8 @@ import { t } from "@lingui/macro";
import { ArrowCounterClockwise, DotsSixVertical, Plus, TrashSimple } from "@phosphor-icons/react"; import { ArrowCounterClockwise, DotsSixVertical, Plus, TrashSimple } from "@phosphor-icons/react";
import { defaultMetadata } from "@reactive-resume/schema"; import { defaultMetadata } from "@reactive-resume/schema";
import { Button, Portal, Tooltip } from "@reactive-resume/ui"; import { Button, Portal, Tooltip } from "@reactive-resume/ui";
import { import type { LayoutLocator, SortablePayload } from "@reactive-resume/utils";
cn, import { cn, moveItemInLayout, parseLayoutLocator } from "@reactive-resume/utils";
LayoutLocator,
moveItemInLayout,
parseLayoutLocator,
SortablePayload,
} from "@reactive-resume/utils";
import get from "lodash.get"; import get from "lodash.get";
import { useState } from "react"; import { useState } from "react";

View File

@ -1,7 +1,8 @@
/* eslint-disable lingui/no-unlocalized-strings */ /* eslint-disable lingui/no-unlocalized-strings */
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { Button, Combobox, ComboboxOption, Label, Slider, Switch } from "@reactive-resume/ui"; import type { ComboboxOption } from "@reactive-resume/ui";
import { Button, Combobox, Label, Slider, Switch } from "@reactive-resume/ui";
import { cn, fonts } from "@reactive-resume/utils"; import { cn, fonts } from "@reactive-resume/utils";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import webfontloader from "webfontloader"; import webfontloader from "webfontloader";

View File

@ -1,8 +1,8 @@
import type { IconProps } from "@phosphor-icons/react";
import { import {
Code, Code,
DiamondsFour, DiamondsFour,
DownloadSimple, DownloadSimple,
IconProps,
Info, Info,
Layout, Layout,
Note, Note,
@ -13,7 +13,8 @@ import {
Translate, Translate,
TrendUp, TrendUp,
} from "@phosphor-icons/react"; } from "@phosphor-icons/react";
import { Button, ButtonProps, Tooltip } from "@reactive-resume/ui"; import type { ButtonProps } from "@reactive-resume/ui";
import { Button, Tooltip } from "@reactive-resume/ui";
export type MetadataKey = export type MetadataKey =
| "template" | "template"

View File

@ -1,16 +1,14 @@
import { zodResolver } from "@hookform/resolvers/zod"; import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { Check, DownloadSimple } from "@phosphor-icons/react"; import { Check, DownloadSimple } from "@phosphor-icons/react";
import type { JsonResume, LinkedIn, ReactiveResumeV3 } from "@reactive-resume/parser";
import { import {
JsonResume,
JsonResumeParser, JsonResumeParser,
LinkedIn,
LinkedInParser, LinkedInParser,
ReactiveResumeParser, ReactiveResumeParser,
ReactiveResumeV3,
ReactiveResumeV3Parser, ReactiveResumeV3Parser,
} from "@reactive-resume/parser"; } from "@reactive-resume/parser";
import { ResumeData } from "@reactive-resume/schema"; import type { ResumeData } from "@reactive-resume/schema";
import { import {
Button, Button,
Dialog, Dialog,

View File

@ -1,5 +1,5 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { import {
AlertDialog, AlertDialog,
AlertDialogAction, AlertDialogAction,

View File

@ -1,7 +1,8 @@
import { zodResolver } from "@hookform/resolvers/zod"; import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { CaretDown, Flask, MagicWand, Plus } from "@phosphor-icons/react"; import { CaretDown, Flask, MagicWand, Plus } from "@phosphor-icons/react";
import { createResumeSchema, ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { createResumeSchema } from "@reactive-resume/dto";
import { idSchema, sampleResume } from "@reactive-resume/schema"; import { idSchema, sampleResume } from "@reactive-resume/schema";
import { import {
AlertDialog, AlertDialog,

View File

@ -7,7 +7,7 @@ import {
PencilSimple, PencilSimple,
TrashSimple, TrashSimple,
} from "@phosphor-icons/react"; } from "@phosphor-icons/react";
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { import {
DropdownMenu, DropdownMenu,
DropdownMenuContent, DropdownMenuContent,

View File

@ -1,6 +1,6 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { Plus } from "@phosphor-icons/react"; import { Plus } from "@phosphor-icons/react";
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { KeyboardShortcut } from "@reactive-resume/ui"; import { KeyboardShortcut } from "@reactive-resume/ui";
import { useDialog } from "@/client/stores/dialog"; import { useDialog } from "@/client/stores/dialog";

View File

@ -8,7 +8,7 @@ import {
PencilSimple, PencilSimple,
TrashSimple, TrashSimple,
} from "@phosphor-icons/react"; } from "@phosphor-icons/react";
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { import {
Button, Button,
ContextMenu, ContextMenu,

View File

@ -1,7 +1,8 @@
import { zodResolver } from "@hookform/resolvers/zod"; import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { Check, UploadSimple, Warning } from "@phosphor-icons/react"; import { Check, UploadSimple, Warning } from "@phosphor-icons/react";
import { UpdateUserDto, updateUserSchema } from "@reactive-resume/dto"; import type { UpdateUserDto } from "@reactive-resume/dto";
import { updateUserSchema } from "@reactive-resume/dto";
import { import {
Button, Button,
buttonVariants, buttonVariants,

View File

@ -1,11 +1,12 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { CircleNotch, FilePdf } from "@phosphor-icons/react"; import { CircleNotch, FilePdf } from "@phosphor-icons/react";
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { Button } from "@reactive-resume/ui"; import { Button } from "@reactive-resume/ui";
import { pageSizeMap } from "@reactive-resume/utils"; import { pageSizeMap } from "@reactive-resume/utils";
import { useCallback, useEffect, useRef } from "react"; import { useCallback, useEffect, useRef } from "react";
import { Helmet } from "react-helmet-async"; import { Helmet } from "react-helmet-async";
import { Link, LoaderFunction, redirect, useLoaderData } from "react-router"; import type { LoaderFunction } from "react-router";
import { Link, redirect, useLoaderData } from "react-router";
import { Icon } from "@/client/components/icon"; import { Icon } from "@/client/components/icon";
import { ThemeSwitch } from "@/client/components/theme-switch"; import { ThemeSwitch } from "@/client/components/theme-switch";

View File

@ -1,5 +1,7 @@
import { authResponseSchema, UserDto } from "@reactive-resume/dto"; import type { UserDto } from "@reactive-resume/dto";
import { LoaderFunction, redirect } from "react-router"; import { authResponseSchema } from "@reactive-resume/dto";
import type { LoaderFunction } from "react-router";
import { redirect } from "react-router";
import { USER_KEY } from "@/client/constants/query-keys"; import { USER_KEY } from "@/client/constants/query-keys";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { MessageDto } from "@reactive-resume/dto"; import type { MessageDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { MessageDto } from "@reactive-resume/dto"; import type { MessageDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { AuthResponseDto, LoginDto } from "@reactive-resume/dto"; import type { AuthResponseDto, LoginDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { useNavigate } from "react-router"; import { useNavigate } from "react-router";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { ForgotPasswordDto } from "@reactive-resume/dto"; import type { ForgotPasswordDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { ResetPasswordDto } from "@reactive-resume/dto"; import type { ResetPasswordDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,4 +1,4 @@
import { AuthProvidersDto } from "@reactive-resume/dto"; import type { AuthProvidersDto } from "@reactive-resume/dto";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { AUTH_PROVIDERS_KEY } from "@/client/constants/query-keys"; import { AUTH_PROVIDERS_KEY } from "@/client/constants/query-keys";

View File

@ -1,5 +1,5 @@
import { MessageDto } from "@reactive-resume/dto"; import type { MessageDto } from "@reactive-resume/dto";
import { AxiosInstance, AxiosResponse } from "axios"; import type { AxiosInstance, AxiosResponse } from "axios";
export const refreshToken = async (axios: AxiosInstance) => { export const refreshToken = async (axios: AxiosInstance) => {
const response = await axios.post<MessageDto, AxiosResponse<MessageDto>>("/auth/refresh"); const response = await axios.post<MessageDto, AxiosResponse<MessageDto>>("/auth/refresh");

View File

@ -1,6 +1,6 @@
import { AuthResponseDto, RegisterDto } from "@reactive-resume/dto"; import type { AuthResponseDto, RegisterDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { AuthResponseDto, TwoFactorBackupDto } from "@reactive-resume/dto"; import type { AuthResponseDto, TwoFactorBackupDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { MessageDto } from "@reactive-resume/dto"; import type { MessageDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { BackupCodesDto, TwoFactorDto } from "@reactive-resume/dto"; import type { BackupCodesDto, TwoFactorDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { MessageDto } from "@reactive-resume/dto"; import type { MessageDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { AuthResponseDto, TwoFactorDto } from "@reactive-resume/dto"; import type { AuthResponseDto, TwoFactorDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { MessageDto, UpdatePasswordDto } from "@reactive-resume/dto"; import type { MessageDto, UpdatePasswordDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,4 +1,4 @@
import { FeatureDto } from "@reactive-resume/dto"; import type { FeatureDto } from "@reactive-resume/dto";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,4 +1,4 @@
import { ContributorDto } from "@reactive-resume/dto"; import type { ContributorDto } from "@reactive-resume/dto";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { CreateResumeDto, ResumeDto } from "@reactive-resume/dto"; import type { CreateResumeDto, ResumeDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { DeleteResumeDto, ResumeDto } from "@reactive-resume/dto"; import type { DeleteResumeDto, ResumeDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { ImportResumeDto, ResumeDto } from "@reactive-resume/dto"; import type { ImportResumeDto, ResumeDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,4 +1,4 @@
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,4 +1,4 @@
import { UrlDto } from "@reactive-resume/dto"; import type { UrlDto } from "@reactive-resume/dto";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { RESUME_PREVIEW_KEY } from "@/client/constants/query-keys"; import { RESUME_PREVIEW_KEY } from "@/client/constants/query-keys";

View File

@ -1,5 +1,5 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { UrlDto } from "@reactive-resume/dto"; import type { UrlDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { toast } from "@/client/hooks/use-toast"; import { toast } from "@/client/hooks/use-toast";

View File

@ -1,4 +1,4 @@
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { RESUMES_KEY } from "@/client/constants/query-keys"; import { RESUMES_KEY } from "@/client/constants/query-keys";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,4 +1,4 @@
import { StatisticsDto } from "@reactive-resume/dto"; import type { StatisticsDto } from "@reactive-resume/dto";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { RESUME_KEY } from "@/client/constants/query-keys"; import { RESUME_KEY } from "@/client/constants/query-keys";

View File

@ -1,4 +1,4 @@
import { Language } from "@reactive-resume/utils"; import type { Language } from "@reactive-resume/utils";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { LANGUAGES_KEY } from "@/client/constants/query-keys"; import { LANGUAGES_KEY } from "@/client/constants/query-keys";

View File

@ -1,6 +1,6 @@
import { ResumeDto, UpdateResumeDto } from "@reactive-resume/dto"; import type { ResumeDto, UpdateResumeDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import debounce from "lodash.debounce"; import debounce from "lodash.debounce";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,5 +1,5 @@
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,6 +1,6 @@
import { MessageDto } from "@reactive-resume/dto"; import type { MessageDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { UpdateUserDto, UserDto } from "@reactive-resume/dto"; import type { UpdateUserDto, UserDto } from "@reactive-resume/dto";
import { useMutation } from "@tanstack/react-query"; import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";
import { queryClient } from "@/client/libs/query-client"; import { queryClient } from "@/client/libs/query-client";

View File

@ -1,6 +1,6 @@
import { UserDto } from "@reactive-resume/dto"; import type { UserDto } from "@reactive-resume/dto";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { useEffect } from "react"; import { useEffect } from "react";
import { axios } from "@/client/libs/axios"; import { axios } from "@/client/libs/axios";

View File

@ -1,4 +1,4 @@
import { UserDto } from "@reactive-resume/dto"; import type { UserDto } from "@reactive-resume/dto";
import { create } from "zustand"; import { create } from "zustand";
import { persist } from "zustand/middleware"; import { persist } from "zustand/middleware";

View File

@ -1,4 +1,4 @@
import { SectionKey } from "@reactive-resume/schema"; import type { SectionKey } from "@reactive-resume/schema";
import { create } from "zustand"; import { create } from "zustand";
export type DialogName = "resume" | "lock" | "import" | "two-factor" | SectionKey; export type DialogName = "resume" | "lock" | "import" | "two-factor" | SectionKey;

View File

@ -1,10 +1,12 @@
import { t } from "@lingui/macro"; import { t } from "@lingui/macro";
import { createId } from "@paralleldrive/cuid2"; import { createId } from "@paralleldrive/cuid2";
import { ResumeDto } from "@reactive-resume/dto"; import type { ResumeDto } from "@reactive-resume/dto";
import { CustomSectionGroup, defaultSection, SectionKey } from "@reactive-resume/schema"; import type { CustomSectionGroup, SectionKey } from "@reactive-resume/schema";
import { defaultSection } from "@reactive-resume/schema";
import { removeItemInLayout } from "@reactive-resume/utils"; import { removeItemInLayout } from "@reactive-resume/utils";
import _set from "lodash.set"; import _set from "lodash.set";
import { temporal, TemporalState } from "zundo"; import type { TemporalState } from "zundo";
import { temporal } from "zundo";
import { create } from "zustand"; import { create } from "zustand";
import { devtools } from "zustand/middleware"; import { devtools } from "zustand/middleware";
import { immer } from "zustand/middleware/immer"; import { immer } from "zustand/middleware/immer";

View File

@ -1,4 +1,4 @@
import { CookieOptions } from "express"; import type { CookieOptions } from "express";
export const getCookieOptions = (grantType: "access" | "refresh"): CookieOptions => { export const getCookieOptions = (grantType: "access" | "refresh"): CookieOptions => {
// Options For Access Token // Options For Access Token

View File

@ -1,7 +1,7 @@
import { Logger } from "@nestjs/common"; import { Logger } from "@nestjs/common";
import { ConfigService } from "@nestjs/config"; import { ConfigService } from "@nestjs/config";
import { NestFactory } from "@nestjs/core"; import { NestFactory } from "@nestjs/core";
import { NestExpressApplication } from "@nestjs/platform-express"; import type { NestExpressApplication } from "@nestjs/platform-express";
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger"; import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
import cookieParser from "cookie-parser"; import cookieParser from "cookie-parser";
import session from "express-session"; import session from "express-session";
@ -9,7 +9,7 @@ import helmet from "helmet";
import { patchNestJsSwagger } from "nestjs-zod"; import { patchNestJsSwagger } from "nestjs-zod";
import { AppModule } from "./app.module"; import { AppModule } from "./app.module";
import { Config } from "./config/schema"; import type { Config } from "./config/schema";
patchNestJsSwagger(); patchNestJsSwagger();
@ -17,8 +17,13 @@ async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule, { const app = await NestFactory.create<NestExpressApplication>(AppModule, {
logger: process.env.NODE_ENV === "development" ? ["debug"] : ["error", "warn", "log"], logger: process.env.NODE_ENV === "development" ? ["debug"] : ["error", "warn", "log"],
}); });
const configService = app.get(ConfigService<Config>); const configService = app.get(ConfigService<Config>);
const accessTokenSecret = configService.getOrThrow("ACCESS_TOKEN_SECRET");
const publicUrl = configService.getOrThrow("PUBLIC_URL");
const isHTTPS = publicUrl.startsWith("https://") ?? false;
// Cookie Parser // Cookie Parser
app.use(cookieParser()); app.use(cookieParser());
@ -27,21 +32,16 @@ async function bootstrap() {
session({ session({
resave: false, resave: false,
saveUninitialized: false, saveUninitialized: false,
secret: configService.getOrThrow("ACCESS_TOKEN_SECRET"), secret: accessTokenSecret,
cookie: { httpOnly: true, secure: process.env.NODE_ENV === "production" }, cookie: { httpOnly: true, secure: isHTTPS },
}), }),
); );
// CORS // CORS
app.enableCors({ app.enableCors({ credentials: true, origin: isHTTPS });
credentials: true,
origin: process.env.NODE_ENV === "production",
});
// Helmet - enabled only in production // Helmet - enabled only in production
if (process.env.NODE_ENV === "production") { if (isHTTPS) app.use(helmet({ contentSecurityPolicy: false }));
app.use(helmet({ contentSecurityPolicy: false }));
}
// Global Prefix // Global Prefix
const globalPrefix = "api"; const globalPrefix = "api";

View File

@ -1,5 +1,6 @@
import { createParamDecorator, ExecutionContext } from "@nestjs/common"; import type { ExecutionContext } from "@nestjs/common";
import { ResumeDto } from "@reactive-resume/dto"; import { createParamDecorator } from "@nestjs/common";
import type { ResumeDto } from "@reactive-resume/dto";
export const Resume = createParamDecorator( export const Resume = createParamDecorator(
(data: keyof ResumeDto | undefined, ctx: ExecutionContext) => { (data: keyof ResumeDto | undefined, ctx: ExecutionContext) => {

Some files were not shown because too many files have changed in this diff Show More