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-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/restrict-template-expressions": "off",
"@typescript-eslint/no-redundant-type-constituents": "off",
"@typescript-eslint/consistent-type-definitions": ["error", "type"],

View File

@ -1,8 +1,10 @@
import { SectionKey } from "@reactive-resume/schema";
import { pageSizeMap, Template } from "@reactive-resume/utils";
import type { SectionKey } from "@reactive-resume/schema";
import type { Template } from "@reactive-resume/utils";
import { pageSizeMap } from "@reactive-resume/utils";
import { AnimatePresence, motion } from "framer-motion";
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 { useArtboardStore } from "../store/artboard";

View File

@ -1,5 +1,5 @@
import { SectionKey } from "@reactive-resume/schema";
import { Template } from "@reactive-resume/utils";
import type { SectionKey } from "@reactive-resume/schema";
import type { Template } from "@reactive-resume/utils";
import { useMemo } from "react";
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";
export type ArtboardStore = {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,8 @@
import { CloudSun, Moon, Sun } from "@phosphor-icons/react";
import { useTheme } from "@reactive-resume/hooks";
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";
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 = {
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 AUTH_PROVIDERS_KEY: QueryKey = ["auth", "providers"];

View File

@ -1,5 +1,5 @@
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";
const TOAST_LIMIT = 1;

View File

@ -1,5 +1,6 @@
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 createAuthRefreshInterceptor from "axios-auth-refresh";
import { redirect } from "react-router";

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,9 @@
import { t } from "@lingui/macro";
import { ResumeDto } from "@reactive-resume/dto";
import type { ResumeDto } from "@reactive-resume/dto";
import { useCallback, useEffect } from "react";
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 { findResumeById } from "@/client/services/resume";

View File

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

View File

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

View File

@ -1,7 +1,8 @@
import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/macro";
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 {
Badge,
BadgeInput,
@ -17,7 +18,7 @@ import {
import { AnimatePresence, motion } from "framer-motion";
import { useState } from "react";
import { useForm } from "react-hook-form";
import { z } from "zod";
import type { z } from "zod";
import { AiActions } from "@/client/components/ai-actions";
import { useDialog } from "@/client/stores/dialog";

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
import { t, Trans } from "@lingui/macro";
import { createId } from "@paralleldrive/cuid2";
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 {
Button,
Input,

View File

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

View File

@ -1,7 +1,7 @@
import type { DragEndEvent } from "@dnd-kit/core";
import {
closestCenter,
DndContext,
DragEndEvent,
KeyboardSensor,
PointerSensor,
useSensor,
@ -16,7 +16,7 @@ import {
} from "@dnd-kit/sortable";
import { t } from "@lingui/macro";
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 { cn } from "@reactive-resume/utils";
import { AnimatePresence, motion } from "framer-motion";

View File

@ -2,7 +2,7 @@ import { t } from "@lingui/macro";
import { createId } from "@paralleldrive/cuid2";
import { CopySimple, PencilSimple, Plus } from "@phosphor-icons/react";
import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
import { SectionItem, SectionWithItem } from "@reactive-resume/schema";
import type { SectionItem, SectionWithItem } from "@reactive-resume/schema";
import {
AlertDialog,
AlertDialogAction,
@ -25,9 +25,10 @@ import {
import { produce } from "immer";
import get from "lodash.get";
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";
type Props<T extends SectionItem> = {

View File

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

View File

@ -10,7 +10,8 @@ import {
Plus,
TrashSimple,
} 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 {
Button,
DropdownMenu,

View File

@ -1,6 +1,7 @@
import { t } from "@lingui/macro";
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 {
Button,
Input,

View File

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

View File

@ -1,7 +1,8 @@
/* eslint-disable lingui/no-unlocalized-strings */
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 { useCallback, useEffect, useState } from "react";
import webfontloader from "webfontloader";

View File

@ -1,8 +1,8 @@
import type { IconProps } from "@phosphor-icons/react";
import {
Code,
DiamondsFour,
DownloadSimple,
IconProps,
Info,
Layout,
Note,
@ -13,7 +13,8 @@ import {
Translate,
TrendUp,
} 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 =
| "template"

View File

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

View File

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

View File

@ -1,7 +1,8 @@
import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/macro";
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 {
AlertDialog,

View File

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

View File

@ -1,6 +1,6 @@
import { t } from "@lingui/macro";
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 { useDialog } from "@/client/stores/dialog";

View File

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

View File

@ -1,7 +1,8 @@
import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/macro";
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 {
Button,
buttonVariants,

View File

@ -1,11 +1,12 @@
import { t } from "@lingui/macro";
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 { pageSizeMap } from "@reactive-resume/utils";
import { useCallback, useEffect, useRef } from "react";
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 { ThemeSwitch } from "@/client/components/theme-switch";

View File

@ -1,5 +1,7 @@
import { authResponseSchema, UserDto } from "@reactive-resume/dto";
import { LoaderFunction, redirect } from "react-router";
import type { UserDto } from "@reactive-resume/dto";
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 { 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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { useNavigate } from "react-router";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AUTH_PROVIDERS_KEY } from "@/client/constants/query-keys";

View File

@ -1,5 +1,5 @@
import { MessageDto } from "@reactive-resume/dto";
import { AxiosInstance, AxiosResponse } from "axios";
import type { MessageDto } from "@reactive-resume/dto";
import type { AxiosInstance, AxiosResponse } from "axios";
export const refreshToken = async (axios: AxiosInstance) => {
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { 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 { 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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { 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 { RESUME_PREVIEW_KEY } from "@/client/constants/query-keys";

View File

@ -1,5 +1,5 @@
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 { 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";

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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { RESUMES_KEY } from "@/client/constants/query-keys";
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 { 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 { 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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import debounce from "lodash.debounce";
import { axios } from "@/client/libs/axios";

View File

@ -1,5 +1,5 @@
import { useMutation } from "@tanstack/react-query";
import { AxiosResponse } from "axios";
import type { AxiosResponse } from "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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { axios } from "@/client/libs/axios";
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 { AxiosResponse } from "axios";
import type { AxiosResponse } from "axios";
import { useEffect } from "react";
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 { 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";
export type DialogName = "resume" | "lock" | "import" | "two-factor" | SectionKey;

View File

@ -1,10 +1,12 @@
import { t } from "@lingui/macro";
import { createId } from "@paralleldrive/cuid2";
import { ResumeDto } from "@reactive-resume/dto";
import { CustomSectionGroup, defaultSection, SectionKey } from "@reactive-resume/schema";
import type { ResumeDto } from "@reactive-resume/dto";
import type { CustomSectionGroup, SectionKey } from "@reactive-resume/schema";
import { defaultSection } from "@reactive-resume/schema";
import { removeItemInLayout } from "@reactive-resume/utils";
import _set from "lodash.set";
import { temporal, TemporalState } from "zundo";
import type { TemporalState } from "zundo";
import { temporal } from "zundo";
import { create } from "zustand";
import { devtools } from "zustand/middleware";
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 => {
// Options For Access Token

View File

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

View File

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

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