diff --git a/packages/backend-rs/index.d.ts b/packages/backend-rs/index.d.ts
index 728c66a6d8..cdd960a96d 100644
--- a/packages/backend-rs/index.d.ts
+++ b/packages/backend-rs/index.d.ts
@@ -270,8 +270,6 @@ export declare function cpuInfo(): Cpu
export declare function cpuUsage(): number
-export const DAY: number
-
export interface DbConfig {
host: string
port: number
@@ -380,17 +378,6 @@ export declare function fetchMeta(): Promise
/** Fetches and returns the NodeInfo (version 2.0) of a remote server. */
export declare function fetchNodeinfo(host: string): Promise
-/**
- * List of file types allowed to be viewed directly in the browser
- *
- * Anything not included here will be responded as application/octet-stream
- * SVG is not allowed because it generates XSS (TODO: fix this and later allow it to be viewed directly)
- * *
- * *
- * *
- */
-export const FILE_TYPE_BROWSERSAFE: string[]
-
export interface Following {
id: string
createdAt: DateTimeWithTimeZone
@@ -492,8 +479,6 @@ export interface Hashtag {
attachedRemoteUsersCount: number
}
-export const HOUR: number
-
export interface IdConfig {
length?: number
fingerprint?: string
@@ -754,8 +739,6 @@ export interface Migrations {
name: string
}
-export const MINUTE: number
-
export interface ModerationLog {
id: string
createdAt: DateTimeWithTimeZone
@@ -1225,8 +1208,6 @@ export interface ReplyMuting {
/** Returns `true` if `src` does not contain suspicious characters like `%`. */
export declare function safeForSql(src: string): boolean
-export const SECOND: number
-
export declare function sendPushNotification(receiverUserId: string, kind: PushNotificationKind, content: any): Promise
export interface ServerConfig {
@@ -1422,10 +1403,6 @@ export interface User {
readCatLanguage: boolean
}
-export const USER_ACTIVE_THRESHOLD: number
-
-export const USER_ONLINE_THRESHOLD: number
-
export type UserEmojiModPerm = 'add'|
'full'|
'mod'|
diff --git a/packages/backend-rs/index.js b/packages/backend-rs/index.js
index d145b64ed9..ad7b94acd8 100644
--- a/packages/backend-rs/index.js
+++ b/packages/backend-rs/index.js
@@ -370,7 +370,6 @@ module.exports.countLocalUsers = nativeBinding.countLocalUsers
module.exports.countReactions = nativeBinding.countReactions
module.exports.cpuInfo = nativeBinding.cpuInfo
module.exports.cpuUsage = nativeBinding.cpuUsage
-module.exports.DAY = nativeBinding.DAY
module.exports.decodeReaction = nativeBinding.decodeReaction
module.exports.DriveFileEvent = nativeBinding.DriveFileEvent
module.exports.DriveFileUsageHint = nativeBinding.DriveFileUsageHint
@@ -379,7 +378,6 @@ module.exports.extractHashtags = nativeBinding.extractHashtags
module.exports.extractHost = nativeBinding.extractHost
module.exports.fetchMeta = nativeBinding.fetchMeta
module.exports.fetchNodeinfo = nativeBinding.fetchNodeinfo
-module.exports.FILE_TYPE_BROWSERSAFE = nativeBinding.FILE_TYPE_BROWSERSAFE
module.exports.formatMilliseconds = nativeBinding.formatMilliseconds
module.exports.generateSecureRandomString = nativeBinding.generateSecureRandomString
module.exports.generateUserToken = nativeBinding.generateUserToken
@@ -392,7 +390,6 @@ module.exports.getNoteSummary = nativeBinding.getNoteSummary
module.exports.getTimestamp = nativeBinding.getTimestamp
module.exports.greet = nativeBinding.greet
module.exports.hashPassword = nativeBinding.hashPassword
-module.exports.HOUR = nativeBinding.HOUR
module.exports.Inbound = nativeBinding.Inbound
module.exports.initializeRustLogger = nativeBinding.initializeRustLogger
module.exports.InternalActor = nativeBinding.InternalActor
@@ -409,7 +406,6 @@ module.exports.latestVersion = nativeBinding.latestVersion
module.exports.loadConfig = nativeBinding.loadConfig
module.exports.memoryUsage = nativeBinding.memoryUsage
module.exports.metaToPugArgs = nativeBinding.metaToPugArgs
-module.exports.MINUTE = nativeBinding.MINUTE
module.exports.MutedNoteReason = nativeBinding.MutedNoteReason
module.exports.nodeinfo_2_0 = nativeBinding.nodeinfo_2_0
module.exports.nodeinfo_2_1 = nativeBinding.nodeinfo_2_1
@@ -434,7 +430,6 @@ module.exports.PushSubscriptionType = nativeBinding.PushSubscriptionType
module.exports.RelayStatus = nativeBinding.RelayStatus
module.exports.removeOldAttestationChallenges = nativeBinding.removeOldAttestationChallenges
module.exports.safeForSql = nativeBinding.safeForSql
-module.exports.SECOND = nativeBinding.SECOND
module.exports.sendPushNotification = nativeBinding.sendPushNotification
module.exports.shouldNyaify = nativeBinding.shouldNyaify
module.exports.showServerInfo = nativeBinding.showServerInfo
@@ -450,8 +445,6 @@ module.exports.updateAntennaCache = nativeBinding.updateAntennaCache
module.exports.updateAntennasOnNewNote = nativeBinding.updateAntennasOnNewNote
module.exports.updateMetaCache = nativeBinding.updateMetaCache
module.exports.updateNodeinfoCache = nativeBinding.updateNodeinfoCache
-module.exports.USER_ACTIVE_THRESHOLD = nativeBinding.USER_ACTIVE_THRESHOLD
-module.exports.USER_ONLINE_THRESHOLD = nativeBinding.USER_ONLINE_THRESHOLD
module.exports.UserEmojiModPerm = nativeBinding.UserEmojiModPerm
module.exports.UserProfileFfvisibility = nativeBinding.UserProfileFfvisibility
module.exports.UserProfileMutingNotificationTypes = nativeBinding.UserProfileMutingNotificationTypes
diff --git a/packages/backend-rs/src/config/constant.rs b/packages/backend-rs/src/config/constant.rs
deleted file mode 100644
index 7e6b50fa52..0000000000
--- a/packages/backend-rs/src/config/constant.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-//! This module is used in the TypeScript backend only.
-
-#[macros::ts_export]
-pub const SECOND: i32 = 1000;
-#[macros::ts_export]
-pub const MINUTE: i32 = 60 * SECOND;
-#[macros::ts_export]
-pub const HOUR: i32 = 60 * MINUTE;
-#[macros::ts_export]
-pub const DAY: i32 = 24 * HOUR;
-
-#[macros::ts_export]
-pub const USER_ONLINE_THRESHOLD: i32 = 10 * MINUTE;
-#[macros::ts_export]
-pub const USER_ACTIVE_THRESHOLD: i32 = 3 * DAY;
-
-/// List of file types allowed to be viewed directly in the browser
-///
-/// Anything not included here will be responded as application/octet-stream
-/// SVG is not allowed because it generates XSS (TODO: fix this and later allow it to be viewed directly)
-/// *
-/// *
-/// *
-#[macros::ts_export]
-pub const FILE_TYPE_BROWSERSAFE: [&str; 41] = [
- // Images
- "image/png",
- "image/gif", // TODO: deprecated, but still used by old posts, new gifs should be converted to webp in the future
- "image/jpeg",
- "image/webp", // TODO: make this the default image format
- "image/apng",
- "image/bmp",
- "image/tiff",
- "image/x-icon",
- "image/avif", // not as good supported now, but its good to introduce initial support for the future
- // OggS
- "audio/opus",
- "video/ogg",
- "audio/ogg",
- "application/ogg",
- // ISO/IEC base media file format
- "video/quicktime",
- "video/mp4", // TODO: we need to check for av1 later
- "video/vnd.avi", // also av1
- "audio/mp4",
- "video/x-m4v",
- "audio/x-m4a",
- "video/3gpp",
- "video/3gpp2",
- "video/3gp2",
- "audio/3gpp",
- "audio/3gpp2",
- "audio/3gp2",
- "video/mpeg",
- "audio/mpeg",
- "video/webm",
- "audio/webm",
- "audio/aac",
- "audio/x-flac",
- "audio/flac",
- "audio/vnd.wave",
- "audio/mod",
- "audio/x-mod",
- "audio/s3m",
- "audio/x-s3m",
- "audio/xm",
- "audio/x-xm",
- "audio/it",
- "audio/x-it",
-];
diff --git a/packages/backend-rs/src/config/mod.rs b/packages/backend-rs/src/config/mod.rs
index a1cfb7fd75..e447d4b059 100644
--- a/packages/backend-rs/src/config/mod.rs
+++ b/packages/backend-rs/src/config/mod.rs
@@ -3,6 +3,5 @@
pub use meta::local_server_info;
pub use server::CONFIG;
-pub mod constant;
pub mod meta;
pub mod server;
diff --git a/packages/backend/src/const.ts b/packages/backend/src/const.ts
new file mode 100644
index 0000000000..fee1e3e1ea
--- /dev/null
+++ b/packages/backend/src/const.ts
@@ -0,0 +1,98 @@
+import { config } from "@/config.js";
+
+// If you change DB_* values, you must also change the DB schema.
+/**
+ * Maximum note text length that can be stored in DB.
+ * Surrogate pairs count as one
+ *
+ * NOTE: this can hypothetically be pushed further
+ * (up to 250000000), but will likely cause truncations
+ * and incompatibilities with other servers,
+ * as well as potential performance issues.
+ */
+export const DB_MAX_NOTE_TEXT_LENGTH = 100000;
+
+/**
+ * Maximum image description length that can be stored in DB.
+ * Surrogate pairs count as one
+ */
+export const DB_MAX_IMAGE_COMMENT_LENGTH = 8192;
+
+
+export const MAX_NOTE_TEXT_LENGTH = Math.min(
+ config.maxNoteLength ?? 3000,
+ DB_MAX_NOTE_TEXT_LENGTH,
+);
+export const MAX_CAPTION_TEXT_LENGTH = Math.min(
+ config.maxCaptionLength ?? 1500,
+ DB_MAX_IMAGE_COMMENT_LENGTH,
+);
+
+export const SECOND = 1000;
+export const MINUTE = 60 * SECOND;
+export const HOUR = 60 * MINUTE;
+export const DAY = 24 * HOUR;
+
+export const USER_ONLINE_THRESHOLD = 10 * MINUTE;
+export const USER_ACTIVE_THRESHOLD = 3 * DAY;
+
+// List of file types allowed to be viewed directly in the browser
+// Anything not included here will be responded as application/octet-stream
+// SVG is not allowed because it generates XSS <- we need to fix this and later allow it to be viewed directly
+export const FILE_TYPE_BROWSERSAFE = [
+ // Images
+ "image/png",
+ "image/gif", // TODO: deprecated, but still used by old notes, new gifs should be converted to webp in the future
+ "image/jpeg",
+ "image/webp", // TODO: make this the default image format
+ "image/apng",
+ "image/bmp",
+ "image/tiff",
+ "image/x-icon",
+ "image/avif", // not as good supported now, but its good to introduce initial support for the future
+
+ // OggS
+ "audio/opus",
+ "video/ogg",
+ "audio/ogg",
+ "application/ogg",
+
+ // ISO/IEC base media file format
+ "video/quicktime",
+ "video/mp4", // TODO: we need to check for av1 later
+ "video/vnd.avi", // also av1
+ "audio/mp4",
+ "video/x-m4v",
+ "audio/x-m4a",
+ "video/3gpp",
+ "video/3gpp2",
+ "video/3gp2",
+ "audio/3gpp",
+ "audio/3gpp2",
+ "audio/3gp2",
+
+ "video/mpeg",
+ "audio/mpeg",
+
+ "video/webm",
+ "audio/webm",
+
+ "audio/aac",
+ "audio/x-flac",
+ "audio/flac",
+ "audio/vnd.wave",
+
+ "audio/mod",
+ "audio/x-mod",
+ "audio/s3m",
+ "audio/x-s3m",
+ "audio/xm",
+ "audio/x-xm",
+ "audio/it",
+ "audio/x-it",
+];
+/*
+https://github.com/sindresorhus/file-type/blob/main/supported.js
+https://github.com/sindresorhus/file-type/blob/main/core.js
+https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers
+*/
diff --git a/packages/backend/src/misc/is-mime-image.ts b/packages/backend/src/misc/is-mime-image.ts
index 83fdae442e..a8ba62ec20 100644
--- a/packages/backend/src/misc/is-mime-image.ts
+++ b/packages/backend/src/misc/is-mime-image.ts
@@ -1,4 +1,4 @@
-import { FILE_TYPE_BROWSERSAFE } from "backend-rs";
+import { FILE_TYPE_BROWSERSAFE } from "@/const.js";
const dictionary = {
"safe-file": FILE_TYPE_BROWSERSAFE,
diff --git a/packages/backend/src/misc/skipped-instances.ts b/packages/backend/src/misc/skipped-instances.ts
index 4e720ce2d4..c57c2b9c57 100644
--- a/packages/backend/src/misc/skipped-instances.ts
+++ b/packages/backend/src/misc/skipped-instances.ts
@@ -1,5 +1,6 @@
import { Brackets } from "typeorm";
-import { isBlockedServer, DAY } from "backend-rs";
+import { isBlockedServer } from "backend-rs";
+import { DAY } from "@/const.js";
import { Instances } from "@/models/index.js";
import type { Instance } from "@/models/entities/instance.js";
diff --git a/packages/backend/src/models/repositories/user.ts b/packages/backend/src/models/repositories/user.ts
index e6c8f2517c..c04fb9750c 100644
--- a/packages/backend/src/models/repositories/user.ts
+++ b/packages/backend/src/models/repositories/user.ts
@@ -7,7 +7,7 @@ import type { Packed } from "@/misc/schema.js";
import type { Promiseable } from "@/prelude/await-all.js";
import { awaitAll } from "@/prelude/await-all.js";
import { populateEmojis } from "@/misc/populate-emojis.js";
-import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from "backend-rs";
+import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from "@/const.js";
import { Cache } from "@/misc/cache.js";
import { db } from "@/db/postgre.js";
import { isActor, getApId } from "@/remote/activitypub/type.js";
diff --git a/packages/backend/src/server/api/endpoints/ap/get.ts b/packages/backend/src/server/api/endpoints/ap/get.ts
index 72baadb676..5159ce3b4a 100644
--- a/packages/backend/src/server/api/endpoints/ap/get.ts
+++ b/packages/backend/src/server/api/endpoints/ap/get.ts
@@ -1,6 +1,6 @@
import define from "@/server/api/define.js";
import Resolver from "@/remote/activitypub/resolver.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["federation"],
diff --git a/packages/backend/src/server/api/endpoints/ap/show.ts b/packages/backend/src/server/api/endpoints/ap/show.ts
index a24654b2dd..bf7d1a1986 100644
--- a/packages/backend/src/server/api/endpoints/ap/show.ts
+++ b/packages/backend/src/server/api/endpoints/ap/show.ts
@@ -4,7 +4,8 @@ import { createNote } from "@/remote/activitypub/models/note.js";
import DbResolver from "@/remote/activitypub/db-resolver.js";
import Resolver from "@/remote/activitypub/resolver.js";
import { ApiError } from "@/server/api/error.js";
-import { MINUTE, extractHost, isBlockedServer } from "backend-rs";
+import { MINUTE } from "@/const.js";
+import { extractHost, isBlockedServer } from "backend-rs";
import { Users, Notes } from "@/models/index.js";
import type { Note } from "@/models/entities/note.js";
import type { CacheableLocalUser, User } from "@/models/entities/user.js";
diff --git a/packages/backend/src/server/api/endpoints/blocking/create.ts b/packages/backend/src/server/api/endpoints/blocking/create.ts
index a2c58aea50..944eb327be 100644
--- a/packages/backend/src/server/api/endpoints/blocking/create.ts
+++ b/packages/backend/src/server/api/endpoints/blocking/create.ts
@@ -3,7 +3,7 @@ import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
import { getUser } from "@/server/api/common/getters.js";
import { Blockings, NoteWatchings, Users } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["account"],
diff --git a/packages/backend/src/server/api/endpoints/blocking/delete.ts b/packages/backend/src/server/api/endpoints/blocking/delete.ts
index bdd930f0df..5304bcc7bc 100644
--- a/packages/backend/src/server/api/endpoints/blocking/delete.ts
+++ b/packages/backend/src/server/api/endpoints/blocking/delete.ts
@@ -3,7 +3,7 @@ import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
import { getUser } from "@/server/api/common/getters.js";
import { Blockings, Users } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["account"],
diff --git a/packages/backend/src/server/api/endpoints/compatibility/custom-emojis.ts b/packages/backend/src/server/api/endpoints/compatibility/custom-emojis.ts
index 2ab190ed0b..f6c5573af7 100644
--- a/packages/backend/src/server/api/endpoints/compatibility/custom-emojis.ts
+++ b/packages/backend/src/server/api/endpoints/compatibility/custom-emojis.ts
@@ -1,7 +1,7 @@
import { Emojis } from "@/models/index.js";
import type { Emoji } from "@/models/entities/emoji.js";
import { IsNull, In } from "typeorm";
-import { FILE_TYPE_BROWSERSAFE } from "backend-rs";
+import { FILE_TYPE_BROWSERSAFE } from "@/const.js";
import define from "@/server/api/define.js";
export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/drive/files/create.ts b/packages/backend/src/server/api/endpoints/drive/files/create.ts
index e7d73513dd..f4ee2546f5 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/create.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/create.ts
@@ -2,7 +2,8 @@ import { addFile } from "@/services/drive/add-file.js";
import { DriveFiles } from "@/models/index.js";
import { config } from "@/config.js";
import { IdentifiableError } from "@/misc/identifiable-error.js";
-import { MINUTE, fetchMeta } from "backend-rs";
+import { fetchMeta } from "backend-rs";
+import { MINUTE } from "@/const.js";
import define from "@/server/api/define.js";
import { apiLogger } from "@/server/api/logger.js";
import { ApiError } from "@/server/api/error.js";
diff --git a/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts b/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts
index fea6bf8a3a..cdfcb03089 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts
@@ -2,7 +2,7 @@ import { uploadFromUrl } from "@/services/drive/upload-from-url.js";
import define from "@/server/api/define.js";
import { DriveFiles } from "@/models/index.js";
import { publishMainStream } from "@/services/stream.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["drive"],
diff --git a/packages/backend/src/server/api/endpoints/export-custom-emojis.ts b/packages/backend/src/server/api/endpoints/export-custom-emojis.ts
index 8ff6afa320..ca013314e1 100644
--- a/packages/backend/src/server/api/endpoints/export-custom-emojis.ts
+++ b/packages/backend/src/server/api/endpoints/export-custom-emojis.ts
@@ -1,6 +1,6 @@
import { createExportCustomEmojisJob } from "@/queue/index.js";
import define from "@/server/api/define.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/following/create.ts b/packages/backend/src/server/api/endpoints/following/create.ts
index 29d5d6c84c..e80c5a4350 100644
--- a/packages/backend/src/server/api/endpoints/following/create.ts
+++ b/packages/backend/src/server/api/endpoints/following/create.ts
@@ -4,7 +4,7 @@ import { ApiError } from "@/server/api/error.js";
import { getUser } from "@/server/api/common/getters.js";
import { Followings, Users } from "@/models/index.js";
import { IdentifiableError } from "@/misc/identifiable-error.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["following", "users"],
diff --git a/packages/backend/src/server/api/endpoints/following/delete.ts b/packages/backend/src/server/api/endpoints/following/delete.ts
index 95fd254f48..e8019b1c32 100644
--- a/packages/backend/src/server/api/endpoints/following/delete.ts
+++ b/packages/backend/src/server/api/endpoints/following/delete.ts
@@ -3,7 +3,7 @@ import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
import { getUser } from "@/server/api/common/getters.js";
import { Followings, Users } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["following", "users"],
diff --git a/packages/backend/src/server/api/endpoints/following/invalidate.ts b/packages/backend/src/server/api/endpoints/following/invalidate.ts
index 1baa8df64f..37478b2c93 100644
--- a/packages/backend/src/server/api/endpoints/following/invalidate.ts
+++ b/packages/backend/src/server/api/endpoints/following/invalidate.ts
@@ -3,7 +3,7 @@ import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
import { getUser } from "@/server/api/common/getters.js";
import { Followings, Users } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["following", "users"],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
index eda2d81e5c..ee237c7abb 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
@@ -1,6 +1,7 @@
import define from "@/server/api/define.js";
import { DriveFiles, GalleryPosts } from "@/models/index.js";
-import { HOUR, genIdAt } from "backend-rs";
+import { genIdAt } from "backend-rs";
+import { HOUR } from "@/const.js";
import { GalleryPost } from "@/models/entities/gallery-post.js";
import type { DriveFile } from "@/models/entities/drive-file.js";
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/update.ts b/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
index a8a3d46890..16c629706c 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
@@ -1,7 +1,7 @@
import define from "@/server/api/define.js";
import { DriveFiles, GalleryPosts } from "@/models/index.js";
import type { DriveFile } from "@/models/entities/drive-file.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["gallery"],
diff --git a/packages/backend/src/server/api/endpoints/get-online-users-count.ts b/packages/backend/src/server/api/endpoints/get-online-users-count.ts
index d6cfa14ece..633e75335a 100644
--- a/packages/backend/src/server/api/endpoints/get-online-users-count.ts
+++ b/packages/backend/src/server/api/endpoints/get-online-users-count.ts
@@ -1,5 +1,5 @@
import { MoreThan } from "typeorm";
-import { USER_ONLINE_THRESHOLD } from "backend-rs";
+import { USER_ONLINE_THRESHOLD } from "@/const.js";
import { Users } from "@/models/index.js";
import define from "@/server/api/define.js";
diff --git a/packages/backend/src/server/api/endpoints/i/export-blocking.ts b/packages/backend/src/server/api/endpoints/i/export-blocking.ts
index 68c875aa00..30e74ab2f5 100644
--- a/packages/backend/src/server/api/endpoints/i/export-blocking.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-blocking.ts
@@ -1,6 +1,6 @@
import define from "@/server/api/define.js";
import { createExportBlockingJob } from "@/queue/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/export-followers.ts b/packages/backend/src/server/api/endpoints/i/export-followers.ts
index d14bc5b51a..2fe45455ff 100644
--- a/packages/backend/src/server/api/endpoints/i/export-followers.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-followers.ts
@@ -1,6 +1,6 @@
import define from "@/server/api/define.js";
import { createExportFollowersJob } from "@/queue/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/export-following.ts b/packages/backend/src/server/api/endpoints/i/export-following.ts
index 5bce16f0ef..07d2997a18 100644
--- a/packages/backend/src/server/api/endpoints/i/export-following.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-following.ts
@@ -1,6 +1,6 @@
import define from "@/server/api/define.js";
import { createExportFollowingJob } from "@/queue/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/export-mute.ts b/packages/backend/src/server/api/endpoints/i/export-mute.ts
index 1b1fcf7241..7d22a073e6 100644
--- a/packages/backend/src/server/api/endpoints/i/export-mute.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-mute.ts
@@ -1,6 +1,6 @@
import define from "@/server/api/define.js";
import { createExportMuteJob } from "@/queue/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/export-notes.ts b/packages/backend/src/server/api/endpoints/i/export-notes.ts
index 9984c7656b..f167bb83cb 100644
--- a/packages/backend/src/server/api/endpoints/i/export-notes.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-notes.ts
@@ -1,6 +1,6 @@
import define from "@/server/api/define.js";
import { createExportNotesJob } from "@/queue/index.js";
-import { DAY } from "backend-rs";
+import { DAY } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/export-user-lists.ts b/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
index e3b30d2d98..b68d889dcd 100644
--- a/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
@@ -1,6 +1,6 @@
import define from "@/server/api/define.js";
import { createExportUserListsJob } from "@/queue/index.js";
-import { MINUTE } from "backend-rs";
+import { MINUTE } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-blocking.ts b/packages/backend/src/server/api/endpoints/i/import-blocking.ts
index b7cb6e6518..58314aced3 100644
--- a/packages/backend/src/server/api/endpoints/i/import-blocking.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-blocking.ts
@@ -2,7 +2,7 @@ import define from "@/server/api/define.js";
import { createImportBlockingJob } from "@/queue/index.js";
import { ApiError } from "@/server/api/error.js";
import { DriveFiles } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-following.ts b/packages/backend/src/server/api/endpoints/i/import-following.ts
index 8c20ff3591..b7c475698c 100644
--- a/packages/backend/src/server/api/endpoints/i/import-following.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-following.ts
@@ -2,7 +2,7 @@ import define from "@/server/api/define.js";
import { createImportFollowingJob } from "@/queue/index.js";
import { ApiError } from "@/server/api/error.js";
import { DriveFiles } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-muting.ts b/packages/backend/src/server/api/endpoints/i/import-muting.ts
index 5ff4c94a29..494fb0d420 100644
--- a/packages/backend/src/server/api/endpoints/i/import-muting.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-muting.ts
@@ -2,7 +2,7 @@ import define from "@/server/api/define.js";
import { createImportMutingJob } from "@/queue/index.js";
import { ApiError } from "@/server/api/error.js";
import { DriveFiles } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-posts.ts b/packages/backend/src/server/api/endpoints/i/import-posts.ts
index 01f61138f5..1d81f69c0c 100644
--- a/packages/backend/src/server/api/endpoints/i/import-posts.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-posts.ts
@@ -2,7 +2,8 @@ import define from "@/server/api/define.js";
import { createImportPostsJob } from "@/queue/index.js";
import { ApiError } from "@/server/api/error.js";
import { DriveFiles } from "@/models/index.js";
-import { fetchMeta, DAY } from "backend-rs";
+import { fetchMeta } from "backend-rs";
+import { DAY } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-user-lists.ts b/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
index 03aa14ac2b..ed82a96054 100644
--- a/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
@@ -2,7 +2,7 @@ import define from "@/server/api/define.js";
import { createImportUserListsJob } from "@/queue/index.js";
import { ApiError } from "@/server/api/error.js";
import { DriveFiles } from "@/models/index.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/known-as.ts b/packages/backend/src/server/api/endpoints/i/known-as.ts
index 62b1cd96ad..63d21d93e3 100644
--- a/packages/backend/src/server/api/endpoints/i/known-as.ts
+++ b/packages/backend/src/server/api/endpoints/i/known-as.ts
@@ -4,7 +4,8 @@ import { resolveUser } from "@/remote/resolve-user.js";
import acceptAllFollowRequests from "@/services/following/requests/accept-all.js";
import { publishToFollowers } from "@/services/i/update.js";
import { publishMainStream } from "@/services/stream.js";
-import { stringToAcct, DAY } from "backend-rs";
+import { stringToAcct } from "backend-rs";
+import { DAY } from "@/const.js";
import { apiLogger } from "@/server/api/logger.js";
import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
diff --git a/packages/backend/src/server/api/endpoints/i/move.ts b/packages/backend/src/server/api/endpoints/i/move.ts
index 90a0051759..e7808d7b0a 100644
--- a/packages/backend/src/server/api/endpoints/i/move.ts
+++ b/packages/backend/src/server/api/endpoints/i/move.ts
@@ -1,6 +1,7 @@
import type { User } from "@/models/entities/user.js";
import { resolveUser } from "@/remote/resolve-user.js";
-import { stringToAcct, DAY } from "backend-rs";
+import { stringToAcct } from "backend-rs";
+import { DAY } from "@/const.js";
import DeliverManager from "@/remote/activitypub/deliver-manager.js";
import { renderActivity } from "@/remote/activitypub/renderer/index.js";
import define from "@/server/api/define.js";
diff --git a/packages/backend/src/server/api/endpoints/i/update-email.ts b/packages/backend/src/server/api/endpoints/i/update-email.ts
index 393a358545..d894eb07e9 100644
--- a/packages/backend/src/server/api/endpoints/i/update-email.ts
+++ b/packages/backend/src/server/api/endpoints/i/update-email.ts
@@ -6,7 +6,8 @@ import { Users, UserProfiles } from "@/models/index.js";
import { sendEmail } from "@/services/send-email.js";
import { ApiError } from "@/server/api/error.js";
import { validateEmailForAccount } from "@/services/validate-email-for-account.js";
-import { HOUR, verifyPassword } from "backend-rs";
+import { verifyPassword } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts b/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts
index 1b9734c85c..76691dd34d 100644
--- a/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts
+++ b/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts
@@ -2,7 +2,7 @@ import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
import { MessagingMessages } from "@/models/index.js";
import { deleteMessage } from "@/services/messages/delete.js";
-import { SECOND, HOUR } from "backend-rs";
+import { SECOND, HOUR } from "@/const.js";
export const meta = {
tags: ["messaging"],
diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts
index 17f9a7ece9..0d19716806 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.ts
@@ -15,7 +15,7 @@ import { config } from "@/config.js";
import { noteVisibilities } from "@/types.js";
import { ApiError } from "@/server/api/error.js";
import define from "@/server/api/define.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
import { getNote } from "@/server/api/common/getters.js";
import { langmap } from "firefish-js";
import { createScheduledNoteJob } from "@/queue/index.js";
diff --git a/packages/backend/src/server/api/endpoints/notes/delete.ts b/packages/backend/src/server/api/endpoints/notes/delete.ts
index b5a77af094..54aad1ebad 100644
--- a/packages/backend/src/server/api/endpoints/notes/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/delete.ts
@@ -3,7 +3,7 @@ import { Users } from "@/models/index.js";
import define from "@/server/api/define.js";
import { getNote } from "@/server/api/common/getters.js";
import { ApiError } from "@/server/api/error.js";
-import { SECOND, HOUR } from "backend-rs";
+import { SECOND, HOUR } from "@/const.js";
export const meta = {
tags: ["notes"],
diff --git a/packages/backend/src/server/api/endpoints/notes/edit.ts b/packages/backend/src/server/api/endpoints/notes/edit.ts
index 547aee287c..5c014993b5 100644
--- a/packages/backend/src/server/api/endpoints/notes/edit.ts
+++ b/packages/backend/src/server/api/endpoints/notes/edit.ts
@@ -18,7 +18,8 @@ import { config } from "@/config.js";
import { noteVisibilities } from "@/types.js";
import { ApiError } from "@/server/api/error.js";
import define from "@/server/api/define.js";
-import { genId, HOUR } from "backend-rs";
+import { genId } from "backend-rs";
+import { HOUR } from "@/const.js";
import { getNote } from "@/server/api/common/getters.js";
import { Poll } from "@/models/entities/poll.js";
import * as mfm from "mfm-js";
diff --git a/packages/backend/src/server/api/endpoints/notes/make-private.ts b/packages/backend/src/server/api/endpoints/notes/make-private.ts
index 795863b003..5ddf1f3bf1 100644
--- a/packages/backend/src/server/api/endpoints/notes/make-private.ts
+++ b/packages/backend/src/server/api/endpoints/notes/make-private.ts
@@ -3,7 +3,7 @@ import { Notes } from "@/models/index.js";
import define from "@/server/api/define.js";
import { getNote } from "@/server/api/common/getters.js";
import { ApiError } from "@/server/api/error.js";
-import { SECOND, HOUR } from "backend-rs";
+import { SECOND, HOUR } from "@/const.js";
import { publishNoteStream } from "@/services/stream.js";
export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts b/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts
index b5f942f650..f135bd7ffa 100644
--- a/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts
@@ -2,7 +2,7 @@ import deleteReaction from "@/services/note/reaction/delete.js";
import define from "@/server/api/define.js";
import { getNote } from "@/server/api/common/getters.js";
import { ApiError } from "@/server/api/error.js";
-import { SECOND, HOUR } from "backend-rs";
+import { SECOND, HOUR } from "@/const.js";
export const meta = {
tags: ["reactions", "notes"],
diff --git a/packages/backend/src/server/api/endpoints/notes/unrenote.ts b/packages/backend/src/server/api/endpoints/notes/unrenote.ts
index 1b8f544f7b..3f6f260eeb 100644
--- a/packages/backend/src/server/api/endpoints/notes/unrenote.ts
+++ b/packages/backend/src/server/api/endpoints/notes/unrenote.ts
@@ -3,7 +3,7 @@ import { Notes, Users } from "@/models/index.js";
import define from "@/server/api/define.js";
import { getNote } from "@/server/api/common/getters.js";
import { ApiError } from "@/server/api/error.js";
-import { SECOND, HOUR } from "backend-rs";
+import { SECOND, HOUR } from "@/const.js";
export const meta = {
tags: ["notes"],
diff --git a/packages/backend/src/server/api/endpoints/pages/create.ts b/packages/backend/src/server/api/endpoints/pages/create.ts
index 4677352258..e7eb771f31 100644
--- a/packages/backend/src/server/api/endpoints/pages/create.ts
+++ b/packages/backend/src/server/api/endpoints/pages/create.ts
@@ -1,5 +1,6 @@
import { Pages, DriveFiles } from "@/models/index.js";
-import { genIdAt, HOUR } from "backend-rs";
+import { genIdAt } from "backend-rs";
+import { HOUR } from "@/const.js";
import { Page } from "@/models/entities/page.js";
import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
diff --git a/packages/backend/src/server/api/endpoints/pages/update.ts b/packages/backend/src/server/api/endpoints/pages/update.ts
index 7a4c47a81d..9509ebfb81 100644
--- a/packages/backend/src/server/api/endpoints/pages/update.ts
+++ b/packages/backend/src/server/api/endpoints/pages/update.ts
@@ -2,7 +2,7 @@ import { Not } from "typeorm";
import { Pages, DriveFiles } from "@/models/index.js";
import define from "@/server/api/define.js";
import { ApiError } from "@/server/api/error.js";
-import { HOUR } from "backend-rs";
+import { HOUR } from "@/const.js";
export const meta = {
tags: ["pages"],
diff --git a/packages/backend/src/server/api/endpoints/request-reset-password.ts b/packages/backend/src/server/api/endpoints/request-reset-password.ts
index ed269de15f..ae6048194b 100644
--- a/packages/backend/src/server/api/endpoints/request-reset-password.ts
+++ b/packages/backend/src/server/api/endpoints/request-reset-password.ts
@@ -3,7 +3,8 @@ import { IsNull } from "typeorm";
import { config } from "@/config.js";
import { Users, UserProfiles, PasswordResetRequests } from "@/models/index.js";
import { sendEmail } from "@/services/send-email.js";
-import { HOUR, genIdAt } from "backend-rs";
+import { genIdAt } from "backend-rs";
+import { HOUR } from "@/const.js";
import define from "@/server/api/define.js";
export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/users/recommendation.ts b/packages/backend/src/server/api/endpoints/users/recommendation.ts
index 1ff242b097..4ea0d618ed 100644
--- a/packages/backend/src/server/api/endpoints/users/recommendation.ts
+++ b/packages/backend/src/server/api/endpoints/users/recommendation.ts
@@ -5,7 +5,7 @@ import {
generateBlockedUserQuery,
generateBlockQueryForUsers,
} from "@/server/api/common/generate-block-query.js";
-import { DAY } from "backend-rs";
+import { DAY } from "@/const.js";
export const meta = {
tags: ["users"],
diff --git a/packages/backend/src/server/api/mastodon/helpers/misc.ts b/packages/backend/src/server/api/mastodon/helpers/misc.ts
index 96d6251252..5d43423815 100644
--- a/packages/backend/src/server/api/mastodon/helpers/misc.ts
+++ b/packages/backend/src/server/api/mastodon/helpers/misc.ts
@@ -1,5 +1,5 @@
import { config } from "@/config.js";
-import { FILE_TYPE_BROWSERSAFE } from "backend-rs";
+import { FILE_TYPE_BROWSERSAFE } from "@/const.js";
import { countLocalUsers, fetchMeta } from "backend-rs";
import {
AnnouncementReads,
diff --git a/packages/backend/src/server/file/send-drive-file.ts b/packages/backend/src/server/file/send-drive-file.ts
index 4cfe6095cd..cef94d2659 100644
--- a/packages/backend/src/server/file/send-drive-file.ts
+++ b/packages/backend/src/server/file/send-drive-file.ts
@@ -15,7 +15,7 @@ import { convertToWebp } from "@/services/drive/image-processor.js";
import { GenerateVideoThumbnail } from "@/services/drive/generate-video-thumbnail.js";
import { StatusError } from "@/misc/fetch.js";
import { ByteRangeReadable } from "./byte-range-readable.js";
-import { FILE_TYPE_BROWSERSAFE } from "backend-rs";
+import { FILE_TYPE_BROWSERSAFE } from "@/const.js";
import { inspect } from "node:util";
const _filename = fileURLToPath(import.meta.url);
diff --git a/packages/backend/src/server/proxy/proxy-media.ts b/packages/backend/src/server/proxy/proxy-media.ts
index 4ede3d4bdb..bb43c21f83 100644
--- a/packages/backend/src/server/proxy/proxy-media.ts
+++ b/packages/backend/src/server/proxy/proxy-media.ts
@@ -9,7 +9,7 @@ import { createTemp } from "@/misc/create-temp.js";
import { downloadUrl } from "@/misc/download-url.js";
import { detectType } from "@/misc/get-file-info.js";
import { StatusError } from "@/misc/fetch.js";
-import { FILE_TYPE_BROWSERSAFE } from "backend-rs";
+import { FILE_TYPE_BROWSERSAFE } from "@/const.js";
import { serverLogger } from "../index.js";
import { isMimeImage } from "@/misc/is-mime-image.js";
import { inspect } from "node:util";
diff --git a/packages/backend/src/server/web/index.ts b/packages/backend/src/server/web/index.ts
index af6e237be6..fe15a70a79 100644
--- a/packages/backend/src/server/web/index.ts
+++ b/packages/backend/src/server/web/index.ts
@@ -16,13 +16,12 @@ import { KoaAdapter } from "@bull-board/koa";
import { In, IsNull } from "typeorm";
import {
- MINUTE,
- DAY,
getNoteSummary,
stringToAcct,
fetchMeta,
metaToPugArgs,
} from "backend-rs";
+import { MINUTE, DAY } from "@/const.js";
import { config } from "@/config.js";
import {
Users,
diff --git a/packages/backend/src/services/drive/add-file.ts b/packages/backend/src/services/drive/add-file.ts
index 9f4d088ef8..c729a5e7a0 100644
--- a/packages/backend/src/services/drive/add-file.ts
+++ b/packages/backend/src/services/drive/add-file.ts
@@ -7,11 +7,11 @@ import sharp from "sharp";
import { IsNull } from "typeorm";
import { publishMainStream } from "@/services/stream.js";
import {
- FILE_TYPE_BROWSERSAFE,
fetchMeta,
genId,
publishToDriveFileStream,
} from "backend-rs";
+import { FILE_TYPE_BROWSERSAFE } from "@/const.js";
import { contentDisposition } from "@/misc/content-disposition.js";
import { getFileInfo } from "@/misc/get-file-info.js";
import {