mirror of
https://example.com
synced 2024-11-22 11:16:38 +09:00
refactor: move misc/fetch-meta.ts to backend-rs
This commit is contained in:
parent
c777931168
commit
79af7b0eae
65 changed files with 213 additions and 141 deletions
|
@ -295,11 +295,13 @@ if (!nativeBinding) {
|
||||||
throw new Error(`Failed to load native binding`)
|
throw new Error(`Failed to load native binding`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const { EnvConfig, readEnvironmentConfig, readServerConfig, AntennaSrcEnum, MutedNoteReasonEnum, NoteVisibilityEnum, NotificationTypeEnum, PageVisibilityEnum, PollNotevisibilityEnum, RelayStatusEnum, UserEmojimodpermEnum, UserProfileFfvisibilityEnum, UserProfileMutingnotificationtypesEnum, stringToAcct, acctToString, getFullApAccount, isSelfHost, extractHost, toPuny, toPunyOptional, convertToHiddenPost, sqlLikeEscape, safeForSql, formatMilliseconds, nativeInitIdGenerator, nativeCreateId, nativeGetTimestamp, genString, IdConvertType, convertId } = nativeBinding
|
const { EnvConfig, readEnvironmentConfig, readServerConfig, JsDbConn, connectToDatabase, AntennaSrcEnum, MutedNoteReasonEnum, NoteVisibilityEnum, NotificationTypeEnum, PageVisibilityEnum, PollNotevisibilityEnum, RelayStatusEnum, UserEmojimodpermEnum, UserProfileFfvisibilityEnum, UserProfileMutingnotificationtypesEnum, stringToAcct, acctToString, getFullApAccount, isSelfHost, extractHost, toPuny, toPunyOptional, convertToHiddenPost, sqlLikeEscape, safeForSql, formatMilliseconds, nativeInitIdGenerator, nativeCreateId, nativeGetTimestamp, fetchMeta, metaToPugArgs, genString, IdConvertType, convertId } = nativeBinding
|
||||||
|
|
||||||
module.exports.EnvConfig = EnvConfig
|
module.exports.EnvConfig = EnvConfig
|
||||||
module.exports.readEnvironmentConfig = readEnvironmentConfig
|
module.exports.readEnvironmentConfig = readEnvironmentConfig
|
||||||
module.exports.readServerConfig = readServerConfig
|
module.exports.readServerConfig = readServerConfig
|
||||||
|
module.exports.JsDbConn = JsDbConn
|
||||||
|
module.exports.connectToDatabase = connectToDatabase
|
||||||
module.exports.AntennaSrcEnum = AntennaSrcEnum
|
module.exports.AntennaSrcEnum = AntennaSrcEnum
|
||||||
module.exports.MutedNoteReasonEnum = MutedNoteReasonEnum
|
module.exports.MutedNoteReasonEnum = MutedNoteReasonEnum
|
||||||
module.exports.NoteVisibilityEnum = NoteVisibilityEnum
|
module.exports.NoteVisibilityEnum = NoteVisibilityEnum
|
||||||
|
@ -324,6 +326,8 @@ module.exports.formatMilliseconds = formatMilliseconds
|
||||||
module.exports.nativeInitIdGenerator = nativeInitIdGenerator
|
module.exports.nativeInitIdGenerator = nativeInitIdGenerator
|
||||||
module.exports.nativeCreateId = nativeCreateId
|
module.exports.nativeCreateId = nativeCreateId
|
||||||
module.exports.nativeGetTimestamp = nativeGetTimestamp
|
module.exports.nativeGetTimestamp = nativeGetTimestamp
|
||||||
|
module.exports.fetchMeta = fetchMeta
|
||||||
|
module.exports.metaToPugArgs = metaToPugArgs
|
||||||
module.exports.genString = genString
|
module.exports.genString = genString
|
||||||
module.exports.IdConvertType = IdConvertType
|
module.exports.IdConvertType = IdConvertType
|
||||||
module.exports.convertId = convertId
|
module.exports.convertId = convertId
|
||||||
|
|
1
packages/backend-rs/Cargo.lock
generated
1
packages/backend-rs/Cargo.lock
generated
|
@ -222,6 +222,7 @@ dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
"url",
|
"url",
|
||||||
|
"urlencoding",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -33,6 +33,7 @@ url = "2.5.0"
|
||||||
napi = { version = "2.14.4", default-features = false, features = ["napi9", "tokio_rt", "chrono_date", "serde-json"] }
|
napi = { version = "2.14.4", default-features = false, features = ["napi9", "tokio_rt", "chrono_date", "serde-json"] }
|
||||||
napi-derive = { version = "2.14.6", optional = true }
|
napi-derive = { version = "2.14.6", optional = true }
|
||||||
basen = "0.1.0"
|
basen = "0.1.0"
|
||||||
|
urlencoding = "2.1.3"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
pretty_assertions = "1.4.0"
|
pretty_assertions = "1.4.0"
|
||||||
|
|
|
@ -11,3 +11,12 @@ pub enum Error {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_napi_error_from!(Error);
|
impl_napi_error_from!(Error);
|
||||||
|
|
||||||
|
pub trait NapiDbErrExt {
|
||||||
|
fn into(self) -> napi::Error;
|
||||||
|
}
|
||||||
|
impl NapiDbErrExt for DbErr {
|
||||||
|
fn into(self) -> napi::Error {
|
||||||
|
napi::Error::from_reason(self.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,26 +1,50 @@
|
||||||
pub mod error;
|
pub mod error;
|
||||||
|
pub use error::NapiDbErrExt;
|
||||||
|
|
||||||
use error::Error;
|
use crate::config::server::DbConfig;
|
||||||
use sea_orm::{Database, DbConn};
|
use sea_orm::{Database, DbConn};
|
||||||
|
use urlencoding::encode;
|
||||||
|
|
||||||
static DB_CONN: once_cell::sync::OnceCell<DbConn> = once_cell::sync::OnceCell::new();
|
#[napi_derive::napi]
|
||||||
|
pub struct JsDbConn {
|
||||||
pub async fn init_database(conn_uri: impl Into<String>) -> Result<(), Error> {
|
inner: DbConn,
|
||||||
let conn = Database::connect(conn_uri.into()).await?;
|
}
|
||||||
DB_CONN.get_or_init(move || conn);
|
impl JsDbConn {
|
||||||
Ok(())
|
pub fn inner(&self) -> &DbConn {
|
||||||
|
&self.inner
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_database() -> Result<&'static DbConn, Error> {
|
#[napi_derive::napi]
|
||||||
DB_CONN.get().ok_or(Error::Uninitialized)
|
pub async fn connect_to_database(config: DbConfig) -> napi::Result<JsDbConn> {
|
||||||
|
let conn_uri = format!(
|
||||||
|
"postgres://{}:{}@{}:{}/{}",
|
||||||
|
config.user,
|
||||||
|
encode(&config.pass),
|
||||||
|
config.host,
|
||||||
|
config.port,
|
||||||
|
config.db,
|
||||||
|
);
|
||||||
|
let conn = Database::connect(conn_uri)
|
||||||
|
.await
|
||||||
|
.map_err(NapiDbErrExt::into)?;
|
||||||
|
Ok(JsDbConn { inner: conn })
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod unit_test {
|
mod unit_test {
|
||||||
use super::{error::Error, get_database};
|
use super::connect_to_database;
|
||||||
|
use crate::config::server::read_server_config;
|
||||||
|
|
||||||
#[test]
|
#[tokio::test]
|
||||||
fn error_uninitialized() {
|
async fn connect_with_server_config() {
|
||||||
assert_eq!(get_database().unwrap_err(), Error::Uninitialized);
|
assert!(connect_to_database(read_server_config().db).await.is_ok());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn connect_with_incorrect_password() {
|
||||||
|
let mut config = read_server_config().db;
|
||||||
|
config.pass.push('.'); // password should be incorrect now
|
||||||
|
assert!(connect_to_database(config).await.is_err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
87
packages/backend-rs/src/util/meta.rs
Normal file
87
packages/backend-rs/src/util/meta.rs
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
use crate::database::{JsDbConn, NapiDbErrExt};
|
||||||
|
use crate::model::entity::meta;
|
||||||
|
use rand::prelude::*;
|
||||||
|
use sea_orm::{prelude::*, ActiveValue};
|
||||||
|
use std::sync::Mutex;
|
||||||
|
|
||||||
|
type Meta = meta::Model;
|
||||||
|
|
||||||
|
static CACHE: Mutex<Option<Meta>> = Mutex::new(None);
|
||||||
|
fn update_cache(meta: &Meta) {
|
||||||
|
let _ = CACHE.lock().map(|mut cache| *cache = Some(meta.clone()));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[napi_derive::napi]
|
||||||
|
pub async fn fetch_meta(conn: &JsDbConn, invalidate_cache: Option<bool>) -> napi::Result<Meta> {
|
||||||
|
// try using cache
|
||||||
|
if invalidate_cache == Some(true) {
|
||||||
|
if let Some(cache) = CACHE.lock().ok().and_then(|cache| cache.clone()) {
|
||||||
|
return Ok(cache);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// try fetching from db
|
||||||
|
let db = conn.inner();
|
||||||
|
let meta = meta::Entity::find()
|
||||||
|
.one(db)
|
||||||
|
.await
|
||||||
|
.map_err(NapiDbErrExt::into)?;
|
||||||
|
if let Some(meta) = meta {
|
||||||
|
update_cache(&meta);
|
||||||
|
return Ok(meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a new meta object and insert into db
|
||||||
|
let meta = meta::Entity::insert(meta::ActiveModel {
|
||||||
|
id: ActiveValue::Set("x".to_owned()),
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
.exec_with_returning(db)
|
||||||
|
.await
|
||||||
|
.map_err(NapiDbErrExt::into)?;
|
||||||
|
update_cache(&meta);
|
||||||
|
Ok(meta)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[napi_derive::napi(object)]
|
||||||
|
pub struct PugArgs {
|
||||||
|
pub img: Option<String>,
|
||||||
|
pub title: String,
|
||||||
|
pub instance_name: String,
|
||||||
|
pub desc: Option<String>,
|
||||||
|
pub icon: Option<String>,
|
||||||
|
pub splash_icon: Option<String>,
|
||||||
|
pub theme_color: Option<String>,
|
||||||
|
pub random_motd: String,
|
||||||
|
pub private_mode: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[napi_derive::napi]
|
||||||
|
pub fn meta_to_pug_args(meta: Meta) -> PugArgs {
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
|
||||||
|
let splash_icon = meta
|
||||||
|
.custom_splash_icons
|
||||||
|
.choose(&mut rng)
|
||||||
|
.map(|s| s.to_owned())
|
||||||
|
.or_else(|| meta.icon_url.to_owned());
|
||||||
|
|
||||||
|
let random_motd = meta
|
||||||
|
.custom_motd
|
||||||
|
.choose(&mut rng)
|
||||||
|
.map(|s| s.to_owned())
|
||||||
|
.unwrap_or_else(|| "Loading...".to_owned());
|
||||||
|
|
||||||
|
let name = meta.name.unwrap_or_else(|| "Firefish".to_owned());
|
||||||
|
PugArgs {
|
||||||
|
img: meta.banner_url,
|
||||||
|
title: name.clone(),
|
||||||
|
instance_name: name.clone(),
|
||||||
|
desc: meta.description,
|
||||||
|
icon: meta.icon_url,
|
||||||
|
splash_icon,
|
||||||
|
theme_color: meta.theme_color,
|
||||||
|
random_motd,
|
||||||
|
private_mode: meta.private_mode,
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,4 +4,5 @@ pub mod convert_to_hidden_post;
|
||||||
pub mod escape_sql;
|
pub mod escape_sql;
|
||||||
pub mod format_milliseconds;
|
pub mod format_milliseconds;
|
||||||
pub mod id;
|
pub mod id;
|
||||||
|
pub mod meta;
|
||||||
pub mod random;
|
pub mod random;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import si from "systeminformation";
|
import si from "systeminformation";
|
||||||
import Xev from "xev";
|
import Xev from "xev";
|
||||||
import * as osUtils from "os-utils";
|
import * as osUtils from "os-utils";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
// import meilisearch from "@/db/meilisearch.js";
|
// import meilisearch from "@/db/meilisearch.js";
|
||||||
|
|
||||||
const ev = new Xev();
|
const ev = new Xev();
|
||||||
|
|
|
@ -1,15 +1,26 @@
|
||||||
import {
|
import {
|
||||||
readServerConfig,
|
readServerConfig,
|
||||||
readEnvironmentConfig,
|
readEnvironmentConfig,
|
||||||
|
connectToDatabase,
|
||||||
|
fetchMeta as fetchMetaImpl,
|
||||||
getFullApAccount as getFullApAccountImpl,
|
getFullApAccount as getFullApAccountImpl,
|
||||||
isSelfHost as isSelfHostImpl,
|
isSelfHost as isSelfHostImpl,
|
||||||
|
JsDbConn,
|
||||||
} from "backend-rs";
|
} from "backend-rs";
|
||||||
|
|
||||||
export const serverConfig = readServerConfig();
|
export const serverConfig = readServerConfig();
|
||||||
export const envConfig = readEnvironmentConfig();
|
export const envConfig = readEnvironmentConfig();
|
||||||
|
const dbPromise = connectToDatabase(serverConfig.db);
|
||||||
|
|
||||||
type Option<T> = T | null | undefined;
|
type Option<T> = T | null | undefined;
|
||||||
|
|
||||||
|
const curryDb =
|
||||||
|
<P extends any[], R>(f: (db: JsDbConn, ...args: P) => Promise<R>) =>
|
||||||
|
(...args: P) =>
|
||||||
|
dbPromise.then((db) => f(db, ...args));
|
||||||
|
|
||||||
|
export const fetchMeta = curryDb(fetchMetaImpl);
|
||||||
|
|
||||||
export function getFullApAccount(
|
export function getFullApAccount(
|
||||||
username: string,
|
username: string,
|
||||||
host: Option<string>,
|
host: Option<string>,
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
import { db } from "@/db/postgre.js";
|
|
||||||
import { Meta } from "@/models/entities/meta.js";
|
|
||||||
|
|
||||||
let cache: Meta;
|
|
||||||
|
|
||||||
export function metaToPugArgs(meta: Meta): object {
|
|
||||||
let motd = ["Loading..."];
|
|
||||||
if (meta.customMotd.length > 0) {
|
|
||||||
motd = meta.customMotd;
|
|
||||||
}
|
|
||||||
let splashIconUrl = meta.iconUrl;
|
|
||||||
if (meta.customSplashIcons.length > 0) {
|
|
||||||
splashIconUrl =
|
|
||||||
meta.customSplashIcons[
|
|
||||||
Math.floor(Math.random() * meta.customSplashIcons.length)
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
img: meta.bannerUrl,
|
|
||||||
title: meta.name || "Firefish",
|
|
||||||
instanceName: meta.name || "Firefish",
|
|
||||||
desc: meta.description,
|
|
||||||
icon: meta.iconUrl,
|
|
||||||
splashIcon: splashIconUrl,
|
|
||||||
themeColor: meta.themeColor,
|
|
||||||
randomMOTD: motd[Math.floor(Math.random() * motd.length)],
|
|
||||||
privateMode: meta.privateMode,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function fetchMeta(noCache = false): Promise<Meta> {
|
|
||||||
if (!noCache && cache) return cache;
|
|
||||||
|
|
||||||
return await db.transaction(async (transactionalEntityManager) => {
|
|
||||||
// New IDs are prioritized because multiple records may have been created due to past bugs.
|
|
||||||
const metas = await transactionalEntityManager.find(Meta, {
|
|
||||||
order: {
|
|
||||||
id: "DESC",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const meta = metas[0];
|
|
||||||
|
|
||||||
if (meta) {
|
|
||||||
cache = meta;
|
|
||||||
return meta;
|
|
||||||
} else {
|
|
||||||
// If fetchMeta is called at the same time when meta is empty, this part may be called at the same time, so use fail-safe upsert.
|
|
||||||
const saved = await transactionalEntityManager
|
|
||||||
.upsert(
|
|
||||||
Meta,
|
|
||||||
{
|
|
||||||
id: "x",
|
|
||||||
},
|
|
||||||
["id"],
|
|
||||||
)
|
|
||||||
.then((x) =>
|
|
||||||
transactionalEntityManager.findOneByOrFail(Meta, x.identifiers[0]),
|
|
||||||
);
|
|
||||||
|
|
||||||
cache = saved;
|
|
||||||
return saved;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
setInterval(() => {
|
|
||||||
fetchMeta(true).then((meta) => {
|
|
||||||
cache = meta;
|
|
||||||
});
|
|
||||||
}, 1000 * 10);
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { fetchMeta } from "./fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import type { ILocalUser } from "@/models/entities/user.js";
|
import type { ILocalUser } from "@/models/entities/user.js";
|
||||||
import { Users } from "@/models/index.js";
|
import { Users } from "@/models/index.js";
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { emojiRegex } from "./emoji-regex.js";
|
import { emojiRegex } from "./emoji-regex.js";
|
||||||
import { fetchMeta } from "./fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Emojis } from "@/models/index.js";
|
import { Emojis } from "@/models/index.js";
|
||||||
import { toPunyOptional } from "backend-rs";
|
import { toPunyOptional } from "backend-rs";
|
||||||
import { IsNull } from "typeorm";
|
import { IsNull } from "typeorm";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import type { Instance } from "@/models/entities/instance.js";
|
import type { Instance } from "@/models/entities/instance.js";
|
||||||
import type { Meta } from "@/models/entities/meta.js";
|
import type { Meta } from "@/models/entities/meta.js";
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Brackets } from "typeorm";
|
import { Brackets } from "typeorm";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Instances } from "@/models/index.js";
|
import { Instances } from "@/models/index.js";
|
||||||
import type { Instance } from "@/models/entities/instance.js";
|
import type { Instance } from "@/models/entities/instance.js";
|
||||||
import { DAY } from "@/const.js";
|
import { DAY } from "@/const.js";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
import { Converter } from "opencc-js";
|
import { Converter } from "opencc-js";
|
||||||
import { getAgentByUrl } from "@/misc/fetch.js";
|
import { getAgentByUrl } from "@/misc/fetch.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import type { Language } from "@/misc/langmap";
|
import type { Language } from "@/misc/langmap";
|
||||||
import * as deepl from "deepl-node";
|
import * as deepl from "deepl-node";
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ import perform from "@/remote/activitypub/perform.js";
|
||||||
import Logger from "@/services/logger.js";
|
import Logger from "@/services/logger.js";
|
||||||
import { registerOrFetchInstanceDoc } from "@/services/register-or-fetch-instance-doc.js";
|
import { registerOrFetchInstanceDoc } from "@/services/register-or-fetch-instance-doc.js";
|
||||||
import { Instances } from "@/models/index.js";
|
import { Instances } from "@/models/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { toPuny, extractHost } from "backend-rs";
|
import { toPuny, extractHost } from "backend-rs";
|
||||||
import { getApId } from "@/remote/activitypub/type.js";
|
import { getApId } from "@/remote/activitypub/type.js";
|
||||||
import { fetchInstanceMetadata } from "@/services/fetch-instance-metadata.js";
|
import { fetchInstanceMetadata } from "@/services/fetch-instance-metadata.js";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { URL } from "url";
|
import { URL } from "url";
|
||||||
import httpSignature, { IParsedSignature } from "@peertube/http-signature";
|
import httpSignature, { IParsedSignature } from "@peertube/http-signature";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { toPuny } from "backend-rs";
|
import { toPuny } from "backend-rs";
|
||||||
import DbResolver from "@/remote/activitypub/db-resolver.js";
|
import DbResolver from "@/remote/activitypub/db-resolver.js";
|
||||||
import { getApId } from "@/remote/activitypub/type.js";
|
import { getApId } from "@/remote/activitypub/type.js";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { uploadFromUrl } from "@/services/drive/upload-from-url.js";
|
import { uploadFromUrl } from "@/services/drive/upload-from-url.js";
|
||||||
import type { CacheableRemoteUser } from "@/models/entities/user.js";
|
import type { CacheableRemoteUser } from "@/models/entities/user.js";
|
||||||
import Resolver from "../resolver.js";
|
import Resolver from "../resolver.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { apLogger } from "../logger.js";
|
import { apLogger } from "../logger.js";
|
||||||
import type { DriveFile } from "@/models/entities/drive-file.js";
|
import type { DriveFile } from "@/models/entities/drive-file.js";
|
||||||
import { DriveFiles } from "@/models/index.js";
|
import { DriveFiles } from "@/models/index.js";
|
||||||
|
|
|
@ -4,7 +4,6 @@ import type { NoteReaction } from "@/models/entities/note-reaction.js";
|
||||||
import type { Note } from "@/models/entities/note.js";
|
import type { Note } from "@/models/entities/note.js";
|
||||||
import { Emojis } from "@/models/index.js";
|
import { Emojis } from "@/models/index.js";
|
||||||
import renderEmoji from "./emoji.js";
|
import renderEmoji from "./emoji.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
|
||||||
|
|
||||||
export const renderLike = async (noteReaction: NoteReaction, note: Note) => {
|
export const renderLike = async (noteReaction: NoteReaction, note: Note) => {
|
||||||
const reaction = noteReaction.reaction;
|
const reaction = noteReaction.reaction;
|
||||||
|
|
|
@ -2,7 +2,7 @@ import config from "@/config/index.js";
|
||||||
import { getJson } from "@/misc/fetch.js";
|
import { getJson } from "@/misc/fetch.js";
|
||||||
import type { ILocalUser } from "@/models/entities/user.js";
|
import type { ILocalUser } from "@/models/entities/user.js";
|
||||||
import { getInstanceActor } from "@/services/instance-actor.js";
|
import { getInstanceActor } from "@/services/instance-actor.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { extractHost } from "backend-rs";
|
import { extractHost } from "backend-rs";
|
||||||
import { isSelfHost } from "@/misc/backend-rs.js";
|
import { isSelfHost } from "@/misc/backend-rs.js";
|
||||||
import { signedGet } from "./request.js";
|
import { signedGet } from "./request.js";
|
||||||
|
|
|
@ -25,7 +25,7 @@ import {
|
||||||
getSignatureUser,
|
getSignatureUser,
|
||||||
} from "@/remote/activitypub/check-fetch.js";
|
} from "@/remote/activitypub/check-fetch.js";
|
||||||
import { getInstanceActor } from "@/services/instance-actor.js";
|
import { getInstanceActor } from "@/services/instance-actor.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import renderFollow from "@/remote/activitypub/renderer/follow.js";
|
import renderFollow from "@/remote/activitypub/renderer/follow.js";
|
||||||
import Featured from "./activitypub/featured.js";
|
import Featured from "./activitypub/featured.js";
|
||||||
import Following from "./activitypub/following.js";
|
import Following from "./activitypub/following.js";
|
||||||
|
|
|
@ -5,7 +5,7 @@ import renderOrderedCollection from "@/remote/activitypub/renderer/ordered-colle
|
||||||
import renderNote from "@/remote/activitypub/renderer/note.js";
|
import renderNote from "@/remote/activitypub/renderer/note.js";
|
||||||
import { Users, Notes, UserNotePinings } from "@/models/index.js";
|
import { Users, Notes, UserNotePinings } from "@/models/index.js";
|
||||||
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { setResponseType } from "../activitypub.js";
|
import { setResponseType } from "../activitypub.js";
|
||||||
import type Router from "@koa/router";
|
import type Router from "@koa/router";
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import renderFollowUser from "@/remote/activitypub/renderer/follow-user.js";
|
||||||
import { Users, Followings, UserProfiles } from "@/models/index.js";
|
import { Users, Followings, UserProfiles } from "@/models/index.js";
|
||||||
import type { Following } from "@/models/entities/following.js";
|
import type { Following } from "@/models/entities/following.js";
|
||||||
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { setResponseType } from "../activitypub.js";
|
import { setResponseType } from "../activitypub.js";
|
||||||
import type { FindOptionsWhere } from "typeorm";
|
import type { FindOptionsWhere } from "typeorm";
|
||||||
import type Router from "@koa/router";
|
import type Router from "@koa/router";
|
||||||
|
|
|
@ -8,7 +8,7 @@ import renderFollowUser from "@/remote/activitypub/renderer/follow-user.js";
|
||||||
import { Users, Followings, UserProfiles } from "@/models/index.js";
|
import { Users, Followings, UserProfiles } from "@/models/index.js";
|
||||||
import type { Following } from "@/models/entities/following.js";
|
import type { Following } from "@/models/entities/following.js";
|
||||||
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { setResponseType } from "../activitypub.js";
|
import { setResponseType } from "../activitypub.js";
|
||||||
import type { FindOptionsWhere } from "typeorm";
|
import type { FindOptionsWhere } from "typeorm";
|
||||||
import type Router from "@koa/router";
|
import type Router from "@koa/router";
|
||||||
|
|
|
@ -11,7 +11,7 @@ import * as url from "@/prelude/url.js";
|
||||||
import { Users, Notes } from "@/models/index.js";
|
import { Users, Notes } from "@/models/index.js";
|
||||||
import type { Note } from "@/models/entities/note.js";
|
import type { Note } from "@/models/entities/note.js";
|
||||||
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
import { checkFetch } from "@/remote/activitypub/check-fetch.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { makePaginationQuery } from "../api/common/make-pagination-query.js";
|
import { makePaginationQuery } from "../api/common/make-pagination-query.js";
|
||||||
import { setResponseType } from "../activitypub.js";
|
import { setResponseType } from "../activitypub.js";
|
||||||
import type Router from "@koa/router";
|
import type Router from "@koa/router";
|
||||||
|
|
|
@ -2,7 +2,7 @@ import type Koa from "koa";
|
||||||
|
|
||||||
import type { User } from "@/models/entities/user.js";
|
import type { User } from "@/models/entities/user.js";
|
||||||
import { UserIps } from "@/models/index.js";
|
import { UserIps } from "@/models/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import type { IEndpoint } from "./endpoints.js";
|
import type { IEndpoint } from "./endpoints.js";
|
||||||
import authenticate, { AuthenticationError } from "./authenticate.js";
|
import authenticate, { AuthenticationError } from "./authenticate.js";
|
||||||
import call from "./call.js";
|
import call from "./call.js";
|
||||||
|
|
|
@ -9,7 +9,7 @@ import endpoints from "./endpoints.js";
|
||||||
import compatibility from "./compatibility.js";
|
import compatibility from "./compatibility.js";
|
||||||
import { ApiError } from "./error.js";
|
import { ApiError } from "./error.js";
|
||||||
import { apiLogger } from "./logger.js";
|
import { apiLogger } from "./logger.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
|
|
||||||
const accessDenied = {
|
const accessDenied = {
|
||||||
message: "Access denied.",
|
message: "Access denied.",
|
||||||
|
|
|
@ -2,6 +2,7 @@ import config from "@/config/index.js";
|
||||||
import { Meta } from "@/models/entities/meta.js";
|
import { Meta } from "@/models/entities/meta.js";
|
||||||
import { insertModerationLog } from "@/services/insert-moderation-log.js";
|
import { insertModerationLog } from "@/services/insert-moderation-log.js";
|
||||||
import { db } from "@/db/postgre.js";
|
import { db } from "@/db/postgre.js";
|
||||||
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
@ -120,6 +121,8 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
} else {
|
} else {
|
||||||
await transactionalEntityManager.save(Meta, set);
|
await transactionalEntityManager.save(Meta, set);
|
||||||
}
|
}
|
||||||
|
// update meta cache
|
||||||
|
fetchMeta(true);
|
||||||
});
|
});
|
||||||
insertModerationLog(me, "updateMeta");
|
insertModerationLog(me, "updateMeta");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { MAX_NOTE_TEXT_LENGTH, MAX_CAPTION_TEXT_LENGTH } from "@/const.js";
|
import { MAX_NOTE_TEXT_LENGTH, MAX_CAPTION_TEXT_LENGTH } from "@/const.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Meta } from "@/models/entities/meta.js";
|
import { Meta } from "@/models/entities/meta.js";
|
||||||
import { insertModerationLog } from "@/services/insert-moderation-log.js";
|
import { insertModerationLog } from "@/services/insert-moderation-log.js";
|
||||||
import { db } from "@/db/postgre.js";
|
import { db } from "@/db/postgre.js";
|
||||||
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
@ -571,6 +572,8 @@ export default define(meta, paramDef, async (ps, me) => {
|
||||||
} else {
|
} else {
|
||||||
await transactionalEntityManager.save(Meta, set);
|
await transactionalEntityManager.save(Meta, set);
|
||||||
}
|
}
|
||||||
|
// update meta cache
|
||||||
|
fetchMeta(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
insertModerationLog(me, "updateMeta");
|
insertModerationLog(me, "updateMeta");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// import { IsNull } from 'typeorm';
|
// import { IsNull } from 'typeorm';
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// import { IsNull } from 'typeorm';
|
// import { IsNull } from 'typeorm';
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { DriveFiles } from "@/models/index.js";
|
import { DriveFiles } from "@/models/index.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { addFile } from "@/services/drive/add-file.js";
|
||||||
import { DriveFiles } from "@/models/index.js";
|
import { DriveFiles } from "@/models/index.js";
|
||||||
import { DB_MAX_IMAGE_COMMENT_LENGTH } from "@/misc/hard-limits.js";
|
import { DB_MAX_IMAGE_COMMENT_LENGTH } from "@/misc/hard-limits.js";
|
||||||
import { IdentifiableError } from "@/misc/identifiable-error.js";
|
import { IdentifiableError } from "@/misc/identifiable-error.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { MINUTE } from "@/const.js";
|
import { MINUTE } from "@/const.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
import { apiLogger } from "@/server/api/logger.js";
|
import { apiLogger } from "@/server/api/logger.js";
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
import { Instances } from "@/models/index.js";
|
import { Instances } from "@/models/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { sqlLikeEscape } from "backend-rs";
|
import { sqlLikeEscape } from "backend-rs";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Brackets } from "typeorm";
|
import { Brackets } from "typeorm";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Notes } from "@/models/index.js";
|
import { Notes } from "@/models/index.js";
|
||||||
import type { Note } from "@/models/entities/note.js";
|
import type { Note } from "@/models/entities/note.js";
|
||||||
import { safeForSql } from "backend-rs";
|
import { safeForSql } from "backend-rs";
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { createImportPostsJob } from "@/queue/index.js";
|
||||||
import { ApiError } from "@/server/api/error.js";
|
import { ApiError } from "@/server/api/error.js";
|
||||||
import { DriveFiles } from "@/models/index.js";
|
import { DriveFiles } from "@/models/index.js";
|
||||||
import { DAY } from "@/const.js";
|
import { DAY } from "@/const.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
secure: true,
|
secure: true,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import JSON5 from "json5";
|
import JSON5 from "json5";
|
||||||
import { IsNull, MoreThan } from "typeorm";
|
import { IsNull, MoreThan } from "typeorm";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Ads, Emojis, Users } from "@/models/index.js";
|
import { Ads, Emojis, Users } from "@/models/index.js";
|
||||||
import { MAX_NOTE_TEXT_LENGTH, MAX_CAPTION_TEXT_LENGTH } from "@/const.js";
|
import { MAX_NOTE_TEXT_LENGTH, MAX_CAPTION_TEXT_LENGTH } from "@/const.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Notes } from "@/models/index.js";
|
import { Notes } from "@/models/index.js";
|
||||||
import { activeUsersChart } from "@/services/chart/index.js";
|
import { activeUsersChart } from "@/services/chart/index.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Brackets } from "typeorm";
|
import { Brackets } from "typeorm";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Followings, Notes } from "@/models/index.js";
|
import { Followings, Notes } from "@/models/index.js";
|
||||||
import { activeUsersChart } from "@/services/chart/index.js";
|
import { activeUsersChart } from "@/services/chart/index.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Brackets } from "typeorm";
|
import { Brackets } from "typeorm";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Notes } from "@/models/index.js";
|
import { Notes } from "@/models/index.js";
|
||||||
import { activeUsersChart } from "@/services/chart/index.js";
|
import { activeUsersChart } from "@/services/chart/index.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Brackets } from "typeorm";
|
import { Brackets } from "typeorm";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Notes } from "@/models/index.js";
|
import { Notes } from "@/models/index.js";
|
||||||
import { activeUsersChart } from "@/services/chart/index.js";
|
import { activeUsersChart } from "@/services/chart/index.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { IsNull } from "typeorm";
|
import { IsNull } from "typeorm";
|
||||||
import { Users } from "@/models/index.js";
|
import { Users } from "@/models/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { stringToAcct } from "backend-rs";
|
import { stringToAcct } from "backend-rs";
|
||||||
import type { User } from "@/models/entities/user.js";
|
import type { User } from "@/models/entities/user.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// import { IsNull } from 'typeorm';
|
// import { IsNull } from 'typeorm';
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
|
|
@ -2,7 +2,7 @@ import * as os from "node:os";
|
||||||
import si from "systeminformation";
|
import si from "systeminformation";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
// import meilisearch from "@/db/meilisearch.js";
|
// import meilisearch from "@/db/meilisearch.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { genId } from "@/misc/gen-id.js";
|
import { genId } from "@/misc/gen-id.js";
|
||||||
import { SwSubscriptions } from "@/models/index.js";
|
import { SwSubscriptions } from "@/models/index.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { publishAdminStream } from "@/services/stream.js";
|
||||||
import { AbuseUserReports, UserProfiles, Users } from "@/models/index.js";
|
import { AbuseUserReports, UserProfiles, Users } from "@/models/index.js";
|
||||||
import { genId } from "@/misc/gen-id.js";
|
import { genId } from "@/misc/gen-id.js";
|
||||||
import { sendEmail } from "@/services/send-email.js";
|
import { sendEmail } from "@/services/send-email.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { getUser } from "@/server/api/common/getters.js";
|
import { getUser } from "@/server/api/common/getters.js";
|
||||||
import { ApiError } from "@/server/api/error.js";
|
import { ApiError } from "@/server/api/error.js";
|
||||||
import define from "@/server/api/define.js";
|
import define from "@/server/api/define.js";
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Entity } from "megalodon";
|
import { Entity } from "megalodon";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { MAX_NOTE_TEXT_LENGTH, FILE_TYPE_BROWSERSAFE } from "@/const.js";
|
import { MAX_NOTE_TEXT_LENGTH, FILE_TYPE_BROWSERSAFE } from "@/const.js";
|
||||||
|
|
||||||
export async function getInstance(
|
export async function getInstance(
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {
|
||||||
convertPoll,
|
convertPoll,
|
||||||
convertStatus,
|
convertStatus,
|
||||||
} from "../converters.js";
|
} from "../converters.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
|
|
||||||
function normalizeQuery(data: any) {
|
function normalizeQuery(data: any) {
|
||||||
const str = querystring.stringify(data);
|
const str = querystring.stringify(data);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import type Koa from "koa";
|
import type Koa from "koa";
|
||||||
import rndstr from "rndstr";
|
import rndstr from "rndstr";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { verifyHcaptcha, verifyRecaptcha } from "@/misc/captcha.js";
|
import { verifyHcaptcha, verifyRecaptcha } from "@/misc/captcha.js";
|
||||||
import { Users, RegistrationTickets, UserPendings } from "@/models/index.js";
|
import { Users, RegistrationTickets, UserPendings } from "@/models/index.js";
|
||||||
import { signup } from "@/server/api/common/signup.js";
|
import { signup } from "@/server/api/common/signup.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Channel from "../channel.js";
|
import Channel from "../channel.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
||||||
import { isInstanceMuted } from "@/misc/is-instance-muted.js";
|
import { isInstanceMuted } from "@/misc/is-instance-muted.js";
|
||||||
import { isUserRelated } from "@/misc/is-user-related.js";
|
import { isUserRelated } from "@/misc/is-user-related.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Channel from "../channel.js";
|
import Channel from "../channel.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
||||||
import { isUserRelated } from "@/misc/is-user-related.js";
|
import { isUserRelated } from "@/misc/is-user-related.js";
|
||||||
import { isInstanceMuted } from "@/misc/is-instance-muted.js";
|
import { isInstanceMuted } from "@/misc/is-instance-muted.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Channel from "../channel.js";
|
import Channel from "../channel.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
||||||
import { isUserRelated } from "@/misc/is-user-related.js";
|
import { isUserRelated } from "@/misc/is-user-related.js";
|
||||||
import type { Packed } from "@/misc/schema.js";
|
import type { Packed } from "@/misc/schema.js";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Channel from "../channel.js";
|
import Channel from "../channel.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
import { getWordHardMute } from "@/misc/check-word-mute.js";
|
||||||
import { isUserRelated } from "@/misc/is-user-related.js";
|
import { isUserRelated } from "@/misc/is-user-related.js";
|
||||||
import { isInstanceMuted } from "@/misc/is-instance-muted.js";
|
import { isInstanceMuted } from "@/misc/is-instance-muted.js";
|
||||||
|
|
|
@ -16,7 +16,7 @@ import { IsNull } from "typeorm";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import Logger from "@/services/logger.js";
|
import Logger from "@/services/logger.js";
|
||||||
import { Users } from "@/models/index.js";
|
import { Users } from "@/models/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { genIdenticon } from "@/misc/gen-identicon.js";
|
import { genIdenticon } from "@/misc/gen-identicon.js";
|
||||||
import { createTemp } from "@/misc/create-temp.js";
|
import { createTemp } from "@/misc/create-temp.js";
|
||||||
import { stringToAcct } from "backend-rs";
|
import { stringToAcct } from "backend-rs";
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import Router from "@koa/router";
|
import Router from "@koa/router";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { Users, Notes } from "@/models/index.js";
|
import { Users, Notes } from "@/models/index.js";
|
||||||
import { IsNull, MoreThan } from "typeorm";
|
import { IsNull, MoreThan } from "typeorm";
|
||||||
import { MAX_NOTE_TEXT_LENGTH, MAX_CAPTION_TEXT_LENGTH } from "@/const.js";
|
import { MAX_NOTE_TEXT_LENGTH, MAX_CAPTION_TEXT_LENGTH } from "@/const.js";
|
||||||
|
|
|
@ -16,7 +16,8 @@ import { BullAdapter } from "@bull-board/api/bullAdapter.js";
|
||||||
import { KoaAdapter } from "@bull-board/koa";
|
import { KoaAdapter } from "@bull-board/koa";
|
||||||
|
|
||||||
import { In, IsNull } from "typeorm";
|
import { In, IsNull } from "typeorm";
|
||||||
import { fetchMeta, metaToPugArgs } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
|
import { metaToPugArgs } from "backend-rs";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import {
|
import {
|
||||||
Users,
|
Users,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import type Koa from "koa";
|
import type Koa from "koa";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import manifest from "./manifest.json" assert { type: "json" };
|
import manifest from "./manifest.json" assert { type: "json" };
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import type Koa from "koa";
|
import type Koa from "koa";
|
||||||
import summaly from "summaly";
|
import summaly from "summaly";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import Logger from "@/services/logger.js";
|
import Logger from "@/services/logger.js";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { query } from "@/prelude/url.js";
|
import { query } from "@/prelude/url.js";
|
||||||
|
|
|
@ -72,8 +72,8 @@ html
|
||||||
div#splash
|
div#splash
|
||||||
img#splashIcon(src= splashIcon || `/static-assets/splash.svg?${ timestamp }`)
|
img#splashIcon(src= splashIcon || `/static-assets/splash.svg?${ timestamp }`)
|
||||||
span#splashText
|
span#splashText
|
||||||
block randomMOTD
|
block randomMotd
|
||||||
= randomMOTD
|
= randomMotd
|
||||||
div#splashSpinner
|
div#splashSpinner
|
||||||
<svg class="spinner bg" viewBox="0 0 152 152" xmlns="http://www.w3.org/2000/svg">
|
<svg class="spinner bg" viewBox="0 0 152 152" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g transform="matrix(1,0,0,1,12,12)">
|
<g transform="matrix(1,0,0,1,12,12)">
|
||||||
|
|
|
@ -6,7 +6,7 @@ import type S3 from "aws-sdk/clients/s3.js"; // TODO: migrate to SDK v3
|
||||||
import sharp from "sharp";
|
import sharp from "sharp";
|
||||||
import { IsNull } from "typeorm";
|
import { IsNull } from "typeorm";
|
||||||
import { publishMainStream, publishDriveStream } from "@/services/stream.js";
|
import { publishMainStream, publishDriveStream } from "@/services/stream.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { contentDisposition } from "@/misc/content-disposition.js";
|
import { contentDisposition } from "@/misc/content-disposition.js";
|
||||||
import { getFileInfo } from "@/misc/get-file-info.js";
|
import { getFileInfo } from "@/misc/get-file-info.js";
|
||||||
import {
|
import {
|
||||||
|
|
|
@ -2,7 +2,7 @@ import type { DriveFile } from "@/models/entities/drive-file.js";
|
||||||
import { InternalStorage } from "./internal-storage.js";
|
import { InternalStorage } from "./internal-storage.js";
|
||||||
import { DriveFiles } from "@/models/index.js";
|
import { DriveFiles } from "@/models/index.js";
|
||||||
import { createDeleteObjectStorageFileJob } from "@/queue/index.js";
|
import { createDeleteObjectStorageFileJob } from "@/queue/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import { getS3 } from "./s3.js";
|
import { getS3 } from "./s3.js";
|
||||||
import { v4 as uuid } from "uuid";
|
import { v4 as uuid } from "uuid";
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import push from "web-push";
|
import push from "web-push";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
import { SwSubscriptions } from "@/models/index.js";
|
import { SwSubscriptions } from "@/models/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import type { Packed } from "@/misc/schema.js";
|
import type { Packed } from "@/misc/schema.js";
|
||||||
import { getNoteSummary } from "@/misc/get-note-summary.js";
|
import { getNoteSummary } from "@/misc/get-note-summary.js";
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import * as nodemailer from "nodemailer";
|
import * as nodemailer from "nodemailer";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
import Logger from "@/services/logger.js";
|
import Logger from "@/services/logger.js";
|
||||||
import config from "@/config/index.js";
|
import config from "@/config/index.js";
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { validate as validateEmail } from "deep-email-validator";
|
import { validate as validateEmail } from "deep-email-validator";
|
||||||
import { UserProfiles } from "@/models/index.js";
|
import { UserProfiles } from "@/models/index.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/backend-rs.js";
|
||||||
|
|
||||||
export async function validateEmailForAccount(emailAddress: string): Promise<{
|
export async function validateEmailForAccount(emailAddress: string): Promise<{
|
||||||
available: boolean;
|
available: boolean;
|
||||||
|
|
Loading…
Reference in a new issue