mirror of
https://github.com/linkwarden/linkwarden.git
synced 2026-03-03 00:27:01 +00:00
* build(deps): bump the npm_and_yarn group across 5 directories with 22 updates Bumps the npm_and_yarn group with 18 updates in the / directory: | Package | From | To | | --- | --- | --- | | [axios](https://github.com/axios/axios) | `1.5.1` | `1.12.0` | | [dompurify](https://github.com/cure53/DOMPurify) | `3.0.6` | `3.2.4` | | [formidable](https://github.com/node-formidable/formidable) | `3.5.1` | `3.5.4` | | [next](https://github.com/vercel/next.js) | `13.4.12` | `14.2.35` | | [next-auth](https://github.com/nextauthjs/next-auth) | `4.22.1` | `4.24.12` | | [playwright](https://github.com/microsoft/playwright) | `1.55.0` | `1.55.1` | | [@mozilla/readability](https://github.com/mozilla/readability) | `0.4.4` | `0.6.0` | | [ai](https://github.com/vercel/ai) | `4.3.9` | `5.0.52` | | [nodemailer](https://github.com/nodemailer/nodemailer) | `6.9.3` | `7.0.11` | | [brace-expansion](https://github.com/juliangruber/brace-expansion) | `1.1.11` | `1.1.12` | | [braces](https://github.com/micromatch/braces) | `3.0.2` | `3.0.3` | | [form-data](https://github.com/form-data/form-data) | `3.0.3` | `3.0.4` | | [js-yaml](https://github.com/nodeca/js-yaml) | `3.14.1` | `3.14.2` | | [micromatch](https://github.com/micromatch/micromatch) | `4.0.5` | `4.0.8` | | [min-document](https://github.com/Raynos/min-document) | `2.19.0` | `2.19.2` | | [nanoid](https://github.com/ai/nanoid) | `3.3.6` | `3.3.8` | | [node-forge](https://github.com/digitalbazaar/forge) | `1.3.1` | `1.3.3` | | [tar](https://github.com/isaacs/node-tar) | `6.1.13` | `6.2.1` | Bumps the npm_and_yarn group with 1 update in the /apps/web directory: [next](https://github.com/vercel/next.js). Bumps the npm_and_yarn group with 2 updates in the /apps/worker directory: [@mozilla/readability](https://github.com/mozilla/readability) and [ai](https://github.com/vercel/ai). Bumps the npm_and_yarn group with 1 update in the /packages/lib directory: [nodemailer](https://github.com/nodemailer/nodemailer). Bumps the npm_and_yarn group with 1 update in the /packages/router directory: [next](https://github.com/vercel/next.js). Updates `axios` from 1.5.1 to 1.12.0 - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.5.1...v1.12.0) Updates `dompurify` from 3.0.6 to 3.2.4 - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](https://github.com/cure53/DOMPurify/compare/3.0.6...3.2.4) Updates `formidable` from 3.5.1 to 3.5.4 - [Release notes](https://github.com/node-formidable/formidable/releases) - [Changelog](https://github.com/node-formidable/formidable/blob/master/CHANGELOG.md) - [Commits](https://github.com/node-formidable/formidable/commits) Updates `next` from 13.4.12 to 14.2.35 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v13.4.12...v14.2.35) Updates `next-auth` from 4.22.1 to 4.24.12 - [Release notes](https://github.com/nextauthjs/next-auth/releases) - [Commits](https://github.com/nextauthjs/next-auth/compare/next-auth@4.22.1...next-auth@4.24.12) Updates `playwright` from 1.55.0 to 1.55.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.55.0...v1.55.1) Updates `postcss` from 8.4.26 to 8.5.3 - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.26...8.5.3) Updates `@mozilla/readability` from 0.4.4 to 0.6.0 - [Changelog](https://github.com/mozilla/readability/blob/main/CHANGELOG.md) - [Commits](https://github.com/mozilla/readability/compare/0.4.4...0.6.0) Updates `ai` from 4.3.9 to 5.0.52 - [Release notes](https://github.com/vercel/ai/releases) - [Changelog](https://github.com/vercel/ai/blob/main/CHANGELOG.md) - [Commits](https://github.com/vercel/ai/compare/ai@4.3.9...ai@5.0.52) Updates `nodemailer` from 6.9.3 to 7.0.11 - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodemailer/nodemailer/compare/v6.9.3...v7.0.11) Updates `@babel/runtime` from 7.21.5 to 7.27.0 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.27.0/packages/babel-runtime) Updates `brace-expansion` from 1.1.11 to 1.1.12 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) Updates `braces` from 3.0.2 to 3.0.3 - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) Updates `follow-redirects` from 1.15.3 to 1.15.11 - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.11) Updates `form-data` from 3.0.3 to 3.0.4 - [Release notes](https://github.com/form-data/form-data/releases) - [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md) - [Commits](https://github.com/form-data/form-data/compare/v3.0.3...v3.0.4) Updates `jose` from 4.14.4 to 4.15.9 - [Release notes](https://github.com/panva/jose/releases) - [Changelog](https://github.com/panva/jose/blob/v4.15.9/CHANGELOG.md) - [Commits](https://github.com/panva/jose/compare/v4.14.4...v4.15.9) Updates `js-yaml` from 3.14.1 to 3.14.2 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2) Updates `micromatch` from 4.0.5 to 4.0.8 - [Release notes](https://github.com/micromatch/micromatch/releases) - [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8) Updates `min-document` from 2.19.0 to 2.19.2 - [Commits](https://github.com/Raynos/min-document/compare/v2.19.0...v2.19.2) Updates `nanoid` from 3.3.6 to 3.3.8 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/3.3.6...3.3.8) Updates `node-forge` from 1.3.1 to 1.3.3 - [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md) - [Commits](https://github.com/digitalbazaar/forge/compare/v1.3.1...v1.3.3) Updates `tar` from 6.1.13 to 6.2.1 - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v6.1.13...v6.2.1) Updates `next` from 13.4.12 to 14.2.35 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v13.4.12...v14.2.35) Updates `@mozilla/readability` from 0.4.4 to 0.6.0 - [Changelog](https://github.com/mozilla/readability/blob/main/CHANGELOG.md) - [Commits](https://github.com/mozilla/readability/compare/0.4.4...0.6.0) Updates `ai` from 4.3.19 to 5.0.113 - [Release notes](https://github.com/vercel/ai/releases) - [Changelog](https://github.com/vercel/ai/blob/main/CHANGELOG.md) - [Commits](https://github.com/vercel/ai/compare/ai@4.3.9...ai@5.0.52) Updates `nodemailer` from 6.10.1 to 7.0.11 - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodemailer/nodemailer/compare/v6.9.3...v7.0.11) Updates `next` from 13.4.12 to 14.2.35 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v13.4.12...v14.2.35) --- updated-dependencies: - dependency-name: axios dependency-version: 1.12.0 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: dompurify dependency-version: 3.2.4 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: formidable dependency-version: 3.5.4 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: next dependency-version: 14.2.35 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: next-auth dependency-version: 4.24.12 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: playwright dependency-version: 1.55.1 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: postcss dependency-version: 8.5.3 dependency-type: direct:development dependency-group: npm_and_yarn - dependency-name: "@mozilla/readability" dependency-version: 0.6.0 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: ai dependency-version: 5.0.52 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: nodemailer dependency-version: 7.0.11 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: "@babel/runtime" dependency-version: 7.27.0 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: braces dependency-version: 3.0.3 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: follow-redirects dependency-version: 1.15.11 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: form-data dependency-version: 3.0.4 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: jose dependency-version: 4.15.9 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: js-yaml dependency-version: 3.14.2 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: micromatch dependency-version: 4.0.8 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: min-document dependency-version: 2.19.2 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: nanoid dependency-version: 3.3.8 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: node-forge dependency-version: 1.3.3 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: tar dependency-version: 6.2.1 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: next dependency-version: 14.2.35 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: "@mozilla/readability" dependency-version: 0.6.0 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: ai dependency-version: 5.0.113 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: nodemailer dependency-version: 7.0.11 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: next dependency-version: 14.2.35 dependency-type: direct:production dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> * bug fixes and improvements * always show navbar in reader view * bug fix and small performance improvement * minor fix * Refactor link selection management and bulk actions - Replaced the use of selectedLinks with selectedIds in the link store for better performance and clarity. - Updated LinkListOptions, BulkDeleteLinksModal, and BulkEditLinksModal components to utilize the new selection management. - Modified LinkCard, LinkMasonry, and LinkList components to handle selection state through props. - Enhanced updateLinks API to support bulk updates with improved tag management. - Cleaned up unused imports and code related to previous selection methods. * move refetching logic to Links component * move disableDraggable and user hook out of each card to improve efficiency * cleaner code * memoize components and increase performance * fix: update announcement links to use the correct domain * feat: add favicon field to Link model + update packages + bug fix * feat: implement favicon fetching API and update Link model for favicon support * feat: add priority attribute to Image components in Sidebar * Refactor pages to use consistent layout handling (yes, I forgot to do that until now :P) * bump version * Refactor setting pages to use consistent layout handling * upgrade yarn to 4.12.0 * fix DnD bug * Enhance announcement handling by adding support for announcement messages * slimmed down the docker image size * update Node and yarn versions in playwright tests workflow * small fix * fix attempt 2 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
317 lines
9.1 KiB
TypeScript
317 lines
9.1 KiB
TypeScript
import { ArchivedFormat, TokenExpiry } from "@linkwarden/types";
|
|
import {
|
|
AiTaggingMethod,
|
|
LinksRouteTo,
|
|
DashboardSectionType,
|
|
Theme,
|
|
} from "@linkwarden/prisma/client";
|
|
import { number, z } from "zod";
|
|
|
|
// const stringField = z.string({
|
|
// errorMap: (e) => ({
|
|
// message: `Invalid ${e.path}.`,
|
|
// }),
|
|
// });
|
|
|
|
export const ForgotPasswordSchema = z.object({
|
|
email: z.string().email(),
|
|
});
|
|
|
|
export const ResetPasswordSchema = z.object({
|
|
token: z.string(),
|
|
password: z.string().min(8),
|
|
});
|
|
|
|
export const VerifyEmailSchema = z.object({
|
|
token: z.string(),
|
|
});
|
|
|
|
export const PostTokenSchema = z.object({
|
|
name: z.string().max(50),
|
|
expires: z.enum(TokenExpiry),
|
|
});
|
|
|
|
export type PostTokenSchemaType = z.infer<typeof PostTokenSchema>;
|
|
|
|
export const PostUserSchema = () => {
|
|
const emailEnabled =
|
|
process.env.EMAIL_FROM && process.env.EMAIL_SERVER ? true : false;
|
|
|
|
return z.object({
|
|
name: z.string().trim().min(1).max(50).optional(),
|
|
password: z.string().min(8).max(2048).optional(),
|
|
email: emailEnabled
|
|
? z.string().trim().email().toLowerCase()
|
|
: z.string().nullish(),
|
|
username: emailEnabled
|
|
? z.string().optional()
|
|
: z
|
|
.string()
|
|
.trim()
|
|
.toLowerCase()
|
|
.min(3)
|
|
.max(50)
|
|
.regex(/^[a-z0-9_-]{3,50}$/),
|
|
invite: z.boolean().default(false),
|
|
acceptPromotionalEmails: z.boolean().default(false),
|
|
});
|
|
};
|
|
|
|
export const UpdateUserSchema = () => {
|
|
const emailEnabled =
|
|
process.env.EMAIL_FROM && process.env.EMAIL_SERVER ? true : false;
|
|
|
|
return z.object({
|
|
name: z.string().trim().min(1).max(50).optional(),
|
|
email: emailEnabled
|
|
? z.string().trim().email().toLowerCase()
|
|
: z.string().nullish(),
|
|
username: z
|
|
.string()
|
|
.trim()
|
|
.toLowerCase()
|
|
.min(3)
|
|
.max(30)
|
|
.regex(/^[a-z0-9_-]{3,30}$/),
|
|
image: z.string().nullish(),
|
|
password: z.string().min(8).max(2048).optional(),
|
|
newPassword: z.string().min(8).max(2048).optional(),
|
|
oldPassword: z.string().min(8).max(2048).optional(),
|
|
archiveAsScreenshot: z.boolean().optional(),
|
|
archiveAsMonolith: z.boolean().optional(),
|
|
archiveAsPDF: z.boolean().optional(),
|
|
archiveAsReadable: z.boolean().optional(),
|
|
archiveAsWaybackMachine: z.boolean().optional(),
|
|
aiTaggingMethod: z.enum(AiTaggingMethod).optional(),
|
|
aiPredefinedTags: z.array(z.string().max(20).trim()).max(20).optional(),
|
|
aiTagExistingLinks: z.boolean().optional(),
|
|
locale: z.string().max(20).optional(),
|
|
isPrivate: z.boolean().optional(),
|
|
preventDuplicateLinks: z.boolean().optional(),
|
|
collectionOrder: z.array(z.number()).optional(),
|
|
linksRouteTo: z.enum(LinksRouteTo).optional(),
|
|
whitelistedUsers: z.array(z.string().max(50)).optional(),
|
|
referredBy: z.string().max(100).nullish(),
|
|
});
|
|
};
|
|
|
|
export const UpdateUserPreferenceSchema = z.object({
|
|
theme: z.enum(Theme).optional(),
|
|
readableFontFamily: z.string().trim().max(100).optional(),
|
|
readableFontSize: z.string().trim().max(100).optional(),
|
|
readableLineHeight: z.string().trim().max(100).optional(),
|
|
readableLineWidth: z.string().trim().max(100).optional(),
|
|
// archiveAsScreenshot: z.boolean().optional(),
|
|
// archiveAsMonolith: z.boolean().optional(),
|
|
// archiveAsPDF: z.boolean().optional(),
|
|
// archiveAsReadable: z.boolean().optional(),
|
|
// archiveAsWaybackMachine: z.boolean().optional(),
|
|
// aiTaggingMethod: z.enum(AiTaggingMethod).optional(),
|
|
// aiPredefinedTags: z.array(z.string().max(20).trim()).max(20).optional(),
|
|
// aiTagExistingLinks: z.boolean().optional(),
|
|
// preventDuplicateLinks: z.boolean().optional(),
|
|
// linksRouteTo: z.enum(LinksRouteTo).optional(),
|
|
});
|
|
|
|
export type UpdateUserPreferenceSchemaType = z.infer<
|
|
typeof UpdateUserPreferenceSchema
|
|
>;
|
|
|
|
export const PostSessionSchema = z.object({
|
|
username: z.string().min(3).max(50),
|
|
password: z.string().min(8),
|
|
sessionName: z.string().trim().max(50).optional(),
|
|
});
|
|
|
|
export const PostLinkSchema = z.object({
|
|
type: z.enum(["url", "pdf", "image"]).nullish(),
|
|
url: z.string().trim().max(2048).url().optional(),
|
|
name: z.string().trim().max(2048).optional(),
|
|
description: z.string().trim().max(2048).optional(),
|
|
image: z.enum(["jpeg", "png"]).optional(),
|
|
collection: z
|
|
.object({
|
|
id: z.number().optional(),
|
|
name: z.string().trim().max(2048).optional(),
|
|
})
|
|
.optional(),
|
|
tags:
|
|
z
|
|
.array(
|
|
z.object({
|
|
id: z.number().optional(),
|
|
name: z.string().trim().max(50),
|
|
})
|
|
)
|
|
.optional() || [],
|
|
});
|
|
|
|
export type PostLinkSchemaType = z.infer<typeof PostLinkSchema>;
|
|
|
|
export const UpdateLinkSchema = z.object({
|
|
id: z.number(),
|
|
name: z.string().trim().max(2048).nullish(),
|
|
url: z.string().trim().max(2048).nullish(),
|
|
description: z.string().trim().max(2048).nullish(),
|
|
icon: z.string().trim().max(50).nullish(),
|
|
iconWeight: z.string().trim().max(50).nullish(),
|
|
color: z.string().trim().max(50).nullish(),
|
|
collection: z.object({
|
|
id: z.number(),
|
|
ownerId: z.number(),
|
|
}),
|
|
tags: z.array(
|
|
z.object({
|
|
id: z.number().optional(),
|
|
name: z.string().trim().max(50),
|
|
})
|
|
),
|
|
pinnedBy: z
|
|
.array(
|
|
z
|
|
.object({
|
|
id: z.number().optional(),
|
|
})
|
|
.optional()
|
|
)
|
|
.optional(),
|
|
});
|
|
|
|
export type UpdateLinkSchemaType = z.infer<typeof UpdateLinkSchema>;
|
|
|
|
const ACCEPTED_TYPES = [
|
|
"image/jpeg",
|
|
"image/jpg",
|
|
"image/png",
|
|
"application/pdf",
|
|
"text/plain",
|
|
"text/html",
|
|
];
|
|
const NEXT_PUBLIC_MAX_FILE_BUFFER = Number(
|
|
process.env.NEXT_PUBLIC_MAX_FILE_BUFFER || 10
|
|
);
|
|
const MAX_FILE_SIZE = NEXT_PUBLIC_MAX_FILE_BUFFER * 1024 * 1024;
|
|
export const UploadFileSchema = z.object({
|
|
file: z
|
|
.any()
|
|
.refine((files) => files?.length == 1, "File is required.")
|
|
.refine(
|
|
(files) => files?.[0]?.size <= MAX_FILE_SIZE,
|
|
`Max file size is ${MAX_FILE_SIZE}MB.`
|
|
)
|
|
.refine(
|
|
(files) => ACCEPTED_TYPES.includes(files?.[0]?.mimetype),
|
|
`Only ${ACCEPTED_TYPES.join(", ")} files are accepted.`
|
|
),
|
|
id: z.number().optional(),
|
|
url: z.string().trim().max(2048).url().optional(),
|
|
format: z.enum(ArchivedFormat),
|
|
});
|
|
|
|
export const PostCollectionSchema = z.object({
|
|
name: z.string().trim().max(2048),
|
|
description: z.string().trim().max(2048).optional(),
|
|
color: z.string().trim().max(50).optional(),
|
|
icon: z.string().trim().max(50).optional(),
|
|
iconWeight: z.string().trim().max(50).optional(),
|
|
parentId: z.number().optional(),
|
|
});
|
|
|
|
export type PostCollectionSchemaType = z.infer<typeof PostCollectionSchema>;
|
|
|
|
export const UpdateCollectionSchema = z.object({
|
|
id: z.number(),
|
|
name: z.string().trim().max(2048),
|
|
description: z.string().trim().max(2048).optional(),
|
|
color: z.string().trim().max(50).optional(),
|
|
isPublic: z.boolean().optional(),
|
|
icon: z.string().trim().max(50).nullish(),
|
|
iconWeight: z.string().trim().max(50).nullish(),
|
|
parentId: z.union([z.number(), z.literal("root")]).nullish(),
|
|
members: z.array(
|
|
z.object({
|
|
userId: z.number(),
|
|
canCreate: z.boolean(),
|
|
canUpdate: z.boolean(),
|
|
canDelete: z.boolean(),
|
|
})
|
|
),
|
|
});
|
|
|
|
export type UpdateCollectionSchemaType = z.infer<typeof UpdateCollectionSchema>;
|
|
|
|
export const UpdateTagSchema = z.object({
|
|
name: z.string().trim().max(50),
|
|
});
|
|
|
|
export type UpdateTagSchemaType = z.infer<typeof UpdateTagSchema>;
|
|
|
|
export const PostRssSubscriptionSchema = z.object({
|
|
name: z.string().max(50),
|
|
url: z.string().url().max(2048),
|
|
collectionId: z.number().optional(),
|
|
collectionName: z.string().max(50).optional(),
|
|
});
|
|
|
|
export const PostTagSchema = z.object({
|
|
tags: z.array(
|
|
z.object({
|
|
label: z.string().trim().max(50),
|
|
archiveAsScreenshot: z.boolean().nullish(),
|
|
archiveAsMonolith: z.boolean().nullish(),
|
|
archiveAsPDF: z.boolean().nullish(),
|
|
archiveAsReadable: z.boolean().nullish(),
|
|
archiveAsWaybackMachine: z.boolean().nullish(),
|
|
aiTag: z.boolean().nullish(),
|
|
})
|
|
),
|
|
});
|
|
|
|
export type PostTagSchemaType = z.infer<typeof PostTagSchema>;
|
|
|
|
export const TagBulkDeletionSchema = z.object({
|
|
tagIds: z.array(z.number()).min(1),
|
|
});
|
|
|
|
export type TagBulkDeletionSchemaType = z.infer<typeof TagBulkDeletionSchema>;
|
|
|
|
export const MergeTagsSchema = z.object({
|
|
newTagName: z.string().trim().max(50),
|
|
tagIds: z.array(z.number()).min(1),
|
|
});
|
|
|
|
export type MergeTagsSchemaType = z.infer<typeof MergeTagsSchema>;
|
|
|
|
export const PostHighlightSchema = z.object({
|
|
color: z.string().trim().max(50),
|
|
comment: z.string().trim().max(2048).nullish(),
|
|
startOffset: z.number(),
|
|
endOffset: z.number(),
|
|
text: z.string().trim().max(2048),
|
|
linkId: z.number(),
|
|
});
|
|
|
|
export type PostHighlightSchemaType = z.infer<typeof PostHighlightSchema>;
|
|
|
|
export const LinkArchiveActionSchema = z.object({
|
|
action: z.enum(["allAndRePreserve", "allAndIgnore", "allBroken"]).optional(),
|
|
linkIds: z.array(z.number()).optional(),
|
|
});
|
|
|
|
export type LinkArchiveActionSchemaType = z.infer<
|
|
typeof LinkArchiveActionSchema
|
|
>;
|
|
|
|
export const UpdateDashboardLayoutSchema = z.array(
|
|
z.object({
|
|
type: z.enum(DashboardSectionType),
|
|
collectionId: z.number().optional(),
|
|
enabled: z.boolean(),
|
|
order: z.number().optional(),
|
|
})
|
|
);
|
|
|
|
export type UpdateDashboardLayoutSchemaType = z.infer<
|
|
typeof UpdateDashboardLayoutSchema
|
|
>;
|